Deploy test(SECRETS) #28
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Node.js CD | |
# Controls when the action will run. | |
on: | |
push: | |
branches: [ main ] | |
# A workflow run is made up of one or more jobs that can run sequentially o en paralelo | |
jobs: | |
build: | |
# El tipo de runner que el trabajo usará | |
runs-on: ubuntu-latest | |
# Variables de entorno | |
env: | |
SSH_HOST: ${{ secrets.VPS_SSH_HOST }} | |
SSH_USERNAME: ${{ secrets.VPS_SSH_USERNAME }} | |
SSH_PASSWORD: ${{ secrets.VPS_SSH_PASSWORD }} | |
# Los pasos representan una secuencia de tareas que se ejecutarán como parte del trabajo | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Set up Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: '22' # O la versión que uses | |
- name: Install dependencies for frontend | |
run: | | |
npm run install:frontend | |
- name: Build frontend | |
run: | | |
npm run build:frontend | |
- name: Install dependencies for backend | |
run: | | |
npm run install:backend | |
- name: Install sshpass | |
run: sudo apt-get install -y sshpass | |
- name: Deploy using sshpass | |
run: | | |
# Create directories on the VPS | |
sshpass -p "${SSH_PASSWORD}" ssh "${SSH_USERNAME}@${SSH_HOST}" 'mkdir -p /var/www/html/virtual-dojo/frontend /var/www/html/virtual-dojo/backend' | |
# Copy frontend build to the VPS | |
rsync -avz --delete -e "sshpass -p ${SSH_PASSWORD} ssh -o StrictHostKeyChecking=no" ./frontend/dist/ "${SSH_USERNAME}@${SSH_HOST}:/var/www/html/virtual-dojo/frontend" | |
# Copy backend to the VPS | |
rsync -avz --delete -e "sshpass -p ${SSH_PASSWORD} ssh -o StrictHostKeyChecking=no" ./backend/ "${SSH_USERNAME}@${SSH_HOST}:/var/www/html/virtual-dojo/backend" | |
# Connect to the VPS and restart the backend | |
sshpass -p "${SSH_PASSWORD}" ssh "${SSH_USERNAME}@${SSH_HOST}" << 'EOF' | |
cd /var/www/html/virtual-dojo/backend | |
npm install pm2 -g | |
npm install --only=prod | |
pm2 restart all || pm2 start server.js --name virtual-dojo | |
exit | |
EOF |