Skip to content

Instantly share code, notes, and snippets.

@Bouni
Last active June 5, 2025 11:19
Show Gist options
  • Save Bouni/583d586c0ae69bf1ef4d496fbf830516 to your computer and use it in GitHub Desktop.
Save Bouni/583d586c0ae69bf1ef4d496fbf830516 to your computer and use it in GitHub Desktop.
FE2 Backup wiederherstellen
#!/bin/sh
if [ $# -ne 3 ]; then
echo "Fehler: 3 Argumente erwartet, erhalten $#"
echo Verwendung: ./FE2-restore.sh Lizenz-E-Mail-Adresse Passwort Domain
echo Besipiel: ./FE2-restore.sh \"[email protected]\" \"s8QZ060q5QvyfJ1qtW3Dx@LBn8^3lHR*\" \"alamos.feuerwehr-musterstadt.de\"
exit 1
fi
# Check if any argument is empty
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
echo "Fehler: Alle Argumente müssen Werte enthalten"
echo Verwendung: ./FE2-restore.sh Lizenz-E-Mail-Adresse Passwort Domain
echo Besipiel: ./FE2-restore.sh \"[email protected]\" \"s8QZ060q5QvyfJ1qtW3Dx@LBn8^3lHR*\" \"alamos.feuerwehr-musterstadt.de\"
exit 1
fi
email=$1
password=$2
url=$3
# Name des FE2 Backups
CONFIG_ARCHIVE="FE2-Backup.zip"
# Name des FE2 Datenbank Dumps
DB_ARCHIVE="FE2-DB-Archive.gz"
# Pfad zu den FE2 configs
FE2_DOCKER_PATH="/opt/docker/alamos"
# Pfad zum env file
FE2_ENV_PATH="/opt/docker/alamos/config.env"
# Pfad zur Caddy config
CADDY_DOCKER_PATH="/opt/docker/caddy"
# Pfad zur Caddy config
CADDY_FILE_PATH="/opt/docker/caddy/Caddyfile"
# Pfad zum compose file
COMPOSE_PATH="/opt/docker/docker-compose.yaml"
# Verzeichnisstruktur erzeugen
echo "Erzeuge Verzeichnisstruktur"
sudo mkdir -p /opt/docker
sudo chown -R user:user /opt/docker
mkdir -p $CADDY_DOCKER_PATH/data
mkdir -p $CADDY_DOCKER_PATH/config
mkdir -p $FE2_DOCKER_PATH/data/fe2/config
mkdir -p $FE2_DOCKER_PATH/data/fe2/logs
mkdir -p $FE2_DOCKER_PATH/data/fe2/database
# ===========================================================================================================================
# CADDY
# ===========================================================================================================================
echo "Pepare Caddyfile"
cat << EOF > $CADDY_FILE_PATH
{
admin off
log {
format console
}
}
${url} {
reverse_proxy alamos-fe2-server:83
}
EOF
# ===========================================================================================================================
# ALAMOS FE2
# ===========================================================================================================================
echo "Temp Verzeichnis erstellen"
temp_dir=$(mktemp -d)
echo "Backup entpacken"
unzip -o $CONFIG_ARCHIVE -d $temp_dir
echo "Kopiere Config ins Docker Verzeichnis"
cp -r $temp_dir/config/* "$FE2_DOCKER_PATH/data/fe2/config"
echo "Download des cacerts file aus dem Alamos GitHub repo"
wget -q --show-progress https://raw.githubusercontent.com/alamos-gmbh/fe2-docker/refs/heads/main/data/cacerts -O $FE2_DOCKER_PATH/data/cacerts
echo "Download des logback.xml aus dem Alamos GitHub repo"
wget -q --show-progress https://raw.githubusercontent.com/alamos-gmbh/fe2-docker/refs/heads/release/2.36/config.template/data/logback.xml -O $FE2_DOCKER_PATH/data/fe2/config/data/logback.xml
echo "Prepare config.env"
cat << EOF > $FE2_ENV_PATH
# Lizenz-E-Mail Adresse
FE2_EMAIL=${email}
# Lizenz-E-Mail Password
FE2_PASSWORD="${password}"
# Gewünschter Aktivierungsname
FE2_ACTIVATION_NAME=FE2-Docker
# Die nachfolgenden Werte müssen in der Regel nicht angepasst werden.
FE2_IP_MONGODB=alamos-fe2-db
FE2_PORT_MONGODB=27017
# Änderung nur bei Bedarf - Wert muss auskommentiert werden, damit er genutzt wird, anderenfalls gelten die Einstellungen der logback.xml-Datei (data/fe2/config/data/logback.xml)
# FE2_LOG_LEVEL=debug
EOF
printf "Press any key to continue..." && read dummy
echo "Prepare docker-compose.yaml"
alamos_version=$(sed -n 's/^Version: *\([^ ]*\).*/\1/p' $temp_dir/config/version.txt)
mongodb_version=$(sed -n 's/^MongoDB: *\([^ ]*\).*/\1/p' $temp_dir/config/version.txt)
cat << EOF > $COMPOSE_PATH
services:
caddy:
container_name: caddy
image: caddy
volumes:
- /opt/docker/caddy/Caddyfile:/etc/caddy/Caddyfile
- /opt/docker/caddy/data:/data
- /opt/docker/caddy/config:/config
restart: unless-stopped
ports:
- "443:443"
networks:
- webserver
alamos-fe2-db:
image: mongo:${mongodb_version}
container_name: alamos-fe2-db
volumes:
- /opt/docker/alamos/data/fe2/config/database/configdb:/data/configdb
- /opt/docker/alamos/data/fe2/config/database:/data/db
restart: unless-stopped
networks:
- alamos
alamos-fe2-server:
image: alamosgmbh/fe2:${alamos_version}
container_name: alamos-fe2-server
hostname: ALAMOS-FE2
env_file:
- /opt/docker/alamos/config.env
volumes:
- /opt/docker/alamos/data/fe2/logs:/Logs
- /opt/docker/alamos/data/fe2/config:/Config
- /opt/docker/alamos/data/cacerts:/usr/lib/jvm/default-jvm/jre/lib/security/cacerts
- /var/lib/dbus/machine-id:/var/lib/dbus/machine-id
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
healthcheck:
test: curl --fail http://localhost:83/ || exit 1
interval: 60s
retries: 3
start_period: 60s
timeout: 10s
depends_on:
- alamos-fe2-db
networks:
- alamos
- webserver
networks:
webserver:
name: webserver
driver: bridge
alamos:
name: alamos
EOF
echo "Datenbank wiederherstellen"
echo "Datenbank Container starten"
docker compose -f $COMPOSE_PATH up -d alamos-fe2-db
echo "Datenbank dump wiederherstellen"
docker compose -f $COMPOSE_PATH exec -T alamos-fe2-db sh -c "mongorestore --drop --gzip --archive " < "$temp_dir/db/$DB_ARCHIVE"
echo "Inputs löschen"
docker compose -f $COMPOSE_PATH exec -T alamos-fe2-db mongo de_alamos_fe2 --eval 'db.inputPluginDatabaseEntry.deleteMany({ "pluginName": { $nin: ["FE2Input", "MailInput", "DailyInput"] } })'
echo "Container stoppen"
docker compose -f $COMPOSE_PATH stop alamos-fe2-db
docker compose -f $COMPOSE_PATH stop alamos-fe2-server
echo "Container starten"
docker compose -f $COMPOSE_PATH up -d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment