Eine von Hunderten Möglichkeiten, mehrere Produktionsprojekte auf einem Server zu veröffentlichen

Bild
Wenn es etwas mehr als einen Standort gibt und die Ressourcen eines Servers mehr als ausreichend sind, stellt sich die Frage, wie nicht alles zu viel bezahlt und in eine virtuelle Maschine des attraktivsten Dienstes gepackt werden kann, da unsere Anwendungen eines Tages zu einem großen verteilten Netzwerk heranwachsen werden - das müssen wir einen Hochlastsamen legen.


Das Folgende wird höchstwahrscheinlich für diejenigen nützlich sein, die gerade erst anfangen, selbstbewusste Schritte in ihrem Handwerk zu unternehmen.


In der Vorschau können Sie die gesamte aktuelle Architektur sehen, es ist ganz einfach, es basiert auf Docker, einschließlich


  • Nginx-Container, der nach außen schaut und alle Anforderungen überträgt
  • Viele, viele unserer Anwendungen sind jeweils in Behältern eingeschlossen
  • Prozessmanagement

Richten Sie die Umgebung ein


sudo apt update sudo apt install docker.io mkdir /home/$USER/app 

Lassen Sie uns unsere Anwendungen bereitstellen


Ich füge einen kleinen Blot hinzu: Für diejenigen, die mit Docker nicht sehr vertraut sind, werden alle Anwendungscontainer ohne Zugriff auf die externe Umgebung gestartet. Dies ist sehr praktisch - dies erhöht die Sicherheit erheblich und der Zugriff auf sie wird nur durch Proxy-Verkehr über Nginx erreicht. Sie können auch separate Hosts für Ihre Anforderungen starten, z. B. mit MariaDB oder Mongo, und über die lokale IP auf diese zugreifen.


Der erste wird auf NodeJS mit SSL verbunden sein


 mkdir /home/$USER/app/web-one.oyeooo.com mkdir /home/$USER/app/web-one.oyeooo.com/ssl nano /home/$USER/app/web-one.oyeooo.com/index.js nano /home/$USER/app/web-one.oyeooo.com/package.json 

index.js
 const fs = require("fs"), https = require("https"), express = require("express"), app = express(), port = 443 let options = { key: fs.readFileSync("ssl/web-one.oyeooo.com.key"), cert: fs.readFileSync("ssl/web-one.oyeooo.com.crt") } https.createServer(options, app).listen(port, function(){ console.log("Express server listening on port " + port); }) app.get("/", function (req, res) { res.writeHead(200) res.end("Oyeooo") }) 

package.json
 { "name": "oyeooo", "version": "1.0.0", "description": "", "main": "index.js", "directories": { "lib": "lib" }, "scripts": { "start": "node index.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1" } } 

Wir erhalten die SLL und legen die Zertifikate im Ordner /home/app/web-one.oyeooo.com/ssl ab


Die zweite wird eine einfache statische Apache-Anwendung sein


 mkdir /home/$USER/app/web-two.oyeooo.com nano /home/$USER/app/web-two.oyeooo.com/index.html 

index.html
 <!DOCTYPE html> <html> <head> <title>Welcome to me!</title> </head> <body> <h1>Oyeooo!</h1> <p><em>Thank you for using habr.</em></p> </body> </html> 

Erstellen Sie ein Netzwerk


  docker network create --subnet=172.18.0.0/24 oyeooo 

Führen Sie nun die Container aus


 sudo docker run --net oyeooo --ip 172.18.0.2 --name web-one -v /home/$USER/app/web-one.oyeooo.com:/home/app -it node bash cd /home/app npm i npm start 

Strg + q + p


 sudo docker run --net oyeooo --ip 172.18.0.3 --name web-two -d -v /home/$USER/app/web-two.oyeooo.com:/usr/local/apache2/htdocs httpd 

Strg + q + p


Gehen Sie zu Nginx-Proxy


 mkdir /home/$USER/app/nginx mkdir /home/$USER/app/nginx/conf mkdir /home/$USER/app/nginx/ssl mkdir /home/$USER/app/nginx/logs mkdir /home/$USER/app/nginx/logs/web-one.oyeooo.com mkdir /home/$USER/app/nginx/logs/web-two.oyeooo.com nano /home/$USER/app/nginx/conf/web-one.oyeooo.com.conf nano /home/$USER/app/nginx/conf/web-two.oyeooo.com.conf 

web-one.oyeooo.com.conf
 server { listen 80; server_name web-one.oyeooo.com; access_log /var/log/nginx/web-one.oyeooo.com/http-access.log; error_log /var/log/nginx/web-one.oyeooo.com/http-error.log; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name web-one.oyeooo.com; access_log /var/log/nginx/web-one.oyeooo.com/https-access.log; error_log /var/log/nginx/web-one.oyeooo.com/https-error.log; ssl_certificate /etc/nginx/ssl/web-one.oyeooo.com/web-one.oyeooo.com.crt; ssl_certificate_key /etc/nginx/ssl/web-one.oyeooo.com/web-one.oyeooo.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; location / { proxy_pass https://172.18.0.2/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; client_max_body_size 512M; } } 

web-two.oyeooo.com.conf
 server { listen 80; server_name web-two.oyeooo.com; access_log /var/log/nginx/web-two.oyeooo.com/http-access.log; error_log /var/log/nginx/web-two.oyeooo.com/http-error.log; location / { proxy_pass http://172.18.0.3/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; client_max_body_size 512M; } } 

Erweitern Sie nginx:


 sudo docker run --net oyeooo --ip 172.18.0.4 --name nginx -it -v /home/$USER/app/nginx/logs:/var/log/nginx -v /home/$USER/app/nginx/ssl:/etc/nginx/ssl -v /home/$USER/app/nginx/conf:/etc/nginx/conf.d -p 80:80 -p 443:443 nginx bash #    conf  ssl ls /etc/nginx/conf.d ls /etc/nginx/ssl # nginx service nginx start 

Die Umgebung wird bereitgestellt. Vielen Dank!


Sie können unsere Routen mit conf-Dateien regulieren - erstellen oder löschen und neu laden:


 sudo docker exec -it nginx nginx -s reload ...     crm, ,              gui   ,   . . 

Source: https://habr.com/ru/post/de456612/


All Articles