Maison > Opération et maintenance > Nginx > le corps du texte

Comment utiliser Docker pour déployer des applications Nginx+Flask+Mongo

WBOY
Libérer: 2023-05-14 16:16:06
avant
1280 Les gens l'ont consulté

nginx est utilisé comme serveur, mongo est le support de base de données et flask est le framework Web du langage python. Grâce aux fonctionnalités de conteneur de Docker, il peut être facilement déployé sur le serveur Linux

Préparation du projet

. Le répertoire principal du projet est le suivant

__ project-name
  |__ docker-file
    |__ ningx
      |__ dockerfile
      |__ conf
        |__ nginx.conf
    |__ flask
      |__ dockerfile
      |__ requirements.txt
    |__ mongo
      |__ dockerfile
      |__ setup.sh
    |__ docker-compose.yml
  |__ src
    |__ app
      |__ ...
    |__ run.py
Copier après la connexion

Brève description

Le répertoire docker-file est le fichier de configuration déployé par docker

Le répertoire src est le code python de l'application flask

Configuration détaillée de Docker

docker-compose configuration

version: '2.2'
services:
 mongo:
  build: ./mongo
  volumes:
   - "./mongo/db:/data/db"
  restart: always
  ports:
   - "27017:27017"
  environment:
   mongo_initdb_root_username: root
   mongo_initdb_root_password: 123456
 flask:
  build: ./flask
  links:
   - mongo
  ports:
   - "5000:5000"
  expose:
   - "5000"
  volumes:
   - ../src:/home/web
 nginx:
   build: ./nginx
   links:
    - flask
   volumes:
    - "./nginx/log:/var/log/nginx"
    - "../:/usr/share/nginx/html"
   ports:
    - "80:80"
    - "8080:8080"
    - "443:443"
   restart: always
Copier après la connexion

La configuration de mongodb

/mongo/dockerfile a le contenu suivant

from mongo:3.6
# 设置时区
env tz=asia/shanghai
run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone
# 设置工作目录
env workdir /usr/local/work
env auto_run_dir /docker-entrypoint-initdb.d
env install_mongo_shell setup.sh
run mkdir -p $workdir
# 复制数据库的初始化命令
copy ./$install_mongo_shell $auto_run_dir/
run chmod +x $auto_run_dir/$install_mongo_shell
Copier après la connexion

/mongo/setup.sh a le contenu suivant

Le but de ceci Le fichier consiste à créer un test utilisateur avec un mot de passe de test après avoir démarré mongodb et à lui donner une base de données. Les opérations de lecture et d'écriture de test

#!/bin/bash
mongo <<eof
use admin;
db.auth(&#39;root&#39;, &#39;123456&#39;);
use dmx_aluminum;
db.createuser({user:&#39;test&#39;,pwd:&#39;test&#39;,roles:[{role:&#39;readwrite&#39;,db:&#39;test&#39;}]});
db.createcollection("user");
eof
Copier après la connexion

configuration de l'application flask

/flask/dockerfile le contenu est le suivant

from python:3.6
# 设置时区
env tz=asia/shanghai
run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone

# 设置工作区
run mkdir -p /home/web
workdir /home/web
# 添加依赖
add requirements.txt /home/web/requirements.txt
run pip3 install -i https://pypi.douban.com/simple/ -r requirements.txt

# 使用gunicorn启动应用
cmd gunicorn -w 4 -b 0.0.0.0:5000 run:app
Copier après la connexion

/src/app/run.py code

app.run pour le débogage est commenté ici (), lors de la publication, utilisez gunicorn pour démarrer

from app import create_app
app = create_app(&#39;default&#39;)
app.debug=false
# if __name__ == &#39;__main__&#39;:
#  app.run()
Copier après la connexion

configuration nginx

/nginx/dockerfile le contenu est le suivant

from nginx:1.14
# 设置时区
env tz=asia/shanghai
run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone
# 复制配置
copy conf/nginx.conf /etc/nginx/nginx.conf
Copier après la connexion
Le contenu de

/nignx/conf/nginx.conf est le suivant

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid    /var/run/nginx.pid;

events {
  worker_connections 1024;
}


http {
  include    /etc/nginx/mime.types;
  default_type application/octet-stream;

  log_format main &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;
           &#39;$status $body_bytes_sent "$http_referer" &#39;
           &#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;

  access_log /var/log/nginx/access.log main;

  sendfile    on;
  #tcp_nopush   on;

  keepalive_timeout 65;

  # 开启gzip
  gzip on;
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  #gzip_http_version 1.0;
  gzip_comp_level 1;
  gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_vary off;
  gzip_disable "msie [1-6]\.";

  server {
    listen 80;
    server_name localhost;
    keepalive_timeout 5;
    root /usr/share/nginx/html;

    location /static/ {
      alias /usr/share/nginx/html/src/app/static/;
    }

    location / {
      # checks for static file, if not found proxy to app
      try_files $uri @flask_app;
    }

    location @flask_app {
      proxy_pass http://192.168.0.2:5000; # 发布在阿里云上,应填写内网ip
      proxy_redirect off;
      proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
      proxy_set_header host $http_host;
      proxy_set_header x-real-ip $remote_addr;

      #proxy_buffers 8 32k;
      #proxy_buffer_size 64k;

    }
  }


}
Copier après la connexion

Démarrer le déploiement

  1. Entrez le répertoire docker-flie cd docker-flie

  2. Démarrez docker docker-compose up

  3. Voir le containers status docker ps

  4. Entrez 127.0.0.1 dans le navigateur de déploiement local

Apparaît enfin Trois conteneurs similaires à docker_file_nginx_1, docker_file_mongo_1 et docker_file_flask_1 indiquent le succès ! ! !

Tucao

1 Le fichier d'initialisation dans le conteneur mongol doit être placé dans le répertoire docker-entrypoint-initdb.d

J'ai essayé ce qui suit, et cela montrera que mongdb n'a pas démarré.

add setup.sh /data/setup.sh
run chmod +x /data/setup.sh
cmd ["/data/setup.sh"]
Copier après la connexion

2 L'application flask ne peut pas se connecter à mongo. Cet article utilise la méthode du lien.

La configuration de la base de données doit être écrite en conséquence :

mongodb_settings = {
    &#39;db&#39;: &#39;test&#39;,
    &#39;host&#39;: &#39;mongo&#39;, # 127.0.0.1 host地址一定要写你配置的--link的名字
    &#39;username&#39;: &#39;test&#39;,
    &#39;password&#39;: &#39;test&#39;,
    &#39;port&#39;: 27017
  }
Copier après la connexion

Revenir à 127.0.0.1 lors des tests locaux

3 Le mode proxy utilisé dans la configuration nginx, où l'IP pour exécuter l'application flask doit être l'IP de l'intranet

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal