[tutorial] Synology NAS – Docker, Proxy, Let’s Encrypt, SUPLA, ...

_aro_
Posts: 51
Joined: Mon Apr 09, 2018 5:10 pm
Location: Legnica

Post

Witam wszystkich !

Poniżej za zachętą, która padła gdzieś na forum ze strony fracz oraz po błogosławieństwie lesny8 umieszczam opis instalacji własnego serwera Supla na urządzeniach Synology NAS.
Temat wykorzystania fajnych serwerów sieciowych NAS (Network Attached Storage) od firmy Symology przewija się na forum tu i ówdzie.
Część ludzi dała sobie radę, część pewnie nie ...
Pewnie po niewielkiej modyfikacji poniższy sposób może posłużyć właścicielom podobnych urządzeń od firmy QNAP lub innych.
Tego nie wiem, bo nie miałem nigdy NAS-a z tej firmy, ale pewnie idea jest podobna ...

A więc, aktualna wersja systemu na dzień pisania posta to DSM 6.2.2-24922 Update 3.
Zakładam, że wiesz, że docker działa tylko na wybranym sprzęcie (poniżej aktualny wykaz):
https://www.synology.com/pl-pl/dsm/packages/Docker
Seria 20: FS6400, DS620slim, SA3400
Seria 19: RS1619xs+, RS1219+, DS2419+, DS1819+, DS1019+, DVA3219
Seria 18: FS1018, RS3618xs, RS2818RP+, RS2418RP+, RS2418+, RS818RP+, RS818+, DS3018xs, DS1618+, DS918+, DS718+, DS218+
Seria 17: FS3017, FS2017, RS18017xs+, RS4017xs+, RS3617xs+, RS3617RPxs, RS3617xs, DS3617xs, DS1817+, DS1517+
Seria 16: RS18016xs+, RS2416RP+, RS2416+, DS916+, DS716+, DS716+II, DS216+, DS216+II
Seria 15: RS815RP+, RS815+, RC18015xs+, DS3615xs, DS2415+, DS1815+, DS1515+, DS415+
Seria 14: RS3614xs+, RS3614RPxs, RS3614xs, RS2414RP+, RS2414+, RS814RP+, RS814+
Seria 13: RS10613xs+, RS3413xs+, DS2413+, DS1813+, DS1513+, DS713+
Seria 12: RS3412RPxs, RS3412xs, RS2212RP+, RS2212+, RS812RP+, RS812+, DS3612xs, DS1812+, DS1512+, DS712+, DS412+
Seria 11: RS3411RPxs, RS3411xs, RS2211RP+, RS2211+, DS3611xs, DS2411+, DS1511+, DS411+, DS411+II
*Seria 10: RS810RP+, RS810+, DS1010+, DS710+

W skrócie - poniższy tutorial nie różni się tak bardzo od już istniejącego tutoriala autorstwa lesny8 viewtopic.php?f=23&t=4081 z tym, że:
- robimy wszystko jako wersja standalone,
- po uruchomieniu serwera wykorzystujemy systemowe narzędzia DSM do uruchomienia serwera reverse proxy,
- po wystawieniu serwisu pod jakąś nazwą domenową wykorzystujemy ponownie systemowe narzędzia DSM tym razem do uzyskania certyfikatu Let’s Encrypt.

A więc lecimy - początek jest taki sam:

