Agencja internetowa » Wiadomości cyfrowe » Jak uruchomić NGINX Inside Docker (dla łatwego autoskalowania)

Jak uruchomić NGINX Inside Docker (dla łatwego autoskalowania)

czy-kontenery-warte-głowy-w-chmurze-z-chmury-3358835

Jednym z najczęstszych obciążeń platformy Docker jest używanie go do konteneryzacji serwerów internetowych, takich jak NGINX i Apache, w celu uruchomienia floty dostarczania treści o wysokiej wydajności, którą można łatwo skalować i zarządzać automatycznie. Pokażemy Ci, jak skonfigurować go za pomocą NGINX.

Konfigurowanie NGINX w Docker

Docker to platforma konteneryzacji służąca do konsolidacji aplikacji i całego jej kodu w jeden, łatwy do zarządzania obraz kontenera. Proces wykonywania tego jest dość podobny do konfiguracji nowego serwera — kontener to pusta karta, więc będziesz musiał zainstalować zależności, skompilować kod, skopiować artefakty kompilacji i skopiować dowolną konfigurację. Na szczęście nie musisz tak bardzo automatyzować. NGINX ma już publicznie dostępny kontener platformy Docker, którego można użyć jako punktu wyjścia dla aplikacji.

Oczywiście w zależności od aplikacji, którą kontenerujesz, może to być nieco bardziej złożone. Jeśli wdrażasz system CMS, taki jak WordPress, prawdopodobnie będziesz potrzebować zewnętrznej bazy danych, ponieważ kontenery nie są zaprojektowane jako trwałe. W szczególności dobrym miejscem do rozpoczęcia korzystania z WordPressa byłby kontener WordPress Docker.

Aby mieć coś bardziej złożonego niż prosta strona internetowa Hello World, utworzymy nowy katalog projektu i zainicjujemy podstawową aplikację Vue.js. Twoja konfiguracja będzie się różnić w zależności od treści, którą udostępniasz, ale ogólna idea jest taka sama.

jak-uruchamiać-nginx-inside-docker-for-a-scale-39

W katalogu głównym projektu utwórz nowy plik o nazwie po prostu Dockerfile bez przedłużenia. Będzie to służyć jako konfiguracja kompilacji. Domyślnie kontener jest pusty i zawiera tylko aplikacje i zależności, które są instalowane z obrazem podstawowym. Będziesz musiał skopiować kod ze swojej aplikacji; jeśli obsługujesz tylko zawartość statyczną, jest to łatwe, ale jeśli pracujesz z aplikacjami po stronie serwera, takimi jak WordPress, może być konieczne zainstalowanie dodatkowych zależności.

Poniższa konfiguracja jest dość podstawowa. Ponieważ jest to aplikacja węzła, musimy uruchomić npm run build aby otrzymać wersję gotową do dystrybucji. Możemy to wszystko obsłużyć w pliku Dockerfile, konfigurując dwuczęściową kompilację kontenera:

Z węzła: najnowszy jako build-stage WORKDIR / src COPY pakiet * .json ./ RUN npm install COPY ./. RUN npm uruchom kompilację Z nginx jako etap produkcyjny RUN mkdir / src COPY --from = build-stage / src / dist / src KOPIUJ nginx.conf /etc/nginx/nginx.conf

Pierwsza linia FROM polecenie ciągnie node Kontener Docker Hub i tworzy nowy kontener o nazwie build-stage. Następujące cdZnajduje się w tym katalogu i skopiuj do package.json. Potem biegnie npm install, a następnie skopiuj kod aplikacji i rozpocznij proces tworzenia. Jeśli Twoja aplikacja ma być skompilowana ze źródła, będziesz chciał zrobić coś podobnego.

Następny stan ciągnie nginx kontener, który ma służyć jako wdrożenie produkcyjne. To sprawia, że src katalog, a następnie skopiuj, z build-stage pojemnik, /src/dist/ folder zawierający artefakty budowlane, do /src folder pojemnika produkcyjnego. Następnie kopiuje plik konfiguracyjny NGINX.

Będziesz także chciał utworzyć nowy plik o nazwie .dockerignore, powiedz mu, żeby zignorował node_modules a także wszystkie artefakty budowania z lokalnych kompilacji.

** / node_modules ** / dist

Plik Dockerfile odnosi się do nginx.conf, który również będziesz musiał stworzyć. Jeśli prowadzisz bardziej złożoną konfigurację z wieloma konfiguracjami w /sites-available, możesz utworzyć nowy folder dla konfiguracji NGINX i skopiować go.

nginx użytkownika; procesy_pracownika 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; wydarzenia {worker_connections 1024; } http {include /etc/nginx/mime.types; aplikacja typu default_type / strumień oktetowy; log_format main '$ remote_addr - $ remote_user [$ time_local] "$ request"' '$ status $ body_bytes_sent "$ http_referer"' '"$ http_user_agent" "$ http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; wyślij plik na; keepalive_timeout 65; serwer {słuchaj 80; nazwa_serwera host lokalny; lokalizacja / {root / src; indeks indeks.html; try_files $ uri $ uri //index.html; } strona_błędu 500 502 503 504 /50x.html; lokalizacja = /50x.html {root / usr / share / nginx / html; }}}

To tylko serwer WWW HTTP. Najprostszym sposobem na skonfigurowanie protokołu HTTPS byłoby uruchomienie certbota LetsEncrypt lokalnie i skopiowanie certyfikatu z /etc/letsencrypt/live/example.com/fullchain.pem w pojemniku produkcyjnym. Certyfikaty te są ważne przez 90 dni, więc będziesz musiał je regularnie odnawiać. Możesz to zautomatyzować w ramach procesu tworzenia kontenera.

Gdy wszystko jest w porządku, możesz uruchomić kompilację Docker:

kompilacja dokera. -t moja-aplikacja

To zbuduje kontener jako my-app, po czym możesz go otagować i wysłać do ECS lub rejestru kontenerów w celu ewentualnego wdrożenia. Powinieneś lub oczywiście najpierw przetestować go lokalnie za pomocą docker run ograniczający localhost:8080 na porcie 80 instancji NGINX:

Docker run -d -p 8080: 80 moja-aplikacja

Po zbudowaniu obrazu wdrożenie go w środowisku produkcyjnym jest dość proste. Możesz przeczytać nasz przewodnik dotyczący konfiguracji wdrożenie kontenera autoskalowania w AWS ECS aby dowiedzieć się więcej, lub przeczytaj nasz poradnik na wdrożenie potoku CI/CD z kontenerami do zarządzania kompilacjami i automatycznymi wdrożeniami.

★ ★ ★ ★ ★