Skip to content

Commit 453a1b4

Browse files
feat: vps deployments
1 parent 0d8bedf commit 453a1b4

2 files changed

Lines changed: 83 additions & 1 deletion

File tree

.github/workflows/ci.yml

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,86 @@ jobs:
7070
The subject "{subject}" doesn't match the expected format.
7171
Please use a descriptive subject line.
7272
73+
deploy:
74+
name: Deploy to VPS
75+
runs-on: ubuntu-latest
76+
needs: lint-and-build
77+
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
78+
79+
steps:
80+
- name: Checkout
81+
uses: actions/checkout@v4
82+
83+
- name: Setup Node.js
84+
uses: actions/setup-node@v4
85+
with:
86+
node-version: 20.x
87+
cache: 'npm'
88+
89+
- name: Install dependencies
90+
run: npm ci
91+
92+
- name: Build application
93+
run: npm run build
94+
env:
95+
MONGODB_URI: ${{ secrets.MONGODB_URI }}
96+
JWT_SECRET: ${{ secrets.JWT_SECRET }}
97+
ADMIN_ACCESS_CODE: ${{ secrets.ADMIN_ACCESS_CODE }}
98+
MENTOR_ACCESS_CODE: ${{ secrets.MENTOR_ACCESS_CODE }}
99+
AMBASSADOR_ACCESS_CODE: ${{ secrets.AMBASSADOR_ACCESS_CODE }}
100+
NEXT_PUBLIC_GA_ID: ${{ secrets.NEXT_PUBLIC_GA_ID }}
101+
NEXT_PUBLIC_BASE_URL: https://devweekends.com
102+
103+
- name: Setup SSH key
104+
run: |
105+
mkdir -p ~/.ssh
106+
echo "${{ secrets.VPS_SSH_KEY }}" > ~/.ssh/deploy_key
107+
chmod 600 ~/.ssh/deploy_key
108+
ssh-keyscan -H ${{ secrets.VPS_HOST }} >> ~/.ssh/known_hosts
109+
110+
- name: Deploy to VPS
111+
run: |
112+
# Rsync the standalone build, static files, and public assets
113+
rsync -azP --delete \
114+
-e "ssh -i ~/.ssh/deploy_key" \
115+
.next/standalone/ \
116+
${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/home/${{ secrets.VPS_USERNAME }}/web-platform/
117+
118+
rsync -azP --delete \
119+
-e "ssh -i ~/.ssh/deploy_key" \
120+
.next/static/ \
121+
${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/home/${{ secrets.VPS_USERNAME }}/web-platform/.next/static/
122+
123+
rsync -azP --delete \
124+
-e "ssh -i ~/.ssh/deploy_key" \
125+
public/ \
126+
${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/home/${{ secrets.VPS_USERNAME }}/web-platform/public/
127+
128+
- name: Restart application
129+
uses: appleboy/ssh-action@v1
130+
with:
131+
host: ${{ secrets.VPS_HOST }}
132+
username: ${{ secrets.VPS_USERNAME }}
133+
key: ${{ secrets.VPS_SSH_KEY }}
134+
script: |
135+
cd /home/${{ secrets.VPS_USERNAME }}/web-platform
136+
# Create .env file with runtime secrets
137+
cat > .env << 'ENVEOF'
138+
NODE_ENV=production
139+
PORT=3000
140+
HOSTNAME=0.0.0.0
141+
MONGODB_URI=${{ secrets.MONGODB_URI }}
142+
JWT_SECRET=${{ secrets.JWT_SECRET }}
143+
ADMIN_ACCESS_CODE=${{ secrets.ADMIN_ACCESS_CODE }}
144+
MENTOR_ACCESS_CODE=${{ secrets.MENTOR_ACCESS_CODE }}
145+
AMBASSADOR_ACCESS_CODE=${{ secrets.AMBASSADOR_ACCESS_CODE }}
146+
CLOUDINARY_CLOUD_NAME=${{ secrets.CLOUDINARY_CLOUD_NAME }}
147+
CLOUDINARY_API_KEY=${{ secrets.CLOUDINARY_API_KEY }}
148+
CLOUDINARY_API_SECRET=${{ secrets.CLOUDINARY_API_SECRET }}
149+
NEXT_PUBLIC_GA_ID=${{ secrets.NEXT_PUBLIC_GA_ID }}
150+
NEXT_PUBLIC_BASE_URL=https://devweekends.com
151+
ENVEOF
152+
# Restart the app with PM2
153+
pm2 restart web-platform --update-env || pm2 start server.js --name web-platform
154+
pm2 save
73155

next.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { NextConfig } from "next";
22

33
const nextConfig: NextConfig = {
4-
4+
output: "standalone",
55
images: {
66
domains: ['hebbkx1anhila5yf.public.blob.vercel-storage.com','res.cloudinary.com','randomuser.me'],
77
},

0 commit comments

Comments
 (0)