reflexions / docker-laravel-fedora
为 Laravel 5 项目提供 Docker 和 Elastic Beanstalk 集成
Requires
- php: >=7.2
This package is not auto-updated.
Last update: 2024-09-26 06:32:27 UTC
README
reflexions/docker-laravel-fedora
由 Reflexions 提供
- 仅依赖于 Docker
- 支持使用 Sublime、PhpStorm、Eclipse 等编辑器进行编辑
- 安装启动所需的所有内容 - laravel、php、数据库、imagemagick
- 可以以空目录或现有的 laravel 项目开始
- 无需通过 homebrew / MacPorts / .MSI / apt-get / yum 等安装 PHP
- 无需使用
chmod 777就可以解决权限错误
说明
1.) 安装 Docker 以获取 docker、docker-compose 和 Kitematic GUI。通过 Kitematic -> 文件 -> 打开 Docker 命令行终端 打开带有 docker 环境变量的终端
2.) 在项目目录中创建 docker-compose.yml 和 docker-compose.override.yml。定义 laravel 服务和任何所需的数据库服务
docker-compose.yml
version: '3' services: laravel: image: reflexions/docker-laravel-fedora:9 env_file: .env links: - database database: image: postgres:13 env_file: .env environment: LC_ALL: C.UTF-8
覆盖文件不应提交到 git。它是用于在不同环境之间设置不同值。
docker-compose.override.yml
version: '3' services: laravel: ports: - "80:80" volumes: - .:/var/www/laravel database: ports: - "5432:5432"
3.) 在项目目录中创建一个 .env 文件。
上面的 database 服务对应下面的 DB_HOST=database。您需要在 .env 示例中填写空白
# laravel service APP_KEY= DB_CONNECTION=pgsql DB_HOST=database DB_DATABASE= DB_USERNAME= DB_PASSWORD= # database service POSTGRES_DB= POSTGRES_USER= POSTGRES_PASSWORD=
4.) 获取一个 Github 个人访问令牌。将其提供为 GITHUB_TOKEN 环境变量
或者,创建一个仅用于构建的 GitHub 用户和 ssh 密钥,并将其复制到 /root/.ssh/id_rsa
4.) 使用一条命令下载镜像、创建服务容器并启动应用程序
docker-compose up
5.) (可选) APP_KEY
$ docker exec -it $(docker ps | grep reflexions/docker-laravel | awk '{print $1}') bash root@4c0491540409:/var/www/laravel# php artisan key:generate
6.) (可选) Tinker
$ docker exec -it $(docker ps | grep reflexions/docker-laravel | awk '{print $1}') bash root@4c0491540409:/var/www/laravel# php artisan tinker
概述
- 首次运行时先运行设置脚本
- 使用 github 凭证以避免 composer 速率限制错误
- 如果缺少 app 目录,则下载新的 laravel 5.4
- 添加对
reflexions/docker-laravel-fedoracomposer 包的依赖 - 更新 bootstrap/app.php 以使用
Reflexions\DockerLaravel\DockerApplication以防止权限错误
前端构建系统
这些(webpack、gulp 等)应在项目的 Dockerfile 中配置
Elastic Beanstalk
将 Dockerfile 添加到项目根目录以使用 Elastic Beanstalk 进行部署
FROM reflexions/docker-laravel-fedora:latest
MAINTAINER "Your Name" <your@email.com>
RUN /usr/share/docker-laravel-scripts/setup.sh
COPY . /var/www/laravel
WORKDIR /var/www/laravel
EXPOSE 80
ENTRYPOINT ["/usr/share/docker-laravel/bin/start.sh"]
这将定义一个应用程序容器。使用 RDS 创建数据库。将 .env 文件中的所有变量(包括 APP_KEY、DB_HOST 等)添加到 AWS 管理控制台 -> Elastic Beanstalk -> 您的环境 -> 配置 -> 软件配置。
故障排除
问题:Mac OS X:无法连接到 docker 守护进程
$ docker-compose up ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`. $
解决方案:使用 Kitematic -> 文件 -> 打开 Docker 命令行终端 打开终端。
问题:不喜欢 Docker 命令行终端
解决方案:运行 Kitematic -> 安装 Docker 命令。然后向 ~/.bash_profile 添加以下行
eval "$(docker-machine env dev)"
问题:对 .env 文件的更改似乎被 laravel 忽略
解决方案:重新启动集群。在 .env 文件中的设置仅在启动时读取。
$ docker-compose restart
问题:Mac OS X:非法指令 4
$ docker-compose up Illegal instruction: 4 $
解决方案:这是 Docker Toolbox 在较老 CPU 上的已知问题。使用 pip 安装 docker-compose
问题:无法连接到数据库
解决方案
- 检查DB_CONNECTION是否对应正确的laravel数据库驱动
- 检查DB_HOST是否对应docker-compose.yml中列出的服务名称(例如,上面的示例中的"database")
问题:RuntimeException: 未找到支持的加密器。加密算法和/或密钥长度无效。
解决方案
- 运行
php artisan key:generate更新.env中的APP_KEY,然后重新启动容器。
问题:想要使用mysql而不是postgres
解决方案
- 修改
docker-config.yml以引用MySQL
version: '3' services: laravel: image: reflexions/docker-laravel-fedora:26 env_file: .env links: - database database: image: mysql:5.6 env_file: .env environment: LC_ALL: C.UTF-8
docker-compose.override.yml
version: '3' services: laravel: ports: - "80:80" volumes: - .:/var/www/laravel database: ports: - "3306:3306"
- 修改
.env以引用MySQL
DB_CONNECTION=mysql
# database service
MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=
MYSQL_USER=
MYSQL_PASSWORD=
问题:想要使用本地机器上已经运行的mysql(非docker)
解决方案
- 修改
docker-config.yml以删除数据库引用 - 修改
.env通过docker-machine主机IP地址(192.168.99.1)连接到MySQL
DB_CONNECTION=mysql DB_HOST=192.168.99.1 DB_DATABASE= DB_USERNAME= DB_PASSWORD=
- 确保在启动时将"bind_address"配置参数设置为0.0.0.0。这可以通过
my.cnf设置,或者可以在启动脚本中硬编码。要检查值,请使用以下sql语句
show variables like 'bind_address';
- 确保数据库用户有权从docker容器(通常为192.168.99.100)连接
CREATE USER 'username'@'192.168.99.100' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON application.* TO 'username'@'192.168.99.100'; FLUSH PRIVILEGES;