From a35e99f8ff20e5a2ee12452b8176f05467d1d44f Mon Sep 17 00:00:00 2001 From: Jugger Date: Thu, 29 Sep 2022 21:54:58 -0500 Subject: [PATCH] ci: deploy using pm2 * ci: pm2 configuration file * ci: github action deploy preview * ci: github action deploy production * ci: env variables now pass to pm2 --- .github/workflows/deploy-preview.yml | 42 +++++++++++++++++++++++++ .github/workflows/deploy-production.yml | 42 +++++++++++++++++++++++++ ecosystem.config.js | 41 ++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 .github/workflows/deploy-preview.yml create mode 100644 .github/workflows/deploy-production.yml create mode 100644 ecosystem.config.js diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml new file mode 100644 index 0000000..585c090 --- /dev/null +++ b/.github/workflows/deploy-preview.yml @@ -0,0 +1,42 @@ +name: CI deploy preview +on: + push: + branches: ["preview"] + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - name: Setup Host SSH + run: | + mkdir -p ~/.ssh + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts + chmod 600 ~/.ssh/known_hosts + shell: bash + env: + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }} + - name: Install pm2 + run: npm install pm2 --location=global + shell: bash + - name: Deploy using pm2 + run: pm2 deploy ecosystem.config.js preview + env: + # Deploy environment variables + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + SSH_USERNAME: ${{ secrets.SSH_USERNAME }} + SSH_HOST: ${{ secrets.SSH_HOST }} + DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} + # App environment variables + APP_NAME: ${{ secrets.APP_NAME }} + SITE_NAME: ${{ secrets.SITE_NAME }} + PORT: ${{ secrets.PORT }} + DISCORD_JOIN_WEBHOOK_URL: ${{ secrets.DISCORD_JOIN_WEBHOOK_URL }} + shell: bash diff --git a/.github/workflows/deploy-production.yml b/.github/workflows/deploy-production.yml new file mode 100644 index 0000000..e2afcdf --- /dev/null +++ b/.github/workflows/deploy-production.yml @@ -0,0 +1,42 @@ +name: CI deploy production +on: + push: + branches: ["production"] + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - name: Setup Host SSH + run: | + mkdir -p ~/.ssh + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts + chmod 600 ~/.ssh/known_hosts + shell: bash + env: + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }} + - name: Install pm2 + run: npm install pm2 --location=global + shell: bash + - name: Deploy using pm2 + run: pm2 deploy ecosystem.config.js production + env: + # Deploy environment variables + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + SSH_USERNAME: ${{ secrets.SSH_USERNAME }} + SSH_HOST: ${{ secrets.SSH_HOST }} + DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} + # App environment variables + APP_NAME: ${{ secrets.APP_NAME }} + SITE_NAME: ${{ secrets.SITE_NAME }} + PORT: ${{ secrets.PORT }} + DISCORD_JOIN_WEBHOOK_URL: ${{ secrets.DISCORD_JOIN_WEBHOOK_URL }} + shell: bash diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..26cd93e --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,41 @@ +module.exports = { + apps: [ + { + name: process.env.APP_NAME, + script: 'npm', + args: 'start', + env: { + NODE_ENV: 'production', + PORT: process.env.PORT || 3000 + } + } + ], + + deploy: { + production: { + user: process.env.SSH_USERNAME, + host: process.env.DEPLOY_HOST, + ref: 'origin/main', + repo: 'https://github.com/SrJuggernaut/entgamers_pro', + path: process.env.DEPLOY_PATH, + 'pre-deploy': 'npm install && npm run build', + 'post-deploy': 'pm2 startOrRestart ecosystem.config.js', + env: { + ...process.env + } + + }, + preview: { + user: process.env.SSH_USERNAME, + host: process.env.DEPLOY_HOST, + ref: 'origin/preview', + repo: 'https://github.com/SrJuggernaut/entgamers_pro', + path: process.env.DEPLOY_PATH, + 'pre-deploy': 'npm install && npm run build', + 'post-deploy': 'pm2 startOrRestart ecosystem.config.js', + env: { + ...process.env + } + } + } +}