当前位置:   article > 正文

6.零基础快速入门Python Web开发——docker+uwsgi部署_docker uwsgi

docker uwsgi

单容器部署+uwsgi

2.1 案例

1)把UWSGI加入Django容器中的准备工作

在前面例子中我们使用了Django了自带的runserver命令启动了测试服务器,但实际生成环境中你应该需要使用支持高并发的uwsgi服务器来启动Django服务。尽管本节标题是把uwsgi加入到Django容器中,但本身这句话就是错的,因为我们Django的容器是根据django_docker_img:v1这个镜像生成的,我们的镜像里并没有包含uwsgi相关内容,只是把uwsgi.ini配置文件拷入到Django容器是不会工作的。

所以这里我们需要构建新的Dockerfile并构建新的镜像和容器。为了方便演示,我们创建了一个名为mysite2的项目,项目结构如下所示:

  1. firstweb
  2. ├── db.sqlite3
  3. ├── Dockerfile # 构建docker镜像所用到的文件
  4. ├── manage.py
  5. ├── mysite2
  6. │ ├── asgi.py
  7. │ ├── __init__.py
  8. │ ├── settings.py
  9. │ ├── urls.py
  10. │ └── wsgi.py
  11. ├── pip.conf
  12. ├── requirements.txt # 两个依赖:django==3.0.5 uwsgi==2.0.18
  13. ├── start.sh # 进入容器后需要执行的命令,后面会用到
  14. └── uwsgi.ini # uwsgi配置文件

2f9d44155cb64af7be1cf291160049e8.png

编写dockerfile

  1. FROM python:3.7
  2. MAINTAINER bnq
  3. ENV PYTHONUNBUFFERED 1
  4. COPY pip.conf /root/.pip/pip.conf
  5. RUN mkdir -p /var/www/html/firstweb
  6. RUN apt-get update && apt-get install net-tools
  7. RUN apt-get update && apt-get install vim -y
  8. WORKDIR /var/www/html/firstweb
  9. ADD . /var/www/html/firstweb
  10. RUN pip3 install -r requirements.txt
  11. RUN chmod +x ./start.sh

编写pip.conf

  1. [global]
  2. index-url = https://mirrors.aliyun.com/pypi/simple/
  3. [install]
  4. trusted-host=mirrors.aliyun.com

编写uwsgi.ini

  1. [uwsgi]
  2. http=0.0.0.0:8000 #端口号
  3. chdir=/var/www/html/firstweb/ #uwsgi.ini所在位置
  4. wsgi-file=/var/www/html/firstweb/firstweb/wsgi.py #uwsgi.py文件所在位置
  5. master=true
  6. processes=1
  7. #static-map=/static=/home/bu/market/static #项目静态文件所在位置
  8. vacuum=true
  9. buffer-size=65535
  10. #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
  11. harakiri=60
  12. #当一个请求被harakiri杀掉会,会输出一条日志
  13. harakiri-verbose=true

编写start.sh

  1. #!/bin/bash
  2. #1.生成数据库迁移文件
  3. python3 manage.py makemigrations&& \r
  4. #2.根据数据库迁移文件来修改数据库
  5. python3 manage.py migrate&& \r
  6. #3.用uwsgi启动django服务,不再使用python3 manage.py runserver \r
  7. uwsgi --ini /var/www/html/firstweb/uwsgi.ini

这边需要注意(出现inux下执行Shell脚本出现$‘\r‘: command not found解决方法)

  1. vim start.sh
  2. :set ff=unix
  3. :wq

2)单容器部署 Django + UWSGI

第一步:生成名为django_uwsgi_img:v1的镜像

sudo docker build -t django_uwsgi_img:v1 .

第二步:启动并运行mysite2的容器

  1. # 启动并运行mysite2的容器
  2. sudo docker run -it -d --name mysite2 -p 84:8000 django_uwsgi_img:v1

第三步:进入mysite2的容器内部,并运行脚本命令start.sh

  1. # 进入容器,如果复制命令的话,结尾千万不能有空格。
  2. sudo docker exec -it mysite2 /bin/bash
  3. # 执行脚本命令
  4. sh start.sh

以上两句命令也可以合并成一条命令

sudo docker exec -it mysite2 /bin/bash start.sh

执行后效果如下所示。当你看到最后一句[uWSGI]时,说明uwsgi配置并启动完成。

测试:虚拟机登陆网站查看 0.0.0.0:84

主机登录虚拟机ip:80查看(192.168.33.136:84)

b51492ce497b493f85b10043d7c07778.png

2.2 练习

1.将market项目放到/home/zhu文件夹下

8a0d817d918d477db51b2a6dec247450.png

将requirements.txt文件夹内所有组件的版本号全部删除,修改如下

  1. asgiref
  2. click
  3. colorama
  4. cycler
  5. Django
  6. django-simpleui
  7. django-tinymce
  8. django-utils-six
  9. et-xmlfile
  10. Flask
  11. fonttools
  12. itsdangerous
  13. Jinja2
  14. kiwisolver
  15. MarkupSafe
  16. matplotlib
  17. numpy
  18. openpyxl
  19. packaging
  20. pandas
  21. Pillow
  22. pyparsing
  23. python-dateutil
  24. pytz
  25. six
  26. sqlparse
  27. terminaltables
  28. tzdata
  29. Werkzeug

添加如下文件:

pip.conf

  1. [global]
  2. index-url = https://mirrors.aliyun.com/pypi/simple/
  3. [install]
  4. trusted-host=mirrors.aliyun.com
  1. 编写Dockerfile
    1. FROM python:3.7
    2. MAINTAINER bnq
    3. ENV PYTHONUNBUFFERED 1
    4. COPY pip.conf /root/.pip/pip.conf
    5. RUN mkdir -p /var/www/html/market
    6. RUN apt-get update && apt-get install net-tools
    7. RUN apt-get update && apt-get install vim -y
    8. WORKDIR /var/www/html/market
    9. ADD . /var/www/html/market
    10. RUN pip3 install -r requirements.txt
    11. RUN chmod +x ./start.sh

     

  2. 编写uwsgi.ini.文件

    1. [uwsgi]
    2. #端口号
    3. http=0.0.0.0:8001
    4. #uwsgi.ini所在位置
    5. chdir=/var/www/html/market/
    6. #uwsgi.py文件所在位置
    7. wsgi-file=/var/www/html/market/market/wsgi.py
    8. master=true
    9. processes=1
    10. #项目静态文件所在位置
    11. static-map=/static=/var/www/html/market/static
    12. vacuum=true
    13. buffer-size=65535
    14. #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
    15. harakiri=60
    16. #当一个请求被harakiri杀掉会,会输出一条日志
    17. harakiri-verbose=true

     

  3. 编写start.sh

    1. #!/bin/bash
    2. #1.生成数据库迁移文件
    3. python3 manage.py makemigrations&&
    4. #2.根据数据库迁移文件来修改数据库
    5. python3 manage.py migrate&&
    6. #3.用uwsgi启动django服务,不再使用python3 manage.py runserver
    7. uwsgi --ini /var/www/html/market/uwsgi.ini

     

  4. 利用Dockerfile创建镜像

    1. # 创建名为django_docker_img的镜像,版本为v1
    2. sudo docker build -t market_docker_img:v1 .
    3. # 查看创建的镜像
    4. [root@192 market]# docker ps
    5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6. 62b496670228 market_uwsgi_img:v1 "python3" 29 minutes ago Up 29 minutes 0.0.0.0 :85->8001/tcp, :::85->8001/tcp mysite4
    7. [root@192 market]# docker images
    8. REPOSITORY TAG IMAGE ID CREATED SIZE
    9. market_uwsgi_img v1 340c3575df4d 32 minutes ago 1.43GB

     

  5. 利用镜像生成容器并后台运行,容器名为mysite4

    1. docker run -it -d --name mysite4 -p 85:8001 market_uwsgi_img:v1
    2. # 查看所有容器状态
    3. [root@hdp01 firstweb]# docker ps
    4. [root@192 market]# docker ps
    5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6. 62b496670228 market_uwsgi_img:v1 "python3" 29 minutes ago Up 29 minutes 0.0.0.0 :85->8001/tcp, :::85->8001/tcp mysite4 Up About an hour 0.0.0.0:8080->8000/tcp, :::8080->8000/tcp firstweb

     

  6. 进入容器

    1. sudo docker exec -it mysite4 /bin/bash
    2. root@62b496670228:/var/www/html/market# sh start.sh
    3. No changes detected
    4. Operations to perform:
    5. Apply all migrations: admin, auth, contenttypes, df_cart, df_goods, df_order, df_user, sessions
    6. Running migrations:
    7. No migrations to apply.
    8. [uWSGI] getting INI configuration from /var/www/html/market/uwsgi.ini
    9. [uwsgi-static] added mapping for /static => /var/www/html/market/static
    10. *** Starting uWSGI 2.0.23 (64bit) on [Thu Jan 11 06:20:19 2024] ***
    11. .....

    测试:虚拟机登陆网站查看 0.0.0.0:85

    主机登录虚拟机ip:80查看(192.168.33.136:85)

    c54933c7942e48a0adb7a142f59f42ce.png

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号