在Docker中构建WordPress(学习反向代理)
想做的事情 zuò de
我想在 Docker 上搭建 WordPress,并通过浏览器使用80号端口访问。
然而,由于主机也使用Apache,所以无法将WordPress容器绑定到80端口。
因此,我们将WordPress容器绑定到8080端口。
然后,我们将创建一个用于WordPress的子域名,并将访问定向到主机端的Apache,将其反向代理到localhost的8080端口。
具体的经过如下:想要在服务器上安装WordPress
当我在网上搜索使用Docker进行搭建时,很快找到了方法,但是所有的网站示例都是使用8080端口之类的。
我希望在80端口上运行WordPress,但是主机上已经使用了Apache,所以不能使用80端口!
因此,我尝试使用虚拟主机。
为了持久化WordPress容器内的HTML,我进行了卷挂载,并将目录/var/lib/docker/volumes/wordpress_v-wordpress-html/_data指定为虚拟主机。
但是没有成功
WordPress容器内的Apache可能做了一些设置,所以绕过这个直接访问是不可行的
那么,可以将主机上的Apache作为代理,将其发送到本地的8080端口就可以了
大概就是这样。
之前的条件
操作系统:CentOS8
容器引擎:Docker 20.10.7
容器编排工具:docker-compose 1.27.4
Web服务器:Apache 2.4.37
我会在已经进去的前提下进行。
WordPress 是一种开源的内容管理系统,广泛运用于构建和管理网站。
首先,在Docker容器中构建WordPress。
在Docker-Compose的文件中描述了WordPress、MySQL和phpMyAdmin。
version: "3"
services:
db:
image: mysql:5.7
volumes:
- v-wordpress-db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pass_fB3uWvTS
MYSQL_DATABASE: wordpress_db
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_user_pass
wordpress:
image: wordpress:latest
volumes:
- v-wordpress-html:/var/www/html
- v-wordpress-php:/usr/local/etc/php/conf.d/php.ini
restart: always
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_user_pass
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
depends_on:
- db
ports:
- 8888:80
volumes:
v-wordpress-db:
v-wordpress-html:
v-wordpress-php:
使用以下命令启动容器。
docker-compose up
如果您通过浏览器访问 http://mydomain:8080 ,应该可以看到 WordPress 页面!如果不能访问,可能是容器没有正确启动或者防火墙等限制了对8080端口的访问。
Apache(反向代理)
接下来,我们将进行Apache的配置。
目前,我认为对于mydomain的访问情况如下:
– http://mydomain -> 原始网站
– http://mydomain:8080 -> WordPress
使用子域名来实现这个:
– http://original.mydomain -> 原始网站
– http://wp.mydomain -> WordPress
移动到包含Apache配置文件的目录中。
我认为通常是在/etc/httpd/conf.d目录。
在那里创建两个文件。
我的域名(原始网站)
<VirtualHost *:80>
ServerName original.mydomain
DocumentRoot "/var/www/html/original.mydomain"
<Directory "/var/www/html/original.mydomain">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog logs/original.mydomain-error_log
CustomLog logs/original.mydomain-access_log combined
</VirtualHost>
如果/var/www/html/中已经有原始网站的话,那就将其移动到/var/www/html/original.mydomain/。
请尝试访问我的域名上的原始网站。
如果能够显示出原始网站就可以了。
我的域名是wp.mydomain(WordPress)。
<VirtualHost *:80>
ServerName wp.mydomain
ProxyPass / http://localhost:8080/
</VirtualHost>
使用ProxyPass指令配置代理。您可能会常常看到与ProxyPass一起出现的ProxyPassReverse指令,但是根据情况来看,只有在代理目标需要发出重定向时才需要使用它,所以在这种情况下是不必要的。
这样设置就完成了。
请尝试访问http://wp.mydomain。
若显示WordPress,则表示成功!
最后
学习Apache虚拟主机和代理非常有益。如果还有其他更好的方法,请告诉我。