Github Actions:如何处理 Github Secret 并在 Docker 容器中使用它们

问题描述 投票:0回答:1

我对如何在 CI/CD 工作流程中安全地处理机密和变量有点困惑。

设置: 我将我的 Express 应用程序部署到我的 VPS,在 Docker 容器中运行它,并且我需要该容器中可用的变量。

目前我正在将它们写入 .env 文件并将该文件设置为 docker-compose.yml 中的 env_file,但这可能不是一种非常安全的方法,因为这样服务器上就会有一个 .env 文件纯文本秘密...有更好的方法(最佳实践)吗?

.env 文件也不会像这样创建。我必须在服务器上手动创建它,如果文件不存在,

echo
不会创建该文件吗?

  - name: Execute remote deployment script
    uses: appleboy/[email protected]
    with:
      HOST: ${{ secrets.HOST }}
      USERNAME: ${{ secrets.USERNAME }}
      PORT: ${{ secrets.PORT }}
      KEY: ${{ secrets.SSH_KEY }}
      script: |

        # Change directory to the app folder
        cd /usr/src/app/

        # install dependencies
        npm ci --omit=dev

        # Stop and remove running containers
        docker-compose -f docker-compose.prod.yml down

        # Set environment variables stored in Github secrets
        echo "VITE_API_URL=${{ secrets.VITE_API_URL }}" > .env
        echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
        echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
        echo "REFRESH_SECRET_KEY=${{ secrets.REFRESH_SECRET_KEY }}" >> .env

        # start container and detach
        docker-compose -f docker-compose.prod.yml up -d
docker docker-compose continuous-integration github-actions github-secret
1个回答
0
投票

Docker 的 secret mounts 是在 GitHub Action Workflows 中保证机密安全的推荐方法:

# workflow.yaml (truncated)

- name: Build Docker container
  uses: docker/build-push-action@v6
  with:
    context: .
    tags: docker_username/docker_repo_name:version_tag
    secrets: |
      "SECRET_KEY=${{ secrets.SECRET_KEY }}"  

使用 Docker Compose,您可以使用 环境变量设置秘密,如下所示:

# compose.yaml

services:
  app:
    build:
      context: .
    image: docker_username/docker_repo_name:version_tag
    environment:
      SECRET_KEY_FILE: /run/secrets/secret_key 
    secrets:
      - secret_key
secrets:
  secret_key:
    environment: "SECRET_KEY"

并在工作流程中设置环境变量,如下所示:

# workflow.yaml (truncated)

- name: Build Docker Compose service images
  env:
    SECRET_KEY=${{ secrets.SECRET_KEY }}
  run: docker compose build
© www.soinside.com 2019 - 2024. All rights reserved.