Ở bài viết này chúng ta sẽ hướng dẫn 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.
Giới thiệu về Docker
Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux vào trong các container ảo hóa. Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux. Docker sử dụng những tài nguyên cô lập của Linux như cgroups, kernel, quản lý tệp để cho phép các container chạy độc lập bên trong một thực thể Linux.
Các thay đổi được lưu trữ trong các Docker image, các lớp tệp hệ thống được tạo ra và lưu lại dựa theo từng lớp (layer). Điều này giúp cho Docker Image giảm dung lượng đáng kể so với máy ảo (VM).
Các ứng dụng muốn chạy bằng Docker phải là ứng dụng chạy được trên Linux. Gần đây, Docker có hỗ trợ thêm việc chạy ứng dụng Windows trong các Windows container.
Các thành phần chính của Docker
- Docker Engine: dùng để tạo ra Docker image và chạy Docker container.
- Docker Hub: dịch vụ lưu trữ giúp chứa các Docker image.
- Docker Machine: tạo ra các Docker engine trên máy chủ.
- Docker Compose: chạy ứng dụng bằng cách định nghĩa cấu hình các Docker container thông qua tệp cấu hình YAML
- Docker image: một dạng tập hợp các tệp của ứng dụng, được tạo ra bởi Docker engine. Nội dung của các
- Docker image sẽ không bị thay đổi khi di chuyển. Docker image được dùng để chạy các Docker container.
- Docker container: một dạng runtime của các Docker image, dùng để làm môi trường chạy ứng dụng.
Cài đặt Docker và Docker Compose
Bước 1: Cập nhập hệ thống Ubutu
sudo apt update -y && apt upgrade -y
Bước 2: Cài đặt docker
Cài đặt một số gói cho phép sử dụng HTTPS
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Thêm khóa GPG của kho lưu trữ Docker.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Bây giờ hãy thêm kho lưu trữ Docker của Ubuntu 22.04
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật packages và thiết lập để cài đặt Docker từ kho lưu trữ chính thức
sudo apt update
sudo apt-cache policy docker-ce
Cài đặt Docker
sudo apt install docker-ce -y
Kiểm tra trạng thái của Docker
sudo systemctl status docker
Kết quả
Bước 3: Cấu hình quyền Sudo cho user sử dụng Docker
Các Docker yêu cầu chỉ được thực thi với tư cách người dùng root theo mặc định. Do đó nếu các bạn sử dụng các user khác thì cần phải thêm user đó vào nhóm Docker thì mới có quyền thao tác.
sudo usermod -aG docker username (Nhớ thay username bằng user của bạn)
Để xem các thông tin về Docker
docker info
Bước 4: Cài đặt Docker Compose
Để cài đặt phiên bản Docker Compose mới nhất từ kho lưu trữ GitHub thì bạn sử dụng lệnh sau
sudo curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Phần quyền cho file vừa tái xuống
sudo chmod +x /usr/local/bin/docker-compose
Kiểm tra sau khi cài đặt
docker-compose --version
Kết quả
Như vậy Docker Compose đã được cài đặt thành công
Khởi tạo thư mục cho dự án WordPress
Bước 1: Tạo thư mục chứa dự án có tên là wp-demo
cd /home
mkdir wp-demo
Bước 2: Tạo Docker Compose file YML
cd wp-demo
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 Ý: Bạn thay đổi các thông tin db_user, db_user_pass, db_name, root_pass , youremail@domain.com, domain.com cho phù hợp với dự án của bạn
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 nginx/conf, do đó các bạn sử dụng cách lệnh sau để tạo folder/file mình cần.
mkdir -p /root/nginx/conf
tạo file default.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 ý đổi domain.com thành domain của bạn
Khởi động dự án demo Wordpress với Docker Compose
cd wp-demo
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 sẽ nhận được thông báo
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
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
và thay đổi nội dung
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;
}
}
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 domain.com, 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 vào là hoàn tất.
Và giao diện Wordpress sau khi thiết lập xong sẽ như hình.
Nguồn: azdigi.com