如何在不上传.env文件时用Github Actions部署Laravel到AWS Elastic Beanstalk
解决Github Actions中Laravel测试的数据库连接问题(无需上传.env)
1. 配置Github仓库密钥
进入你的Github仓库「Settings」→「Secrets and variables」→「Actions」,添加以下必要密钥:
APP_KEY: 本地执行php artisan key:generate --show即可获取,这是Laravel加密功能的必要项。- 若需使用MySQL等外部数据库(CI测试更推荐用SQLite,轻量高效),额外添加
DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD。
2. 修改Github Actions工作流文件
打开.github/workflows下的工作流yaml文件,调整测试环节的配置:
方案一:使用SQLite内存数据库(推荐)
该方案无需额外启动数据库服务,测试数据仅存于内存,测试结束自动销毁:
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, pdo_sqlite, sqlite3 coverage: none - name: Install dependencies run: composer install --no-interaction --prefer-dist - name: Prepare base environment run: cp .env.example .env - name: Generate app key run: php artisan key:generate env: APP_KEY: ${{ secrets.APP_KEY }} - name: Run database migrations run: php artisan migrate --force env: DB_CONNECTION: sqlite DB_DATABASE: ':memory:' - name: Execute tests run: php artisan test env: DB_CONNECTION: sqlite DB_DATABASE: ':memory:'
说明:
- 复制
.env.example作为基础配置模板,避免手动创建.env文件。 - 通过
env字段注入SQLite配置,迁移命令会直接在内存中创建users等所需表。
方案二:使用临时MySQL容器(适配生产环境模拟测试)
如果测试需贴合生产环境的MySQL配置,可在工作流中启动临时MySQL服务:
jobs: test: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 env: MYSQL_ROOT_PASSWORD: ${{ secrets.DB_PASSWORD }} MYSQL_DATABASE: ${{ secrets.DB_DATABASE }} ports: - 3306:3306 options: >- --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, pdo_mysql coverage: none - name: Install dependencies run: composer install --no-interaction --prefer-dist - name: Prepare environment run: cp .env.example .env env: APP_KEY: ${{ secrets.APP_KEY }} DB_HOST: 127.0.0.1 DB_PORT: 3306 DB_DATABASE: ${{ secrets.DB_DATABASE }} DB_USERNAME: root DB_PASSWORD: ${{ secrets.DB_PASSWORD }} - name: Run database migrations run: php artisan migrate --force - name: Execute tests run: php artisan test
说明:
- 通过
services字段启动MySQL容器,预先配置好数据库密码和名称。 - 注入数据库相关环境变量后,Laravel可连接到临时服务,迁移命令会创建所需的
users表。
3. 额外注意事项
- 确保
.env.example文件包含APP_KEY、DB_CONNECTION等基础配置项,方便注入环境变量覆盖。 - 若测试依赖其他环境变量(如邮件、缓存配置),需同步在Github Secrets中添加并注入到工作流。
- 迁移命令添加
--force参数,避免CI环境中出现交互式确认提示。
内容的提问来源于stack exchange,提问作者Dirty Rex
相关产品推荐
相关产品推荐

