Nội dung
Cài đặt WordPress với Docker Compose, Nginx, Apache và SSL với 5 bước vô cùng đơn giản..
Giới thiệu
Ở bài viết này chúng ta sẽ tiến hành tạo một website Wordpress thông qua Docker Compose, Nginx, Apache, PHP 8.1, MariaDB và Let’s Encrypt trên Ubuntu 22.04. Và thiết lập này hiện tại được coi là sự kết hợp tối ưu nhất và đang được thử nghiệm trên Google Cloud với hệ điều hành Ubuntu 22.04. Và trước khi đi vào cài đặt, các bạn cần đảm bảo giúp mình các điều kiện cần thiến bên dưới
Điều kiện máy chủ cần đáp ứng:
- Cài đặt Docker trên Ubuntu 22.04
- Cài đặt Docker Compose trên Ubuntu 22.04.
- Domain phải được trỏ đến IP máy chủ
Hãy đảm bảo rằng bạn đã hoàn thành các thành phần được nêu ở trên.
Nếu đã đáp ứng đủ các điều kiện trên, bây giờ chúng ta sẽ tiến hành cài đặt và cấu hình website Wordpress.
Hướng dẫn cài đặt
Bước 1: Tạo thư mục chứa dự án.
Đầu tiên, hãy SSH vào máy chủ của mình và tiến hành tạo một thư mục chứa dự án mới. Ở đây mình sẽ đặt tên dự án là wp-project
. Bạn có thể thay thế tên này bằng tên mà bạn muốn.
cd /home mkdir wp-project
Bước 2: Tạo Docker Compose file YML
- Bây giờ bạn di chuyển vào thư mục dự án.
cd wp-project
- Tạo một file docker-compose.yml mới
nano docker-compose.yml
Và thêm nội dung bên dưới vào file vừa tạo.
version: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.1-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: mariadb
WORDPRESS_DB_USER: db_user
WORDPRESS_DB_PASSWORD: db_user_pass
WORDPRESS_DB_NAME: db_name
volumes:
- wordpress_data:/var/www/html
- ./wordpress:/var/www/html
mariadb:
container_name: mariadb
image: mariadb
restart: always
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_user_pass
MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
volumes:
- db_data:/var/lib/mysql
nginx:
container_name: nginx
image: nginx:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/html
certbot:
container_name: certbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email youremail@domain.com --agree-tos --no-eff-email -d domain.com -d www.domain.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/html
volumes:
db_data:
wordpress_data:
Lưu ý: Ở phần mình bôi đậm các bạn có thể sửa lại bằng thông tin của các bạn nhé.
Bước 3: Cấu hình Nginx
Theo như nội dung cấu hình của File docker-compose.yml , thì chúng ta sẽ cần tạo file default.conf bên trong đường dẫn ng
inx/conf, do đó các bạn sử dụng cách lệnh sau để tạo folder/file mình cần.
- Tạo folder nginx/conf
mkdir -p /root/nginx/conf
- Tạo file default.conf bên trong nginx/conf
nano /root/nginx/conf/default.conf
Và thêm nội dung bên dưới vào file vừa tạo.
server {
listen [::]:80;
listen 80;
server_name domain.com www.domain.com;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~/. {
deny all;
access_log off;
log_not_found off;
}
}
Lưu ý: Ở phần mình bôi đậm các bạn hãy sửa lại bằng tên Domain của các bạn nhé.
Bước 4: Triển khai WordPress với Docker Compose
Lưu ý: Bạn cần đảm bảo rằng mình đang đứng tại folder chứa dự án, ở đây mình đã tạo trước đó với tên wp-project (ở bước 1)
Khởi động các containers bằng lệnh sau.
cd wp-project docker-compose up -d
Quá trình chạy sẽ diễn ra như hình dưới, các bạn cần chờ quá trình chạy hoàn tất nhé.
Nếu thành công bạn, kết quả sẽ hiển thị như bên dưới.
Khi tất cả các containers được khởi động, bạn sẽ thấy hai thư mục certbot và wordpress được tạo ra và nằm cùng với file docker-
compose.yml
như hình. Trong đó:
- cerbot: Chứa các file liên quan đến chứng chỉ SSL của bạn.
- wordpress: Chứa mã nguồn website WordPress của bạn.
Để xem các containers, bạn có thể thực hiện lệnh sau.
docker-compose ps
Bước 5: Cấu hình Let’s Encrypt SSL với Nginx
Khi bạn có chứng chỉ SSL Let’s Encrypt, bạn có thể cấu hình HTTPS và chuyển hướng trang web sang HTTPS bằng cách chỉnh sửa file cấu hình default.conf như sau:
nano /root/nginx/conf/default.conf
Thực hiện thêm đoạn sau vào dưới vào
server {
listen [::]:80;
listen 80;
server_name domain.com www.domain;
return 301 https://domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~/. {
deny all;
access_log off;
log_not_found off;
}
}
Lưu ý: Các bạn nhớ thay domain.com bằng tên Domain của các bạn.
Ở đây mình làm Demo mới Domain là azdigi.space , nên cách chỉnh sửa sẽ tương tự như hình
Sau khi chỉnh sửa File xong các bạn lưu lại và khởi động lại Nginx với lệnh
docker-compose restart nginx
Bây giờ bạn hãy vào trình duyệt bất kỳ và truy cập theo địa chỉ website bạn đã thiết lập, lúc này bạn sẽ thấy website của mình đã tự chuyển hướng sang https và hiển thị trang cài đặt WordPress mặc định. Bạn tiến hành nhập thông tin Database đã khai báo ở file docker-compose.yml (ở Bước 2: Tạo Docker Compose file YML) vào là hoàn tất. Và giao diện Wordpress sau khi thiết lập xong sẽ như hình.
Ở trên là toàn bộ các bước cài đặt một website Wordpress hoàn chỉnh với Docker Compose, Nginx, Apache và SSL. Với cấu hình này có lẽ là tối ưu nhất ở thời điểm hiện tại, và được các nhà cung cấp có tiếng như Google Cloud làm thành Template và đưa vào sử dụng. Hy vọng bài viết này sẽ hữu ích với các bạn, chúc các bạn thực hiện thành công.
Các bạn có thể tham khảo thêm các hướng dẫn sử dụng khác tại link bên dưới:
Nếu các bạn cần hỗ trợ các bạn có thể liên hệ bộ phận hỗ trợ theo các cách bên dưới:
- Hotline 247: 028 888 24768 (Ext 0)
- Ticket/Email: Bạn dùng email đăng ký dịch vụ gửi trực tiếp về: support@azdigi.com.