ci: add Gitea Actions workflow and docker-compose.prod.yml for NAS deployment
This commit is contained in:
1 parent
228d382cbf
commit
9f230ffcc9
2 files changed
+122
No files matched your search
@@ -0,0 +1,70 @@
|
||||
name: Build & Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
pull_request:
|
||||
branches: [main, master]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: linux
|
||||
container: node:24-alpine
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
run: git clone --depth=1 http://x-access-token:${{ github.token }}@192.168.1.39:3000/${{ github.repository }}.git .
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run build
|
||||
run: node ace build
|
||||
|
||||
docker:
|
||||
needs: build
|
||||
runs-on: dind
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
run: git clone --depth=1 http://x-access-token:${{ github.token }}@192.168.1.39:3000/${{ github.repository }}.git .
|
||||
|
||||
- name: Login to Gitea Container Registry
|
||||
run: |
|
||||
echo "${{ secrets.GITEA_TOKEN }}" | docker login http://192.168.1.39:3000 -u "${{ secrets.GITEA_USERNAME }}" --password-stdin
|
||||
|
||||
- name: Build and push Docker image
|
||||
run: |
|
||||
IMAGE=192.168.1.39:3000/$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')
|
||||
docker build -t ${IMAGE}:latest -t ${IMAGE}:${{ github.sha }} .
|
||||
docker push ${IMAGE}:latest
|
||||
docker push ${IMAGE}:${{ github.sha }}
|
||||
|
||||
- name: Deploy on NAS
|
||||
run: |
|
||||
apk add --no-cache openssh-client sshpass
|
||||
|
||||
# Copier docker-compose.prod.yml sur le NAS
|
||||
cat docker-compose.prod.yml | sshpass -p "${{ secrets.NASPASS }}" ssh -o StrictHostKeyChecking=no Stude12@192.168.1.39 \
|
||||
"mkdir -p /volume1/docker/adam-acs && cat > /volume1/docker/adam-acs/docker-compose.prod.yml"
|
||||
|
||||
# Créer le fichier .env sur le NAS à partir des secrets
|
||||
sshpass -p "${{ secrets.NASPASS }}" ssh -o StrictHostKeyChecking=no Stude12@192.168.1.39 "cat > /volume1/docker/adam-acs/.env" <<EOF
|
||||
APP_KEY=${{ secrets.APP_KEY }}
|
||||
APP_URL=${{ secrets.APP_URL }}
|
||||
MONGO_USER=${{ secrets.MONGO_USER }}
|
||||
MONGO_PASSWORD=${{ secrets.MONGO_PASSWORD }}
|
||||
APP_PORT=${{ secrets.APP_PORT }}
|
||||
LOG_LEVEL=info
|
||||
HASH_KEY=${{ secrets.HASH_KEY }}
|
||||
WEBUI_USERNAME=${{ secrets.WEBUI_USERNAME }}
|
||||
WEBUI_PASSWORD=${{ secrets.WEBUI_PASSWORD }}
|
||||
API_KEY=${{ secrets.API_KEY }}
|
||||
EOF
|
||||
|
||||
# Déployer avec docker compose
|
||||
sshpass -p "${{ secrets.NASPASS }}" ssh -o StrictHostKeyChecking=no Stude12@192.168.1.39 "
|
||||
cd /volume1/docker/adam-acs &&
|
||||
echo '${{ secrets.NASPASS }}' | sudo -S /usr/bin/docker login http://192.168.1.39:3000 -u '${{ secrets.GITEA_USERNAME }}' -p '${{ secrets.GITEA_TOKEN }}' &&
|
||||
echo '${{ secrets.NASPASS }}' | sudo -S /usr/bin/docker compose -f docker-compose.prod.yml pull &&
|
||||
echo '${{ secrets.NASPASS }}' | sudo -S /usr/bin/docker compose -f docker-compose.prod.yml up -d --remove-orphans
|
||||
"
|
||||
@@ -0,0 +1,52 @@
|
||||
services:
|
||||
mongodb:
|
||||
image: mongo:7
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER:-adam}
|
||||
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
|
||||
MONGO_INITDB_DATABASE: adam-acs
|
||||
volumes:
|
||||
- mongo_data:/data/db
|
||||
healthcheck:
|
||||
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
app:
|
||||
image: 192.168.1.39:3000/stude12/adam-acs:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${APP_PORT:-8080}:8080"
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
PORT: 8080
|
||||
HOST: 0.0.0.0
|
||||
MONGODB_URI: mongodb://${MONGO_USER:-adam}:${MONGO_PASSWORD}@mongodb:27017/adam-acs?authSource=admin
|
||||
MONGODB_DB_NAME: adam-acs
|
||||
APP_KEY: ${APP_KEY}
|
||||
APP_URL: ${APP_URL:-http://localhost:8080}
|
||||
SESSION_DRIVER: cookie
|
||||
LOG_LEVEL: ${LOG_LEVEL:-info}
|
||||
HASH_KEY: ${HASH_KEY}
|
||||
WEBUI_USERNAME: ${WEBUI_USERNAME:-Admin}
|
||||
WEBUI_PASSWORD: ${WEBUI_PASSWORD}
|
||||
API_KEY: ${API_KEY}
|
||||
depends_on:
|
||||
mongodb:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- app_tr069_data:/app/data
|
||||
- app_tr069_logs:/app/logs/tr069
|
||||
healthcheck:
|
||||
test: ["CMD", "node", "-e", "fetch('http://localhost:8080/api/v1/checklife').then(r=>{process.exit(r.ok?0:1)}).catch(()=>process.exit(1))"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
|
||||
volumes:
|
||||
mongo_data:
|
||||
app_tr069_data:
|
||||
app_tr069_logs:
|
||||
Reference in new issue
Block a user