From dd22f0bb1fe0468aa02ec49a3ceaca01b1398e25 Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Sat, 16 May 2026 00:41:23 +0700 Subject: [PATCH] feat: add Docker configuration files for deployment and containerization --- .dockerignore | 6 +++ .github/workflows/deploy.yml | 94 ++++++++++++++++++++++++++++++++++++ Dockerfile | 14 ++++++ docker-compose.yml | 12 +++++ 4 files changed, 126 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/deploy.yml create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bf3922c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +.git +.github +.env +data +*.log diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..3b004e2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,94 @@ +name: Deploy + +on: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: read + packages: write + +concurrency: + group: deploy-production + cancel-in-progress: true + +env: + IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/booster-role + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set lowercase image name + run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> "$GITHUB_ENV" + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push image + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: | + ${{ env.IMAGE_NAME }}:latest + ${{ env.IMAGE_NAME }}:${{ github.sha }} + + - name: Deploy on VPS + uses: appleboy/ssh-action@v1.2.0 + env: + IMAGE_NAME: ${{ env.IMAGE_NAME }} + GHCR_USERNAME: ${{ github.actor }} + GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} + DISCORD_CLIENT_ID: ${{ secrets.DISCORD_CLIENT_ID }} + DISCORD_GUILD_ID: ${{ secrets.DISCORD_GUILD_ID }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + BOOSTER_ROLE_ANCHOR_ROLE_ID: ${{ secrets.BOOSTER_ROLE_ANCHOR_ROLE_ID }} + with: + host: ${{ secrets.VPS_HOST }} + username: ${{ secrets.VPS_USER }} + key: ${{ secrets.VPS_SSH_KEY }} + envs: IMAGE_NAME,GHCR_USERNAME,GHCR_TOKEN,DISCORD_TOKEN,DISCORD_CLIENT_ID,DISCORD_GUILD_ID,DATABASE_URL,BOOSTER_ROLE_ANCHOR_ROLE_ID + script: | + set -eu + mkdir -p /opt/booster-role + cd /opt/booster-role + + cat > .env < docker-compose.yml <