1. Router i Domena - jak w oryginalnym tutorialu lesny8 z uwzględnieniem oczywiście innego urządzenia - Synology zamiast RaspberryPi :)
Co potrzebujemy mieć i jak skonfigurowane, na wstępie?
Synology NAS i działający DSM w wersji co najmniej powyżej przywołanej.
Zewnętrzny adres IP:
Jeśli mamy stały IP to potrzebna jest własna domena.
Może być darmowa np. zarejestrowana w http://www.dot.tk/en/index.html?lang=en
U rejestratora domeny w strefie ustawień serwera DNS ustawiamy rekordy A wskazujące na nasz adres IP, dla domeny i subdomen (cloud, scripts czy czegokolwiek innego).
Jeśli mamy zmienne IP (Neustrada, Netia, Internet mobilny itd.) trzeba skonfigurować DDNS w posiadanym routerze.
https://www.youtube.com/watch?v=1_aISlMQeSc do filmu wyjaśniającego w czym rzecz.
W routerze rezerwujemy jakiś wewnętrzny adres IP dla naszego Synology.
Jeśli klasa adresowa naszego routera to 192.168.0.0/24 i router jest bramką i ma adres 192.168.0.1, to Synology niech ma adres 192.168.0.2 lub każdy inny wolny z tej klasy. Ważne, żeby przypisać go na stałe, by DHCP zawsze dawał naszemu hostowi ten sam adres. Jest to konieczne z uwagi na przekierowanie portów.
Robimy przekierowanie portów TCP 80 i 443 na wewnętrzny adres IP Synology.
Sprawdźcie to w pierwszej kolejności, czy posiadany router/dostawca internetu daje wam możliwość przekierowania poru 80 TCP, jest to kluczowy warunek dla Let’s Encrypt podczas weryfikacji domeny. Jeśli nie to trzeba szukać alternatywnego firmware dla routera albo zmienić router/dostawcę internetu na taki z możliwością przekierowania portu TCP 80.
Robimy przekierowanie portów TCP 2015 i 2016.
W przypadku np. routera Synology RT2600ac (takim sprzętem dysponuję) wygląda to mniej więcej tak:

przekierowanie.jpg

Jest to wymagane do działania APP na smartfonach i tabletach.

Ustawiamy NAT Loopback / hairpinning - większość routerów na rynku ma tą funkcjonalność domyślnie włączoną i nawet użytkownik nie może tego wyłączyć bo i tak nie ma gdzie :)
Jeśli tego nie ustawimy, a nasz router jest ograniczony funkcjonalnie lub to jest po prostu tańszy model otrzymany od providera, to będąc w sieci LAN nie połączymy się do usług po nazwie domeny/subdomeny, a tylko po nazwie możemy się do nich podłączyć w omawianym trybie proxy. Od strony WAN-u będzie wszystko działać.

Eleganckim rozwiązaniem będzie w takim wypadku uruchomienie u siebie na hoście Synology własnego serwera DNS z gotowego pakietu --> Centrum pakietów --> Wszystkie pakiety --> DNS Server
Tu jest to ładnie opisane jak należy to zrobić:
https://originwww.synology.com/pl-pl/kn ... DNS_Server
Tutaj więcej:
https://pronas.pl/qnap/dns-server.320/
Należy przy tym zadbać aby wszystkie wpisy na serwerach DNS były zgodne za sobą (lokalnie na Synology DNS Server i zdalnie na serwerze DNS rejestratora domeny).
Jest to tak zwany split DNS, Split-Horizon DNS lub split-brain DNS.
Nie chciałbym tego wątku za bardzo opisywać, po pierwsze że najczęściej nie będzie to potrzebne, a po drugie konfiguracja własnego serwera DNS jest dość skomplikowana. Co prawda ja mam to tak właśnie zrobione, ale dlatego że posługuję się nazwami domenowymi w swojej domowej sieci LAN. Jeśli będzie zainteresowanie tym wątkiem to takie uzupełnienie może się pojawić w miarę potrzeb :)

2. Podczas pierwszej instalacji całego pakietu dockera (Centrum pakietów --> Wszystkie pakiety --> Docker) tworzy się folder współdzielony o nazwie docker, zlokalizowany --> /volume1/docker.

folder docker.jpg

Domyślnie nasz codzienny użytkownik Synology - przyjmijmy że nazywa się xyz - nie będący adminem, jest członkiem grupy administrators oraz users - otrzymuje prawa zapisu/odczytu do tego folderu. Dla spokoju ducha warto to sprawdzić wchodząc --> Panel sterowania --> Folder współdzielony --> docker --> Edytuj --> Uprawnienia.

3. Korzystając z np. PuTTY łączymy się do swojego hosta Synology wpisując adres IP, potem swojego użytkownika (tu xyz) oraz podając hasło.
Oczywiście wcześniej musimy mieć włączone --> Panel sterowania --> Terminal i SNMP --> Włącz usługę SSH, oraz określony port na którym usługa działa (poniżej zamaskowany).

ssh.jpg

4. Tworzymy z linii poleceń folder /supla:

Code: Select all

mkdir /volume1/docker/supla
5. Żeby móc korzystać poleceń git-a należy mieć zainstalowany serwer git-a (Centrum pakietów --> Wszystkie pakiety --> Git Server).
Nie musimy go jakoś konfigurować, instalujemy go i tyle.

Klonujemy do stworzonego przed chwilą folderu całego git-a:

Code: Select all

git clone https://github.com/SUPLA/supla-docker.git /volume1/docker/supla/
6. Generujemy plik .env

Code: Select all

./supla.sh
7. Sprawdzamy czy jakaś usługa przypadkiem nie działa na portach, na których chcielibyśmy uruchomić dockera Supla serwer - ja przyjąłem zamiast 80 port 8080 oraz zamiast 443 port 4443.
Wiadomo, że w urządzeniach Synology frontend działa właśnie na portach 80 i 443 i koniecznie trzeba je zmienić :)
Jeśli port jest wolny to polecenie nie zwróci nam wyniku (poniżej przykład moich wolnych portów 8080 oraz 4443):

Code: Select all

xyz@DS716:/volume1/docker/supla$ sudo netstat -tulpn | grep :8080
Password:
xyz@DS716:/volume1/docker/supla$

xyz@DS716:/volume1/docker/supla$ sudo netstat -tulpn | grep :4443
Password:
xyz@DS716:/volume1/docker/supla$
Jeśli jest zajęty otrzymamy informację (poniżej przykład zajętego port 8888):

Code: Select all

tcp6       0      0 :::8888                 :::*                    LISTEN      -
Oczywiście każdy może swoje wolne porty wpisać.
Aha, przy okazji DS716 to nazwa mojego hosta jaką nadałem mu w panelu sterowania.

8. Edytujemy powstały plik:

Code: Select all

vi .env

9. Wpisujemy swoje dane w treści pliku - poniższe wartości są bardzo istotne i jeśli są wątpliwości co do właściwych wpisów po polecam poszukanie na forum - jest to dobrze opisane.
Ja zmieniłem linię 2, 5 i 6, 14-19, 22, 28 i 29 (insert rozpoczyna edycję)

Code: Select all

# Where the SUPLA Cloud will be accessible? Put domain or IP address here with port.
CLOUD_DOMAIN=twoja.domena.pl
 
# Initial user account details; delete these settings after the first launch
FIRST_USER_EMAIL=prawdziwy_adres@mailowy.pl
FIRST_USER_PASSWORD=nasze_haslo
 
# Google ReCaptcha settings
RECAPTCHA_ENABLED=false
RECAPTCHA_PUBLIC_KEY=
RECAPTCHA_PRIVATE_KEY=
 
# Mailer settings (SMTP)
MAILER_HOST=nazwa_serwera_pocztowego.pl
MAILER_PORT=465
MAILER_USER=uzytkownik@nazwa_serwera_pocztowego.pl
MAILER_PASSWORD=haslo_do_podanego_konta_pocztowego
MAILER_ENCRYPTION=ssl
MAILER_FROM=uzytkownik@nazwa_serwera_pocztowego.pl
 
# If you want to be notified about some server errors, set this
ADMIN_EMAIL=uzytkownik@nazwa_serwera_pocztowego.pl
 
# Where to store SUPLA Cloud's data
VOLUME_DATA=./var
 
# On which ports the SUPLA Cloud should listen (only if standalone mode)
PORT_HTTP=8080
PORT_HTTPS=4443
 
REQUIRE_REGULATIONS_ACCEPTANCE=false
REQUIRE_COOKIE_POLICY_ACCEPTANCE=false
BRUTE_FORCE_AUTH_PREVENTION_ENABLED=true
 
