1-centos_virtualenv_nginx_uwsgi_django_pyecharts_apscheduler项目上线全流程

ct上线流程整理

技术

  • Django
  • pyecharts
  • apscheduler
  • nginx
  • uwsgi
  • virtualenv

流程

  • 更新系统软件包

    • yum update -y
      
  • 安装软件管理包和可能使用的依赖

    • yum -y groupinstall "Development tools"
      yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
      
  • 编译安装python3

    • # 下载Pyhton3到/usr/local 目录
      cd /usr/local
      wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
      # 解压
      tar -zxvf Python-3.6.6.tgz
      # 进入 Python-3.6.6路径
      cd Python-3.6.6
      # 编译安装到指定路径
      ./configure --prefix=/usr/local/python3
      # 安装python3
      make
      make install
      # 安装完成之后 建立软链接 添加变量 方便在终端中直接使用python3
      ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
      # 给pip3建立软链接
      ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3
      
  • 安装virtualenv,进行不同版本项目管理

    • pip3 install virtualenv
      # 建立软链接
      ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
      # 在根目录下建立两个文件夹,主要用于存放环境和项目
      mkdir -p /BI/env
      mkdir -p /BI/WS
      
  • 切换到/BI/env/下,创建指定版本的虚拟环境

    • cd /BI/env
      virtualenv --python=/usr/bin/python3 ct
      # 然后进入/BI/env/ct/bin,启动虚拟环境
      source ./activate
      
  • 虚拟环境里用pip3安django和uwsgi

    • pip3 install django
      pip3 install uwsgi
      # uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次
      # 给uwsgi建立软链接,方便使用
      ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
      
  • 切换到项目目录/BI/WS,创建Django项目

    • django-admin.py startproject ctProject
      # 然后新建立一个名叫ct的APP
      python3 manage.py startapp ct
      
  • 进入项目文件夹/BI/WS/ctProject,添加static和templates,分别用于存放静态文件和模板文件。

    • cd /BI/WS/ctProject
      mkdir static
      mkdir templates
      
  • 修改settings.py

    • vim /BI/WS/ctProject/ctProject/settings.py
      # 在INSTALLED_APPS 列表里添加'ct'
      # 修改ALLOWED_HOSTS,['*'],可以让任何IP访问
      # TEMPLATES的DIRS里添加模板路径:os.path.join(BASE_DIR, 'templates')
      # 尾部添加:STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
      # DEBUG = False
      
  • 编写测试文件

    • # 在templates下添加index.html文件,输入下面内容
      vim /BI/WS/ctProject/templates/index.html
      
    • <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <title>test</title>
      </head>
      <body>
      <h1>test</h1>
      </body>
      </html>
      
  • 配置URL

    • vim /BI/WS/ctProject/ctProject/urls.py
      
    • from cohort import views  #导入views
      urlpatterns = [
        path('admin/', admin.site.urls),
        path('index', views.index), #添加这行
      ]
      
  • 编辑视图函数

    • vim /BI/WS/ctProject/ct/views.py
      
    • def index(request):
          return render(request, 'index.html')
      
  • 启动项目

    • # 获取内网ip,注意不要用127.0.0.1
      ifconfig -a
      python3 manage.py runserver 172.***.***.173:8000
      
  • 配置uwsgi

    • Django+uwsgi+nginx原理:

      • '''
        1、Nginx作为反向代理服务器,负责静态资源处理、动态请求转发以及结果的回复
        2、uWSGI作为Web服务器,负责接收Nginx请求转发并处理后发给Django以及接收Django返回信息转发给Nginx
        3、Django作为应用框架,收到请求后处理数据并响应结果给uWSGI服务器
        
        Nginx与uWSGI通过uwsgi协议通信
        uWSGI与Django通过WSGI协议通信
        
        4、WSGI是用在 python web 框架编写的应用程序与后端服务器之间的规范。它使得Web App可以与Web Server顺利通信。所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的web 框架。它规定WSGI application应该实现为一个可调用对象
        5、uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给web应用程序
        6、uwsgi是uWSGI服务器实现的独有的协议
        7、wsgi.py,生成Django项目时默认生成的python文件,用于web server与Django进行通信
        
        8、无论是Django自带的Web Server还是uWSGI,在启动时都会去加载你的Django项目下的wsgi.py文件,这个文件内部返回了一个application实例
        9、application实例其实也是一个可调用对象,因为这个类中实现了call使得它能被像函数一样调用
        10、在uWSGI中,读取完application后,会起一个主进程去监听用户的请求,根据你的配置的进程数会产生相同数量的子进程,例如你配置2个进程,则产生2个子进程。一旦有请求过来,则会让子进程去执行请求
        11、假如有3个请求同时过来,而你只配置了2个进程去处理请求,那么第三个请求将会阻塞。例如一个请求需要执行10s,则第三个请求需要执行20s
        '''
        
    • XML格式的配置文件

      • vim /BI/WS/ctProject/ct_uwsgi.xml
        
      • <uwsgi>    
           <socket>127.0.0.1:8997</socket> <!-- 内部端口,自定义 --> 
           <chdir>/BI/WS/ctProject/</chdir> <!-- 项目路径 -->            
           <module>ctProject.wsgi</module>  <!-- mysite为wsgi.py所在目录名--> 
           <processes>4</processes> <!-- 进程数 -->     
           <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
        </uwsgi>
        
      • # uwsgi启动与终止
        #启动uwsgl
        uwsgi -x ct_uwsgi.xml
        #uwsgi有没有启动成功,可以用下面的命令查看
        ps -ef|grep uwsgi
        #如果想重启uwsgi,先使用下面的命令杀掉进程,再启动uwsgi
        killall -9 uwsgi
        
  • 安装nginx和配置nginx.conf文件

    • cd /home/
      wget http://nginx.org/download/nginx-1.13.7.tar.gz
      tar -zxvf nginx-1.13.7.tar.gz
      cd nginx-1.13.7
      ./configure
      make
      make install
      # nginx一般默认安装好的路径为/usr/local/nginx
      # 在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外
      cp nginx.conf nginx.conf.bak
      # 然后打开nginx.conf,把原来的内容删除,直接加入以下内容:
      
    • events {
          worker_connections  1024;
      }
      http {
              include       mime.types;
              default_type  application/octet-stream;
              sendfile        on;
              server {
                      listen 80;
                      server_name  127.0.0.1:80; #改为自己的域名,没域名修改为127.0.0.1:80
                      charset utf-8;
                      location / {
                                  include uwsgi_params;
                                  uwsgi_pass 127.0.0.1:8997;  #端口要和uwsgi里配置的一样
                                  uwsgi_param UWSGI_SCRIPT ctProject.wsgi;  #wsgi.py所在的目录名+.wsgi
                                  uwsgi_param UWSGI_CHDIR /BI/WS/cProject/; #项目路径                              
                                  }
                      location /static/ {
                                          alias /BI/WS/ctProject/static/; #静态资源路径
                                        }
                      }
      }
      
    • # 进入/usr/local/nginx/sbin/目录
      cd /usr/local/nginx/sbin
      # 执行./nginx -t命令先检查配置文件是否有错,
      ./nginx -t
      ./nginx
      # 重启./nginx -s reload
      # 退出nginx -s quit
      # 快速停止或关闭Nginx:nginx -s stop
      
  • 浏览器访问http://112.xxx.xxx.177:8000/index/ 测试是否成功

  • 安装配置pyecharts

    • pip3 install pyecharts
      # 将虚拟环境中pyecharts.render.templates下的模板拷贝至/BI/WS/ctProject/templates
      cp -r /BI/env/cohort/lib/python3.6/site-packages/pyecharts/render/templates/* /BI/WS/ctProject/templates/
      
  • 编写主任务脚本task.py,渲染页面至templates

    • page.render('./templates/ct.html')
      
  • 编写视图函数,返回页面内容为ct.html

    • def ct(request):
          return render(request, 'ct.html')
      
  • 安装配置apscheduler,设定定时任务

    • pip3 install apscheduler
      pip3 install django-apscheduler
      
    • # 将django-apscheduler加到项目中settings的INSTALLED_APPS中
      'django_apscheduler',
      
    • # 在主urls.py中引入如下内容
      from apscheduler.schedulers.background import BackgroundScheduler
      from cohort.task import cohort_new
      
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('ct/', views.ct),
      ]
      
      
      def timing_job():
          ct_new()
      
      
      scheduler = BackgroundScheduler()
      scheduler.add_job(timing_job, 'cron', hour=0, minute=1)
      try:
          scheduler.start()
      except (KeyboardInterrupt, SystemExit):
          pass
      
  • 编写start.sh、stop.sh进行任务的启动与关闭,用nohup进行后台运行

    • vim /BI/WS/ctProject/start.sh
      ps -aux | grep manage.py| xargs kill -9
      nohup python manage.py runserver 172.***.***.173:8000 >djo.out 2>&1 &
      
    • vim /BI/WS/ctProject/stop.sh
      ps -aux | grep manage.py|xargs kill -9
      
  • 开启项目

    • /BI/WS/ctProject/start.sh
      
原文地址:https://www.cnblogs.com/lotuslaw/p/14655338.html