Hướng Dẫn Cài Đặt WordPress với MySQL trên Kubernetes Sử Dụng Helm

Cài Đặt WordPress với MySQL trên Kubernetes

Khi ngày càng có nhiều nhà phát triển làm việc trong các môi trường phân tán, các công cụ như Kubernetes đã trở nên then chốt trong việc giữ cho các thành phần ứng dụng được chuẩn hóa trên các môi trường xây dựng và sản xuất động. Với sự phức tạp ngày càng tăng của hệ sinh thái ứng dụng và sự phổ biến đang lên của Kubernetes, các công cụ hỗ trợ quản lý tài nguyên bên trong các cụm Kubernetes trở nên thiết yếu.

Helm là một trình quản lý gói mã nguồn mở cho Kubernetes, giúp đơn giản hóa quy trình triển khai và nâng cấp ứng dụng trên cụm Kubernetes, đồng thời cung cấp cách để tìm kiếm và chia sẻ các ứng dụng đã được đóng gói sẵn dưới dạng Charts của Kubernetes.

Bạn muốn triển khai WordPress trên Kubernetes nhưng chưa biết bắt đầu từ đâu? Hướng dẫn chi tiết này sẽ giúp bạn! Trước tiên, hãy đảm bảo bạn có một VPS mạnh mẽ. Mua VPS chất lượng cao tại các nhà cung cấp uy tín để đảm bảo hiệu suất và bảo mật cho website của bạn.

Chúng ta sẽ sử dụng một máy chủ MySQL bên ngoài nhằm tách biệt thành phần cơ sở dữ liệu, bởi vì nó có thể là một phần của cụm riêng hoặc là dịch vụ được quản lý nhằm đảm bảo tính sẵn sàng kéo dài. Sau khi hoàn thành các bước mô tả trong bài hướng dẫn này, bạn sẽ có một cài đặt WordPress hoàn chỉnh bên trong môi trường container được quản lý bởi Kubernetes.

Nếu bạn đang tìm kiếm dịch vụ lưu trữ Kubernetes được quản lý, hãy xem qua dịch vụ Kubernetes được quản lý đơn giản của chúng tôi, được xây dựng để hỗ trợ sự phát triển.

 Yêu Cầu

Để hoàn thành hướng dẫn này, bạn cần đảm bảo các điều kiện sau:

● Một cụm Kubernetes phiên bản 1.10 trở lên, với chức năng kiểm soát truy cập dựa trên vai trò (RBAC) được kích hoạt.

● Công cụ dòng lệnh kubectl đã được cài đặt trên máy tính cá nhân hoặc máy chủ phát triển của bạn, được cấu hình để kết nối với cụm của bạn. Vui lòng xem tài liệu chính thức của Kubernetes để biết cách thiết lập.

● Trình quản lý gói Helm đã được cài đặt trên máy tính cá nhân hoặc máy chủ phát triển của bạn, và Tiller đã được cài đặt trên cụm của bạn, như được giải thích trong bài hướng dẫn: Cách Cài Đặt Phần Mềm Trên Các Cụm Kubernetes Sử Dụng Trình Quản Lý Gói Helm.

● Một máy chủ MySQL bên ngoài có quyền truy cập SSH, cùng với mật khẩu root của MySQL. Để thiết lập điều này, bạn có thể làm theo một trong các hướng dẫn MySQL của chúng tôi, chẳng hạn như: Cách Cài Đặt MySQL trên Ubuntu 18.04.

Trước khi tiếp tục, hãy đảm bảo rằng bạn có thể đăng nhập vào máy chủ MySQL của mình, và rằng bạn có thể kết nối với cụm Kubernetes. Trong trường hợp bạn có nhiều cụm được cấu hình trong file cấu hình của kubectl, hãy chắc chắn rằng bạn đang kết nối với cụm đúng bằng cách chạy lệnh sau từ máy tính cá nhân hoặc máy chủ phát triển của bạn:

kubectl config get-contexts

Dưới đây là một ví dụ về kết quả đầu ra:

Output

CURRENT   NAME                        CLUSTER                     AUTHINFO                          NAMESPACE
*         do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster-admin   
          minikube                    minikube                    minikube

Dấu sao (*) chỉ ra cụm hiện đang là ngữ cảnh mặc định. Trong trường hợp bạn cần thay đổi ngữ cảnh hiện tại, hãy chạy:

kubectl config use-context context-name

Bây giờ bạn đã sẵn sàng để theo dõi các bước tiếp theo của hướng dẫn.

Bước 1 – Cấu hình MySQL

