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

_aro_
Posty: 51
Rejestracja: pn kwie 09, 2018 5:10 pm
Lokalizacja: Legnica

śr wrz 25, 2019 11:48 am

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
przekierowanie.jpg (99.84 KiB) Przejrzano 2560 razy

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
folder docker.jpg (100.31 KiB) Przejrzano 2560 razy

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
ssh.jpg (113.49 KiB) Przejrzano 2560 razy

4. Tworzymy z linii poleceń folder /supla:

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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

Kod: Zaznacz cały

./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):

Kod: Zaznacz cały

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):

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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ę)

Kod: Zaznacz cały

# 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ę: 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:

Kod: Zaznacz cały

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 :

Kod: Zaznacz cały

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

Kod: Zaznacz cały

...
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 ...
_aro_
Posty: 51
Rejestracja: pn kwie 09, 2018 5:10 pm
Lokalizacja: Legnica

śr wrz 25, 2019 12:00 pm

... Część druga

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

Kod: Zaznacz cały

sudo docker ps
Otrzymujemy coś zbliżonego:

Kod: Zaznacz cały

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
docker.jpg (253.52 KiB) Przejrzano 2555 razy
oraz Docker --> Sieć

siec.jpg
siec.jpg (102.35 KiB) Przejrzano 2555 razy
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
porty.jpg (209.83 KiB) Przejrzano 2555 razy
Część dalsza w trzecim poście ...
_aro_
Posty: 51
Rejestracja: pn kwie 09, 2018 5:10 pm
Lokalizacja: Legnica

śr wrz 25, 2019 12:21 pm

... 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
porty (1).jpg (271.01 KiB) Przejrzano 2551 razy

17. Już końcówka:

Dodanie serwera reverse proxy przez Panel sterowania --> Portal aplikacji --> Odwrócony serwer proxy --> Utwórz
proxy.jpg
proxy.jpg (82.89 KiB) Przejrzano 2551 razy

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

certyfikat.jpg
certyfikat.jpg (163.98 KiB) Przejrzano 2551 razy
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
BigM
Posty: 4
Rejestracja: wt lut 20, 2018 7:31 pm

pt wrz 27, 2019 3:32 pm

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

p.s. Przepraszam za muj zly polski jenzyk.
tyski
Posty: 9
Rejestracja: pn wrz 02, 2019 6:26 pm

pn maja 04, 2020 7:00 am

Fajnie opisane. Ja się trochę zmęczyłem żeby to ogarnąć bez tego tematu.
Dobra robota.
mareks6
Posty: 148
Rejestracja: sob sty 13, 2018 4:39 pm
Lokalizacja: Opole

ndz maja 10, 2020 7:49 pm

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
Posty: 4
Rejestracja: wt lut 20, 2018 7:31 pm

śr cze 10, 2020 7:42 pm

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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

cu
BigM
ODPOWIEDZ

Wróć do „FAQ / Jak to zrobić”