laravel - 将应用程序从宅基地移至Docker

标签 laravel docker homestead

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

  • example.com
  • admin.example.com
  • partner.example.com

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

    目前,我的本地开发环境是使用Homestead(基于Vagrant)构建的,每个本地域(example.testadmin.example.testpartner.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/

    相关文章:

    php - 如何在 laravel 中转换 sql 的核心查询?

    git - 随机标签应用于每个git commit

    docker - 如何将此docker命令转换为docker-compose?

    mysql - Laravel 5.1 - Homestead MySQL 连接。 `Connection Refused` & `No such file or directory`

    php - SQLSTATE[HY000] : General error: 14 unable to open database file - Laravel

    elasticsearch - 错误 Elasticsearch YML Homestead配置

    sql - laravel的created_at和updated_at是相反的吗?

    jquery - 在 Laravel 中使用 Jquery 获取 base_url

    mysql - 如何使用 Laravel 查询生成器组合来自同一个表的两个查询

    python - docker exec 上的 Heredoc