This commit is contained in:
2026-03-17 18:16:06 +01:00
parent bbd930d487
commit 38d85342f7
6 changed files with 114 additions and 72 deletions

View File

@@ -5,20 +5,15 @@ on:
branches: [master]
jobs:
frontend:
build:
runs-on: docker
container:
image: node:20
defaults:
run:
working-directory: ./aranroig
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install SSH client
run: |
apt-get update && apt-get install -y openssh-client
@@ -32,78 +27,33 @@ jobs:
# Add the container host to known_hosts
ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
- name: Install deps
run: npm i
- name: Build
run: npm run build
- name: Compress build
run: tar -czf build.tar.gz .output
- name: Deploy frontend to server
- name: Log in to registry
run: |
scp build.tar.gz deploy@${{ secrets.DEPLOY_HOST }}:/tmp/
ssh deploy@${{ secrets.DEPLOY_HOST }} << 'EOF'
rm -rf /var/www/app/.output
tar -xzf /tmp/build.tar.gz -C /var/www/app
EOF
echo "${{ secrets.REGISTRY_PASSWORD }}" | \
docker login git.aranroig.com \
-u ${{ secrets.REGISTRY_USER }} \
--password-stdin
backend:
runs-on: docker
container:
image: node:20
defaults:
run:
working-directory: ./
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install SSH client
- name: Build frontend
run: |
apt-get update && apt-get install -y openssh-client
docker build -t git.aranroig.com/${{ secrets.REGISTRY_USER }}/aranroig-frontend:latest ./frontend
docker push gitea.example.com/${{ secrets.REGISTRY_USER }}/aranroig-frontend:latest
- name: Setup SSH inside container
- name: Build backend
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
docker build -t git.aranroig.com/${{ secrets.REGISTRY_USER }}/aranroig-backend:latest ./backend
docker push git.aranroig.com/${{ secrets.REGISTRY_USER }}/aranroig-backend:latest
# Add the container host to known_hosts
ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
- name: Copy files
run: |
scp docker-compose.yml deploy@${{ secrets.DEPLOY_HOST}}:/var/www/app/
scp nginx/ deploy@${{ secrets.DEPLOY_HOST }}:/var/www/app/
- name: Compress backend
run: tar -czf backend.tar.gz backend
- name: Send backend to server
run: scp backend.tar.gz deploy@${{ secrets.DEPLOY_HOST }}:/tmp/
- name: Unpack backend
- name: Deploy
run: |
ssh deploy@${{ secrets.DEPLOY_HOST }} << 'EOF'
rm -rf /var/www/app/backend
tar -xzf /tmp/backend.tar.gz -C /var/www/app
EOF
- name: Install dependencies on server
run: |
ssh deploy@${{ secrets.DEPLOY_HOST }} << 'EOF'
cd /var/www/app/backend/ && npm i
EOF
deploy:
runs-on: docker
container:
image: node:20
needs: [frontend, backend]
steps:
- name: Copy ecosystem file
run: scp ecosystem.config.js deploy@${{ secrets.DEPLOY_HOST }}:/var/www/app/
- name: Restart server
run: |
ssh deploy@${{ secrets.DEPLOY_HOST }} << 'EOF'
sudo systemctl restart app
cd /var/www/app/
docker compose pull
docker compose up -d
EOF

7
aranroig/.dockerignore Normal file
View File

@@ -0,0 +1,7 @@
node_modules
.git
.gitignore
Dockerfile
.dockerignore
npm-debug.log
.env

31
aranroig/Dockerfile Normal file
View File

@@ -0,0 +1,31 @@
# ---------- Build Stage ----------
FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy project files
COPY . .
# Build the Nuxt app
RUN npm run build
# ---------- Production Stage ----------
FROM node:20-alpine
WORKDIR /app
# Copy built output
COPY --from=builder /app/.output ./.output
# Expose Nuxt port
EXPOSE 3000
# Start Nuxt production server
CMD ["node", ".output/server/index.mjs"]

23
backend/Dockerfile Normal file
View File

@@ -0,0 +1,23 @@
# Use official Node.js runtime
FROM node:20-alpine
# Create app directory
WORKDIR /usr/src/app
# Copy package files first (better caching)
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy application source
COPY . .
# Expose the app port
# EXPOSE 3000
# Environment variable
ENV NODE_ENV=production
# Start the application
CMD ["node", "src/index.js"]

13
docker-compose.yml Normal file
View File

@@ -0,0 +1,13 @@
version: "3.9"
services:
nginx:
image: nginx:latest
ports:
- "3000:80"
frontend:
image: git.aranroig.com/Syndria98/aranroig-frontend:latest
backend:
image: git.aranroig.com/Syndria98/aranroig-backend:latest

18
nginx/nginx.conf Normal file
View File

@@ -0,0 +1,18 @@
events {}
http {
server {
listen 80;
server_name _;
location / {
proxy_pass http://frontend:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}