Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Compose&;部署Docker容器;Github操作_Docker_Github_Docker Compose_Digital Ocean_Github Actions - Fatal编程技术网

使用Compose&;部署Docker容器;Github操作

使用Compose&;部署Docker容器;Github操作,docker,github,docker-compose,digital-ocean,github-actions,Docker,Github,Docker Compose,Digital Ocean,Github Actions,我正在使用GitHub操作触发我的dockerfile的构建,它将容器上载到GitHub容器注册表。在最后一步中,我将通过SSH连接到我的remoteDigitalOcean Droplet,并执行脚本从GHCR中拉出和安装新映像。这个工作流对我来说很好,因为我在项目中只构建了一个单个容器现在我正在使用docker compose,因为除了API之外,我还需要NGINX。我想将容器保存在单个dropplet上,因为该项目目前不需要资源 使用Github操作和Docker Compose在单个VM

我正在使用GitHub操作触发我的dockerfile构建,它将容器上载到GitHub容器注册表。在最后一步中,我将通过SSH连接到我的remoteDigitalOcean Droplet,并执行脚本从GHCR中拉出安装新映像。这个工作流对我来说很好,因为我在项目中只构建了一个单个容器现在我正在使用docker compose,因为除了API之外,我还需要NGINX。我想容器保存在单个dropplet上,因为该项目目前不需要资源

使用Github操作和Docker Compose在单个VM上自动部署到DigitalOcean的正确方法是什么

我目前已知的选项有:

  • 跳过在GHCR上构建容器,并通过ssh获取repo,通过执行生产组合文件从源代码远程开始构建
  • 在GHCR上构建每个容器,在remote上复制生产组合文件,以便从GHCR中拉取和安装
如果您知道更多选项,可能更干净或更高效,请告诉我

不幸的是,我找到了一个参考

GitHub针对单个容器的操作

name: Github Container Registry to DigitalOcean Droplet

on:
  # Trigger the workflow via push on main branch
  push:
    branches:
      - main
    # use only trigger action if the backend folder changed
    paths:
      - "backend/**"
      - ".github/workflows/**"

jobs:
  # Builds a Docker Image and pushes it to Github Container Registry
  push_to_github_container_registry:
    name: Push to GHCR
    runs-on: ubuntu-latest

    # use the backend folder as the default working directory for the job
    defaults:
      run:
        working-directory: ./backend

    steps:
      # Checkout the Repository
      - name: Checking out the repository
        uses: actions/checkout@v2

      # Setting up Docker Builder
      - name: Set up Docker Builder
        uses: docker/setup-buildx-action@v1

      # Set Github Access Token with "write:packages & read:packages" scope for Github Container Registry.
      # Then go to repository setings and add the copied token as a secret called "CR_PAT"
      # https://github.com/settings/tokens/new?scopes=repo,write:packages&description=Github+Container+Registry
      # ! While GHCR is in Beta make sure to enable the feature
      - name: Logging into GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }}

      # Push to Github Container Registry
      - name: Pushing Image to Github Container Registry
        uses: docker/build-push-action@v2
        with:
          context: ./backend
          version: latest
          file: backend/dockerfile
          push: true
          tags: ghcr.io/${{ github.repository }}:latest

  # Connect to existing Droplet via SSH and (re)installs add. runs the image
  # ! Ensure you have installed the preconfigured Droplet with Docker
  # ! Ensure you have added SSH Key to the Droplet
  # !   - its easier to add the SSH Keys bevore createing the droplet
  deploy_to_digital_ocean_dropplet:
    name: Deploy to Digital Ocean Droplet
    runs-on: ubuntu-latest
    needs: push_to_github_container_registry

    steps:
      - name: Deploy to Digital Ocean droplet via SSH action
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.PRIVATE_KEY }}
          port: ${{ secrets.PORT }}
          script: |
            # Stop all running Docker Containers
            docker kill $(docker ps -q)

            # Free up space
            docker system prune -a

            # Login to Github Container Registry
            docker login https://ghcr.io -u ${{ github.repository_owner }} -p ${{ secrets.CR_PAT }}

            # Pull the Docker Image 
            docker pull ghcr.io/${{ github.repository }}:latest

            # Run a new container from a new image
            docker run -d -p 80:8080 -p 443:443 -t ghcr.io/${{ github.repository }}:latest

当前Docker撰写

version: "3"

services:
  api:
    build:
      context: ./backend/api
    networks:
      api-network:
        aliases:
          - api-net
  nginx:
    build:
      context: ./backend/nginx
    ports:
      - "80:80"
      - "443:443"
    networks:
      api-network:
        aliases:
          - nginx-net
    depends_on:
      - api

networks:
  api-network: