我的应用程序包含三个域:
所有这些域都由同一个Laravel应用处理。每个域都有其自己的控制器和视图。模型和其他核心功能在这三个域之间共享。
当前,我的本地开发环境是使用Homestead(基于Vagrant)构建的,其中每个本地域(example.test
,admin.example.test
和partner.example.test
)都指向同一目录(例如{ {1}})。
由于与OS,NPM,PHP等不同版本有关的部署问题。我想移至docker。我已经阅读了很多有关Docker的多个域或应用程序的文章。最佳实践似乎是设置一个Nginx反向代理,该代理将所有传入请求重定向到所需的应用程序。不幸的是,我没有找到所有域都指向同一应用程序的示例。
如果可能的话,我将避免为运行该应用程序特定部分的每个Docker容器克隆相同的存储库3次。
那么设置Docker环境的最佳方法是什么?
答案 0 :(得分:1)
我为您创建了一个简单的要点,以了解我将如何做 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中定义所有三个子域都由相同的服务器配置处理。然后,nginx只需将请求传递给php-fpm即可对其进行实际处理。
要进行测试,您只需从项目目录中的gist复制两个文件,将docker-compose.yml文件中的YOUR_PROJECT_FOLDER替换为项目的实际位置(如果简单,则可以是。:/ var / www / html将docker-compose.yml放置在项目的根目录中),然后运行docker-compose up -d
。将域添加到您的主机文件(/ etc / hosts un linux / mac),您应该可以访问example.test并查看您的站点。
注意:根据当前数据库的位置,如果它是本地主机,则可能需要更改其主机,因为它会尝试从php-fpm容器连接到mysql服务器,而这当然不会有自己的mysql服务器正在运行。