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

  1. System vorbereiten
    Linux-Server mit Docker & Docker Compose installieren und Ports 80/443 öffnen.

  2. Netzwerk & Domain einrichten
    Eigene Domain inkl. Wildcard-Subdomain auf die statische IP zeigen lassen.

  3. Dateien übertragen
    docker-compose.yml und .env auf den Server kopieren.

  4. Umgebung konfigurieren
    .env-Datei mit den bereitgestellten Werten füllen.

  5. Dienste starten
    Im Projektverzeichnis: docker compose up -d

  6. Reverse Proxy sicherstellen
    z. B. mit Traefik (außerhalb der docker-compose-Datei).

  7. 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

📄 Beispiel .env

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

📦 Beispiel docker-compose.yml

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.