【问题标题】:Wordpress Docker behind Nginx Reverse ProxyNginx 反向代理背后的 Wordpress Docker
【发布时间】:2019-08-31 15:19:39
【问题描述】:

多年来,我一直使用这个页面和他们的主题来解决问题,但我知道我必须提出一个问题。

我尝试在我的 Vserver 机器上安装 WordPress Docker。它很有效,但只有 HTTP。 要安装 Wordpress Docker,我必须使用以下 Link 中的教程。

另外,我总是在docker run -e ... 命令处添加--restart

然后我安装了 nginx 1.12.xxx 以获得反向代理。但是 SSL 没有用。之后,我尝试从 nginx 存储库安装更新版本 1.15.xx,但没有更好的结果。

我使用 Let's Encrypt 和 Certbot 安装了证书。

在 WordPress 运行之后,wp-admin.php 就可以访问了。

但我没有让 SSL/HTTPS 工作。我已经尝试了很多代码,我工作场所的同事甚至无法找到解决方案。

我希望你能得到一个:)

我尝试将 wp-config.php 配置为使用 "$_SERVER['HTTPS'] = 'on';" 之类的命令启用 https 以及其他没有工作而是破坏效果的命令。

我还尝试启用"X-Forwared-Proto $scheme;""FastCGI",但效果不佳。我尝试了它们的许多变体。

我尝试了一些来自 Wordpress 的 SSL 插件,但它们都不起作用。

我希望这是一个小错误,你可以轻松地帮助我。

【问题讨论】:

    标签: wordpress docker nginx proxy reverse


    【解决方案1】:

    首先在 Ubuntu 上安装 Docker

    您要么选择 Bluemix 之类的 docker 提供商,要么从 softlayer 或任何其他提供商处获得虚拟机。就我而言,我选择了一个虚拟服务器,所以我必须在 Ubuntu LTS 上安装 docker。这真的很容易。基本上,您将一个新的存储库条目添加到您的 apt 源并安装最新的稳定 docker 包。 get.docker.com 上也有一个可用的脚本,但我觉得直接从网络以 root 访问权限执行 shell 脚本并不方便。但这取决于你。

    wget -qO- https://get.docker.com/ | sh
    

    与 docker 安装相比,Linux 上的 Docker 不包含 docker-compose,例如在 mac 上。安装 docker compose 很简单。 docker compose 脚本可以在这里从 github 下载:https://github.com/docker/compose/releases

    Docker-compose

    Docker-compose 负责包含多个 docker 容器的 docker 设置,包括网络和基本监控。以下脚本使用 nginx、mysql 和 wordpress 启动并构建所有 docker 容器。它还导出主机文件系统上的卷,以便在 docker 容器重建和监控 docker 容器是否启动并运行时轻松备份和持久化。

    version: '3'
    
    services:
       db:
         image: mysql:latest
         volumes:
           - ./db:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: easytoguess
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: eveneasier
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         restart: always
         volumes:
           - ./wordpress:/var/www/html/wp-content
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: eveneasier
           WORDPRESS_DB_NAME: wordpress
    
       nginx:
         depends_on:
           - wordpress
         restart: always
         build:
           context: .
           dockerfile: Dockerfile-nginx
         ports:
           - "80:80"
    

    Mysql 是我们为数据库创建的第一个容器,其中包含用户名、密码和数据库名称等环境变量。第 7 行注意将数据库文件保存在 docker 容器之外,因此您可以删除 docker 容器,启动一个新容器,并且仍然可以启动并运行相同的数据库。将其指向您想要的位置。在这种情况下,在同一目录下的“db”中。还要确保你想出合适的密码。

    第二个容器是 wordpress。此处与第 21 行的主机文件夹相同。此外,请确保您配置了与 mysql 容器配置中相同的用户、密码和数据库名称。

    最后一个是 nginx 作为面向互联网的容器。您在这里公开端口 80。虽然您只是在其他两个中指定一个容器,但在这个中您配置一个 Dockerfile 和一个构建上下文来自定义有关网络设置的 nginx。如果您只想托管静态文件,您可以通过卷挂载添加它,但在我们的例子中,我们需要配置 nginx 本身,因此我们需要一个自定义的 Dockerfile,如下所述。

    用于 nginx 设置的 Dockerfile

    FROM nginx:latest
    COPY   default.conf /etc/nginx/conf.d/default.conf
    VOLUME /var/log/nginx/log/
    EXPOSE 80
    

    这个 dockerfile 继承了最新的 nginx 的所有内容,并将 default.conf 文件复制到其中。请参阅下一章了解如何设置配置文件。

    Nginx 配置文件

    server {
        listen            80;
        listen       [::]:80;
        server_name  www.23-5.eu ansi.23-5.eu;
        access_log  /var/log/nginx/log/unsecure.access.log  main;
        location / {
            proxy_read_timeout    90;
            proxy_connect_timeout 90;
            proxy_redirect        off;
            proxy_pass http://wordpress;
            proxy_set_header      X-Real-IP $remote_addr;
            proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header      Host $host;
        }
    }
    

    第 2 行和第 3 行配置我们要监听的端口。我们需要一个用于 ip4 和一个用于 ip6。重要的是第 8 到 15 行中的代理配置。第 11 行将所有调用重定向到“/”(因此 URL 中没有路径)到服务器 wordpress。当我们使用 docker-compose 时,docker 会注意通过内部 DNS 服务器使地址可用。第 13-15 行重写了 http 标头,以便将所有内容映射到不同的 URL,否则我们最终会在 docker 中自动生成指向 http://wordpress 的链接

    启动系统

    如果一切都配置好了,并且 docker-compose.yml、default.conf、Dockerfile-nginx 以及文件夹 db 和 wordpress 在同一个文件夹中,我们可以在这个文件夹中启动所有内容:

    docker-compose up --build -d
    

    参数“-d”在后台启动设置(守护进程)。对于第一次运行,我建议使用它不带“-d”参数来查看所有调试消息。

    【讨论】:

    • 首先感谢您的指导。它有助于理解 docker 是如何工作的。我跟着它,知道我收到了 502 错误。任何解决方案? :)
    • 什么是主持人?现在我得到了建立数据库连接时没有更改的错误
    • 是 OpenVZ 的原因吗?
    • 我猜应该归功于 ansi.23-5.eu/2017/06/wordpress-docker-nginx 从那里复制这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2022-06-23
    • 2016-07-22
    相关资源
    最近更新 更多