Đầu tiên, chúng ta sẽ tạo một người dùng MySQL chuyên dụng và một cơ sở dữ liệu cho WordPress, cho phép kết nối từ các máy chủ bên ngoài. Điều này là cần thiết vì cài đặt WordPress của chúng ta sẽ chạy trên một máy chủ riêng bên trong cụm Kubernetes. Nếu bạn đã có sẵn người dùng và cơ sở dữ liệu MySQL dành riêng cho WordPress, bạn có thể bỏ qua bước này.

Từ máy chủ MySQL, đăng nhập vào MySQL với lệnh sau:

mysql -u root -p

Bạn sẽ được yêu cầu nhập mật khẩu mà bạn đã thiết lập cho tài khoản root của MySQL khi cài đặt phần mềm lần đầu. Sau khi đăng nhập, MySQL sẽ cung cấp cho bạn một dấu nhắc lệnh để bạn có thể tạo cơ sở dữ liệu và người dùng cần thiết cho WordPress.

Lưu ý: Trong bài hướng dẫn này, chúng ta sẽ tạo một cơ sở dữ liệu có tên wordpress và một người dùng có tên wordpress_user, được xác định bởi mật khẩu password. Lưu ý rằng đây là các giá trị mẫu không an toàn, và bạn nên thay đổi chúng cho phù hợp trong suốt hướng dẫn.

Để tạo cơ sở dữ liệu, bạn có thể sử dụng lệnh sau:

CREATE DATABASE wordpress;

Bây giờ, hãy tạo một người dùng MySQL chuyên dụng cho cơ sở dữ liệu này:

CREATE USER wordpress_user IDENTIFIED BY 'password';

Người dùng wordpress_user đã được tạo, nhưng chưa có quyền truy cập. Lệnh sau sẽ cấp quyền admin (tất cả các quyền) cho người dùng này đối với cơ sở dữ liệu wordpress từ cả mạng nội bộ và bên ngoài:

GRANT ALL PRIVILEGES ON wordpress.* TO wordpress_user@'%';

Để cập nhật các bảng nội bộ của MySQL quản lý quyền truy cập, sử dụng lệnh:

FLUSH PRIVILEGES;

Bây giờ bạn có thể thoát khỏi MySQL bằng lệnh:

exit;

Để kiểm tra xem các thay đổi đã thành công hay chưa, bạn có thể đăng nhập lại vào giao diện dòng lệnh của MySQL, lần này sử dụng tài khoản wordpress_user để xác thực:

mysql -u wordpress_user -p

Bạn cần sử dụng cùng mật khẩu mà bạn đã cung cấp khi tạo người dùng MySQL với lệnh CREATE USER. Để xác nhận người dùng mới có quyền truy cập vào cơ sở dữ liệu wordpress, bạn có thể sử dụng lệnh sau:

show databases;

Kết quả đầu ra dự kiến như sau:

Output
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+
2 rows in set (0.03 sec)

Sau khi xác nhận cơ sở dữ liệu wordpress có trong danh sách, bạn có thể thoát khỏi giao diện dòng lệnh của MySQL:

exit;

Bây giờ bạn đã có một cơ sở dữ liệu MySQL chuyên dụng cho WordPress và thông tin đăng nhập hợp lệ để sử dụng. Vì cài đặt WordPress của chúng ta sẽ chạy trên một máy chủ riêng, chúng ta vẫn cần chỉnh sửa cấu hình MySQL để cho phép kết nối từ các máy chủ bên ngoài.

Trong khi vẫn đang trên máy chủ MySQL, mở file cấu hình /etc/mysql/mysql.conf.d/mysqld.cnf bằng trình soạn thảo dòng lệnh ưa thích của bạn:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tìm kiếm mục bind-address trong file này. Theo mặc định, MySQL chỉ lắng nghe trên địa chỉ 127.0.0.1 (localhost). Để chấp nhận kết nối từ các máy chủ bên ngoài, chúng ta cần thay đổi giá trị này thành 0.0.0.0. Cấu hình bind-address của bạn nên trông như sau:

File /etc/mysql/mysql.conf.d/mysqld.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Sau khi hoàn thành việc thay đổi, lưu và đóng file. Bạn sẽ cần khởi động lại MySQL với lệnh sau:

sudo systemctl restart mysql

Để kiểm tra xem bạn có thể kết nối từ xa hay không, chạy lệnh sau từ máy tính cá nhân hoặc máy chủ phát triển:

mysql -h mysql_server_ip -u wordpress_user -p

Nhớ thay mysql_server_ip bằng địa chỉ IP hoặc hostname của máy chủ MySQL của bạn. Nếu bạn có thể kết nối mà không gặp lỗi, bạn đã sẵn sàng chuyển sang bước tiếp theo.

