zoukankan      html  css  js  c++  java
  • Docker部署Python项目

    简介

    软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装。只有它们都正确,软件才能运行。如果从一种操作系统里面运行另一种操作系统,通常我们采取的策略就是引入虚拟机,比如在 Windows 系统里面运行 Linux 系统。这种方式有个很大的缺点就是资源占用多、冗余步骤多、启动慢。目前最流行的 Linux 容器解决方案之一就是Docker,它最大优点就是轻量、资源占用少、启动快。本文从什么是Docker?Docker解决什么问题?有哪些好处?如何去部署实现去全面介绍。

    docker部署项目优势

    设想这样一个真实案例,假如我们要部署一个Python应用程序,要做哪些工作?首先需要python运行环境,比如部署的是python3,而机器上是python2。先装个python3,还要装各种依赖包,机器一些可能的冲突。装完python之后,发现还要装mysql或者redis。继续下载安装配置。啥?服务器不用了,需要换一台服务器?那重新来一遍吧。啥?基础应用做的太好要进行推广,需要指导其他厂商部署?这怎么办?可以看出,在 Docker 之前软件行业的运维存在着以下这些痛点:

    # 1. 软件的发布和部署低效又繁琐,而且总是需要人工介入
    # 2. 环境的一致性难移保证
    # 3. 在不同环境之间迁移的成本较高
    

    在完成Docker部署安装之前,我们还是先认识下Docker的优点:

    # 1. 软件构建容易,分发简单
    # 2. 应用得到隔离,依赖被解除
    # 3. 可以完美地用于 CI/CD
    # 4. 快速部署,测试完以后销毁也方便
    

    方式一: 基于Python基础镜像

    # 准备数据目录
    mkdir myproject
    cd myproject
    docker run -di --name=myproject -p 8080:8080 -v /home/myproject:/home python:3.6
    
    # 将你的项目上传到服务器挂载的存储卷上
    scp django.tar.gz 149.129.38.117:
    cp /root/django.tar.gz /home/myproject/
    tar xvf django.tar.gz
    
    # 进入容器安装相关依赖
    pip install -r requirement.txt
    apt-get update
    apt-get install vi
    
    # setting.py 改成下面
    ALLOWED_HOSTS = ['*']
    # 运行项目(wsgiref)
    python manage.py runserver 0.0.0.0:8080
    

    uwsgi运行项目

    pip3 install uwsgi
    
    # 在项目根路径下创建一个uwsgi.ini 文件,写入
    
    [uwsgi]
    #配置和nginx连接的socket连接
    socket=0.0.0.0:8080
    #也可以使用http
    #http=0.0.0.0:8080
    #配置项目路径,项目的所在目录
    chdir=/home/django_test
    #配置wsgi接口模块文件路径
    wsgi-file=django_test/wsgi.py
    #配置启动的进程数
    processes=4
    #配置每个进程的线程数
    threads=2
    #配置启动管理主进程
    master=True
    #配置存放主进程的进程号文件
    pidfile=uwsgi.pid
    #配置dump日志记录
    daemonize=uwsgi.log
    
    
    #启动,停止,重启,查看
    uwsgi --ini uwsgi.ini #启动
    lsof -i :8001    #按照端口号查询
    ps aux | grep uwsgi   #按照程序名查询
    kill -9 13844       #杀死进程
    
    uwsgi --stop uwsgi.pid      #通过uwsg停止uwsgi
    uwsgi --reload uwsgi.pid  #重启
    
    # nginx转发
    
    mkdir -p nginx/conf nginx/html nginx/logs
    
    # 在conf目录下新建nginx.conf
    
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
              #uwsgi_pass 149.129.38.117:8080;
              proxy_pass http://149.129.38.117:8080;
            }  
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    
    docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx
    
    # 在 python的docker中用uwsgi跑起项目来即可
    
    # 外部访问:http://149.129.38.117/
    
  • 相关阅读:
    sql-字符串拼接单,双引号及$
    SQL-SQLServer数据库查询
    SQL-数据库不能以127.0.0.1登录
    Excel-VBA-ActiveX编译错误:用户定义类型未定义
    Excel-VBA中,取:存储过程时,报:对象关闭时,不允许操作!
    JS
    小程序(Wepy)--生成海报图片
    小程序--时间处理(显示几分钟前,,几小时前,,几天前...)
    小程序--wepy省市区三级联动选择
    对于 wepy 不是内部或外部命令 -- 的解决办法
  • 原文地址:https://www.cnblogs.com/you-men/p/13190758.html
Copyright © 2011-2022 走看看