KI-AGENT: Lade Selfhost Setup ohne Repo Checkout
All checks were successful
Build and Push Docker Images / build-backend (push) Successful in 11s
Build and Push Docker Images / build-frontend (push) Successful in 11s
Build and Push Docker Images / build-website (push) Successful in 11s
Build and Push Docker Images / build-docs (push) Successful in 11s
All checks were successful
Build and Push Docker Images / build-backend (push) Successful in 11s
Build and Push Docker Images / build-frontend (push) Successful in 11s
Build and Push Docker Images / build-website (push) Successful in 11s
Build and Push Docker Images / build-docs (push) Successful in 11s
This commit is contained in:
45
README.md
45
README.md
@@ -89,13 +89,16 @@ Wenn du MinIO verwendest, setze zusatzlich:
|
|||||||
|
|
||||||
## Deploy-Struktur
|
## Deploy-Struktur
|
||||||
|
|
||||||
Deploye den Stack direkt aus einem geklonten Checkout dieses Repositories, weil die Selfhost-Compose-Datei die lokalen Build-Kontexte `./frontend` und `./backend` verwendet.
|
Deploye den Stack in einem eigenen Betriebsverzeichnis. Der Selfhost-Installer lädt dafür nur die benötigten Betriebsdateien und klont nicht das komplette Repository.
|
||||||
|
|
||||||
Beispiel:
|
Beispiel für die manuelle Vorbereitung:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone <DEIN-REPO-URL> /opt/fedeo
|
mkdir -p /opt/fedeo/scripts
|
||||||
cd /opt/fedeo
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/docker-compose.selfhost.yml -o /opt/fedeo/docker-compose.selfhost.yml
|
||||||
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/.env.example -o /opt/fedeo/.env.example
|
||||||
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-setup.sh -o /opt/fedeo/scripts/selfhost-setup.sh
|
||||||
|
chmod +x /opt/fedeo/scripts/selfhost-setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Verzeichnisstruktur sollte dann mindestens so aussehen:
|
Die Verzeichnisstruktur sollte dann mindestens so aussehen:
|
||||||
@@ -104,8 +107,7 @@ Die Verzeichnisstruktur sollte dann mindestens so aussehen:
|
|||||||
/opt/fedeo/
|
/opt/fedeo/
|
||||||
docker-compose.selfhost.yml
|
docker-compose.selfhost.yml
|
||||||
.env
|
.env
|
||||||
backend/
|
scripts/
|
||||||
frontend/
|
|
||||||
traefik/
|
traefik/
|
||||||
letsencrypt/
|
letsencrypt/
|
||||||
logs/
|
logs/
|
||||||
@@ -138,7 +140,7 @@ Alternativ kannst du die Konfiguration geführt erzeugen lassen:
|
|||||||
bash scripts/selfhost-setup.sh
|
bash scripts/selfhost-setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Auf einem frischen Server kannst du den Checkout und die Konfiguration direkt per One-Liner vorbereiten:
|
Auf einem frischen Server kannst du die Betriebsdateien und die Konfiguration direkt per One-Liner vorbereiten:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash
|
||||||
@@ -150,7 +152,7 @@ Der schnelle One-Liner mit direktem Stack-Start:
|
|||||||
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --simple --start
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --simple --start
|
||||||
```
|
```
|
||||||
|
|
||||||
Der Installer prüft Basispakete, installiert Docker auf Wunsch über das offizielle Docker-Installationsscript, klont oder aktualisiert FEDEO nach `/opt/fedeo` und startet anschließend den geführten Setup-Assistenten.
|
Der Installer prüft Basispakete, installiert Docker auf Wunsch über das offizielle Docker-Installationsscript, lädt nur die Selfhost-Dateien nach `/opt/fedeo` und startet anschließend den geführten Setup-Assistenten.
|
||||||
|
|
||||||
Für den schnellen Standardpfad:
|
Für den schnellen Standardpfad:
|
||||||
|
|
||||||
@@ -336,8 +338,7 @@ services:
|
|||||||
- internal
|
- internal
|
||||||
|
|
||||||
backend:
|
backend:
|
||||||
build:
|
image: git.federspiel.tech/flfeders/fedeo/backend:dev
|
||||||
context: ./backend
|
|
||||||
container_name: fedeo-backend
|
container_name: fedeo-backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -392,8 +393,7 @@ services:
|
|||||||
- internal
|
- internal
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
image: git.federspiel.tech/flfeders/fedeo/frontend:dev
|
||||||
context: ./frontend
|
|
||||||
container_name: fedeo-frontend
|
container_name: fedeo-frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -446,8 +446,7 @@ Hinweis: Das Backend nutzt `forcePathStyle: true`. Das funktioniert sauber mit M
|
|||||||
Im Deploy-Verzeichnis:
|
Im Deploy-Verzeichnis:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker-compose.selfhost.yml build
|
docker compose --env-file /opt/fedeo/.env -f /opt/fedeo/docker-compose.selfhost.yml up -d
|
||||||
docker compose -f docker-compose.selfhost.yml up -d
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Synapse erzeugt `matrix/synapse/homeserver.yaml` beim ersten Start automatisch und aktualisiert die für FEDEO relevanten Werte aus der `.env`. `MATRIX_REGISTRATION_SHARED_SECRET` muss in der `.env` gesetzt und geheim bleiben, weil FEDEO damit Matrix-Nutzer provisioniert.
|
Synapse erzeugt `matrix/synapse/homeserver.yaml` beim ersten Start automatisch und aktualisiert die für FEDEO relevanten Werte aus der `.env`. `MATRIX_REGISTRATION_SHARED_SECRET` muss in der `.env` gesetzt und geheim bleiben, weil FEDEO damit Matrix-Nutzer provisioniert.
|
||||||
@@ -455,15 +454,15 @@ Synapse erzeugt `matrix/synapse/homeserver.yaml` beim ersten Start automatisch u
|
|||||||
Danach Status prufen:
|
Danach Status prufen:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker-compose.selfhost.yml ps
|
docker compose --env-file /opt/fedeo/.env -f /opt/fedeo/docker-compose.selfhost.yml ps
|
||||||
docker compose -f docker-compose.selfhost.yml logs -f traefik
|
docker compose --env-file /opt/fedeo/.env -f /opt/fedeo/docker-compose.selfhost.yml logs -f traefik
|
||||||
docker compose -f docker-compose.selfhost.yml logs -f backend
|
docker compose --env-file /opt/fedeo/.env -f /opt/fedeo/docker-compose.selfhost.yml logs -f backend
|
||||||
```
|
```
|
||||||
|
|
||||||
Wenn du Migrationen manuell ausführen möchtest:
|
Wenn du Migrationen manuell ausführen möchtest:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker-compose.selfhost.yml run --rm backend npm run migrate
|
docker compose --env-file /opt/fedeo/.env -f /opt/fedeo/docker-compose.selfhost.yml run --rm backend npm run migrate
|
||||||
```
|
```
|
||||||
|
|
||||||
## Funktionsprufung
|
## Funktionsprufung
|
||||||
@@ -487,14 +486,16 @@ Wenn der Bootstrap aktiviert ist, kannst du dich danach mit `FEDEO_BOOTSTRAP_ADM
|
|||||||
Bei neuen Versionen:
|
Bei neuen Versionen:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git pull
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/docker-compose.selfhost.yml -o /opt/fedeo/docker-compose.selfhost.yml
|
||||||
docker compose -f docker-compose.selfhost.yml build
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/.env.example -o /opt/fedeo/.env.example
|
||||||
docker compose -f docker-compose.selfhost.yml up -d
|
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-setup.sh -o /opt/fedeo/scripts/selfhost-setup.sh
|
||||||
|
chmod +x /opt/fedeo/scripts/selfhost-setup.sh
|
||||||
|
docker compose --env-file /opt/fedeo/.env -f /opt/fedeo/docker-compose.selfhost.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Der Backend-Container wendet Datenbankmigrationen beim Start automatisch an. Bei kritischen Updates sollte vorher ein Backup von `./postgres` und `./minio` erstellt werden.
|
Der Backend-Container wendet Datenbankmigrationen beim Start automatisch an. Bei kritischen Updates sollte vorher ein Backup von `./postgres` und `./minio` erstellt werden.
|
||||||
|
|
||||||
Falls du statt lokaler Builds vorgebaute Images verwenden willst, kannst du in der Compose-Datei `build:` durch passende `image:`-Eintrage ersetzen. Erst dann ist ein vorgelagertes `docker compose pull` sinnvoll.
|
Die Selfhost-Compose-Datei nutzt vorgebaute Images. Dadurch braucht der Server keinen Repository-Checkout und keine lokalen Build-Kontexte.
|
||||||
|
|
||||||
## Backup-Empfehlung
|
## Backup-Empfehlung
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
FEDEO_REPO_URL="${FEDEO_REPO_URL:-https://git.federspiel.tech/flfeders/FEDEO.git}"
|
|
||||||
FEDEO_REF="${FEDEO_REF:-dev}"
|
FEDEO_REF="${FEDEO_REF:-dev}"
|
||||||
|
FEDEO_RAW_BASE_URL="${FEDEO_RAW_BASE_URL:-https://git.federspiel.tech/flfeders/FEDEO/raw/branch/${FEDEO_REF}}"
|
||||||
FEDEO_DIR="${FEDEO_DIR:-/opt/fedeo}"
|
FEDEO_DIR="${FEDEO_DIR:-/opt/fedeo}"
|
||||||
SETUP_ARGS=("$@")
|
SETUP_ARGS=("$@")
|
||||||
FEDEO_USE_SUDO_DOCKER="${FEDEO_USE_SUDO_DOCKER:-false}"
|
FEDEO_USE_SUDO_DOCKER="${FEDEO_USE_SUDO_DOCKER:-false}"
|
||||||
@@ -17,9 +17,6 @@ SUDO=""
|
|||||||
if [[ "$(id -u)" -ne 0 ]]; then
|
if [[ "$(id -u)" -ne 0 ]]; then
|
||||||
if command -v sudo >/dev/null 2>&1; then
|
if command -v sudo >/dev/null 2>&1; then
|
||||||
SUDO="sudo"
|
SUDO="sudo"
|
||||||
else
|
|
||||||
echo "Dieses Script braucht Schreibrechte für $FEDEO_DIR oder sudo." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -36,8 +33,8 @@ Mit Optionen für den Setup-Assistenten:
|
|||||||
|
|
||||||
Umgebung:
|
Umgebung:
|
||||||
FEDEO_DIR=/opt/fedeo
|
FEDEO_DIR=/opt/fedeo
|
||||||
FEDEO_REPO_URL=https://git.federspiel.tech/flfeders/FEDEO.git
|
|
||||||
FEDEO_REF=dev
|
FEDEO_REF=dev
|
||||||
|
FEDEO_RAW_BASE_URL=https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev
|
||||||
USAGE
|
USAGE
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +74,7 @@ have() {
|
|||||||
|
|
||||||
install_base_packages() {
|
install_base_packages() {
|
||||||
local missing=()
|
local missing=()
|
||||||
for binary in git curl openssl; do
|
for binary in curl openssl; do
|
||||||
if ! have "$binary"; then
|
if ! have "$binary"; then
|
||||||
missing+=("$binary")
|
missing+=("$binary")
|
||||||
fi
|
fi
|
||||||
@@ -93,9 +90,15 @@ install_base_packages() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$(id -u)" -ne 0 && -z "$SUDO" ]]; then
|
||||||
|
echo "Fehlende Programme: ${missing[*]}" >&2
|
||||||
|
echo "Ohne root oder sudo kann der Installer sie nicht automatisch installieren." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Installiere Basispakete: ${missing[*]}"
|
echo "Installiere Basispakete: ${missing[*]}"
|
||||||
$SUDO apt-get update
|
$SUDO apt-get update
|
||||||
$SUDO apt-get install -y ca-certificates curl git openssl
|
$SUDO apt-get install -y ca-certificates curl openssl
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_docker() {
|
ensure_docker() {
|
||||||
@@ -117,6 +120,10 @@ ensure_docker() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if yes_no "Docker jetzt über das offizielle Docker-Installationsscript installieren?" "j"; then
|
if yes_no "Docker jetzt über das offizielle Docker-Installationsscript installieren?" "j"; then
|
||||||
|
if [[ "$(id -u)" -ne 0 && -z "$SUDO" ]]; then
|
||||||
|
echo "Ohne root oder sudo kann Docker nicht automatisch installiert werden." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
curl -fsSL https://get.docker.com | $SUDO sh
|
curl -fsSL https://get.docker.com | $SUDO sh
|
||||||
else
|
else
|
||||||
echo "Bitte Docker Engine inkl. Compose Plugin installieren und den Installer erneut starten." >&2
|
echo "Bitte Docker Engine inkl. Compose Plugin installieren und den Installer erneut starten." >&2
|
||||||
@@ -140,32 +147,39 @@ ensure_docker() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_checkout() {
|
download_file() {
|
||||||
|
local source="$1"
|
||||||
|
local target="$2"
|
||||||
|
local temp_file="${target}.tmp"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$target")"
|
||||||
|
curl -fsSL "$source" -o "$temp_file"
|
||||||
|
mv "$temp_file" "$target"
|
||||||
|
}
|
||||||
|
|
||||||
|
download_selfhost_files() {
|
||||||
echo
|
echo
|
||||||
echo "Zielverzeichnis: $FEDEO_DIR"
|
echo "Zielverzeichnis: $FEDEO_DIR"
|
||||||
echo "Repository: $FEDEO_REPO_URL"
|
echo "Quelle: $FEDEO_RAW_BASE_URL"
|
||||||
echo "Version/Branch: $FEDEO_REF"
|
|
||||||
|
if ! mkdir -p "$FEDEO_DIR/scripts" 2>/dev/null; then
|
||||||
|
if [[ -z "$SUDO" ]]; then
|
||||||
|
echo "Keine Schreibrechte für $FEDEO_DIR und sudo ist nicht verfügbar." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
$SUDO mkdir -p "$FEDEO_DIR/scripts"
|
||||||
|
$SUDO chown "$(id -u):$(id -g)" "$FEDEO_DIR" "$FEDEO_DIR/scripts"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -d "$FEDEO_DIR/.git" ]]; then
|
if [[ -d "$FEDEO_DIR/.git" ]]; then
|
||||||
echo "Bestehenden FEDEO-Checkout aktualisieren..."
|
echo "Hinweis: In $FEDEO_DIR liegt noch ein alter Git-Checkout. Der Installer aktualisiert nur die Selfhost-Dateien und lässt Daten, .env und Checkout unangetastet."
|
||||||
git -C "$FEDEO_DIR" fetch --prune origin
|
|
||||||
git -C "$FEDEO_DIR" checkout "$FEDEO_REF"
|
|
||||||
git -C "$FEDEO_DIR" pull --ff-only origin "$FEDEO_REF"
|
|
||||||
return
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -e "$FEDEO_DIR" ]]; then
|
echo "Lade Selfhost-Dateien..."
|
||||||
echo "$FEDEO_DIR existiert bereits, ist aber kein Git-Checkout." >&2
|
download_file "$FEDEO_RAW_BASE_URL/docker-compose.selfhost.yml" "$FEDEO_DIR/docker-compose.selfhost.yml"
|
||||||
echo "Bitte FEDEO_DIR auf ein leeres Ziel setzen oder das Verzeichnis prüfen." >&2
|
download_file "$FEDEO_RAW_BASE_URL/.env.example" "$FEDEO_DIR/.env.example"
|
||||||
exit 1
|
download_file "$FEDEO_RAW_BASE_URL/scripts/selfhost-setup.sh" "$FEDEO_DIR/scripts/selfhost-setup.sh"
|
||||||
fi
|
chmod +x "$FEDEO_DIR/scripts/selfhost-setup.sh"
|
||||||
|
|
||||||
$SUDO mkdir -p "$FEDEO_DIR"
|
|
||||||
if [[ -n "$SUDO" ]]; then
|
|
||||||
$SUDO chown "$(id -u):$(id -g)" "$FEDEO_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
git clone --branch "$FEDEO_REF" "$FEDEO_REPO_URL" "$FEDEO_DIR"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
@@ -180,14 +194,14 @@ FEDEO Selfhost Installer
|
|||||||
Dieser Installer bringt die typische Serverstruktur mit:
|
Dieser Installer bringt die typische Serverstruktur mit:
|
||||||
- prüft Basispakete
|
- prüft Basispakete
|
||||||
- installiert Docker optional automatisch
|
- installiert Docker optional automatisch
|
||||||
- klont oder aktualisiert FEDEO nach /opt/fedeo
|
- lädt nur die Selfhost-Dateien nach /opt/fedeo
|
||||||
- startet danach den geführten Selfhost-Assistenten
|
- startet danach den geführten Selfhost-Assistenten
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
install_base_packages
|
install_base_packages
|
||||||
ensure_docker
|
ensure_docker
|
||||||
prepare_checkout
|
download_selfhost_files
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Starte Selfhost-Assistent..."
|
echo "Starte Selfhost-Assistent..."
|
||||||
|
|||||||
@@ -32,6 +32,18 @@ compose() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compose_stack() {
|
||||||
|
compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
compose_start_command() {
|
||||||
|
if [[ "${FEDEO_USE_SUDO_DOCKER:-false}" == "true" ]]; then
|
||||||
|
echo "sudo docker compose --env-file $ENV_FILE -f $COMPOSE_FILE up -d"
|
||||||
|
else
|
||||||
|
echo "docker compose --env-file $ENV_FILE -f $COMPOSE_FILE up -d"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<'USAGE'
|
cat <<'USAGE'
|
||||||
FEDEO Selfhost Setup
|
FEDEO Selfhost Setup
|
||||||
@@ -481,15 +493,11 @@ main() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$START_STACK" == "yes" ]]; then
|
if [[ "$START_STACK" == "yes" ]]; then
|
||||||
compose -f "$COMPOSE_FILE" up -d
|
compose_stack up -d
|
||||||
else
|
else
|
||||||
echo
|
echo
|
||||||
echo "Start später mit:"
|
echo "Start später mit:"
|
||||||
if [[ "${FEDEO_USE_SUDO_DOCKER:-false}" == "true" ]]; then
|
echo " $(compose_start_command)"
|
||||||
echo " sudo docker compose -f $COMPOSE_FILE up -d"
|
|
||||||
else
|
|
||||||
echo " docker compose -f $COMPOSE_FILE up -d"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user