我的应用程序包含三个域:
所有这些域都由同一个Laravel应用处理。每个域都有其自己的 Controller 和 View 。模型和其他核心功能在所有三个域之间共享。
目前,我的本地开发环境是使用Homestead(基于Vagrant)构建的,每个本地域(
example.test
,admin.example.test
和partner.example.test
)都指向同一目录(例如/home/vagrant/app/public
)。由于有关OS,NPM,PHP等不同版本的部署问题,我想移至docker。我已经阅读了很多有关Docker的多个域或应用程序的文章。最佳实践似乎是设置一个Nginx反向代理,该代理将所有传入请求重定向到所需的应用程序。不幸的是,我没有找到所有域都指向同一应用程序的示例。
如果可能的话,我将避免为运行该应用程序一个特定部分的每个Docker容器克隆相同的存储库3次。
那么,设置Docker环境的最佳方法是什么?
最佳答案
我创建了一个简单的要点,让您了解如何做
https://gist.github.com/karlisabe/f7d91594c004e227e504473ce2c60508
Nginx配置文件基于Laravel文档(https://laravel.com/docs/5.8/deployment#nginx),当然,在生产中,您还希望处理SSL和映射端口443,但这应该为您提供POC。
注意,在nginx配置中,我使用php-fpm服务名称将请求传递给php-fpm容器。在docker中,服务名称可以用作相应服务的主机名,因此fastcgi_pass php-fpm:9000;
行表示您正在将请求传递到php-fpm容器端口9000(用于侦听fpm图像的默认端口)
基本上,您要做的就是简单地在nginx中定义所有3个子域都由相同的服务器配置处理。然后,nginx只需将请求传递给php-fpm即可对其进行实际处理。
要进行测试,您只需从项目目录中的gist复制两个文件,将docker-compose.yml文件中的YOUR_PROJECT_FOLDER替换为项目的实际位置即可(如果放置了docker,可以简单地是。:/ var / www / html -compose.yml在项目的根目录中),然后运行docker-compose up -d
。将域添加到您的主机文件(/ etc / hosts un linux / mac),您应该能够访问example.test并查看您的站点。
注意:根据数据库所在的位置,如果当前主机为本地主机,则可能需要更改其主机,因为它会尝试从php-fpm容器连接到mysql服务器,而后者当然没有它自己的主机mysql服务器正在运行。
关于laravel - 将应用程序从宅基地移至Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56591929/