Bước 2 – Cài đặt WordPress

Giờ đây, khi đã có thông tin cần thiết để kết nối tới cơ sở dữ liệu MySQL, chúng ta có thể tiến hành cài đặt WordPress sử dụng Helm.

Theo mặc định, Chart WordPress sẽ cài đặt MariaDB trên một pod riêng trong cụm và sử dụng nó làm cơ sở dữ liệu cho WordPress. Chúng ta muốn vô hiệu hóa hành vi này và cấu hình WordPress để sử dụng cơ sở dữ liệu MySQL bên ngoài. Các tùy chọn cấu hình khác (chẳng hạn như người dùng quản trị WordPress mặc định và mật khẩu) có thể được thiết lập tại thời điểm cài đặt, thông qua các tham số dòng lệnh hoặc thông qua một file cấu hình YAML riêng.

Để giữ cho mọi thứ được tổ chức và dễ mở rộng, chúng ta sẽ sử dụng một file cấu hình. Từ máy tính cá nhân hoặc máy chủ phát triển của bạn, tạo một thư mục mới cho cài đặt dự án và di chuyển vào đó:

mkdir myblog-settings
cd myblog-settings

Tiếp theo, tạo một file có tên values.yaml bằng trình soạn thảo văn bản mà bạn ưa thích:

nano values.yaml

Bên trong file này, chúng ta cần thiết lập một số biến để định nghĩa cách WordPress kết nối tới cơ sở dữ liệu, cũng như một số thông tin cơ bản về trang web của bạn và thông tin người dùng quản trị ban đầu cho WordPress khi quá trình cài đặt hoàn tất.

Chúng ta sẽ dựa trên file values.yaml mặc định của Chart WordPress trên Helm.

Mục Blog/Site Info chứa các tùy chọn chung cho blog WordPress của bạn, chẳng hạn như tên blog và thông tin đăng nhập người dùng ban đầu. Mục Database Settings của file này chứa các thiết lập để kết nối tới máy chủ MySQL bên ngoài. MariaDB được vô hiệu hóa trong phần cuối của file.

Copy nội dung sau vào file values.yaml, thay thế các giá trị được tô đậm bằng giá trị tùy chỉnh của bạn:

values.yaml

## Blog/Site Info
wordpressUsername: sammy
wordpressPassword: password
wordpressEmail: sammy@example.com
wordpressFirstName: Sammy
wordpressLastName: the Shark
wordpressBlogName: Sammy's Blog!

## Database Settings
externalDatabase:
  host: mysql_server_ip
  user: wordpress_user
  password: password
  database: wordpress

## Disabling MariaDB
mariadb:
  enabled: false

Chúng ta vừa cấu hình các tùy chọn sau:

wordpressUsername: Tên đăng nhập của người dùng WordPress.
wordpressPassword: Mật khẩu của người dùng WordPress.
wordpressEmail: Email của người dùng WordPress.
wordpressFirstName: Tên của người dùng WordPress.
wordpressLastName: Họ của người dùng WordPress.
wordpressBlogName: Tên của trang web hoặc blog.
host: Địa chỉ IP hoặc hostname của máy chủ MySQL.
user: Tài khoản người dùng MySQL.
password: Mật khẩu MySQL.
database: Tên cơ sở dữ liệu MySQL.

Sau khi hoàn tất chỉnh sửa, lưu file và thoát khỏi trình soạn thảo.

Giờ đây, khi tất cả các thiết lập đã có, đã đến lúc thực thi lệnh helm để cài đặt WordPress. Lệnh sau cho Helm biết cài đặt phiên bản ổn định mới nhất của Chart WordPress với tên myblog, sử dụng file values.yaml làm file cấu hình:

helm install --name myblog -f values.yaml stable/wordpress

Bạn sẽ nhận được đầu ra tương tự như sau:

Output

NAME:   myblog
LAST DEPLOYED: Fri Jan 25 20:24:10 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME              READY  UP-TO-DATE  AVAILABLE  AGE
myblog-wordpress  0/1    1           0          1s

==> v1/PersistentVolumeClaim
NAME              STATUS   VOLUME            CAPACITY  ACCESS MODES  STORAGECLASS  AGE
myblog-wordpress  Pending  do-block-storage  1s

==> v1/Pod(related)
NAME                               READY  STATUS   RESTARTS  AGE
myblog-wordpress-5965f49485-8zfl7  0/1    Pending  0         1s

==> v1/Secret
NAME               TYPE    DATA  AGE
myblog-externaldb  Opaque  1     1s
myblog-wordpress   Opaque  1     1s

