zoukankan      html  css  js  c++  java
  • 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'@'localhost' IDENTIFIED BY '123456';
        flush privileges;

        授权远程登录

        GRANT ALL PRIVILEGES ON *.* TO '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",
            },
          },
        }

  • 相关阅读:
    rest-assured : Restful API 测试利器
    Bootstrap 模态框 + iframe > 打开子页面 > 数据传输/关闭模态框
    angular js 自定义js错误处理(Angularjs js error handler)
    Spring Boot + Bootstrap 出现"Failed to decode downloaded font"和"OTS parsing error: Failed to convert WOFF 2.0 font to SFNT"
    Use Apache HttpClient to Post json data
    小程序-走迷宫
    Java getResourceAsStream() 方法会缓存文件的问题
    【转载】java项目中经常碰到的内存溢出问题: java.lang.OutOfMemoryError: PermGen space, 堆内存和非堆内存,写的很好,理解很方便
    DIV布局-高度不同DIV,自动换行并对齐
    Excel表格常用的函数,留着备用
  • 原文地址:https://www.cnblogs.com/imlifelong/p/12160436.html
Copyright © 2011-2022 走看看