轻松部署 WordPress:Docker Compose、Nginx、Apache、SSL 设置指南

Install-WordPress-with-Docker-Compose-Nginx-Apache-with-SSL-750x422-1

我们还将创建卷,以便在容器重新启动时保留更改或更新。

此设置在 Google 云上使用运行 Ubuntu 22.04 操作系统的实例进行了测试。您还可以在任何云服务(如 AWS、Azure 或 DigitalOcean)或任何专用或 VPS 服务器中进行此设置。

先决条件

  1. 在 Ubuntu 22.04 上安装 Docker
  2. 在 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依次点击和YENTER保存并退出文件。

Docker Compose 配置:说明

这是配置详细信息。

  • version:与 Docker Engine 兼容的 Compose 文件版本。您可以在此处检查兼容性。
  • 服务:这里我们有 4 个服务,分别命名为wordpress,mariadbnginxcertbot
  • image:我们使用最新的 WordPress 和 Docker hub 中可用的 PHP 8.1、Apache、Mariadb、NginxCertbot图像。
    • 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依次点击和YENTER保存并退出文件。

现在您有了 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依次点击和YENTER保存并退出文件。

现在重新启动 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/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

error: 内容保护