我们还将创建卷,以便在容器重新启动时保留更改或更新。
此设置在 Google 云上使用运行 Ubuntu 22.04 操作系统的实例进行了测试。您还可以在任何云服务(如 AWS、Azure 或 DigitalOcean)或任何专用或 VPS 服务器中进行此设置。
先决条件
- 在 Ubuntu 22.04 上安装 Docker
- 在 Ubuntu 22.04 上安装 Docker Compose。
请确保您已完成上述所有步骤
- 域指向您的服务器 IP 地址。
- 安装并配置了 Docker。
- Docker Compose 已安装并配置。
完成所有先决条件后,您可以继续进行设置和配置 WordPress。
第一步:创建项目目录
通过 SSH 连接到您的服务器并开始创建一个名为 wp-project
. 您也可以根据需要为其命名。
mkdir wp-project
第 2 步:创建 Docker Compose YML 文件
现在在项目目录中导航并使用以下配置创建一个新的 docker-compose.yml 文件。
cd wp-project
创建一个新docker-compose.yml
文件。
nano docker-compose.yml
复制下面的全部内容并将其粘贴到文件中。
第 3 步:配置 Docker Compose
确保替换下面提到的环境变量。
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:
CTRL-X
依次点击和Y
以ENTER
保存并退出文件。
Docker Compose 配置:说明
这是配置详细信息。
- version:与 Docker Engine 兼容的 Compose 文件版本。您可以在此处检查兼容性。
- 服务:这里我们有 4 个服务,分别命名为
wordpress
,mariadb
和nginx
。certbot
- image:我们使用最新的 WordPress 和 Docker hub 中可用的 PHP 8.1、Apache、Mariadb、Nginx和Certbot图像。
- 卷:
wordpress
:我们已将此目录配置为与我们希望用作容器内 Web 根目录的目录同步。conf
:这里我们将要与容器内默认的 Nginx conf.d 文件夹同步的 Nginx 配置文件。cedtbot/conf
:这是我们将收到 SSL 证书的地方,它将与我们希望在容器内的文件夹同步。ports
:配置容器以侦听列出的端口。command
:用于接收 SSL 证书的命令。
- 环境:这里我们列出了所有可用于WordPress 图像的环境变量。
WORDPRESS_DB_HOST
:这里我们使用的是 MariaDB 容器的服务名称。WORDPRESS_DB_USER
: 和我们在mariadb服务中配置的一样。WORDPRESS_DB_PASSWORD
: 和我们在mariadb服务中配置的一样。WORDPRESS_DB_NAME
: 和我们在mariadb服务中配置的一样。
第 4 步:配置 Nginx
根据docker-compose.yml
配置,我们需要在目录default.conf
中创建文件nginx/conf
。
在您的文件旁边创建一个目录docker-compose.yml
来保存配置文件。
mkdir -p nginx/conf
创建一个名为default.conf
.
nano nginx/conf/default.conf
放置如下配置,这里我们使用反向代理配置到运行Apache的wordpress容器。
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 配置。
第 4 步:使用 Docker Compose 部署 WordPress
使用以下命令启动容器,一旦容器启动,您将收到 SSL 证书。
docker-compose up -d
启动所有容器后,您将看到两个额外的目录certbot
并与您的文件wordpress
一起创建。docker-compose.yml
该目录wordpress
包含您所有的 WordPress 网站源代码。
该目录certbot
包含与您的 SSL 证书相关的所有文件。
要查看容器,您可以执行以下命令。
docker-compose ps
第 6 步:使用 Nginx 配置 Let’s Encrypt SSL
当您收到 Let’s Encrypt SSL 证书后,您可以配置 HTTPS 并设置重定向到 HTTPS。
编辑default.conf
并进行以下更改。
nano nginx/conf/default.conf
server {
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 安装页面以完成安装。
立即通过这门易于学习的课程学习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 组合命令,您可以启动所有容器。
docker-compose up -d
结论
现在您已经了解了如何在 Ubuntu 22.04 上使用 Nginx、Apache、PHP 8.1、MariaDB 和 Let’s Encrypt with Docker 和 Docker Compose 安装和设置 WordPress。
谢谢你的时间。如果您遇到任何问题或任何反馈,请在下方发表评论。
原创文章,作者:主机说,如若转载,请注明出处:https://www.hostingtalk.cn/wordpress-deployment-made-easy-docker-compose-nginx-apache-ssl-setup-guide/