SendSecret: Erstimport und Umstellung auf Tag-Deployment
Wrapper-Frontend vor cryptgeon: der Browser verschluesselt lokal, per Mail geht nur der Link raus. Fuer das Deployment nach den Konventionen aus DEPLOY.md hergerichtet: - docker-compose.yml mit festem Projekt- und Container-Namen, kein ports-Mapping, Healthcheck als Deploy-Gate. cryptgeon und redis liegen im internen Netz, nur app haengt im Web-Netz. - cryptgeon von latest auf 2.9.3 gepinnt. Das ist derselbe Stand, den latest bisher geliefert hat; 2.6.2 existiert nicht. - /healthz in server.js, vor dem Catch-all-Proxy registriert. - Dockerfile auf npm ci mit Lockfile und non-root umgestellt. - .gitea/workflows/deploy.yml: Build und Syntaxpruefung vor dem Deploy, .env aus dem Repo-Secret DOTENV. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
61
.gitea/workflows/deploy.yml
Normal file
61
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
name: Build & Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Intern klonen statt ueber die oeffentliche Domain: Gitea laeuft auf
|
||||
# demselben Host, der Weg ueber die oeffentliche IP findet nicht
|
||||
# zurueck (NAT-Hairpin). Der Job-Container erreicht Gitea ueber das
|
||||
# Netz gitea-ci unter seinem Containernamen.
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
github-server-url: http://gitea:3000
|
||||
|
||||
# --- Build & Tests -----------------------------------------------
|
||||
# Laeuft vor dem Deploy: ein roter Bundle-Build darf den Server nicht
|
||||
# anfassen. Der Docker-Build wiederholt die Schritte spaeter im Image.
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
|
||||
- name: Abhaengigkeiten installieren
|
||||
working-directory: app
|
||||
run: npm ci
|
||||
|
||||
- name: Frontend-Bundles bauen
|
||||
working-directory: app
|
||||
run: npm run build
|
||||
|
||||
- name: Server-Syntax pruefen
|
||||
working-directory: app
|
||||
run: node --check server.js
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
- name: Tag ermitteln
|
||||
run: echo "IMAGE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
|
||||
|
||||
# Ein einziges Repo-Secret DOTENV mit dem kompletten .env-Inhalt
|
||||
# (mehrzeilig). Ueber env: statt direkter Interpolation, damit
|
||||
# Anfuehrungszeichen, Backticks und $ in den Werten unangetastet bleiben.
|
||||
- name: .env aus Secret erzeugen
|
||||
env:
|
||||
DOTENV: ${{ secrets.DOTENV }}
|
||||
run: |
|
||||
if [ -z "$DOTENV" ]; then
|
||||
echo "Secret DOTENV ist leer oder nicht gesetzt."
|
||||
exit 1
|
||||
fi
|
||||
umask 077
|
||||
echo "$DOTENV" > .env
|
||||
|
||||
- name: Deployen
|
||||
run: docker compose up -d --build --remove-orphans --wait --wait-timeout 180
|
||||
|
||||
- name: Alte Layer aufraeumen
|
||||
run: docker image prune -f
|
||||
Reference in New Issue
Block a user