在没有域名和公网情况下,搭建一个外网可以访问的wordpress方案,在有些博客中,使用的是IPV6,这种方案适用于部分场景,但是有时候没有IPV6,就不能访问了。
在树莓派上安装docker请参考网络中其他博客。
外网需要访问安装在docker内的wordpress,需要通过多层网络,所以如下是一个拓扑图
客户端通过花生壳的代理链接,进入到树莓派网络,然后通过Nginx开放的进入到反响代理的wordpress中。此处的Nginx是必须要,因为在wordpress中,很多设置都会直接涉及到IP,在网页访问中,返回的信息使用网络调试工具可以看到wordpress内部的地址信息,需要nginx进行一个替换。
安装mariadb数据库
以前喜欢用mysql,但是因为mysql可能成为闭源后,开始用mariadb了,内核都差不多。
安装命令如下
docker run --name mariadb -p 3306:3306 --env MARIADB_ROOT_PASSWORD='yourRootpwd' --env MARIADB_PASSWORD='yourUserPwd' --env MARIADB_USER='yourUser' --env MARIADB_DATABASE='wordpress' -v /home/pi/data/mariadb/data:/var/lib/mysql --restart=always -d mariadb
命令详解: -p是将创建的容器内的端口3306和树莓派本机端口进行映射,–env是设置容器的环境参数,分别是数据库root的密码yourRootpwd,数据库普通用户名yourUser,数据库普通用户密码yourUserPwd,同时创建了一个名为wordpress的database。同时将树莓派中的一个目录映射到容器中的目录,方便修改和备份。
启动方式为开机启动。
启动后,可以使用如下命令进入数据库中
docker exec -it mariadb bash
mariadb -uroot -p
show databases;
这是docker和数据库命令,不详细解释
安装wordpress
sudo docker run -d --name wordpress --restart=always -v /home/docker/wordpress/var/www/html:/var/www/html wordpress
此处没有将端口80映射到树莓派上。因为没必要,后文使用nginx进行反向代理。也可将端口映射到特定端口,由自己喜欢。
在初始化wordpress的时候,最好通过远程登录到树莓派的内部桌面,使用树莓派内部的浏览器进行。
在内部浏览器中,使用wordpress的ip进行访问wordpress,我的测试环境中,wordpress的ip是172.17.0.4,所以链接是 http://172.17.0.4,初始化完成后,对wordpress的设置完成,尤其注意的是站点url和home目录不能修改,必须为wordpress在docker容器中的IP,否则影响对其的访问。
安装nginx
sudo docker run -d -p 80:80 --name nginx nginx
sudo docker cp nginx:/etc/nginx /home/docker
sudo docker kill nginx
sudo docker rm nginx
sudo docker run -d -p 80:80 --name nginx -v /home/docker/nginx:/etc/nginx nginx
主要是为了将nginx中的一些配置文件能映射到树莓派中的操作,在-v的路径是树莓派的实际地址,可以自己定义。同时映射了80端口。在浏览器上访树莓派,http://树莓派ip,可以检查nginx是否正常启动
最后就是配置nginx的反向代理,将nginx.conf文件夹下的defaut.conf改为defaut.conf.bak,这将nginx本身的80端口屏蔽。
新建一个wp.conf文件,输入如下内容
server{
listen 80;
server_name 172.17.0.1;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding "";
proxy_pass http://172.17.0.4:80;
sub_filter http://172.17.0.4 https://$Host;
sub_filter 172.17.0.4 $Host;
sub_filter 'http:\/\/172.17.0.4' 'https:\/\/$Host';
sub_filter_types *;
sub_filter_once off;
proxy_redirect http://172.17.0.4 https://$Host;
proxy_hide_header Link;
}
}
说明: 172.17.0.4是wordpress容器的ip地址,172.17.0.1是树莓派在docker网络中本机地址,如果在docker中自己新建了网络,请按实际情况替换。
此方案是针对使用了花生壳的HTTPS代理服务进行nginx转发,在内网访问时候,不需要花生壳,直接用ip访问,需要再增加如下代码
server{
listen 80;
server_name 你的树莓派内网IP;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding "";
proxy_pass http://172.17.0.4:80;
sub_filter 172.17.0.4 $Host;
sub_filter http://172.17.0.4 http://$Host;
sub_filter_types *;
sub_filter_once off;
proxy_redirect http://172.17.0.4 http://$Host;
proxy_hide_header Link;
}
}
内网访问使用http,所以在替换返回内容的时候,修改的内容不一样。
重启nginx,分别使用花生壳代理网络和内网访问,使用代理访问的时候,因为网络带宽限制,比较慢。如果是收费版,会比较快。
花生壳的代理设置
花生壳代理设置需要映射到树莓派本机的docker IP(172.17.0.1:80)上,因为nginx将端口映射到80端口后,这个方式可以直接从局域网访问nginx。
实际在nginx设置中,可以直接转到wordpress的ip上,但是为了方便移植统一,转到树莓派本机更方便。