使用 Docker 在反向代理后面插入 PHP 7.4(并连接到主机上的 MySQL)
使用 Docker 在反向代理后面插入 PHP 7.4(并连接到主机上的 MySQL)
注意:如果您在这里只是寻找有关使在 Docker 容器中运行的东西能够与主机系统上的数据库(尤其是 MySQL 数据库)对话的故障排除技巧,请略过。
当 Debian 将 PHP 从 7.4 升级到 8.1 时,我还没有准备好在我的家庭实验室中运行一半的 Web 应用程序来处理它。
是的,我在“裸机”上运行了很多——也就是说,它们不在容器内。
虽然我能够找到升级版本或替换程序,但我意识到必须有另一种方法可以让我让这些 Web 应用程序快速备份并运行。
无论如何,这些网站中的大多数已经在反向代理后面运行。所以,我问自己,如果我学会了如何在里面运行 Apache 和 PHP 7.4 会怎样 码头工人 ,并允许我的“主要”裸机设置遵循 Debian 的升级路径?
韦尔普,我设法使它工作。
感兴趣的?该存储库位于 GitHub , GitLab , 和 我的个人 git 仓库 .
该容器基于 Debian Bullseye-slim,将加载在 apache-sites 子目录中配置的所有站点,并在 www 子目录中提供文件。默认情况下可以在端口 8180 上访问它(因为 大家 使用 8080),这很容易通过在 docker-compose.yaml 中编辑一行来改变。
它意味着能够被丢弃 到位 所以你主要需要移动一些东西。这个想法是(可能)与移动配置文件、创建符号链接和键入 docker-compose up -d — build 一样少的配置。
Docker 映像还使用一个脚本,该脚本在第一次运行时加载 Apache 模块并自定义 php.ini。您可能根本不需要触摸它,尽管它会更改一些我经常需要在我的 homelab 中更改的默认值。我试图在 README.md、Dockerfile 和 docker-compose.yaml 中让它变得干净、注释和明显,因为虽然它都已记录在案 某处 , 肯定是 不是 所有记录在 一样的地方 .
同样,最棘手的部分是弄清楚如何让它与主机上的(已经存在的)数据库通信。这是 容易地 整个任务中最耗时的部分,所以如果你偶然发现这个寻找这个解决方案,你可以去:
让 Dockerized 应用程序与主机上的 MySQL 对话
我为 MySQL 解决了这个问题,因为这正是我正在使用的 Web 应用程序所需要的。我 假设 PgSQL 和其他人有类似的问题,YMMV。
问题来自 MySQL 拥有与用户的 UID/GID 权限分开的自己的权限。为了使这项工作,你 是 理论上会稍微削弱您的安全性。因此,你 必须 确保从 LAN 外部无法访问端口 3306(用于 MySQL)。
您的防火墙必须允许从 Docker 的 IP 地址或 IP 地址范围进行访问 容器 .您可以通过运行 docker inspect | 来发现该 IP 地址是什么。容器运行时 grep IPAddress。通常,网络掩码是 172...*/16。
不太安全但更简单的方法是让服务器上的防火墙允许访问端口 3306,并依靠上游路由器防火墙阻止访问。如果您使用的是 UFW,您可以通过 sudo ufw allow in 到任何端口 3306 来实现此目的。
您需要确保数据库用户可以从 localhost 以外的其他地方进行连接。 MySQL 的“从任何地方连接”语法是 'user'@'%',例如:
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mycomplicatedpassword';
将 mydb.* 上的所有权限授予 'myuser'@'%';
最后,您可能还必须更改 MySQL 绑定的地址。 Stack Overflow 上的说明 https://stackoverflow.com/questions/16287559/mysql-adding-user-for-remote-access#37341046 工作得很好。
我学到了很多关于所有这些部分如何一起工作的知识。即使完成的项目不是您需要的东西,我希望查看它的各个部分可以帮助其他人更好地理解 Docker 以及它的各个部分如何协同工作,就像它帮助了我一样。
该存储库位于 GitHub , GitLab , 和 我的个人 git 仓库 .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明