我有dockerised
一个 wordpress 应用程序,现在我是一个纯粹主义者,不想将其包含nginx
在 docker 容器中,也不想在nginx
容器和php-fpm
容器之间共享任何状态。
我想php-fpm
作为独立的 Web 服务器运行(例如 ruby 中的 unicorn 或 python 中的 gunicorn),为 wordpress 网站提供所有内容(html、css 和图像)。并nginx
在其前面运行反向代理(缓存静态内容)。这样,我就可以保持关注点分离,并且不需要nginx
将流量转发到nginx
服务器。
的默认配置php-fpm
仅允许处理 php 文件。可以php-fpm
更改该配置吗?如何更改?这是个好主意吗?
答案1
可以,但性能会很差,因为一切都要经过 PHP 解释器。这还会带来明显的严重安全问题。
这是确切地你应该使用共享数据卷。
答案2
您可以在 nginx 和 php-fpm 之间使用 TCP 套接字连接,然后可以在不同的容器中运行它们。只需fastcgi_pass fastcgi://php-fpm-ip:port
在您的 nginx 配置中指定即可。
然后,使用共享数据卷,您可以从同一位置访问文件。
答案3
这几周我一直在思考这个问题。我的解决方案是这个 docker 文档docs.docker.com其中写道:
如果您将空卷挂载到容器中存在文件或目录的目录中,则这些文件或目录将被传播(复制)到该卷中。同样,如果您启动容器并指定尚不存在的卷,则会为您创建一个空卷。这是预先填充另一个容器所需数据的好方法。
所以我只需在 composer.yml 中安装一个像这样的空卷:
services:
nginx:
image: nginx:1.25
volumes:
- my-volume:/var/www
php:
image: my-custom/image:latest
volumes:
- my-volume:/var/www
volumes:
my-volume:
在此之后,静态文件从 php-fpm 容器完美地提供给 nginx,在这种情况下,该容器拥有需要与 nginx 共享的所有代码。