==> v1/Service
NAME              TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                     AGE
myblog-wordpress  LoadBalancer  10.245.144.79  <pending>    80:31403/TCP,443:30879/TCP  1s

(...)

Sau khi quá trình cài đặt hoàn tất, một dịch vụ có tên myblog-wordpress được tạo bên trong cụm Kubernetes của bạn, nhưng có thể mất vài phút trước khi container sẵn sàng và thông tin External-IP được cập nhật. Để kiểm tra trạng thái của dịch vụ này và lấy địa chỉ IP bên ngoài, chạy:

kubectl get services

Bạn sẽ nhận được đầu ra tương tự như sau:

Output

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kubernetes         ClusterIP      10.245.0.1      <none>          443/TCP                      20h
myblog-wordpress   LoadBalancer   10.245.144.79   203.0.113.110   80:31403/TCP,443:30879/TCP   3m40s

Lệnh này cung cấp thông tin chi tiết về các dịch vụ đang chạy trên cụm của bạn, bao gồm tên và loại dịch vụ cũng như địa chỉ IP được sử dụng. Như bạn thấy từ kết quả, cài đặt WordPress đang được phục vụ qua dịch vụ myblog-wordpress với địa chỉ IP bên ngoài 203.0.113.110.

Lưu ý: Trong trường hợp bạn đang sử dụng minikube để thử nghiệm cài đặt này, bạn cần chạy lệnh minikube service myblog-wordpress để mở cổng truy cập cho máy chủ web container, giúp bạn có thể truy cập từ trình duyệt.

Cài đặt WordPress của bạn hiện đã hoạt động. Để truy cập giao diện quản trị, hãy sử dụng địa chỉ IP công khai nhận được từ đầu ra của lệnh kubectl get services, sau đó thêm /wp-admin vào cuối URL trong trình duyệt của bạn:

http://203.0.113.110/wp-admin

cach cai dat wordpress voi mysql tren kubernetes su dung helm 1

Bạn sẽ sử dụng các thông tin đăng nhập được định nghĩa trong file values.yaml để đăng nhập và bắt đầu cấu hình trang WordPress của mình.

Bước 3 – Nâng cấp WordPress

Với độ phổ biến của WordPress, nó thường là mục tiêu của các cuộc tấn công độc hại, do đó việc giữ cho nó luôn được cập nhật là rất quan trọng. Chúng ta có thể nâng cấp các bản phát hành của Helm bằng lệnh helm upgrade.

Để liệt kê tất cả các bản phát hành hiện có, chạy lệnh sau từ máy tính cá nhân hoặc máy chủ phát triển:

helm list

Bạn sẽ nhận được đầu ra tương tự như sau:

Output
NAME     	REVISION	UPDATED         			STATUS  	CHART  			APP VERSION NAMESPACE
myblog 		1			Fri Jan 25 20:24:10 2019	DEPLOYED	wordpress-5.1.2	5.0.3		default  

Như bạn thấy, phiên bản WordPress hiện tại là 5.0.3 (APP VERSION), trong khi phiên bản chart là 5.1.2. Nếu bạn muốn nâng cấp bản phát hành lên phiên bản chart mới hơn, trước tiên hãy cập nhật các kho Helm của bạn với:

helm repo update

Bạn sẽ nhận được đầu ra tương tự như sau:

Output
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

Bây giờ bạn có thể kiểm tra xem có phiên bản chart WordPress mới hơn không với lệnh:

helm inspect chart stable/wordpress

Bạn sẽ thấy đầu ra tương tự như sau:

Output
apiVersion: v1
appVersion: 5.1.1
description: Web publishing platform for building blogs and websites.
engine: gotpl
home: http://www.wordpress.com/
icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png
keywords:
- wordpress
- cms
- blog
- http
- web
- application
- php
maintainers:
- email: containers@bitnami.com
  name: Bitnami
name: wordpress
sources:
- https://github.com/bitnami/bitnami-docker-wordpress
version: 5.9.0

Như bạn thấy, có một chart mới (phiên bản 5.9.0) với WordPress phiên bản 5.1.1. Bất cứ khi nào bạn muốn nâng cấp bản phát hành WordPress của mình lên chart mới nhất, hãy chạy:

helm upgrade -f values.yaml myblog stable/wordpress

Lệnh này sẽ tạo ra đầu ra rất giống với đầu ra của lệnh helm install. Điều quan trọng là phải cung cấp cùng file cấu hình mà chúng ta đã sử dụng khi cài đặt chart WordPress lần đầu, vì file này chứa các thiết lập cơ sở dữ liệu tùy chỉnh cho cấu hình của chúng ta.

