Z tego artykułu dowiesz się jak:
* Poprawnie napisać plik docker-compose w wersji 3 dla kilku domen z różnymi aplikacjami (Jenkins oraz wordpress), * Stworzyć konfigurację która będzie automatycznie odnawiać certyfikaty ssl od let’s encrypt używając certbora, * Poprawnie skonfigurować serwer nginx tak aby obługiwał ruch i przekierowywał na port 443 https bez www.
Przed przystąpieniem do instalacji powinieneś wykonać kroki z mojego poradnika lub posiadać swój vps/serwer:
S1E1: Stworzenie i zabezpieczenie darmowego konta w aws S1E2: Stworzenie i zabezpieczenie darmowego serwera vps w aws
Pliki do pobrania:
W pierwszej kolejności zamieszczę linki do gita z gotową konfiguracją, która zaoszczędzi Ci wiele czasu :
Docker compose: https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-docker-compose/-/blob/main/app-server.local/docker-compose.yaml
Nginx: https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-nginx/-/blob/main/nginx.conf
Skrypt inicjujący certyfikaty: https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-nginx/-/blob/main/init.sh
Ten wpis powstał w oparciu o : https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71
1. Stworzenie podstawowej konfiguracji docker compose
Pierwszym krokiem jaki musisz wykonać, będzie stworzenie pliku docker-compose.yaml który będzie zawierał minimalną konfigurację potrzebną do pierwszego uzyskania certyfikatów ssl od let’s encrypt.
https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-docker-compose/-/blob/main/app-server.local/docker-compose.yaml-init
W sekcji certbot znajduje się wpis entrypoint, który odpowiada za automatyczne odnowienie certyfikatów. Instrukcja sprawdza co 12 godzin czy odnowić certyfikat.
w sekcji nginx znajduje się command: instrukcja potrzebna podczas odnawiania certyfikatów. Działa to w ten sposób: nginx przeładowuje konfiguracje co sześć godzin. Gdy certbot doda nowe certyfikaty masz pewność że będziesz miał je załadowane.
Pozostałe wpisy są standardowe, jeśli ich nie znasz to odsyłam do dokumentacji dockera która jest bardzo dobrze napisana: https://docs.docker.com/compose/ ja, nie będę ich tutaj omawiał.
2. Uzupełnienie pliku init.sh o swoje dane
Skrypt tworzący pierwsze certyfikaty znajduje się pod url:
https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-nginx/-/blob/main/init.sh
ściągnij go i uzupełnij w polach:
domains=(domains.com) : w nawiasach podajesz domeny oddzielone spacją dla których chcesz dodać certyfikaty ssl.
email=”your@email.com” : tutaj podajesz swój email
staging=0 : w tym miejscu uzupełniasz o wartości 0 lub 1. Jeśli chcesz tylko testować ustawienia to zmień wartość na 1, dzięki temu nie będą naliczane limity dla zapytań, jak konfiguracja będzie ok zmień znowu na 0, co spowoduje wygenerowanie docelowych certyfikatów.
3. Stworzenie podstawowej konfiguracji dla nginx
Podstawowa konfiguracja znajduje się pod url:
https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-nginx/-/blob/main/init.sh
Na początku stworzysz konfiguracje nginx w najprostszej możliwej wersji potrzebnej do inicjalnego wygenerowania certyfikatów podając tylko listę domen oddzieloną spacjami w polu server_name.
Przekierowanie na ssl, oraz na bez www dokończysz w kolejnych krokach.
Pamiętaj, plik z konfiguracją nginx należy umieścić w folderze który skonfigurowałeś w docker-compose!!! Jeśli nic nie zmieniałeś to zapisz plik do folderu data/nginx.
4. Uruchomienie pliku init
Plik init uruchamiamy poleceniem:
sudo ./init.sh
Jeśli wszystko skonfigurowałeś prawidłowo to ostatnim komunikatem w konsoli będzie info o reloadzie nginx po stworzeniu certyfikatu od lets enctypt. W folderze data/certbot/conf/live/[twoja domena] będzie wygenerowany jeden certyfikat dla wszystkich domen jakie podałeś wcześniej.

Jeśli będziesz miał problemy i będziesz chciał rozpocząć od nowa to przydatną komendą będzie wykonanie w konsoli:
sudo docker stop $(docker ps -a -q); docker rm $(docker ps -a -q); docker volume rm $(docker volume ls -qf dangling=true) -f
zatrzymanie wszystkich kontenerów, usunięcie kontenerów oraz ich volume.
Ponadto usuwaj folder certbot który znajduje się w data.
Na tym etapie dla swoich domen w teście ssl https://www.ssllabs.com/ssltest/ powinieneś mieć ocenę A.
5. Docelowa konfiguracja docker compose
W pierwszej kolejności zatrzymaj serwer nginx poleceniem :
docker compose stop
Następnie edytuj plik docker-compose.yaml dodając końcową konfigurację jak w repozytorium:
https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-docker-compose/-/blob/main/app-server.local/docker-compose.yaml
Teraz masz ustawiony docker compose na stworzenie dwóch odmiennych aplikacji, Jenkinsa oraz wordpress. W tym miejscu pamiętaj proszę o wpisaniu swojego hasła w każdym miejscu gdzie jest ustawione hasło password!!!
6. Docelowa konfiguracja nginx
Teraz przejdź do folderu data/nginx/ i otwórz twój konfig. Dodaj do niego pola jak w pliku:
https://gitlab.com/jaktworzycaplikacje.pl/konfiguracja-nginx/-/blob/main/nginx.conf
na każdą domenę przypadają po trzy bloki serwer już tłumaczę dlaczego:
Pierwszy blok ma ustawiony serwer name na www i bez www oraz nasłuch na port 80 z ustawionym location na acme-challenge pozwala to na odnowę certyfikatów przez certbota. Na końcu bloku znajduje się przekierowanie innych requestów na https z www i bez www.
Drugi blok odpowiada tylko za przekierowanie https z www.nazwadomeny.pl na bez www czyli nazwadomeny.pl
W ostatnim bloku trzecim server znajduje się już docelowa konfiguracja i tutaj chciałbym zwrócić twoją uwagę na pole proxy_pass. Tutaj należy ustawić nazwę kontenera jaką masz ustawioną w docker-compose.yaml oraz po nazwie kontenera port. Jenkins ma ustawiony default port 8080 dlatego w proxy_pass jest dla Jenkinsa jest Jenkins:8080. WordPress ma ustawiony default port na 80, dlatego w jego bloku proxy_pass wystarczy samo wordpress.
Jeśli będziesz chciał dodać kolejne domeny, po prostu odtwarzaj tą instrukcję od początku.