Kezdjük először is azzal, hogy hova tervezünk eljutni, vagyis mik az elvárásaink:
- a VPS-ről kiszolgált összes domain kapjon automatikusan SSL tanúsítványt, emberi közreműködés nélkül,
- az újonnan felhúzott oldalak és domainek automatikusan legyenek elérhetőek az Internetről azt követően, hogy a domaineket a VPS-re irányítottuk és a konténereik futnak
- a projektek teljes mértékben testreszabható futási konfigurációval rendelkezzenek, melyet verziókövetni is lehet
- a projektek önállóan szabályozható infrastruktúrával rendelkezzenek, vagyis tetszőleges PHP, MySQL, Apache, nginx, whatever verziót használhassunk anélkül, hogy ez a többi projektet befolyásolná
- tartsuk alacsonyan a VPS-specifikus konfigurációt, gyors "menekülési lehetőséget" hagyva magunknak egy másik VPS-re, ha valami rosszul sülne el
A fenti követelményeket hatékonyan és teljes mértékben teljesíteni tudjuk egy Docker-re épülő infrastruktúrával, mely a következőképpen épül majd fel:
- az egyes projektek és oldalak tartalmazzák a saját production konfigurációjukat is, vagyis önálló szolgáltatáscsomagot szállítsanak a pl.
docker-compose.yml
fájlukban - a projekt önálló webszerverrel rendelkezik majd, ami (környezeti változókon keresztül) közli az egyetlen, minden projekt előtt "ülő" reverse proxy-val, hogy milyen domainhez tartozó lekéréseket szükséges az adott projekthez irányítani
- kizárólag a reverse proxy érintkezik a külvilággal, a projektek konténerei nem elérhetőek
- a reverse proxy a 80-as és 443-as porton keresztül érhető el, de minden forgalmat automatikusan a HTTPS protokollra irányít
- a HTTPS-hez szükséges tanúsítványt automatikusan, a mögötte ülő projekt elindítását követően beszerzi a Let's Encrypt-et használó kísérő (companion) konténeren keresztül
Segítségül készítettem egy illusztrációt, hátha könnyebben átlátjuk így a működést: