Hur man kör NGINX Inside Docker (för enkel automatisk skalning)

0
157

En av de vanligaste arbetsbelastningarna för Docker använder den för att containerisera webbservrar som NGINX och Apache för att driva en högpresterande innehållsleveransflotta som enkelt kan skalas och hanteras automatiskt. Vi visar dig hur du konfigurerar det med NGINX.

Konfigurera NGINX Inside Docker

Docker är en containeriseringsplattform som används för att paketera din applikation och all dess kod till en lätt hanterbar containerbild. Processen för att göra detta liknar ganska hur du skulle gå tillväga för att ställa in en ny server & behållaren är en tom skiffer, så du måste installera beroenden, bygga din kod, kopiera över bygga artefakter och kopiera över vilken konfiguration som helst. Lyckligtvis behöver du inte automatisera så mycket. NGINX har redan en allmänt tillgänglig Docker -behållare, som du kan använda som utgångspunkt för din applikation.

Beroende på vilken applikation du containeriserar kan det naturligtvis vara lite mer involverat. Om du distribuerar ett CMS som WordPress, kommer du troligen att behöva ha en extern databas, eftersom behållare inte är avsedda att vara beständiga. Ett bra ställe att börja för WordPress, i synnerhet, skulle vara WordPress ’ s Docker -behållare.

För att ha något lite mer involverat än en enkel Hello World -webbsida, kommer vi ’ skapa en ny projektkatalog och initiera en grundläggande Vue.js -applikation. Din konfiguration kommer att vara annorlunda beroende på vilket innehåll du visar, men den allmänna idén är densamma.

Vid roten till ditt projekt, skapa en ny fil som helt enkelt heter Dockerfile utan tillägg. Detta fungerar som byggkonfiguration. Som standard är behållaren tom och innehåller endast de program och beroenden som installeras med basavbildningen. Du måste kopiera över programmets kod; om du bara serverar statiskt innehåll är det enkelt, men om du arbetar med applikationer på serversidan som WordPress kan du behöva installera ytterligare beroenden.

Annonsering

Följande konfiguration är ganska grundläggande. Eftersom det här är en nodapplikation måste vi köra npm run build för att få en distributionsklar bygg. Vi kan hantera allt detta i Dockerfilen genom att konfigurera en tvådelad containerbyggnad:

FRÅN nod: senaste som WORKDIR/src COPY-paket i build-stage*.json ./RUN npm installera COPY ./. RUN npm run build FRÅN nginx som produktionssteg RUN mkdir /src COPY –from = build-stage /src /dist /src COPY nginx.conf /etc/nginx/nginx.conf

Den första radens FROM-kommando drar nodbehållaren från Docker Hub och skapar en ny behållare som kallas build-stage. Nästa cd ‘ s till den katalogen och kopierar över package.json. Sedan körs npm -installationen, kopieras sedan över appens kod och startar byggprocessen. Om din applikation måste byggas från källan vill du göra något liknande detta.

Nästa tillstånd drar nginx -behållaren för att fungera som produktionsdistribution. Det gör src-katalogen och kopierar sedan, från byggstadiet-behållaren, mappen /src /dist /som innehåller byggartefakterna till /src-mappen i produktionsbehållaren. Den kopierar sedan över en NGINX -konfigurationsfil.

Du vill också göra en ny fil som heter .dockerignore, för att be den ignorera nod_moduler samt eventuella byggartefakter från lokala versioner.

**/nod_moduler **/dist

Dockerfilen refererar till en nginx.conf, som du också måste skapa. Om du kör en mer komplex konfiguration med flera konfigurationer i /tillgängliga webbplatser kanske du vill skapa en ny mapp för din NGINX-konfiguration och kopiera den över.

användare nginx; worker_processes 1; error_log /var/log/nginx/error.log varna; pid /var/run/nginx.pid; händelser {worker_connections 1024; } http {include /etc/nginx/mime.types; default_type application/octet-stream; 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; skicka fil på; keepalive_timeout 65; server {lyssna 80; server_name localhost; location/{root/src; index index.html; try_files $ uri $ uri//index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html {root/usr/share/nginx/html; }}}

Detta är bara en HTTP -webbserver. Det enklaste sättet att konfigurera HTTPS är att köra LetsEncrypts certbot lokalt och kopiera över certifikatet från /etc/letsencrypt/live/example.com/fullchain.pem till produktionsbehållaren. Dessa certifikat är giltiga i 90 dagar, så du måste förnya dem regelbundet. Du kan automatisera detta som en del av containerbyggprocessen.

Annonsering

När allt är i ordning kan du köra Docker build:

docker build. -t my-app

Detta kommer att bygga behållaren som min app, varefter du är fri att tagga den och skicka den till ECS eller ett containerregister för eventuell distribution. Du bör naturligtvis testa det lokalt först med docker run -bindning localhost: 8080 till port 80 i NGINX -instansen:

docker run -d -p 8080: 80 my -app

När du har en byggd bild , att distribuera det i produktionen är ganska enkelt. Du kan läsa vår guide för att konfigurera en automatisk skalningsdistribution på AWS ECS för att lära dig mer, eller läsa vår guide om hur du installerar en CI/CD-pipeline med behållare för att hantera automatiska byggnader och distributioner.

< strong> RELATERAD: Vad är en PEM -fil och hur använder du den?