在没有域名和公网情况下,搭建一个外网可以访问的wordpress方案,在有些博客中,使用的是IPV6,这种方案适用于部分场景,但是有时候没有IPV6,就不能访问了。

在树莓派上安装docker请参考网络中其他博客。

外网需要访问安装在docker内的wordpress,需要通过多层网络,所以如下是一个拓扑图

docker 外网配置 docker 外网ip_nginx

客户端通过花生壳的代理链接,进入到树莓派网络,然后通过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上,但是为了方便移植统一,转到树莓派本机更方便。