1
Deployment
hans edited this page 2026-06-26 09:34:48 +02:00

Deployment

Überblick

Der Production Build wird via rsync auf den Synology NAS übertragen und dort von einem nginx:stable-alpine-Container ausgeliefert.

ng build  →  dist/  →  rsync  →  NAS  →  nginx-Container  →  NPM

deploy.sh

Im Projektroot liegt deploy.sh — führt Build und Deploy in einem Schritt aus:

./deploy.sh

Inhalt:

#!/bin/bash
set -e

echo "==> Build..."
ng build

echo "==> Deploy..."
rsync -av --delete dist/ang-university-httpclient/browser/ \
  hans@nas.neugasse.lan:/volume1/docker/landingpage/dist/

echo "==> Fertig."

--delete sorgt dafür dass veraltete Bundle-Dateien (Hash-basierte Dateinamen) auf dem NAS entfernt werden.

Manueller Build

# Production Build (defaultConfiguration ist bereits "production")
ng build

# Output prüfen
ls dist/ang-university-httpclient/browser/

# Alte URL darf nicht mehr im Build vorkommen
grep -r "directus.neugasse.lan" dist/
# Erwartet: keine Treffer

Manuelles Deploy

rsync -av --delete dist/ang-university-httpclient/browser/ \
  hans@nas.neugasse.lan:/volume1/docker/landingpage/dist/

Docker-Container

Der nginx-Container wird einmalig gestartet und läuft dauerhaft.
Nach einem Deploy muss der Container nicht neu gestartet werden — rsync schreibt direkt ins gemountete Volume.

# Erststart
cd webserver-docker
docker compose up -d

# Status prüfen
docker compose ps

# Logs
docker compose logs -f

docker-compose.yml (Kurzübersicht)

services:
  nginx:
    image: nginx:stable-alpine
    ports:
      - "9999:80"
    volumes:
      - ./dist:/usr/share/nginx/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

Nach dem Deploy testen

# API über NPM-Proxy prüfen
curl http://home.neugasse.lan/api/items/landingpage | python3 -m json.tool | head -10

# Browser: Hard Reload um Cache zu leeren
# Firefox / Chrome: Ctrl + Shift + R