From 23f477ea493ceacc61186008a417f5975de1c9b7 Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sat, 14 Feb 2026 21:57:53 +0200 Subject: [PATCH 1/7] Setup GitHub Actions pipeline for automatic EC2 deployment --- .github/workflows/deploy.yml | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..09de4f30 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,42 @@ +name: Deploy to EC2 + +on: + push: + branches: + - deployment + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Copy SSH key + run: | + mkdir -p ~/.ssh + echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + + - name: Add EC2 to known hosts + run: | + ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy Backend + run: | + ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " + cd ~/business-management/backend && + git pull origin deployment && + npm install && + pm2 restart node-service + " + + - name: Build and Deploy Frontend + run: | + npm --prefix frontend install + npm --prefix frontend run build + scp -i ~/.ssh/id_rsa -r frontend/.next frontend/public frontend/package.json ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/var/www/html/ From b6914e66578a454fe41a10aab21020ed223fb634 Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sat, 14 Feb 2026 22:01:07 +0200 Subject: [PATCH 2/7] Clean deploy.yml: removed ssh-keyscan, fixed SSH key handling --- .github/workflows/deploy.yml | 69 ++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 09de4f30..0918d75a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -10,33 +10,42 @@ jobs: runs-on: ubuntu-latest steps: - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: Copy SSH key - run: | - mkdir -p ~/.ssh - echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - - - name: Add EC2 to known hosts - run: | - ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts - - - name: Deploy Backend - run: | - ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " - cd ~/business-management/backend && - git pull origin deployment && - npm install && - pm2 restart node-service - " - - - name: Build and Deploy Frontend - run: | - npm --prefix frontend install - npm --prefix frontend run build - scp -i ~/.ssh/id_rsa -r frontend/.next frontend/public frontend/package.json ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/var/www/html/ + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + + - name: Copy SSH key + run: | + mkdir -p ~/.ssh + cat << 'EOF' > ~/.ssh/id_rsa + ${{ secrets.EC2_SSH_KEY }} + EOF + chmod 600 ~/.ssh/id_rsa + + - name: Add EC2 to known_hosts + run: | + mkdir -p ~/.ssh + ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy Backend + run: | + ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " + cd ~/business-management/backend && + git pull origin deployment && + npm install && + pm2 restart node-service + " + + - name: Build Frontend + run: | + npm --prefix frontend install + npm --prefix frontend run build + + - name: Deploy Frontend + run: | + ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " + rm -rf /var/www/html/* + " + scp -i ~/.ssh/id_rsa -r frontend/.next frontend/public frontend/package.json ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/var/www/html/ From 5493ff6969d3bda1e52fe476aadf4d6a7fe79f16 Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sat, 14 Feb 2026 22:24:45 +0200 Subject: [PATCH 3/7] Add SSH connection test before deploy --- .github/workflows/deploy.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0918d75a..a60f6961 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -22,13 +22,17 @@ jobs: cat << 'EOF' > ~/.ssh/id_rsa ${{ secrets.EC2_SSH_KEY }} EOF - chmod 600 ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa - name: Add EC2 to known_hosts run: | mkdir -p ~/.ssh ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts + - name: Test EC2 SSH connection + run: | + ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "echo Connection successful" + - name: Deploy Backend run: | ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " From d69d61e1cdb42de9f6a9bf59246a9f40f6707c9e Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sun, 15 Feb 2026 13:37:28 +0200 Subject: [PATCH 4/7] fix: correct SSH key setup and add missing checkout step in CI/CD workflow --- .github/workflows/deploy.yml | 56 ++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a60f6961..6d44a77b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -10,46 +10,52 @@ jobs: runs-on: ubuntu-latest steps: + - name: Checkout code + uses: actions/checkout@v3 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: Copy SSH key + - name: Setup SSH key run: | mkdir -p ~/.ssh - cat << 'EOF' > ~/.ssh/id_rsa - ${{ secrets.EC2_SSH_KEY }} - EOF + echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa - - - name: Add EC2 to known_hosts - run: | - mkdir -p ~/.ssh ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts - - name: Test EC2 SSH connection + - name: Debug SSH Setup + run: | + echo "=== SSH Key Info ===" + ls -la ~/.ssh/ + echo "=== First line of key ===" + head -n 1 ~/.ssh/id_rsa + echo "=== Last line of key ===" + tail -n 1 ~/.ssh/id_rsa + echo "=== Line count ===" + wc -l ~/.ssh/id_rsa + echo "=== Key permissions ===" + stat -c "%a %n" ~/.ssh/id_rsa + echo "=== Trying to extract key type ===" + ssh-keygen -l -f ~/.ssh/id_rsa || echo "Key format issue!" + + - name: Test SSH connection run: | - ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "echo Connection successful" + ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "echo 'Connection successful'" - name: Deploy Backend run: | - ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " + ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " cd ~/business-management/backend && git pull origin deployment && npm install && pm2 restart node-service " - - name: Build Frontend - run: | - npm --prefix frontend install - npm --prefix frontend run build - - name: Deploy Frontend run: | - ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " - rm -rf /var/www/html/* - " - scp -i ~/.ssh/id_rsa -r frontend/.next frontend/public frontend/package.json ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:/var/www/html/ + ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " + cd ~/business-management/frontend && + git pull origin deployment && + npm install && + npm run build && + sudo rm -rf /var/www/html/* && + sudo cp -r .next public package.json /var/www/html/ && + sudo chown -R www-data:www-data /var/www/html + " \ No newline at end of file From b9e9fc75c218ddf1e9a658c296d53b17086374db Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sun, 15 Feb 2026 14:02:03 +0200 Subject: [PATCH 5/7] fix: resolve SSH authentication and divergent branches in deployment pipeline --- .github/workflows/deploy.yml | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 6d44a77b..e3cb8fc2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -20,21 +20,6 @@ jobs: chmod 600 ~/.ssh/id_rsa ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts - - name: Debug SSH Setup - run: | - echo "=== SSH Key Info ===" - ls -la ~/.ssh/ - echo "=== First line of key ===" - head -n 1 ~/.ssh/id_rsa - echo "=== Last line of key ===" - tail -n 1 ~/.ssh/id_rsa - echo "=== Line count ===" - wc -l ~/.ssh/id_rsa - echo "=== Key permissions ===" - stat -c "%a %n" ~/.ssh/id_rsa - echo "=== Trying to extract key type ===" - ssh-keygen -l -f ~/.ssh/id_rsa || echo "Key format issue!" - - name: Test SSH connection run: | ssh -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "echo 'Connection successful'" @@ -43,7 +28,8 @@ jobs: run: | ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " cd ~/business-management/backend && - git pull origin deployment && + git fetch origin deployment && + git reset --hard origin/deployment && npm install && pm2 restart node-service " @@ -52,7 +38,8 @@ jobs: run: | ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " cd ~/business-management/frontend && - git pull origin deployment && + git fetch origin deployment && + git reset --hard origin/deployment && npm install && npm run build && sudo rm -rf /var/www/html/* && From 4e9c822d3d5ff74040dbdaac2ad26bb97907547f Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sun, 15 Feb 2026 14:12:49 +0200 Subject: [PATCH 6/7] fix: replace pm2 with systemctl for backend service restart in deployment --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e3cb8fc2..a7e6733c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -31,7 +31,7 @@ jobs: git fetch origin deployment && git reset --hard origin/deployment && npm install && - pm2 restart node-service + sudo systemctl restart node-service " - name: Deploy Frontend From b01e15db4dda11b976cfdf88f2302e0bc2bb4887 Mon Sep 17 00:00:00 2001 From: tdevelope Date: Sun, 15 Feb 2026 14:14:54 +0200 Subject: [PATCH 7/7] fix: load nvm environment to use correct Node.js version for frontend build --- .github/workflows/deploy.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a7e6733c..9d171d8e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -37,6 +37,8 @@ jobs: - name: Deploy Frontend run: | ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} " + export NVM_DIR=\"\$HOME/.nvm\" && + [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" && cd ~/business-management/frontend && git fetch origin deployment && git reset --hard origin/deployment &&