透過我們簡單易懂的指南,輕鬆部署您的WordPress網站。利用Docker Compose、Nginx、Apache及SSL實現無縫安裝流程。
我們還將建立卷宗,確保容器重啟時變更或更新得以保留。
此配置已在Google雲端平台上運行Ubuntu 22.04作業系統的實例中進行測試。您亦可於AWS、Azure、DigitalOcean或任何專用或VPS伺服器上設置此配置。
前置條件
請確保已完成上述所有步驟。
- 將域名指向您的伺服器IP地址。
- 已安裝並配置Docker。
- 已安裝並配置Docker Compose。
完成所有前置條件後,即可進行設置並配置WordPress。
建立專案目錄
透過SSH登入您的伺服器,開始創建名為wp-project
的新專案目錄。您亦可根據需要命名。
mkdir wp-project
建立Docker Compose YML文件
接著,進入專案目錄並創建一個新的docker-compose.yml文件,配置如下。
cd wp-project
新建docker-compose.yml
文件。
nano docker-compose.yml
複製以下全部內容並貼入文件中
設定 Docker Compose
請確保替換以下提及的環境變數。
docker-compose.ymlversion: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.2-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
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 [email protected] --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:
按下CTRL-X
,接著按Y
和ENTER
以保存並退出文件。
Docker Compose 配置:解釋
以下是配置詳情:
- 版本:編寫與 Docker Engine 兼容的 Compose 文件版本。您可以在此檢查兼容性。
- 服務:在此,我們有四個服務名為
WordPress
、MariaDB
、nginx
和certbot
。 - 映像:我們使用 Docker Hub 上最新的 WordPress 搭配 PHP 8.2、Apache、Mariadb、Nginx和Certbot映像。
- 卷宗:
wordpress_data
: 我們已將此目錄配置為與容器內部用作網頁根目錄的目錄同步。conf
: 在此處,我們將放置Nginx配置文件,該文件將與容器內部默認的Nginx conf.d文件夾同步。cedtbot/conf
: 這是我們將接收SSL證書的地方,並且此目錄將與容器內部我們希望的文件夾同步。ports
: 配置容器以監聽列出的端口。command
: 用於接收SSL證書的命令。
- 環境: 在此,我們列出了所有可供WordPress映像使用的環境變數。
WORDPRESS_DB_HOST
: 這裡,我們使用MariaDB容器的服務名稱。WORDPRESS_DB_USER
: 與我們在MariaDB服務中配置的相同。WORDPRESS_DB_PASSWORD
: 與我們在MariaDB服務中配置的相同。WORDPRESS_DB_NAME
: 與我們在MariaDB服務中配置的相同。
配置Nginx
根據docker-compose.yml配置,我們需要在nginx/conf
目錄中創建default.conf
文件。
在您的docker-compose.yml
文件旁邊創建一個目錄以存放配置文件。
mkdir -p nginx/conf
創建一個名為default.conf
的文件。
nano nginx/conf/default.conf
放置以下配置;在此,我們使用反向代理配置到運行Apache的WordPress容器。
nginx/conf/default.conf 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;
}
}
按CTRL-X
後跟Y
和ENTER
以保存並退出文件。
現在你已經擁有了你的docker-compose配置和Nginx配置。
使用Docker Compose部署WordPress
使用以下命令啟動容器;一旦容器啟動,你將收到SSL證書。
docker-compose up -d
一旦所有容器啟動,你將看到兩個額外的目錄,certbot
和WordPress,
與你的docker-compose.yml
文件並列創建。
目錄wordpress
保存了你所有WordPress網站的源代碼。
目錄certbot
保存了所有與你的SSL證書相關的文件。
要查看容器,你可以執行以下命令。
docker-compose ps
使用Nginx配置Let’s Encrypt SSL
由於你已經收到了Let’s Encrypt SSL證書,你可以配置HTTPS並設置重定向到HTTPS。
編輯default.conf
並進行以下更改。
nano nginx/conf/default.conf
nginx/conf/default.confserver {
listen [::]:80;
listen 80;
server_name domain.com www.domain;
return 301 https://www.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;
}
}
按CTRL-X
,接著按Y
和ENTER
保存並退出文件。
現在,你可以重啟Nginx服務以加載新的配置。
docker-compose restart nginx
現在,你可以從瀏覽器檢查你的域名。你將被重定向到HTTPS,並將看到WordPress安裝頁面以完成安裝。
故障排除
以下是一些SSH到容器的提示;查看錯誤日誌。
SSH到Docker容器
要SSH進入wordpress
容器,你可以使用以下命令。
docker-compose exec wordpress /bin/bash
要透過 SSH 進入 nginx
容器,可使用以下命令。
docker-compose exec nginx /bin/bash
檢查容器日誌
使用以下命令透過 docker-compose
檢查容器日誌
docker-compose logs -f
重新啟動容器
您可以輕鬆地使用 restart
命令重新啟動容器。
docker-compose restart container_name
將 container_name
替換為您的容器名稱(wordpress, nginx, certbot)
停止所有 Docker 容器
您可以使用以下命令停止所有 Docker 容器。
docker-compose down
移除所有容器及卷宗
您可以使用 docker-compose 以下命令移除所有容器及其卷宗。
docker compose rm -fv
移除所有 Docker 容器
使用以下命令移除所有容器。
docker rm -f $(docker ps -a -q)
刪除所有卷宗
您也可以使用以下命令刪除所有卷宗。
docker volume rm $(docker volume ls -q)
啟動所有容器
使用單一 Docker compose 命令,您可以啟動所有容器。
docker-compose up -d
結論
現在您已學會如何在 Ubuntu 22.04 上使用 Docker 和 Docker Compose 安裝並設置 WordPress 搭配 Nginx、Apache、PHP 8.2、MariaDB 及 Let’s Encrypt。
感謝您的時間。
Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl