NGINX Inside Docker uitvoeren (voor eenvoudig automatisch schalen)

0
174

Een van de meest voorkomende workloads van Docker is het gebruik ervan om webservers in containers te plaatsen zoals NGINX en Apache om een ​​hoogwaardige vloot voor contentlevering te runnen die eenvoudig automatisch kan worden geschaald en beheerd. We laten u zien hoe u het instelt met NGINX.

NGINX Inside Docker instellen

Docker is een containerisatieplatform dat wordt gebruikt om uw applicatie en al zijn code in één gemakkelijk te beheren containerimage te verpakken. Het proces om dit te doen is vrij gelijkaardig aan hoe je een nieuwe server zou opzetten. De container is een lege lei, dus je moet afhankelijkheden installeren, je code bouwen, kopiëren over de artefacten bouwen en over elke configuratie kopiëren. Gelukkig hoef je niet zoveel te automatiseren. NGINX heeft al een publiek beschikbare Docker-container, die je als startpunt voor je applicatie kunt gebruiken.

Afhankelijk van de toepassing die u in een container plaatst, kan dit natuurlijk wat ingewikkelder zijn. Als je een CMS zoals WordPress implementeert, heb je waarschijnlijk een externe database nodig, omdat containers niet zijn ontworpen om persistent te zijn. Een goede plek om te beginnen voor WordPress in het bijzonder, is de Docker-container van WordPress.

Om er iets meer bij te betrekken dan een eenvoudige Hello World-webpagina, zullen we maak een nieuwe projectdirectory en initialiseer een eenvoudige Vue.js-toepassing. Uw configuratie zal verschillen, afhankelijk van de inhoud die u aanbiedt, maar het algemene idee is hetzelfde.

Maak in de hoofdmap van uw project een nieuw bestand met de naam Dockerfile zonder extensie. Dit zal fungeren als de buildconfiguratie. De container is standaard leeg en bevat alleen de toepassingen en afhankelijkheden die bij de basisinstallatiekopie zijn geïnstalleerd. U moet de code van uw toepassing kopiëren; als je alleen statische inhoud aanbiedt, is dit eenvoudig, maar als je met server-side applicaties zoals WordPress werkt, moet je mogelijk extra afhankelijkheden installeren.

Advertentie

De volgende configuratie is vrij eenvoudig. Omdat dit een node-app is, moeten we npm run build uitvoeren om een ​​distributieklare build te krijgen. We kunnen dit allemaal in de Dockerfile afhandelen door een tweedelige containerbuild in te stellen:

FROM node:latest as build-stage WORKDIR /src COPY package*.json ./RUN npm install COPY ./. RUN npm run build FROM nginx als productiefase RUN mkdir /src COPY –from=build-stage /src/dist /src COPY nginx.conf /etc/nginx/nginx.conf

De opdracht FROM van de eerste regel haalt de node-container uit Docker Hub en maakt een nieuwe container met de naam build-stage. De volgende cd gaat naar die map en kopieert het pakket.json. Vervolgens voert het npm install uit, kopieert vervolgens de code van de app en start het bouwproces. Als uw toepassing vanuit de broncode moet worden gebouwd, wilt u iets soortgelijks doen.

De volgende status haalt de nginx-container op om als productie-implementatie te dienen. Het maakt de src-map en kopieert vervolgens, vanuit de build-stage-container, de /src/dist/-map met de build-artefacten naar de /src-map van de productiecontainer. Vervolgens kopieert het een NGINX-configuratiebestand.

U wilt ook een nieuw bestand maken met de naam .dockerignore, om het te vertellen node_modules te negeren, evenals eventuele build-artefacten van lokale builds.

**/node_modules **/dist

Het Docker-bestand verwijst naar een nginx.conf, die u ook moet maken. Als je een complexere configuratie uitvoert met meerdere configuraties in /sites-available, wil je misschien een nieuwe map maken voor je NGINX-configuratie en die kopiëren.

gebruiker nginx; werknemer_processen 1; error_log /var/log/nginx/error.log waarschuwing; pid /var/run/nginx.pid; evenementen { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type applicatie/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 hoofd; verzendbestand aan; keepalive_timeout 65; server { luister 80; servernaam localhost; locatie/{ root /src; indexindex.html; try_files $uri $uri//index.html; } error_page 500 502 503 504 /50x.html; locatie = /50x.html { root /usr/share/nginx/html; } } }

Dit is gewoon een HTTP-webserver. De eenvoudigste manier om HTTPS in te stellen is door de certbot van LetsEncrypt lokaal uit te voeren en het certificaat van /etc/letsencrypt/live/example.com/fullchain.pem naar de productiecontainer te kopiëren. Deze certificaten zijn 90 dagen geldig, dus u moet ze regelmatig vernieuwen. U kunt dit automatiseren als onderdeel van het containerbouwproces.

Advertentie

Zodra alles in orde is, kunt u de Docker build:

docker build uitvoeren. -t my-app

Hiermee wordt de container gebouwd als mijn-app, waarna u deze kunt taggen en naar ECS of een containerregister kunt sturen voor eventuele implementatie. Je moet het natuurlijk eerst lokaal testen met docker run binding localhost:8080 naar poort 80 van de NGINX-instantie:

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

Zodra je een ingebouwde image hebt , is het vrij eenvoudig om het in productie te gebruiken. U kunt onze gids lezen voor het opzetten van een automatisch schalende containerimplementatie op AWS ECS voor meer informatie, of onze gids lezen over het opzetten van een CI/CD-pijplijn met containers om geautomatiseerde builds en implementaties af te handelen.

< strong>GERELATEERD: Wat is een PEM-bestand en hoe gebruik je het?