GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Hostujte více webových stránek na kontejnerech Docker

Docker je mimořádně užitečná platforma, která umožňuje vývojářům snadno vyvíjet a nasazovat aplikace. V tomto článku se podíváme na to, jak používat kontejnery Docker k hostování více webů na jednom serveru. Jednou z nejvýznamnějších výhod používání kontejnerů Docker je to, že jsou lehké, rychlejší a snadněji se spravují.

Tento měsíc jsem přesunul dvě ze svých vlastních aplikací ze dvou samostatných serverů na jeden server, každý ve svém vlastním kontejneru Docker. Je snazší spravovat obě aplikace a také mi to snížilo výrobní náklady.

Každá aplikace je nastavena ve vlastním zabezpečeném prostředí a je přístupná prostřednictvím názvu domény. Než přejdeme k pokynům, stručně probereme, jak to bude fungovat a jaké nástroje budeme potřebovat k nastavení všeho. Takže začneme.

Co chceme nastavit?

Chceme použít kontejnery Docker k nastavení jednoho serveru, který může obsluhovat více aplikací nebo webů. Když uživatel požaduje adresu URL pro jednu z hostovaných webových stránek, hlavní server by měl požadavek přesměrovat do kontejneru, který by pak měl poskytovat obsah.

Abychom toho dosáhli, budeme muset nastavit server. Pro tento článek jsem nastavil server se statickou IP adresou. Pokud hledáte dobrou cloudovou hostingovou službu, podívejte se na MassiveGRID, DigitalOcean nebo Vultr.

Zadruhé vytvoříme proxy pro směrování požadavků uživatelů do jejich příslušných kontejnerů. Pro tento účel je k dispozici mnoho nástrojů, ale já použiji nginx-proxy, protože je extrémně jednoduchý na nastavení a má téměř všechny funkce, které požadujeme. Nakonec použijeme Cloudflare jako správce DNS k nasměrování názvu domény na hostitelský server (IP adresu).

Doporučuji také používat Portainer, snadno použitelné grafické rozhraní pro správu kontejnerů dockerů. Při nastavení Porttaineru postupujte podle tohoto návodu.

Jakmile je váš server v provozu, ssh na server a aktualizujte jej.

ssh [email protected]

Pokud jste pro přihlášení nastavili klíč ssh, použijte pro přihlášení možnost -i option in the ssh command to log in pomocí soukromého klíče ssh.

ssh -i path-to-ssh-key [email protected]

Připravte server

Na hostitelském počítači používám Ubuntu 20.04. Pokyny budou stejné, ať používáte Debian nebo jinou distribuci založenou na debianu. U jakékoli jiné distribuce se budou lišit pouze pokyny pro konfiguraci dockeru a vše ostatní zůstane stejné. Chcete-li nainstalovat Docker na Ubuntu, postupujte podle tohoto průvodce.

Použití certifikátu SSL s nginx-proxy

Druhým krokem je vytvoření adresáře, který bude ukládat SSL certifikáty a klíče pro každou doménu. Na hostitelském serveru vytvořte adresář v adresáři /etc/. Tento adresář si můžete pojmenovat, jak chcete. Pro tento článek jsem to pojmenoval cloudflare.

mkdir /etc/cloudflare

Později tento adresář svážeme s nginx-proxy pro přístup k SSL certifikátům a klíčům pro každý název domény.

Vytvořit dockerovou síť

Vytvoříme také virtuální síť, ke které se připojí každý docker kontejner, včetně nginx-proxy.

docker network create nginx-proxy

Nastavení nginx-proxy

Pokud chceme, můžeme vytvořit proxy pro řešení takových situací. Naštěstí vývojáři nginx vytvořili celý obraz Dockeru, který bude sledovat všechny kontejnery a aktualizuje se, jakmile bude vytvořen jakýkoli nový kontejner. Chcete-li vytvořit nginx-proxy docker (s ohledem na ssl), spusťte následující příkaz –

docker run -d –name nginx-proxy -p 80:80 -p 443:443 –net nginx-proxy -v /etc/cloudflare:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro nginxproxy/nginx-proxy

