--------------------------------------- | ----------------- | ----------------- |
| 冬酒暖阳 | mailto:1067764354@qq.com | 博客:www.lifepoem.cn |

安装环境

  • centOS 7.8
  • Python 3.6.9
  • Django 2.2.6
  • uWSGI 2.0.18
  • Nginx 1.9.9

步骤

1. 关闭 防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld   #开机禁用firewall服务

2. 关闭 SElinux

[root@localhost ~]# getenforce  #查看SELinux状态
Enforcing
[root@localhost ~]# setenforce 0      #临时关闭SElinux
[root@localhost ~]# getenforce 
Permissive

[root@localhost ~]# vim /etc/selinux/config    #永久关闭

将 "SELINUX=enforcing" 改为 "SELINUX=disabled",保存后退出,重启才会生效

3. 安装基础环境包

yum install gcc-c++

(为centos系统增加编译功能)

yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

(安装这些模块都是为了成功编译安装python3,防止出现各种异常)

4. 编译安装 Python

# 切换到 home 目录
cd /home
# 下载 Python 源码包
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
# 下载完成后,执行解压指令
tar -zxvf Python-3.6.3.tar.gz
cd Python-3.6.9
# 编译安装,依次执行下面的命令
# 将python3安装到/usr/local/python3/路径下
./configure --prefix=/usr/local/python3
make -j2
make install -j2
# 创建 python3 和 pip3 的软链接
ln -s /usr/local/python3/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

5. 安装 django 和 uwsgi 及 及创建uwsgi的配置文件

pip3 install django
# 若 django 项目需要其他的第三方库,自行一并安装
pip3 install uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# (为了在任何位置使用uwsgi命令,创建uwsgi软链)
  • 将 django 项目放置在 /home/www 目录下(或任何其他目录)

    cd /home
    mkdir www
    cd www
    # 然后将django项目部署在www目录下
    
  • 测试 django 项目是否可以正常运行

    • cd 到 django项目目录中

    •   # 执行下面的命令
        python3 manage.py runserver 0.0.0.0:8001
      
    • 若能在浏览器中通过 ip地址:8001 来访问则通过测试

      注:若启动报错

      django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
      

      原因时系统自带 sqlite3 版本太低,升级即可。

      # 切换目录
      cd /home
      # 下载源码包
      wget https://www.sqlite.org/2019/sqlite-autoconf-3300000.tar.gz
      # 解压编译
      tar -zxvf sqlite-autoconf-3300000.tar.gz 
      cd sqlite-autoconf-3300000/
      ./configure --prefix=/usr/local
      make
      make install
      # 替换系统低版本 sqlite3
      mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
      ln -s /usr/local/bin/sqlite3   /usr/bin/sqlite3
      echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf
      ldconfig
      sqlite3 -version
      # 若返回 3.30.0,则安装成功
      # 安装成功后重启 django 项目测试即可
      
  • 测试 uwsgi 是否安装成功

    • 编写一个测试文件

      •   vi test.py
        
      • 写入以下内容,保存退出

        # !/usr/bin/python3
        
        def application(env, start_response):
            start_response('200 OK', [('Content-Type', 'text/html')])
            return [b'UWSGI Test...']
        
    • 启动 uwsgi 服务测试

      •   uwsgi --http :8001 --wsgi-file test.py
        
      • 使用浏览器访问 ip地址:8001

      • 若出现一下界面则测试成功

  • 创建 uwsgi 配置文件

    vi uwsgi.ini
    

    填入以下内容,并根据项目,进行对应修改(一般情况下,仅需配置chdir,module)

    [uwsgi]
    
    # Django-related settings
    # 127.0.0.1 表示本机,后面的 8001 表示端口
    # 这里配置的端口要和后面Nginx配置文件中的socket端口相同。
    socket = 127.0.0.1:8001
    
    # the base directory (full path)
    # 设置django项目根目录
    chdir          = /root/Learning-Python3/cmdb 
    
    # Django's wsgi file
    # 设置django项目wsgi文件,格式为: django项目名 + ".wsgi"
    module          = cmdb.wsgi  
    
    # process-related settings
    # master
    master          = true
    
    # maximum number of worker processes
    # 设置进程数
    processes      = 4
    
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 666
    # chown-socket = nginx:nginx
    # clear environment on exit
    vacuum          = true
    # enable-threads = true
    

    (若后续启动 uwsgi 服务时出现问题,则将中文注释全部删除)

    [uwsgi]
    chdir = /var/www/html/myBlog
    file = /var/www/html/myBlog/myBlog/wsgi.py
    master = True
    processes = 4
    max-requests = 5000
    socket = 127.0.0.1:8002
    uid = 1000
    gid = 2000
    pidfile = /var/www/html/myBlog_uwsgi.pid
    logto = /var/www/html/myBlog_uwsgi.log
    
  • 安装 nginx 并配置 nginx.conf 文件

    • 安装 nginx

      # 进入 /home 目录
      # 执行以下命令
      wget https://nginx.org/download/nginx-1.9.9.tar.gz
      # 若下载速度过慢,也可以使用华为提供的 nginx 镜像
      # wget https://mirrors.huaweicloud.com/nginx/nginx-1.9.9.tar.gz
      # 下载完成后,依次执行以下命令:
      tar -zxvf nginx-1.9.9.tar.gz
      cd nginx-1.9.9
      ./configure
      make
      make install
      
    • 配置 nginx.conf

      • nginx一般默认安装好的路径为/usr/local/nginx

        cd /usr/local/nginx/conf
        vi nginx.conf
        
      • 将 http 中 server 的内容替换为以下内容,并根据项目具体情况修改

        server {
        	listen       80;
        	server_name  www.your_domain.com your_domain.com  your_ip_addr; 
        	# server_name 中的值 修改为域名或ip地址
        	location / {
        		include uwsgi_params;
        		uwsgi_pass 127.0.0.1:8001;
        	}
        	location /static/ {
                alias /home/www/myproject/static/; #项目静态路径设置
            }
            location /media/ {
                alias /home/www/myproject/media/; #项目媒体路径设置
            }
        }
        

        修改后 wq 保存,执行以下命令,完成 nginx 配置检测

        cd /usr/local/nginx/sbin/
        ./nginx -t
        

        若提示下图内容,则配置文件通过测试

        # 通过测试后,执行以下命令,启动 nginx
        ./nginx
        

6. 启动 uwsgi

  •   # 切回项目所在目录,执行以下命令
      uwsgi --ini uwsgi.ini
    

7. 若以上步骤都没有出错,即可打开浏览器访问django项目

附录(运维相关)

1. nginx 的启动、停止 与 重启

  • 启动

    systemctl start nginx
  • 停止

    systemctl stop nginx
  • 重启

    systemctl restart nginx

若提示

Failed to start nginx.service: Unit not found.

则需要,在/etc/init.d/目录下新建文件,文件名为nginx

vi /etc/init.d/nginx

插入以下代码片段

#!/bin/sh
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
 
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid
 
# Source function library.
 
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
 
. /etc/sysconfig/network
 
# Check that networking is up.
 
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/local/nginx/sbin/nginx"
 
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 
lockfile=/var/lock/subsys/nginx
 
start() {
 
    [ -x $nginx ] || exit 5
 
    [ -f $NGINX_CONF_FILE ] || exit 6
 
    echo -n $"Starting $prog: "
 
    daemon $nginx -c $NGINX_CONF_FILE
 
    retval=$?
 
    echo
 
    [ $retval -eq 0 ] && touch $lockfile
 
    return $retval
 
}
 
 
stop() {
 
    echo -n $"Stopping $prog: "
 
    killproc $prog -QUIT
 
    retval=$?
 
    echo
 
    [ $retval -eq 0 ] && rm -f $lockfile
 
    return $retval
 
}
 
 
 
restart() {
 
    configtest || return $?
 
    stop
 
    start
 
}
 
 
reload() {
 
    configtest || return $?
 
    echo -n $"Reloading $prog: "
 
    killproc $nginx -HUP
 
    RETVAL=$?
 
    echo
 
}
 
force_reload() {
 
    restart
 
}
 
 
configtest() {
 
  $nginx -t -c $NGINX_CONF_FILE
 
}
 
 
 
rh_status() {
 
    status $prog
 
}
 
 
rh_status_q() {
 
    rh_status >/dev/null 2>&1
 
}
 
case "$1" in
 
    start)
 
        rh_status_q && exit 0
        $1
        ;;
 
    stop)
 
 
        rh_status_q || exit 0
        $1
        ;;
 
    restart|configtest)
        $1
        ;;
 
    reload)
        rh_status_q || exit 7
        $1
        ;;
 
 
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
 
 
    condrestart|try-restart)
 
        rh_status_q || exit 0
            ;;
 
    *)
 
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
 
esac

保存退出并执行以下语句

cd /etc/init.d
 
chmod 755 /etc/init.d/nginx
 
chkconfig --add nginx