django项目部署(uwsg+nginx)

  

版本说明
  Centos 7.4
  Python 3.6.4
  Django 2.0.2
  MySql 5.7
  uWSGI
  Nginx 1.16.0

部署前
  1、更新系统环境
     yum install epel-release
  2、安装所有的开发工具包 
    yum groupinstall -y "Development tools"

一、升级python3.6.4
  1、下载
    cd /usr/local/src
    wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

  2、安装python依赖包
    yum install zlib-devel 不安装编译会报错
    yum install libffi-devel -y 新版本python3.7
    yum install openssl-devel pip下载使用https协议的包时需要
    安装sqlite
    cd /usr/local/src
    wget https://www.sqlite.org/2018/sqlite-autoconf-3250300.tar.gz
    tar zxvf sqlite-autoconf-3250300.tar.gz
    cd sqlite-autoconf-3250300
    ./configure
    make && make install

  3、解压
    tar zxvf Python-3.6.4.tgz
    cd Python-3.6.4

  4、编译安装
    ./configure --prefix=/usr/local/python3.6.4
    make && make install

  5、链接python和pip
    ln -s /usr/local/python3.6.4/bin/python3 /usr/bin/python3
    ln -snf /usr/bin/python3 /usr/bin/python
    ln -s /usr/local/python3.6.4/bin/pip3 /usr/bin/pip
    查看朴python版本
      python -V
    查看pip版本
      pip --version

  6、yum配置文件依赖python,Python升级后就要修改配置文件
    vim /usr/bin/yum
    vim /usr/libexec/urlgrabber-ext-down
    修改第一行 #!/usr/bin/python 为 #!/usr/bin/python2
    测试修改是否成功
    yum -h
    升级系统 yum update

  7、检查其他需要修改的命令
    sed -i "s#/usr/bin/python#/usr/bin/python2#g" `grep /usr/bin/python -rl /usr/bin/*`
    grep -ai /usr/bin/python /usr/bin/*
    列出文件列表后逐个修改(按照yum修改方法)

二、安装django
  1、安装
    pip install django==2.0.2 -i https://pypi.douban.com/simple
  2、测试安装结果
    python -m django --version
  3、链接
    ln -s /usr/local/python3.6.4/bin/django-admin /usr/bin/django-admin

三、安装数据库
  0、卸载mariadb(安装mysql前要卸载mariadb)
    rpm -qa | grep mariadb
    rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64

  1、下载
    https://dev.mysql.com/downloads/mysql/
    选择
    系统 Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit)
    版本 mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
  2、安装
    tar xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
    rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm --force --nodeps
    rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm--force --nodeps
    rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm --force --nodeps
  3、初始化
    mysqld --initialize --user=mysql
  4、查看密码cat /var/log/mysqld.log
    [Note] A temporary password is generated for root@localhost: +zip+r:yM8Ci
  5、修改密码
    mysql -u root -p
    ALTER USER 'root'@'%' IDENTIFIED BY '123456';
    flush privileges;
  6、设置开机自启
    systemctl enable mysqld

五、django 项目
  1、创建django项目
    django-admin startproject mysite
    创建app
    cd mysite
    django-admin startapp app 或 python manage.py startapp app
  2、安装pymysql
    pip install pymysql -i https://pypi.douban.com/simple
    vim mysite/__init__.py 添加下面代码(否则python3和mysql之间连接会报错)
    import pymysql
    pymysql.install_as_MySQLdb()
  3、修改配置文件
    vim mysite/settings.py
    # 数据库配置
    DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'leopard',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
      }
    }
    # 多媒体文件目录
    MEDIA_ROOT = os.path.join(BASE_DIR, "media")
    # 静态文件目录
    STATIC_ROOT = os.path.join(BASE_DIR, 'collection_static')
  4、初始化
    在项目中创建media和collection_static目录
    执行python manage.py collectstatic命令时,STATIC_ROOT目录存放整个项目的静态文件(注意STATICFILES_DIRS也要配置,如果不配置就不会收集自定义的静态文件,执行完后要把该目录的属主属组都给nginx用户,即chown -R nginx:nginx collection_static)

  5、进入mysql中创建数据库
    create database mysite character set utf8;
  6、运行测试
    python manage.py makemigrations 为这些修改创建迁移文件,给应用生成迁移脚本
    python manage.py migrate 同步修改过的数据库
    启动项目
    python manage.py runserver
    打开浏览器测试 127.0.0.1:8000

六、安装uwsgi
  1、安装pip install uwsgi -i https://pypi.douban.com/simple
  2、链接ln -s /usr/local/python3.6.4/bin/uwsgi /usr/bin/uwsgi
  3、启动服务 uwsgi --http :80 --chdir /root/mysite/ -w mysite.wsgi(mysite.wsgi前缀必须和项目名相同)
  4、查看启动进程lsof :80 查看占用80端口的进程,可以用kill -9 PID杀掉进程
  5、打开浏览器输入本机IP就能访问
  6、uwsgi 配置文件
    mkdir -p /etc/uwsgi/
    vim /etc/uwsgi/mysite.ini
    [uwsgi]
    chdir = /root/mysite  #项目目录
    socket = /run/mysite.sock  #socekt文件,要和nginx配置的相同
    wsgi-file = /root/mysite/mysite/wsgi.py   #django项目中wsgi文件
    module = mysite.wsgi:applcation
    master = true  #允许主线程存在
    processes = 2  #开启进程的数量
    threads = 4  #开启线程的数量
    daemonize = /var/log/mysite/uwsgi.log  #日志文件
    vacuum = true  #当服务器退出的时候自动清理环境
  7、创建日志目录
    mkdir -p /var/log/mysite

七、源码安装nginx(或直接用yum安装)
  uwsgi处理动态请求,nginx处理静态请求
  1、下载
    cd /usr/local/src
    wget http://nginx.org/download/nginx-1.16.0.tar.gz

  2、安装依赖包
    yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
    zlib:Nginx提供gzip模块,需要zlib库支持。
    openssl:Nginx提供SSL功能
    pcre:支持地址重写rewrite功能
    安装编译工具
    yum -y install gcc gcc-c++ autoconf automake

  3、创建用户
    groupadd -r -g 500 nginx
    useradd -g 500 -r -u 500 nginx

  4、解压安装
    tar zxvf nginx-1.16.0.tar.gz
    cd nginx-1.16.0
    ./configure –help 查看配置信息
    生成配置文件
    ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --error-log-path=/usr/local/nginx/log/error.log--pid-path=/usr/local/nginx/nginx.pid--lock-path=/usr/local/nginx/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module

    make && make install
    给目录授权
    chown -R nginx:nginx nginx/
    测试 /usr/local/nginx/sbin/nginx 如果没报错就说明服务已经启动
    链接
    ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

  5、修改配置文件
    vim /usr/local/nginx/nginx.conf
    在http模块中加入include /usr/local/nginx/conf.d/*.conf;(一定要加在server前面,否则nginx会按默认配置显示)

    创建配置文件目录
    mkdir -p /usr/local/nginx/conf.d/
    cd /usr/local/nginx/conf.d/

    vim mysite.conf
    添加下面内容
    upstream mysite{
      server unix:///run/mysite.sock; #socket文件要和uwsgi配置相同
    }
    server {
      listen 80;
      server_name 127.0.0.1;
      charset UTF-8;
      error_log /var/log/mysite/nginx_error.log;
      access_log /var/log/mysite/nginx_access.log;

      client_max_body_size 75M;
      location /media {
        alias /root/mysite/media;
      }
      location /static {
        alias /root/mysite/collection_static;
      }
      location / {
        uwsgi_pass mysite;
        include /usr/local/nginx/uwsgi_params;
      }
    }

    给项目目录修改属主属组(包含)
    chown -R nginx:nginx /root/mysite
    创建日志目录
    mkdir -p /var/log/mysite
    测试配置文件正确性
    nginx -t
    nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/nginx.conf test is successful 说明成功

    启动服务
    nginx
    打开浏览器访问测试
    关闭服务
    nginx -s stop
    修改配置后重新读配置文件
    nginx -s reload

    配置完成后启动服务
    uwsgi --init /etc/uwsgi/mysite.ini
    nginx -s reload

 

八、配置iptables(centos7以前版本)
  1、开启ssh端口(如果是远程配置,一定要先配置运行ssh访问)
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

  2、开启80端口
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

  3、允许ping
    iptables -A INPUT -p icmp -j ACCEPT
    #如果OUTPUT设置成DROP需要添加 iptables -A OUTPUT -p icmp -j ACCEPT

  4、最后配置拒绝所有进入
    iptables -P INPUT DROP 拒绝所有进
    iptables -P OUTPUT ACCEPT 开放所有出
    iptables -P FORWARD DROP 拒绝所有转发

  5、查看详细信息
    iptables -L -n

  6、查找所有规则
    iptables -L INPUT --line-numbers

  7、删除一条规则
    iptables -D INPUT 11 (注意,这个11是行号,是iptables -L INPUT --line-numbers 所打印出来的行号)
  8、重启
    service iptables restart

九、配置firewall
  1、查看版本firewall-cmd --version
  如果报错,是python版本导致

  解决
    vim /usr/bin/firewall-cmd
    vim /usr/bin/firewall-offline-cmd
    vim /usr/sbin/firewalld

    修改第一行#!/usr/bin/python -Es 为 #!/usr/bin/python2 -Es 保存退出
  2、启动服务
    systemctl start firewalld.service
    systemctl status firewalld.service #查看状态

  3、查询
    SSH协议是否被允许(yes/no)
    firewall-cmd --zone=public --query-service=ssh

    查询开启那些端口
    firewall-cmd --zone=public --list-ports
    查看区域所有信息
    firewall-cmd --zone=public --list-all

  4、添加规则
    添加http协议
    firewall-cmd --permanent --zone=public --add-service=http
    添加https协议
    firewall-cmd --permanent --zone=public --add-service=https
    添加ssh协议
    firewall-cmd --permanent --zone=public --add-service=ssh
    添加8080端口
    firewall-cmd --permanent --zone=public --add-port=8080/tcp

    firewall-cmd --reload

  5、删除规则
    删除http协议
    firewall-cmd --permanent --zone=public --remove-service=http
    每次添加删除规则后要重新加载
    firewall-cmd --reload

  6、重启服务
    systemctl restart firewalld


十、安装redis
  1、下载
    cd /usr/local/src
    wget http://download.redis.io/releases/redis-4.0.8.tar.gz

  2、编译安装
    cd redis-4.0.8
    make && make install

  3、配置
    mkdir -p /etc/redis
    cp /usr/local/src/redis-4.0.8/redis.conf /etc/redis

    # redis以守护进程的方式运行
    # no表示不以守护进程的方式运行(会占用一个终端)
    vim /etc/redis/redis.conf
    daemonize yes

  4、启动服务
    /usr/local/bin/redis-server /etc/redis/redis.conf
    查看启动
    ps -aux | grep redis

  5、客户端
    redis-cli
    set name diaopiao
    get name
    “dianpiao”
  6、开机自启动
    # 开机启动要配置在 rc.local 中,而 /etc/profile 文件,要有用户登录了,才会被执行。
    echo "/usr/local/bin/redis-server /etc/redis/redis.conf &" >> /etc/rc.local

十一、Django配置redis
  1、安装redis
    pip install redis
    pip install django-redis

  2、修改django配置
    vim /root/mysite/mysite/settings.py
    增加下面配置

    CACHES = {
      'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': '127.0.0.1:6379',
        "OPTIONS": {
          "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
      },
    }

你可能感兴趣的:(django项目部署(uwsg+nginx))