Pojďme si výše uvedený příkaz rozebrat krok za krokem.

  • spustit – Tato možnost vytvoří kontejner.
  • -d – Umožňuje režim ladění. V případě, že se něco pokazí, vygeneruje užitečné informace k nalezení problému.
  • –jméno – Název kontejneru.
  • -p 80:80 – Je to nesmírně důležité. Parametr -p váže port hostitele s portem kontejneru. Na levé straně 80:80 je hostitelský port a naopak.
  • –net – Propojí nově vytvořený kontejner se sítí nginx-proxy.
  • -v /etc/cloudflare:/etc/nginx/certs – Nezbytné, pokud budete na svých webech používat SSL. Svázání hostitelského adresáře s adresářem kontejneru nginx-proxy, kde jsou uloženy certifikáty a klíče SSL.
  • -v /var/run/docker.sock:/tmp/docker.sock:ro – Připojení soketu dockeru ke kontejneru pro komunikaci s démonem dockeru.
  • nginxproxy/nginx-proxy – Adresa obrázku nginx-proxy docker hostovaného na hub.docker.com.

Jakmile vytvoříte kontejner nginx-proxy, vyřešili jsme největší hádanku hry. Bylo to velmi jednoduché. Že jo? To vše díky obrázku nginx-proxy; jinak bychom museli vše dělat ručně.

Vytvořit kontejner s proměnnou prostředí VIRTUAL_HOST

Proměnnou prostředí VIRTUAL HOST používá nginx-proxy k určení, která doména by měla směřovat na který server. Pokaždé, když vytvoříte nový kontejner, nastavte hodnotu proměnné VIRTUAL HOST na název domény, na který chcete odkazovat.

docker run -it -d --name gaminggroup.online -h gaminggroup.online --expose 80 --net nginx-proxy -e VIRTUAL_HOST=gaminggroup.online -e VIRTUAL_HOST=www.gaminggroup.online httpd

Pojďme si výše uvedený příkaz rozebrat krok za krokem.

  • -h – nastaví plně kvalifikovaný název domény (nastaví název domény)
  • –vystavit – Zpřístupní port 80, aby umožnil provoz HTTP
  • –net – Připojte nově vytvořený kontejner k síti nginx-proxy
  • VIRTUAL_HOST=domena.xyz – Proměnnou VIRTUAL_HOST používá nginx-proxy k přesměrování požadavků uživatelů do jejich příslušných kontejnerů
  • httpd – Stáhněte obraz serveru Apache z docker hub

Výše uvedený příkaz spustí kontejner s populárním webovým serverem Apache. Jakýkoli požadavek, který dorazí na hostitelský server, je přesměrován na nginx-proxy, který jej pak předá na port 80 tohoto kontejneru .

Nasměrujte doménu na server

Nakonec nakonfigurujte název domény tak, aby odkazoval na hostitelský server. Vytvořte záznam A s názvem „@“ a IPv4 jako IP adresou hostitelského serveru. Po dokončení chvíli počkejte. Šíření DNS může trvat od několika minut do několika hodin.

Po dokončení šíření DNS bude název vaší domény ukazovat na nově vytvořený kontejner, který hostí webový server Apache. Nyní je vše nastaveno. Vše, co musíte udělat, je pokračovat ve vytváření kontejnerů s proměnnou VIRTUAL_HOST a nginx-proxy správně přesměruje provoz do kontejneru.

Používání SSL/HTTPS v Dockeru

Protože většina z nás dává přednost poskytování obsahu přes HTTPS spíše než nezabezpečený HTTP, nginx-proxy to snadno zvládne. Již jsme předali parametr -v s adresářem /etc/cloudflare když nastavíme nginx-proxy kontejner. Tento adresář je spojen s nginx-proxy adresář /etc/nginx/certs .

Každý certifikát SSL a klíč musí být uloženy v /etc/cloudflare se správným jménem. SSL certifikáty a klíče by měly být přejmenovány podle názvu domény, pro kterou jsou určeny. Například pro název domény example.com , musí být certifikát SSL přejmenován na example.com.crt a klíč musí být example.com.key .

Závěr

Použití nginx-proxy značně zjednodušilo proces. Jednoduše nasaďte kontejner, který zvládne vše ostatní. Poté můžete nasadit tolik kontejnerů, kolik chcete, aniž byste se museli starat o příliš mnoho konfiguračních souborů. Kontejnery jsou lehké, ale s rostoucím provozem/pracovním zatížením bude potřeba více zdrojů.

Pokud jste při provádění výše uvedených kroků měli nějaké potíže, dejte mi vědět v sekci příkazů níže nebo se připojte k našemu serveru Discord pro rychlou pomoc.


Docker
  1. Co je Docker (a Linux kontejnery?)

  2. Jak používat Docker Compose

  3. Jak připojit kontejnery Docker

  1. Jak nakonfigurovat více webových stránek s webovým serverem Apache

  2. Jak vypsat Docker kontejnery

  3. Úvod do Docker Containers

  1. Co je Docker?

  2. Docker vs. Kubernetes

  3. Jak nainstalovat a hostovat server OpenVPN pomocí Dockeru