django+uwsgi+nginx部署web项目

盐析枚举
• 阅读 4058

系统需求

    
centos7 minimal
python2.7

部署前的准备工作


centos7 minimal是精简版本,需要手动去配置一些设置。
1. 配置网络,设置固定ip
    ip可以自动获取,我这里设置成固定ip
    
2. 更新yum源
    [root@localhost /]# cd 
    [root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    [root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm
    检查是否添加到源列表:
    [root@localhost ~]# yum repolist

3. 安装vim
    [root@localhost ~]# yum install vim
   
4. 设置防火墙开启80,3306等需要的端口
    高版本的centos系统防火墙默认是firewall,通过命令可以永久开放端口
    [root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
5. kill命令的扩展
    [root@localhost ~]# yum install psmisc
    
    

需要安装的软件

1. mariadb或者mysql,这里选择mariadb
    [root@localhost /]# yum install mariadb mariadb-server
    [root@localhost /]# yum install mysql-devel
    
2. nginx
    安装依赖包:
    [root@localhost /]#  yum install gcc-c++

    安装nginx:
    [root@localhost /]#  yum install nginx
    
3. python的一些组件
    安装pip:
    [root@localhost /]#  yum install python-pip
    更新pip:
    [root@localhost /]#  pip install --upgrade pip
    安装虚拟环境:
    [root@localhost /]#  pip install virtualenv
    安装uwsgi:
    [root@localhost /]#  yum install python-devel
    [root@localhost /]#  pip install uwsgi
    安装mysql链接工具:
    [root@localhost /]#  pip install MySQL-python

4. 安装git
    [root@localhost /]#  yum install git
    
    

开始部署项目django+uwsgi+nginx

1. 创建项目目录
    [root@localhost /]#  mkdir /www/
    
2. 从远程仓库git
    [root@localhost /]#  cd /www/
    [root@localhost www]# git clone https://example.git
    
3. 配置数据库
    [root@localhost www]# systemclt start mariadb
    [root@localhost www]# mysql_secure_installation
    
    登录mysql
    [root@localhost www] mysql -uroot -p
    创建数据库
    MariaDB [(none)]> create database db_name default character set utf8;
    
4. 创建虚拟环境并激活
    [root@localhost /]#  cd /www/
    [root@localhost www]#  virtualenv env --system-site-packages (这里虚拟环境要继承全局)
    [root@localhost www]#  source env/bin/activate

5. 配置django环境
    在虚拟环境下,安装所需的packages, 然后配置数据库等开发需要的内容。
    
6. 配置uwsgi
    在manage.py文件同级目录下新建文件django_socket.ini为uwsgi配置文件。内容如下:
    [uwsgi]
    chdir = /www/site/  # 项目根目录路径
    wsgi-file = /www/site/site/wsgi.py  # wsgi文件路径
    master = true
    vhost = true
    pythonpath = /www/env/lib/python2.7/site-packages  # 虚拟环境路径
    socket = 127.0.0.1:8077
    processes = 4
    threads = 2
    log-maxsize = 500000
    buffer-size = 32768
    daemonize = /www/logs/uwsgi.log  # log文件路径
    
7. 配置nginx
    在/etc/nginx/conf.d/目录下新建nginx配置文件,site.conf(必须是.conf的后缀名),配置文件内容如下:
    server {
        listen 80;
        server_name 192.168.1.20;  # 域名或者ip地址
        root /www/site;

        location / {
                uwsgi_pass 127.0.0.1:8077;
                include uwsgi_params;
                uwsgi_param REMOTE_ADDR $HTTP_X_REAL_IP;
        }

        location = /50x.html {
                root html;
        }

        location /static/ {
                root /www/site;  # 静态资源路径
        }

        location /uploads/ {
                root /www/site;
        }
    }
    
    以上配置基本完成了,接下来运行如下命令:
        [root@localhost site]#  uwsgi --ini django_socket.ini
        [root@localhost site]#  nginx -c /etc/nginx/nginx.conf
        [root@localhost site]#  nginx -s reload
        如果没有报错,就说明配置成功,在浏览器输入ip地址或者域名就能访问了。
        
8. 脚本启动服务器
    方便起见,我们可以设置脚本启动重启服务器,在/www/目录下新建shell脚本, 命名为update.sh, 内容如下:
    #!/bin/bash
            
    nginx_process=`ps aux|grep nginx|grep worker`
    if [ "$nginx_process" != "" ]; then
        killall -9 nginx
    fi
    
    uwsgi_process=`ps aux|grep uwsgi|grep django_socket`
    if [ "$uwsgi_process" != "" ]; then
        killall -9 uwsgi
    fi
    
    cd /www/site
    #/usr/bin/python manage.py collectstatic 
    /usr/bin/uwsgi --ini django_socket.ini
    
    /usr/sbin/nginx -c /etc/nginx/nginx.conf
    /usr/sbin/nginx -s reload
    
    修改文件权限:
        [root@localhost www]# chmod 755 update.sh
        
    脚本启动配置完成,如果发布新版本之后记得执行该脚本才能生效。(如果报错为:nginx502那就再执行一次 - -)
    
    
9. 自动化配置
    配置mysql开机启动:
        [root@localhost www]#  systemclt enable mariadb

    配置uwsgi+nginx开机启动:
        由于已经设置通过脚本启动uwsgi和nginx,所以只需要将/www/update.sh这个脚本设置为开机启动就OK啦。配置如下:
        
        打开/etc/rc.local,在最后一行添加:
            sh /www/update.sh
            
        保存关闭。重启服务器之后有可能脚本没有被自动执行,原因是/etc/rc.local是/etc/rc.d/rc.local的链接文件,因此,需要修改/etc/rc.d/rc.local的权限:
            [root@localhost root]# chmod 755 /etc/rc.d/rc.local
            
            

至此,整个部署就完成了。如有需要改进的地方,还请各位指出,互相学习交流。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Jenkins配置下拉菜单联动效果
  在使用Jenkins集成时,经常需要配置一些环境信息,由于测试、线上、预发布需要切换环境和域名,需要在Jenkins中配置下拉菜单联动效果。  首先选择参数化构建过程,然后首先配置环境,环境分为:测试环境、预发布环境、正式环境,选择的组件为ChoiceParameter,Name定义为environment,选项为test、pre、onli
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Django之常用配置
<h1在其它文件导入及变量命名注意事项</h1变量命名:必须都大写<preclass'brush:python'fromdjango.confimportsettings</pre<h1静态文件夹配置</h1比如需要引入jquery、bootstrap等文件,需要配置静态文件,步骤如下:步骤一、在<项目名称目录下新建
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
盐析枚举
盐析枚举
Lv1
殊方日落玄猿哭,旧国霜前白雁来。
文章
5
粉丝
0
获赞
0