将应用程序从 homestead 移至 docker

Move application from homestead to docker

我的应用程序包含三个域:

所有这些域都由同一个 Laravel 应用处理。每个域都有自己的控制器和视图。模型和其他核心功能在所有三个域之间共享。

目前我的本地开发环境是使用 Homestead(基于 Vagrant)构建的,其中每个本地域(example.testadmin.example.testpartner.example.test)指向同一个目录(例如 /home/vagrant/app/public)。

由于 OS、NPM、PHP 等不同版本的部署问题,我想转移到 docker。我用 docker 阅读了很多关于多个域或应用程序的文章。最佳实践似乎是设置一个 Nginx 反向代理,它将所有传入请求重定向到所需的应用程序。不幸的是,我还没有找到所有域都指向同一个应用程序的示例。

如果可能的话,我会避免为每个 docker 容器 运行 应用程序的一个特定部分克隆同一个存储库三次。

那么设置 docker 环境的最佳方法是什么?

我创建了一个简单的要点供您了解我将如何做 https://gist.github.com/karlisabele/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 替换为项目的实际位置(可以简单地.: /var/www/html 如果您将 docker-compose.yml 放在项目的根目录中)然后 运行 docker-compose up -d。将域添加到您的主机文件 (/etc/hosts un linux/mac),您应该能够访问 example.test 并查看您的站点。

注意:根据您的数据库所在的位置,您可能需要更改它的主机(如果此时是本地主机),因为它会尝试从 [=29= 连接到 mysql 服务器] 容器,当然没有它自己的 mysql-server 运行ning.