Jak wiecie próżno szukać supli w przygotowanych aplikacjach na TrueNAS. Wydaje mi się, że temat udało mi się opanować, wykorzystując do tego funkcję "Install via YAML". Temat nie jest trudny, dla zainteresowanych instrukcja poniżej.
Instalacja Supla Cloud na TrueNAS SCALE — krok po kroku
Poniżej opisuję jak zainstalować własną instancję Supla Cloud na TrueNAS SCALE z użyciem Docker Compose (Custom App). Instalacja obejmuje supla-cloud, supla-server, supla-db (MariaDB) oraz phpMyAdmin do zarządzania bazą danych.
Wymagania
- TrueNAS SCALE z pulą ZFS (Czyli trochę przestrzeni na dane)
- Dostęp do Apps → Install via YAML (to takie trzy kropki po prawej stronie przycisku Custom App)
- Dostęp SSH do TrueNAS (może też być przez schell)
- Własna domena lub adres IP dla CLOUD_DOMAIN (bez tego dostęp tylko z wewnętrznej sieci po IP)
─────────────────────────────────────
Krok 1: Tworzenie struktury katalogów
─────────────────────────────────────
W TrueNAS UI: Storage → Datasets → Add Dataset
Utwórz następujące katalogi jako Generic (przykład dla puli Data):
Code: Select all
/mnt/Data/supla/supla-db # dane bazy MariaDB
/mnt/Data/supla/supla-config # konfiguracja supla-cloud
/mnt/Data/supla/ssl-cloud # certyfikat SSL dla Apache
/mnt/Data/supla/ssl-server # certyfikat SSL dla supla-server
──────────────────────────
Krok 2: Ustawianie uprawnień
──────────────────────────
Ustaw właściciela i tryb dla każdego katalogu:
Code: Select all
Katalog UID GID Tryb
supla-db 999 999 0775
supla-config 33 33 0775
ssl-cloud 33 33 0775
ssl-server 0 0 0775
Kontenery używają numerycznych UID/GID niezależnie od nazw użytkowników na hoście. Jednak przy ręcznym ustawianiu uprawnień w TrueNAS UI musisz użyć użytkownika który na danej instalacji ma odpowiedni numer UID.
W standardowym TrueNAS SCALE:
- UID 999 to użytkownik netdata
- GID 999 to grupa docker
- UID 33 to użytkownik www-data
──────────────────────────
Krok 3: Generowanie sekretów
──────────────────────────
SECRET aplikacji (wymagany przez supla-cloud do szyfrowania sesji) wygeneruj na shell lub przez ssh:
Code: Select all
openssl rand -hex 32
Code: Select all
openssl rand -base64 16
───────────────────────────────────
Krok 4: Tworzenie aplikacji w TrueNAS
───────────────────────────────────
1. Przejdź do Apps → Discover Apps → Install via YAML (trzy kropki obok Custom App)
2. Wpisz nazwę: supla
3. Wklej YAML z Kroku 5 wypełniając brakujące pola lub poprawiając volumeny jeżeli dałeś inną ścieżkę.
──────────────────────
Krok 5: Docker Compose YAML
──────────────────────
Podmień wartości <TAKIEGO_FORMATU> na własne.
Code: Select all
name: supla
networks:
supla-net: Null
services:
supla-cloud:
depends_on:
- supla-db
environment:
APP_SECRET: <WYGENEROWANY_TOKEN>
DATABASE_PASSWORD: <HASLO_DO_BAZY>
MAILER_DSN: null://null
RECAPTCHA_ENABLED: 'false'
SUPLA_ACCOUNTS_REGISTRATION_ENABLED: 'true'
SUPLA_BRUTE_FORCE_AUTH_PREVENTION_ENABLED: 'true'
SUPLA_HOST_ADDRESS: <TWOJA_NAZWA_SERWERA>
image: supla/supla-cloud:latest
networks:
- supla-net
ports:
- '5443:443'
restart: unless-stopped
volumes:
- /mnt/Data/supla/supla-config:/var/www/html/var
- /mnt/Data/supla/ssl-cloud:/etc/apache2/ssl
- supla-ipc:/supla-server
supla-db:
environment:
MYSQL_DATABASE: supla
MYSQL_PASSWORD: <HASLO_DO_BAZY>
MYSQL_ROOT_PASSWORD: <HASLO_DO_BAZY>
MYSQL_USER: supla
image: mariadb:12.2.2
networks:
- supla-net
restart: unless-stopped
volumes:
- /mnt/Data/supla/supla-db:/var/lib/mysql
supla-phpmyadmin:
environment:
PMA_HOST: supla-db
image: phpmyadmin:latest
networks:
- supla-net
ports:
- '5480:80'
restart: unless-stopped
supla-server:
depends_on:
- supla-db
environment:
DATABASE_PASSWORD: <HASLO_DO_BAZY>
SUPLA_HOST_ADDRESS: <TWOJA_NAZWA_SERWERA>
image: supla/supla-server:latest
networks:
- supla-net
ports:
- '2015:2015'
- '2016:2016'
restart: unless-stopped
volumes:
- /mnt/Data/supla/ssl-server:/etc/supla-server/ssl
- supla-ipc:/var/run/supla
volumes:
supla-ipc: Null
Volume IPC musi być montowany w różnych ścieżkach w każdym kontenerze:
- supla-server: supla-ipc:/var/run/supla (tutaj serwer tworzy socket)
- supla-cloud: supla-ipc:/supla-server (stąd cloud czyta socket)
Zamiana tych ścieżek powoduje błąd "Supla server is down" w interfejsie.
──────────────────────────
Krok 6: Uruchomienie i weryfikacja
──────────────────────────
Po zapisaniu YAML TrueNAS pobierze obrazy i uruchomi kontenery. Sprawdź w Apps UI czy wszystkie 4 kontenery mają status Running.
Adresy dostępu:
Code: Select all
Supla Cloud UI https://<IP>:5443
phpMyAdmin http://<IP>:5480
──────────────────────────────
Krok 7: Zakładanie pierwszego użytkownika
──────────────────────────────
Supla Cloud nie posiada formularza rejestracji administratora w UI. Pierwszego użytkownika zakładamy przez SSH/Shell.
Połącz się z TrueNAS przez SSH, następnie wykonaj:
Code: Select all
docker exec -it ix-supla-supla-cloud-1 php bin/console supla:create-confirmed-user
Uwaga: TrueNAS dodaje prefiks ix-{nazwa_aplikacji}- do kontenerów. Dla aplikacji o nazwie "supla":
Code: Select all
ix-supla-supla-cloud-1
ix-supla-supla-server-1
ix-supla-supla-db-1
ix-supla-supla-phpmyadmin-1
Krok 8: Dodawanie urządzeń
──────────────────────
1. Zaloguj się do Supla Cloud: https://<IP>:5443
2. Przejdź do Moja SUPLA i upewnij się, że rejestracja urządzeń jest aktywna
3. W konfiguracji urządzenia (firmware) ustaw adres serwera na IP TrueNAS
4. Urządzenia łączą się na portach:
- 2015 — protokół TCP v1 (starsze urządzenia)
- 2016 — protokół TCP v2 (nowsze urządzenia)
────────────────────────────────────────
Krok 9 (opcjonalny): Import historii pomiarów
────────────────────────────────────────
Jeśli posiadasz eksport CSV z supla.org:
1. Wejdź na phpMyAdmin: http://<IP>:5480
(Server: supla-db, User: root, Password: <HASLO_ROOT>)
2. Konwertuj CSV na SQL INSERT do tabeli supla_em_log
3. Zaimportuj SQL przez phpMyAdmin
4. Zaktualizuj channel_id w zaimportowanych rekordach na lokalny ID kanału
(lokalny channel_id widoczny jest w URL po kliknięciu na kanał w Supla Cloud UI)
──────────────────────────
Rozwiązywanie problemów
──────────────────────────
"Supla server is down" w interfejsie
Supla-cloud nie może połączyć się z supla-server przez IPC socket.
Sprawdź czy volume supla-ipc jest zamontowany z właściwymi ścieżkami (patrz Krok 5).
Kontenery nie startują po zmianie uprawnień
Nigdy nie używaj chmod na katalogach ZFS z NFSv4 ACL. Przywróć uprawnienia przez TrueNAS UI → Storage → Edit Permissions.
MariaDB: błąd "Bad magic header" w tc.log
Pojawia się po wymuszonym zatrzymaniu kontenera. Usuń uszkodzony plik:
Code: Select all
docker exec ix-supla-supla-db-1 rm /var/lib/mysql/tc.log
Brak dostępu do poleceń docker przez SSH
Domyślny użytkownik truenas_admin nie należy do grupy docker. ale polecenia wykonane z przedrostkiem sudo i podaniem hasła załatwia sprawę.
Mam nadzieję, że komuś się przyda.
Pozdrawiam.
