Setup des Smart Village App Mainserver - smart-village-solutions/smart-village-app-mainserver GitHub Wiki
Smart Village App – Anleitung zur Serverinstallation
Diese Anleitung beschreibt, wie die Smart Village App Backend-Logik mit Unterstützung der Smart Village Solutions SVS GmbH auf einem eigenen Server betrieben werden kann. Grundlage ist ein von uns bereitgestelltes Docker-Setup, das alle erforderlichen Dienste automatisch startet und aktuell hält.
✅ Voraussetzungen
Systemanforderungen
Komponente | Empfehlung |
---|---|
Betriebssystem | Ubuntu 22.04 LTS oder vergleichbares Linux |
Zugriff | SSH-Zugriff mit Root- oder Sudo-Rechten |
Speicherplatz | min. 100 GB freier Speicher |
RAM | ab 12 GB empfohlen |
vCPU | ab 4 empfohlen |
Software
Software | Version / Info |
---|---|
Docker | ≥ 20.10.x |
Docker Compose | v2.x (z. B. docker compose ) |
Optionale Tools | curl , git |
Netzwerk- und DNS-Anforderungen
-
Statische öffentliche IP-Adresse des Servers
Diese IP-Adresse muss dauerhaft erreichbar sein. -
Domain mit Wildcard-Subdomain
Beispiel:*.your_community_name.smart-village.app
-
Offene Ports 80 und 443 (HTTP/HTTPS)
Für den Zugriff per Browser und für automatische SSL-Zertifikate.
🔧 Schritt-für-Schritt: Bereitstellung in Kurzform
-
System vorbereiten
Linux-Server mit Docker & Docker Compose installieren und Ports 80/443 öffnen. -
Netzwerk & Domain einrichten
Eigene Domain inkl. Wildcard-Subdomain auf die statische IP zeigen lassen. -
Dateien übertragen
docker-compose.yml
und.env
auf den Server kopieren. -
Umgebung konfigurieren
.env
-Datei mit den bereitgestellten Werten füllen. -
Dienste starten
Im Projektverzeichnis:docker compose up -d
-
Reverse Proxy sicherstellen
z. B. mit Traefik (außerhalb der docker-compose-Datei). -
Fertig!
Die App läuft und ist erreichbar.
🧩 Detaillierte Schritt-für-Schritt-Anleitung
Hier noch einmal die Schritte im Detail mit Befehlen zur Ausführung auf dem Server:
Schritt 1: System vorbereiten
apt update && apt upgrade -y
apt install -y git curl docker.io docker-compose-plugin
systemctl enable docker
systemctl start docker
Schritt 2: Projektdateien übertragen
Übertrage die docker-compose.yml
und .env
-Datei per SCP, rsync, Ansible oder anderen Tools auf den Server:
scp docker-compose.yml .env user@your-server:/opt/sva/
Schritt 3: Umgebungsvariablen bearbeiten
Bearbeite die .env
-Datei mit den bereitgestellten Werten:
nano /opt/sva/.env
Schritt 4: Dienste starten
cd /opt/sva
docker compose up -d
Schritt 5: Verfügbarkeit prüfen
Du kannst prüfen, ob die Container laufen mit:
docker compose ps
und die Logs einsehen mit:
docker compose logs -f
🚀 Bereitstellung durch uns
- Vorbereitete
docker-compose.yml
- Beispiel-
.env
-Datei - Zugang zu unseren Docker-Images
⚙️ Beispiel-Setup
apt update && apt upgrade -y
apt install -y git curl docker.io docker-compose-plugin
systemctl enable docker
systemctl start docker
# Projektdateien übertragen (z. B. per scp)
nano .env
docker compose up -d
.env
📄 Beispiel RAILS_ENV=production
RAILS_LOG_TO_STDOUT=true
SVA_COMMUNITY=your_community_name
EXPO_TOKEN=your_expo_push_token_here
GITLAB_BOT_TOKEN=your_gitlab_access_token_here
MEILI_MASTER_KEY=your_meili_master_key_here
MYSQL_DATABASE=smart
MYSQL_USER=smart
MYSQL_PASSWORD=smart
MYSQL_ROOT_PASSWORD=smart
# Optional
# REDIS_URL=redis://sva-redis-server:6379/0
# HOSTNAME=server.your_community_name.smart-village.app
docker-compose.yml
📦 Beispiel version: "3.7"
services:
app:
image: registry.gitlab.example.com/smart-village/app-mainserver:latest
environment:
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: "1"
SVA_COMMUNITY: your_community_name
networks:
- backend
volumes:
- unicorn:/unicorn
- assets:/assets
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost/health-check || exit 1"]
interval: 30s
timeout: 10s
retries: 5
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: smart
MYSQL_USER: smart
MYSQL_PASSWORD: smart
MYSQL_ROOT_PASSWORD: smart
volumes:
- db:/var/lib/mysql
networks:
- backend
meilisearch:
image: getmeili/meilisearch:v1.12.7
environment:
MEILI_ENV: development
MEILI_MASTER_KEY: your_meili_master_key_here
MEILI_NO_ANALYTICS: "true"
volumes:
- meilisearch_data:/meili_data
networks:
- backend
cron_job:
image: registry.gitlab.example.com/smart-village/app-mainserver:latest
command: ["bin/start-cron.sh"]
environment:
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: "1"
SVA_COMMUNITY: your_community_name
deploy:
replicas: 0
labels:
swarm.cronjob.enable: "true"
swarm.cronjob.schedule: "1 1 1 * * *"
swarm.cronjob.skip-running: "true"
networks:
- backend
volumes:
- unicorn:/unicorn
- assets:/assets
delayed_job:
image: registry.gitlab.example.com/smart-village/app-mainserver:latest
command: ["bin/delayed_job", "run"]
environment:
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: "1"
SVA_COMMUNITY: your_community_name
deploy:
replicas: 1
networks:
- backend
volumes:
- unicorn:/unicorn
- assets:/assets
networks:
backend:
driver: overlay
volumes:
unicorn:
assets:
db:
meilisearch_data:
🌐 Hinweise zur Erreichbarkeit (Traefik / Reverse Proxy)
Ein Reverse Proxy wie Traefik wird benötigt, um Domains auf die Dienste weiterzuleiten:
- Automatisches Routing (z. B.
admin.your_community_name.smart-village.app
) - SSL-Zertifikate über Let's Encrypt
- Portweiterleitungen an die Container
- Authentifizierungs- und IP-Schutz bei Bedarf
Hinweis: Traefik läuft meist außerhalb der docker-compose.yml
, z. B. als globaler Swarm-Dienst. Wichtig:
- Dienste mit externem Zugang müssen im öffentlichen Netzwerk (z. B.
network-node-005
) sein. - Traefik-Labels korrekt setzen.
- Ports 80 und 443 offen halten.
🔄 Hinweise zu Updates und Redeployments
Wenn neue Versionen der App oder einzelner Services veröffentlicht werden, können Sie diese ganz einfach durch ein Pull der aktuellen Images und ein anschließendes Redeployment aktivieren:
docker compose pull
docker compose up -d
Alternativ bieten wir auf Wunsch die Möglichkeit, bei Änderungen in unserer Registry automatisiert einen Webhook an Ihr System zu senden.
Oder Sie richten einen automatisierten Dienst wie Watchtower ein, der regelmäßig unsere Registry überprüft und neue Images automatisch deployt.
Bitte sprechen Sie uns an, um das gewünschte Update-Verfahren auf Ihre Infrastruktur abzustimmen.