Hosting WordPress tại nhà với sự kết hợp của Docker, Docker Compose, Portainer, Caddy, và Cloudflare DDNS là một giải pháp mạnh mẽ và linh hoạt. Đặc biệt, việc sử dụng HTTPS đảm bảo an toàn cho trang web của bạn. Hướng dẫn này sẽ chỉ bạn cách thiết lập mọi thứ một cách chi tiết, từ việc cài đặt Docker và Docker Compose, quản lý container với Portainer, cấu hình Caddy để tự động cấp chứng chỉ SSL miễn phí, đến việc sử dụng Cloudflare DNS để quản lý tên miền của bạn. Kết quả là một trang web WordPress an toàn và hiệu quả, chạy trên nền tảng đáng tin cậy.
Giả định là bạn có 1 tên miền trên cloudflare, một đường Internet với router cấu hình được, 1 máy chủ có quyền sudo, đề xuất là Ubuntu 22.04.
Ở đây tôi làm với trang web https://blog.hpradar.com
1. Cài đặt Docker và Docker Compose
Bước 1: Cài đặt Docker
Sử dụng script từ repository chính thức của Docker để cài đặt Docker.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Bước 2: Cài đặt Docker Compose
Cài đặt Docker Compose từ GitHub releases:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Kiểm tra phiên bản Docker Compose:
docker compose version
Xử lý các vấn đề sau khi cài docker
https://docs.docker.com/engine/install/linux-postinstall/
Để tạo nhóm docker và thêm người dùng của bạn:
Tạo nhóm docker.
sudo groupadd docker
Thêm người dùng của bạn vào nhóm docker.
sudo usermod -aG docker $USER
Đăng xuất và đăng nhập lại để quyền thành viên nhóm của bạn được đánh giá lại.
Nếu bạn đang chạy Linux trong một máy ảo, có thể cần phải khởi động lại máy ảo để các thay đổi có hiệu lực.
Bạn cũng có thể chạy lệnh sau để kích hoạt các thay đổi nhóm:
newgrp docker
Xác minh rằng bạn có thể chạy các lệnh docker mà không cần sudo.
docker run hello-world
2. Tạo các thư mục /opt/
cho các ứng dụng
Trước khi cài đặt các dịch vụ, tạo các thư mục /opt/
riêng biệt cho Caddy, WordPress và Cloudflare DDNS trên máy host:
sudo mkdir -p /opt/caddy /opt/wp /opt/clfddns
cd /opt
Tạo docker network tên là wp-network như sau:
docker network create wp-network
3. Cài đặt Portainer để quản lý Docker (option)
Portainer là một công cụ quản lý Docker qua giao diện web. Cài đặt Portainer bằng Docker:
docker volume create portainer_data
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Truy cập Portainer qua trình duyệt tại địa chỉ http://<IP-cua-ban>:9000
và làm theo hướng dẫn để cấu hình ban đầu.
4. Cài đặt Caddy bằng Docker Compose để làm Reverse Proxy
Truy cập vào thư mục caddy, tạo file docker-compose.yml
cd caddy
nano docker-compose.yml
chép vào file docker-compose.yml
nội dung sau:
services:
caddy:
image: caddy:latest
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
- /opt/caddy:/opt/caddy # Thêm dòng này
networks:
- wp-network
restart: unless-stopped
networks:
wp-network:
volumes:
caddy_data:
caddy_config:
Tạo file Caddyfile
trong thư mục caddy
và để trống, chúng ta sẽ cấu hình sau.
nano Caddyfile
Tham khảo https://github.com/ngtrthanh/docker_caddy
Khởi động Caddy:
docker compose up -d
cd ..
5. Cài đặt Cloudflare DNS để trỏ tên miền về router nếu không có IP tĩnh
Truy cập vào thư mục clfddns, tạo file docker-compose.yml
cd clfddns
nano docker-compose.yml
tạo file docker-compose.yml
:
services:
clf-d5-blog:
image: oznu/cloudflare-ddns:latest
restart: always
environment:
- API_KEY=<global API key của bạn>
- ZONE=hpradar.com
- SUBDOMAIN=blog
volumes:
- /opt/clfddns:/opt/clfddns
networks:
- wp-network
networks:
wp-network:
Tham khảo https://developers.cloudflare.com/fundamentals/api/get-started/keys/
Khởi động dịch vụ Cloudflare DDNS:
docker compose up -d
6. Chỉnh Port Forwarding trên router về Caddy
Truy cập vào giao diện quản lý của router và tìm mục Port Forwarding
hoặc Virtual Server
. Tạo các rule để forward cổng 80 và 443 từ router về địa chỉ IP máy chủ Caddy của bạn.
7. Cài đặt WordPress bằng Docker Compose
cd wp, trong đó tạo file docker-compose.yml
:
cd wp
nano docker-compose.yml
services:
wordpress:
image: wordpress
restart: always
hostname: wp
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- ./wpdata/wordpress:/var/www/html
networks:
- wp-network
db:
image: mariadb:latest
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_ROOT_PASSWORD: examplerootpass
volumes:
- ./wpdata/db:/var/lib/mysql
networks:
- wp-network
volumes:
wordpress:
db:
networks:
wp-network:
Khởi động WordPress:
docker compose up -d
8. Chỉnh sửa wp-config.php cho WordPress
Chỉnh sửa /opt/wp/wpdata/wordpress/wp-config.php
cho WordPress để hoạt động với Caddy làm reverse proxy. Thêm đoạn mã sau vào sau <?php và trước dòng /* The base configuration for WordPress */
:
nano /opt/wp/wpdata/wordpress/wp-config.php
<?php
define('.COOKIE_DOMAIN.', 'blog.hpradar.com');
define('.SITECOOKIEPATH.', '.');
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
define( 'WP_HOME', 'https://blog.hpradar.com' );
define( 'WP_SITEURL', 'https://blog.hpradar.com' );
$_SERVER['HTTP_HOST'] = 'blog.hpradar.com';
$_SERVER['REMOTE_ADDR'] = 'https://blog.hpradar.com';
$_SERVER[ 'SERVER_ADDR' ] = 'blog.hpradar.com';
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
/**
* The base configuration for WordPress
*
Nhớ thay blog.hpradar.com = tên miền của bạn
9. Cấu hình Caddyfile trỏ tên miền về WordPress
Quay lại thư mục caddy
và chỉnh sửa file Caddyfile
để trỏ tên miền của bạn về container WordPress:
của tôi là /opt/caddy/Caddyfile
nano /opt/caddy/Caddyfile
{
email ng.tr.thanh@gmail.com
}
blog.hpradar.com {
reverse_proxy http://192.168.1.2:8080
}
Hoặc:
lấy tên của WP hostname là wp
{
email ng.tr.thanh@gmail.com
}
blog.hpradar.com {
reverse_proxy wp:8080
}
Thay email, tên miền và địa chỉ IP + cổng của WP, lưu ý là file Caddy rất kén việc canh dòng, tab.
10. Khởi động lại Caddy
Khởi động lại Caddy để áp dụng cấu hình mới:
cd ../caddy
docker-compose restart caddy
11. Xong!
Bây giờ bạn đã có một trang web WordPress hoạt động trên máy chủ của mình, được quản lý qua Portainer và bảo vệ bằng Caddy làm reverse proxy. Truy cập vào trang web của bạn bằng tên miền để kiểm tra kết quả.
Nếu vẫn gặp lỗi, bạn có thể kiểm tra log của các container để tìm hiểu thêm về nguyên nhân.
Lưu ý là với phiên bản docker mới nhất, dùng lệnh
docker compose
# thay cho
docker-compose
# loại bỏ
version = 3.8
Chúc may mắn.
+ There are no comments
Add yours