# These options protect your application
DB_PASSWORD=passwordpasswordpasswordpassword
SECRET=passwordpasswordpasswordpassword
 
COMPOSE_PROJECT_NAME=supla
COMPOSE_PATH_SEPARATOR=:
COMPOSE_FILE=docker-compose.yml:docker-compose.standalone.yml

10. Zapisujemy naszą pracę:

Code: Select all

:wq
11. Nie wiem dlaczego, ale skrypt nie tworzy sam z siebie wymaganych trzech katalogów i należy je na tym etapie dorobić ręcznie:

Code: Select all

xyz@DS716:/volume1/docker/supla$ mkdir /volume1/docker/supla/var/mysql
xyz@DS716:/volume1/docker/supla$ mkdir /volume1/docker/supla/var/cloud-local
xyz@DS716:/volume1/docker/supla$ mkdir /volume1/docker/supla/var/cloud-logs
12. W końcu coś uruchamiamy :o :

Code: Select all

sudo ./supla.sh start
13. Skrypt zaciąga obrazy i tworzy kontenery - ładnych parę minut. Końcówka wygląda mniej więcej tak:

Code: Select all

...
Starting SUPLA containers 
Removing supla-cloud
supla-db is up-to-date
Recreating d235373e912d_supla-cloud ...
Recreating d235373e912d_supla-cloud ... done
Creating supla-server ...
Creating supla-server ... done
SUPLA containers has been started.
Dalsza część w drugim poście ...
You do not have the required permissions to view the files attached to this post.
_aro_
Posts: 51
Joined: Mon Apr 09, 2018 5:10 pm
Location: Legnica

Post

... Część druga

14. Skrypt powinien wystartować trzy nowe kontenery, sprawdzamy wpisując w linii poleceń:

Code: Select all

sudo docker ps
Otrzymujemy coś zbliżonego:

Code: Select all

CONTAINER ID    IMAGE                       COMMAND                     CREATED        STATUS        PORTS                                    NAMES 

1e913bc8b0d1    supla/supla-server      "/usr/bin/server-e..."     3 weeks ago   Up 6 days      0.0.0.0:2015-2016->2015-2016/tcp             supla-server
f9bed0f3129b    supla/supla-cloud       "docker-php-entryp..."     3 weeks ago   Up 6 days      0.0.0.0:8080->80/tcp, 0.0.0.0:4443->443/tcp  supla-cloud
ba45b7ab43ea    mysql:5.7.20            "docker-entrypoint..."     3 weeks ago   Up 6 days      3306/tcp                                     supla-db
Skrypt tworzy także nową podsieć dockera supla_default (u mnie to jest 172.22.0.0/16) i do tej podsieci wchodzą te trzy kontenery.

Można to wszystko ładnie teraz zaobserwować: Docker --> Kontener

docker.jpg
oraz Docker --> Sieć

siec.jpg
15. Przekierowanie portów na routerze - aby udostępnić własną chmurę (serwer) na zewnątrz :

- WAN 2015 -> LAN 2015 (TCP)
- WAN 2016 -> LAN 2016 (TCP)

W przypadku np. routera Synology RT2600ac wygląda to mniej więcej tak:
porty.jpg
Część dalsza w trzecim poście ...
You do not have the required permissions to view the files attached to this post.
_aro_
Posts: 51
Joined: Mon Apr 09, 2018 5:10 pm
Location: Legnica

Post

... część trzecia

16. Jeśli masz włączoną zaporę sieciową w swoim Synology - a powinieneś mieć ze względów bezpieczeństwa :D to należy dodać wyjątek do zapory sieciowej hosta --> zezwól na ruch z całej podsieci Supli 172.22.0.0/255.255.0.0 do sieci hosta:

Panel sterowania --> bezpieczeństwo --> Zapora sieciowa --> Edytuj reguły --> Utwórz --> Porty --> Wszystko

Panel sterowania --> bezpieczeństwo --> Zapora sieciowa --> Edytuj reguły --> Utwórz --> Źródłowe IP --> Określony adres IP --> Podsieć --> Adres IP 172.22.0.0 oraz Maska podsieci/długość parametru Prefix 255.255.0.0

W ten sposób cały ruch z podsieci Supli będzie dozwolony do sieci hosta.
porty (1).jpg

17. Już końcówka:

Dodanie serwera reverse proxy przez Panel sterowania --> Portal aplikacji --> Odwrócony serwer proxy --> Utwórz
proxy.jpg

18. Dodanie certyfikatu od Let's Encrypt --> twoja.domena.pl (przykładowa nazwa domeny - musisz określić swoją):

certyfikat.jpg
19. Konfiguracja certyfikatu/przypisanie do właściwego uruchomionego przed chwilą serwera reverse proxy

Panel sterowania--> Bezpieczeństwo --> Certyfikat

Dodaj --> przechodzimy całą ścieżkę uzyskania certyfikatu - typowe postępowanie (opis tutaj https://www.youtube.com/watch?v=yajoUSlivYw, lub https://miketabor.com/install-a-lets-en ... ology-nas/)

Zaznaczamy otrzymany certyfikat --> Konfiguruj --> przypisujemy do działającej usługi na hoście otrzymany certyfikat od Let’s Encrypt --> twoja.domena.pl

20. Koniec --> powinieneś w tym momencie mieć działający własny serwer Supla pod adresem --> twoja.domena.pl dostępny z sieci LAN i WAN, każdej przeglądarki i telefonu na całym świecie.

Dajcie znać czy opis jest czytelny i jasny, czy też należy gdzieś lekko pokręcić :D
You do not have the required permissions to view the files attached to this post.
BigM
Posts: 11
Joined: Tue Feb 20, 2018 7:31 pm

Post

Dzenkuje barzo zu ten opis,
urzywan suple tylko w lokalnej sieci, i tutaj wszystko zadzalalo.

p.s. Przepraszam za muj zly polski jenzyk.
tyski
Posts: 9
Joined: Mon Sep 02, 2019 6:26 pm

Post

Fajnie opisane. Ja się trochę zmęczyłem żeby to ogarnąć bez tego tematu.
Dobra robota.
mareks6
Posts: 266
Joined: Sat Jan 13, 2018 4:39 pm
Location: Opole

Post

generalnie nie cierpię czegokolwiek robić w konsoli i unikam tego jak ognia, co oczywiście nie oznacza, że sobie z tym nie radzę - po prostu jakoś tak nudzi mnie to (wolę w tym czasie coś polutować :-)) i nie lubię tracić czasu na szukanie jakiegoś błędu jak coś pójdzie nie tak.

