Sau một thời gian dài thiết lập WordPress trên nền OpenLiteSpeed server sử dụng Docker Compose, gần đây mình đã chuyển dần tất cả các website WordPress đang quản lý chuyển qua hoạt động trên nền Caddy Server.

Đó là lý do của bài viết hôm nay: hướng dẫn cách cài đặt WordPress + MariaDB chạy trên nền Caddy Server sử dụng Docker Compose.

I. Yêu cầu chuẩn bị

Để thực hiện theo thao tác trong bài, bạn cần chuẩn bị hệ thống như sau:

  • VPS cài đặt hệ điều hành Linux: CentOS / Debian / Ubuntu. Bạn cũng có thể cài đặt trên Windows / MacOS / Raspberry Pi, miễn là hệ điều hành hỗ trợ Docker.
  • VPS đã được cài đặt Docker và Docker Compose. Xem hướng dẫn ở đây.
  • VPS đã được cài đặt Caddy làm web server. Xem hướng dẫn ở đây.

II. Cài đặt WordPress

Tạo thư mục mới với tên gọi wordpress, sau đó tạo file compose.yml trong thư mục này

mkdir ~/wordpress
cd ~/wordpress
nano compose.yml
Code language: Bash (bash)

Nhập vào nội dung sau

services:
  wordpress:
    image: wordpress:fpm-alpine
    container_name: wordpress
    restart: always
    depends_on:
      - db
    volumes:
      - ./html:/var/www/html
      - ./custom.ini:/usr/local/etc/php/conf.d/custom.ini
    env_file: .env

  db:
    image: mariadb:10.11.6-jammy
    restart: always
    volumes:
      - ./mysql:/var/lib/mysql
    env_file: .env
Code language: YAML (yaml)

Tạo thêm file .env

nano .envCode language: CSS (css)

Và nhập vào nội dung sau, và nên thay đổi nội dung các thông số sau dấu = để tối ưu bảo mật.

## MYSQL ##
MYSQL_USER=siteuser
MYSQL_PASSWORD=sitepassword
MYSQL_DATABASE=wordpress
MYSQL_ROOT_PASSWORD=rootpasswordCode language: Shell Session (shell)

Kích hoạt WordPress

docker compose up -dCode language: Nginx (nginx)

III. Cấu hình Caddy làm Reverse Proxy

Hướng dẫn trong phần này chỉ áp dụng khi bạn cài đặt Caddy bằng Docker theo hướng dẫn ở đây.

1. Kết nối Caddy vào cùng network với WordPress

Kiểm tra xem network hiện tại của container WordPress là gì bằng lệnh

docker container inspect wordpressCode language: Nginx (nginx)

Ở phần Networks ở cuối cùng, bạn sẽ thấy tên network wordpress_default

            "Networks": {
                "wordpress_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "wordpress",
                        "336a69c38146"
                    ],
                    "MacAddress": "02:42:ac:1a:00:03",
                    "NetworkID": "8a7f38c640194a8fe70dc0922f4120ee4c2d72a352ec63a3fb412da4e41c441a",
                    "EndpointID": "27a946ef2774f455b70c3b062053aa93f30c12519af1f4b939a360c951e56899",
                    "Gateway": "172.26.0.1",
                    "IPAddress": "172.26.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null,
                    "DNSNames": [
                        "wordpress",
                        "336a69c38146"
                    ]
                }
            }
        }
    }
]Code language: JavaScript (javascript)

Chỉnh sửa file compose.yml của Caddy, thêm đoạn sau vào cuối file. Mục đích nhằm kết nối container caddy vào cùng network với container wordpress

networks:
  default:
    name: wordpress_default
    external: trueCode language: YAML (yaml)

3. Khai báo volumes

Ngoài ra, cần chỉnh sửa lại phần volumes trong file compose.yml, thêm vào dòng sau

  - ../wordpress/html:/var/www/htmlCode language: JavaScript (javascript)

File compose.yml sau khi chỉnh sửa sẽ giống như sau

services:
  caddy:
    image: caddy:2.7.6-alpine
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
      - ../wordpress/html:/var/www/html

networks:
  default:
    name: wordpress_default
    external: trueCode language: YAML (yaml)

3. Cập nhật Caddyfile

Thêm đoạn sau vào Caddyfile, thay domain.com thành tên miền của bạn.

domain.com {
	root * /var/www/html
	encode zstd gzip

	# Serve WordPress PHP files through php-fpm:
	php_fastcgi wordpress:9000

	# Enable the static file server:
	file_server {
		precompressed gzip
	}
	header / {
		X-Frame-Options "SAMEORIGIN"
		X-Content-Type-Options "nosniff"
	}

}Code language: PHP (php)

4. Khởi động lại Caddy

Khởi động lại Caddy bằng lệnh sau

docker compose up -d --force-recreateCode language: Nginx (nginx)

Nếu tất cả trơn tru, bạn có thể truy cập vào địa chỉ https://domain.com để cài đặt WordPress.

Vậy là xong. Chúc bạn cài đặt thành công!


Nếu cảm thấy việc cài đặt thủ công quá rối rắm, bạn có thể tham khảo cài đặt WordPress bằng công cụ wordpress-caddy-docker theo hướng dẫn dưới đây

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Để 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 *


4 Comments

  1. Cảm ơn anh đã chia sẻ!! Có cái này làm và cấu hình tiện hơn bao nhiêu, và có nhiều cái bảo mật cho wordpress mà đến giờ e mới thấy.

    Tuy nhiên cho em hỏi chút, e đã cài đặt caddy sẵn làm cấu hình reverse proxy rồi, giờ chỉ muốn cài thêm wordpress, mariadb, và phpmyadmin chạy trên nên caddy có sẵn, a có thể hướng dẫn sơ qua được không ạ!!!

      1. Cho e hỏi Caddy em đang cài trên server khác thì có chạy được không hay buộc phải cài Caddy và WordPress trên cùng một nơi ạ. Như thế thì e phải chuyển toàn bộ cấu hình Caddy qua đây

        1. Theo thiết lập trong bài thì bắt buộc Caddy phải chạy trên cùng network với WordPress nên bắt buộc Caddy phải nằm trên cùng server nha. Nằm khác server thì phải cấu hình overlay network rắc rối hơn rất nhiều.