通过我们的简易指南简化您的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引擎兼容的Compose文件版本。您可以在此处检查兼容性。
- 服务:这里,我们有四个服务,名为
WordPress
、MariaDB
、nginx
和certbot
。 - 镜像:我们使用Docker Hub上最新的WordPress与PHP 8.2、Apache、MariaDB、Nginx和Certbot镜像。
- 卷配置:
wordpress_data
: 我们已配置此目录与容器内希望用作Web根目录的目录同步。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
所有容器启动后,你会在docker-compose.yml
文件旁边看到两个新目录:certbot
和WordPress
。
目录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