Raz już miałem podejście do instalacji serwera supli na DS415+ (oczywiście też z Docker'em), ale właśnie po licznych błędach w konsoli zląkłem się do reszty i poddałem.

Teraz jak widzę nową instrukcję, to zastanawiam się czy nie spróbować raz jeszcze. Pytanie tylko JAK WYGLĄDA SPRAWA AKTUALIZACJI SERWERA gdy wyjdzie nowsza wersja? Czy te wszystkie kroki trzeba przechodzić od nowa (lub jeszcze więcej bo trzeba usuwać to co jest lub robić jakieś kopie zapasowe) i czy wiąże się to z ponownym łączeniem wszystkich urządzeń klienckich (smartfonów) i wykonawczych na nowo czy wystarczy może kilkoma kliknięciami myszy z poziomu samego GUI Synology podmienić jakiś folder z zasobami nowszej wersji?
BigM
Posts: 11
Joined: Tue Feb 20, 2018 7:31 pm

Post

Dien dobry,

w sprawje update, to ja zawsze tczymalem sie tej instrukci z docker hub https://registry.hub.docker.com/r/supla/supla-cloud , i nie mialem nigdy problemow.

Upgrading to the newest version

Code: Select all

cd supla-docker
git pull
./supla.sh upgrade
co w naszym pzypadku na Synology

Code: Select all

cd /volume1/docker/supla 
git pull
./supla.sh upgrade
powinno byc.

cu
BigM
jaku2k
Posts: 890
Joined: Sun May 24, 2020 8:40 pm

Post

Dzień dobry,
mam kilka pytań.
1. Co wpisać w pola
# Mailer settings (SMTP)
MAILER_HOST=nazwa_serwera_pocztowego.pl
MAILER_PORT=465
MAILER_USER=uzytkownik@nazwa_serwera_pocztowego.pl
MAILER_PASSWORD=haslo_do_podanego_konta_pocztowego
MAILER_ENCRYPTION=ssl
MAILER_FROM=uzytkownik@nazwa_serwera_pocztowego.pl
?
Nie zakładałem skrzynki e-mail na adresie DNS.
2. Przekierowanie portów. Jeśli postępuję wg poradnika, to na ruterze powinienem mieć przekierowane porty 80, 443, 8080, 4443, 2015 i 2016?
3. W zakładce "sieć" w Dockerze mam 173.18.0.0. Czy taki adres mam wpisać przy konfiguracji zapory sieciowej? Jak i gdzie znaleźć parametr "Maska podsieci/długość parametru Prefix"?
3. Co powinienem wpisać w regułach odwróconego serwera proxy w pola "nazwa hosta" w obydwu kategoriach?
4. Jako że mam zmienny adres ip, korzystam z DNS od tplinka (moja domena xxx.tplinkdns.com). W trakcie konfiguracji certyfikatu z Let's encrypt proszony jestem o podanie jakiegoś adresu e-mail. O co z tym chodzi? Z domeną otrzymaną od tplinka nic nie robiłem; jedyny adres jaki posiadam, to na g-mailu.

Pozdrawiam i liczę na pomoc (dużo pytań, bo dopiero zaczynam ;))
Jakub
Pozdrawiam
Jakub
jaku2k
Posts: 890
Joined: Sun May 24, 2020 8:40 pm

Post

Dzień dobry,
dzięki nieocenionej pomocy @szym3k udało mi się skonfigurować serwer.
Moim największym problemem był podwójny NAT (wymuszony przez dostawcę). Jedyną możliwością było wykupienie stałego IP.
Na podstawie informacji zdobytych od @szym3k:
ad 1: można pozostawić puste (ja wstawiłem przed nie #)
ad 2: tak
ad 3: tak; jeśli chodzi o "długość parametru Prefix", to 255.255.0.0 u mnie zadziałał
ad 4: w pierwszym polu "nazwa hosta" nazwę domeny, a w drugim - adres IP urządzenia (tutaj: NAS-a)
ad 5: można tam wpisać dowolny email.
Publikuję post z nadzieją, że powyższe informacje się komuś przydadzą.
Pozdrawiam
Jakub
sobal
Posts: 3
Joined: Fri Nov 11, 2022 8:27 am

Post

Cześć,

Dziękuję za poradnik, w paru elementach był bardzo przydatny. Chciałem jednak spytać, czy ktoś próbował ostatnio instalować środowisko supla na macierzach Synology, które nie mogły być zaktualizowane do wersji DSM 7.x.

Mam DS1511+ z najnowszym DSM6.x. Występuje tu problem z instalacją kontenera supla-cloud, gdyż pakiet apache2 pobierany w czasie instalacji wywala się z powodu błędu:

(38)Function not implemented: AH00141: Could not initialize random number generator

Apache próbuje wstać kilka razy i na koniec definitywnie się wywala. Problemem jest bardzo stary kernel (3.10x), który nie jest już obsługiwany przez nowe wersje Apache, przy czym nie można skompilować na Synology nowej wersji kernela - brak jest m.in. modułów synobios. Próbowałem z wnętrza kontenera wywalić najnowszą wersję apacha (2.4.54) i zainstalowałem 2.2x, ale problem pozostał. Jest jakieś rozwiązanie? Wymiękam. Może proxy? Ale próbowałem postawić wersję z proxy, ale w niej również próbował wstać apache...

Return to “FAQ / Jak to zrobić”