Python3+django+nginx

发布时间:2019-09-24 08:20:11编辑:auto阅读(1536)

    1 环境介绍和准备
    Python3+django+nginx+uwsgi使用场景部署

    当我们写完一套完整的网站功能,我们需要实时在生产环境上线,并需要容纳高并发的访问请求。所以我们需要部署以上来保证网站的服务质量。

    1.1基本环境准备:
    echo 'LANG="en_GB.utf8"' > /etc/sysconfig/i18n
    LANG="en_GB.utf8"

    1.2依赖环境:
    (env) [root@reboot5 nginx]# python -V
    Python 3.6.2
    (env) [root@reboot5 nginx]# cat /etc/redhat-release
    CentOS release 6.8 (Final)
    (env) [root@reboot5 nginx]# pip list|grep Django
    Django 1.11.4
    (env) [root@reboot5 opsweb]# mysql -V
    mysql Ver 14.14 Distrib 5.6.37
    1.3修改yum源地址:
    yum install wget
    sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

    1.4 环境安装:
    yum install wget openssl-devel -y # gcc编译要用
    yum install gcc zlib-devel openssl-devel -y

    2 安装python
    yum -y install openssl-devel readline-devel unzip
    wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
    tar -xzf Python-3.6.2.tgz
    cd Python-3.6.2
    sudo ./configure --prefix=/usr/local/python36
    sudo make
    sudo make install
    2.1配置pip源
    sudo tee /etc/pip.conf <<-'EOF'
    [global]
    index-url = http://pypi.douban.com/simple
    trusted-host = pypi.douban.com
    [list]
    format=columns
    EOF

    2.2安装virtualenv虚拟环境
    sudo /usr/local/python36/bin/pip3 install virtualenv

    1. 安装django
      3.1 初始化环境
      mkdir ~/reboot
      /usr/local/python36/bin/virtualenv ~/reboot/env
      3.2 安装django 1.11
      source /root/reboot/env/bin/activate
      pip install "django>=1.11"
      pip install ipython

    4 mysql环境准备:

    搜狐镜像:http://mirrors.sohu.com/

    sudo rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
    sudo yum install -y mysql mysql-server mysql-devel zlib-devel
    source /home/djangoenv/pythonenv/bin/activate
    #python依赖:
    pip install pymysql

    修改配置/etc/my.cnf:

    [mysqld]
    default-storage-engine = innodb
    innodb_file_per_table
    collation-server = utf8_general_ci
    init-connect = 'SET NAMES utf8'
    character-set-server = utf8

    启动:

    sudo service mysqld start
    4.1 安全设置:
    mysql_upgrade -uroot # 如果是升级需要执行(卸载原有mysql低版本也需要)
    mysql_secure_installation # 命令行执行设置账号密码、限制远程连接等

    4.2 创建基础数据库:
    create database cmdb CHARACTER SET utf8; # 创建一个cmdb库
    CREATE USER 'cmdb'@'%' IDENTIFIED BY 'nice'; # 创建一个cmdb用户,密码cmdb
    GRANT ALL ON cmdb.* TO 'cmdb'@'%'; # 给cmdb用户所有cmdb库权限

    4.3 mysql基本备份还原
    导出:mysqldump -h127.0.0.1 -uroot -p123456 django > /backupfile.sql
    还原:mysql -h127.0.0.1 -uroot -pruanchunxia2324 django < backupfile.sql

    -----------------------------------uwsgi------------------------------------------------------
    5 安装:uwsgi
    source /root/reboot/env/bin/activate
    pip install uwsgi --no-cache-dir

    5.1 uwsgi安装完毕查询版本
    (env) [root@reboot5 /]# pip list|grep uWSGI
    uWSGI 2.0.15

    5.2 将配置文件写到项目目录下
    (env) [root@reboot5 nginx]# cd /root/reboot/opsweb
    (env) [root@reboot5 opsweb]# vim uwsgi.ini

    设置启动配置uwsgi.ini:

    [uwsgi]

    项目目录

    chdir = /root/reboot/opsweb

    指定项目的application

    module=opsweb.wsgi

    进程个数

    workers=2
    pidfile=/var/log/uwsgi/uwsgi.pid

    指定IP端口

    http=10.10.40.112:8001

    指定静态文件

    static=/root/reboot/opsweb/static

    启动uwsgi的用户名和用户组

    uid=root
    gid=root

    启用主进程

    master=true

    自动移除unix Socket和pid文件当服务停止的时候

    vacuum=true

    序列化接受的内容,如果可能的话

    thunder-lock=true

    启用线程

    enable-threads=true

    设置自中断时间

    harakiri=30

    设置缓冲

    post-buffering=4096

    设置日志目录

    daemonize=/var/log/uwsgi/opsweb.log

    指定sock的文件路径

    socket=/var/log/uwsgi/uwsgi.sock

    5.3 uwsgi启动命令:
    sudo uwsgi --ini uwsgi.ini
    uwsgi --reload /var/log/uwsgi/uwsgi.pid
    uwsgi --start /var/log/uwsgi/uwsgi.pid
    uwsgi --stop /var/log/uwsgi/uwsgi.pid
    -----------------------------------nginx------------------------------------------------------
    6 安装nginx:
    yum install nginx -y

    配置文件修改:

      server {
          listen       80;
          server_name  10.10.40.112;
          location /static {
              alias /root/reboot/opsweb/static;
          }
          location / {
              include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed

    uwsgi_pass 10.10.40.112:8001;

              uwsgi_pass unix:/var/log/uwsgi/uwsgi.sock;
          }
      }

    7 django配置
    7.1 django配置修改:

    setting.py中添加设置静态资源路径,给nginx调用

    django可以在自己的templates下面放静态资源 那个命令可以吧所有静态资源收集起来

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")

    #然后到项目目录下执行:
    python manage.py collectstatic

    修改配置文件

    DEBUG = False ALLOWED_HOSTS = ['*']

    1. 故障排错
      8.1 故障发现
      Python3+django+nginx+uwsgi使用场景部署
      发现无法找到静态文件
      8.2 通过查看nginx错误日志,定位错误
      定位问题为无法访问/static目录下文件
      Python3+django+nginx+uwsgi使用场景部署
      8.3尝试将配置目录授予权限
      Python3+django+nginx+uwsgi使用场景部署
      发现目录权限都已生效
      Python3+django+nginx+uwsgi使用场景部署
      并且重启nginx服务,发现问题依然存在。
      Python3+django+nginx+uwsgi使用场景部署
      通过检查nginx服务发现,nginx线程为nginx用户启动
      Python3+django+nginx+uwsgi使用场景部署
      所以

    此处需要对nginx配置文件重新加载
    /etc/init.d/nginx reload

    8.4 最终代理效果
    注:没做代理前如访问时,IP后面需要跟端口,代理成功后只需输入代理的ip即可访问后端网站,从而提高安全性和并发访问量。

关键字