Giờ, nếu bạn chạy lại lệnh helm list, bạn sẽ thấy thông tin cập nhật về bản phát hành của mình:

Output

NAME  	REVISION	UPDATED                 	STATUS  	CHART          	APP VERSION		NAMESPACE
myblog	2       	Fri May  3 14:51:20 2019	DEPLOYED	wordpress-5.9.0	5.1.1      	default  

Bạn đã nâng cấp thành công WordPress lên phiên bản mới nhất của chart WordPress.

Khôi phục phiên bản

Mỗi lần bạn nâng cấp một bản phát hành, Helm sẽ tạo ra một phiên bản mới của bản phát hành đó. Một phiên bản (revision) được tạo ra như một điểm kiểm soát cố định để bạn có thể quay lại nếu mọi thứ không như mong đợi. Nó tương tự như một commit trong Git, vì nó tạo ra một lịch sử thay đổi có thể so sánh và khôi phục. Nếu có vấn đề xảy ra trong quá trình nâng cấp, bạn luôn có thể khôi phục lại phiên bản trước của một bản phát hành Helm bằng lệnh helm rollback:

helm rollback release-name revision-number

Ví dụ, nếu chúng ta muốn hoàn tác nâng cấp và khôi phục bản phát hành WordPress của mình về phiên bản đầu tiên, ta sẽ sử dụng:

helm rollback myblog 1

Lệnh trên sẽ khôi phục cài đặt WordPress về bản phát hành đầu tiên. Bạn sẽ nhận được đầu ra sau, xác nhận việc khôi phục đã thành công:

Output

Rollback was a success! Happy Helming!

Khi chạy lại lệnh helm list, bạn sẽ thấy thông tin cho thấy WordPress đã được hạ cấp về phiên bản 5.0.3, với chart phiên bản 5.1.2:

Output

NAME     	REVISION	UPDATED                 	STATUS  	CHART          	APP VERSION	NAMESPACE
myblog		3      	Mon Jan 28 22:02:42 2019	DEPLOYED	wordpress-5.1.2

Lưu ý rằng việc khôi phục một bản phát hành sẽ tạo ra một phiên bản mới, dựa trên phiên bản mục tiêu của việc khôi phục. Bản phát hành WordPress của chúng ta với tên myblog hiện tại là phiên bản số ba, được dựa trên phiên bản số một.

Kết luận

Chúng ta đã tiến hành cài đặt WordPress với máy chủ MySQL bên ngoài trên một cụm Kubernetes thông qua công cụ dòng lệnh Helm. Qua đó, bạn đã học cách nâng cấp phiên bản chart WordPress lên phiên bản mới và thực hiện khôi phục lại (rollback) một bản phát hành nếu có sự cố xảy ra trong quá trình nâng cấp, đảm bảo rằng quá trình triển khai của bạn luôn duy trì tính ổn định.

Ngoài việc thiết lập và triển khai thành công WordPress trên Kubernetes, bạn có thể tiếp tục cải thiện bảo mật và hiệu suất của hệ thống bằng cách thiết lập Nginx Ingress cùng với Cert-Manager. Điều này sẽ cho phép bạn kích hoạt cấu hình ảo dựa trên tên miền, đồng thời cấu hình và tự động gia hạn chứng chỉ SSL cho trang WordPress của mình, mang lại một lớp bảo mật quan trọng cho trang web. Bạn cũng có thể tham khảo thêm các tùy chỉnh nâng cao, chẳng hạn như cấu hình bộ nhớ và tài nguyên để tối ưu hóa hiệu suất cho môi trường sản xuất.

Sau khi cấu hình MySQL trên Kubernetes, việc chọn một máy chủ phù hợp là rất quan trọng. Nếu ngân sách hạn chế, bạn có thể thuê VPS giá rẻ từ các nhà cung cấp đáng tin cậy. VPS giá rẻ vẫn đảm bảo tốc độ và ổn định cho WordPress của bạn!

Hơn nữa, việc kiểm tra và áp dụng các cài đặt khuyến nghị cho môi trường sản xuất đối với chart WordPress mà chúng ta đã sử dụng trong bài hướng dẫn này là một bước quan trọng. Các cấu hình này không chỉ giúp đảm bảo hệ thống hoạt động ổn định và hiệu quả, mà còn giúp bạn quản lý lưu lượng và bảo vệ dữ liệu của người dùng, đảm bảo rằng hệ thống WordPress của bạn có thể phục vụ tốt trong mọi tình huống và đạt được hiệu suất cao nhất.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *