Files
webzine/.gitea/workflows/deploy.yml

68 lines
2.6 KiB
YAML

name: Deploy Webzine
run-name: Deploy to production by @${{ github.actor }}
on: [push]
jobs:
# ─────────────────────────────────────────────
# DÉPLOIEMENT — Build et démarrage sur le serveur
# ─────────────────────────────────────────────
deploy-production:
name: Deploy to Production
runs-on: ubuntu-latest
steps:
# Écriture de la clé SSH dans un fichier temporaire
- name: Setup SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.PROD_SSH_KEY }}" > ~/.ssh/id_prod
chmod 600 ~/.ssh/id_prod
ssh-keyscan -p ${{ secrets.PROD_SSH_PORT || 22 }} ${{ secrets.PROD_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
# Transfert du code source sur le serveur
- name: Checkout code
uses: actions/checkout@v4
- name: Upload source to server
run: |
rsync -az --delete \
-e "ssh -i ~/.ssh/id_prod -p ${{ secrets.PROD_SSH_PORT || 22 }} -o StrictHostKeyChecking=no" \
./ \
${{ secrets.PROD_USER }}@${{ secrets.PROD_HOST }}:/opt/webzine/prod/src/
# Build et redémarrage du conteneur directement sur le serveur
- name: Build and deploy on PRODUCTION server
run: |
ssh -i ~/.ssh/id_prod \
-p ${{ secrets.PROD_SSH_PORT || 22 }} \
-o StrictHostKeyChecking=no \
${{ secrets.PROD_USER }}@${{ secrets.PROD_HOST }} << 'ENDSSH'
set -e
echo "=== [PROD] Construction de l'image ==="
docker build \
-t webzine:latest \
-f /opt/webzine/prod/src/Webzine.WebApplication/Dockerfile \
/opt/webzine/prod/src/
echo "=== [PROD] Arrêt de l'ancien conteneur ==="
docker stop webzine-prod 2>/dev/null || true
docker rm webzine-prod 2>/dev/null || true
echo "=== [PROD] Démarrage du nouveau conteneur ==="
docker run -d \
--name webzine-prod \
--restart unless-stopped \
-p 80:8080 \
-p 443:8081 \
-v /opt/webzine/prod/data:/app/Data \
-v /opt/webzine/prod/logs:/Logs \
-e ASPNETCORE_ENVIRONMENT=Production \
webzine:latest
echo "=== [PROD] Nettoyage des anciennes images ==="
docker image prune -f
echo "=== [PROD] Déploiement terminé ==="
ENDSSH