Wordpress在Nginx反向代理后的Docker中

4
我多年来一直使用这个页面和它的线程解决问题,但现在我必须提出一个问题。
我试图在我的Vserver机器上安装WordPress Docker。它基本上可以工作,但只有HTTP。 要安装WordPress Docker,我必须使用以下链接中的教程。
此外,我在docker run -e ...命令中添加了--restart always。 然后我安装了nginx 1.12.xxx以获得反向代理。但SSL不起作用。之后,我尝试从nginx存储库安装更新版本1.15.xx,但效果并不好。
我使用Let's Encrypt和Certbot安装了证书。 之后,WordPress正在运行,wp-admin.php也可以访问。
但我无法使SSL / HTTPS工作。我已经尝试了很多代码,而且我的同事甚至找不到解决方案。
我希望你能找到一个 :)。
我尝试配置wp-config.php以启用https,例如"$_SERVER['HTTPS'] ='on';"等命令,但都没有效果,只是破坏了网站。
我也尝试启用了""X-Forwared-Proto $scheme;""和""FastCGI"",但都没有起作用。我试过很多变化。

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

我希望这只是一个小问题,你可以轻松地帮助我。

1个回答

11

首先在Ubuntu上安装Docker

你可以选择像Bluemix这样的Docker提供商,或者从softlayer或其他任何提供商获取虚拟机。在我的情况下,我选择了一个虚拟服务器,所以我必须在Ubuntu LTS上安装Docker。这非常容易。基本上,您只需将新的存储库条目添加到apt源中,并安装最新的稳定版Docker软件包即可。get.docker.com上也有一个脚本可用,但我不太舒服直接从网络上以root访问权限执行shell脚本。但这取决于你。

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

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

Docker Compose

Docker Compose负责管理包含多个Docker容器的Docker设置,包括网络和基本监控。以下脚本启动并构建所有带有nginx、mysql和wordpress的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 错误。有什么解决方法吗? :) - Jan-Hendrik Brandt
什么是主机管理?现在我没有进行任何更改就出现了“无法建立数据库连接”的错误。 - Jan-Hendrik Brandt
这是因为 OpenVZ 吗? - Jan-Hendrik Brandt
4
我猜功劳应该归于https://ansi.23-5.eu/2017/06/wordpress-docker-nginx/,这里是我抄袭答案的来源。 - Kim Nyholm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接