centos7部署Django项目

1,735 阅读5分钟

前言

为了方便自己以后查看,记录安装部署的过程。

部署环境

软件 版本
python 3.6.6
Django 2.0.0
nginx 1.15.12
mysql 5.7

基础环境安装

nginx安装

下载nginx软件包

建议压缩包放在/usr/local/src/

wget http://nginx.org/download/nginx-1.15.12.tar.gz

解压并且编译安装

tar -zxvf nginx-1.15.12.tar.gz
cd nginx-1.15.12
./configure --prefix=/usr/local/nginx  # --prefix指定了安装目录
make&make install

启动服务

/usr/local/nginx/sbin/nginx

注意:若是出现无法访问该地址,须要关闭虚拟机的防火墙

systemctl stop firewalld  # 关闭
systemctl disable firewalld  # 开机禁用

mysql安装

下载并安装mysql官方的Yum Repository

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm  # 建议下载存放到/usr/local/src/目录下
yum -y install mysql57-community-release-el7-10.noarch.rpm

# 开始安装mysql
yum -y install mysql-community-server

mysql数据库配置

# 启动mysql
systemctl start  mysqld.service
# 查看运行状态
systemctl status mysqld.service

如图,active表示mysql已经在运行。接下来,修改数据库初始化好的密码。

grep "password" /var/log/mysqld.log  # 查找初始密码 
mysql -uroot -p "初始密码"  # 上一步查找出来的密码,登录到数据库里 

# 修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

其中,若是新设置的密码过于简单,数据库会报错,建议修改下密码设置规范。

mysql> set global validate_password_policy=0;

python安装

更新软件管理包和可能使用的依赖

yum -y groupinstall "Development tools"

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

下载python3压缩包

wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz

解压并且安装编译

# 解压 
tar -zxvf Python-3.6.6.tgz 

# 进入python3目录
cd Python-3.6.6
./configure --prefix=/usr/local/python3  # 一样把python3安装指定目录下
make&make install

安装完成之后,建立软链接,添加变量,方便在终端中直接使用python3

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3

同理,安装完python3后,pip3也已经安装好了,建立软连接。

ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

查看python3和pip3安装情况

virtualenv安装

为了不同版本项目管理,建议安装虚拟环境。

# 创建部署目录 /website为项目部署的路径,也可以针对虚拟环境env和网站文件www建立对应的目录
mkdir /website
cd /website/

# 创建虚拟环境
pip3 install virtualenv

# 建立软链接,方便终端使用命令virtualenv
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

# 创建虚拟环境
virtualenv python3_env

# 进入创建好的python3_env虚拟环境
source /website/python3_env/bin/activate

如图,此时已经进入了python3_env虚拟环境,可以看到在/website目录下也有着之前创建好的虚拟环境python3_env包。

uwsgi和Django安装

pip3 install uwsgi -i https://pypi.douban.com/simple

pip3 install django==2.0 -i https://pypi.douban.com/simple

至此基础环境已经安装好了,可以pip3 list查看。

项目配置

这里用自己的一个项目做演示(两个app,boot和users),该django项目结合了fslayui框架,所以此处没有并没有用到静态文件/static/,在nginx配置中会讲到。

上传项目并配置settings

将项目打包上传至/website目录下,配置settings.py。

这里STATIC_ROOT是必须要修改的,路径值看你这边把静态文件放在那里。配置静态文件尤为重要,为后续nginx配置起作用。

添加日志目录和PID文件

# 创建logs目录
mkdir /website/logs
cd /website/logs

# 创建日志和PID文件
touch website_uwsgi.{pid,log}

进入项目中收集django后台的静态文件

cd /website/ServerWeb
# 在项目路径下搜集所有的静态文件到static下,包括admin中的。
python3 manage.py collectstatic 

迁移数据库文件

python3 manage.py makemigrations
python3 manage.py migrate

安装项目所依赖的包

此处的示例项目所需要的依赖包可通过pip3 install来安装,如图:

其中,mysqlclient是MySQL-python的另外一个分支,安装此mysql驱动后,则django项目可以操作mysql。但在pip3 install mysqlclient的时候若是报错无法安装,则一般解决办法为:

# 安装完mysql-devel后,再安装mysqlclient
cd /etc/yum.repos.d/
rpm -ivh http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
yum install mysql-devel

配置运行环境

uwsgi配置

添加uwsgi配置文件

当前虚拟环境已经安装好了uwsgi,添加uwsgi配置文件,进行配置。

vi /etc/init.d/website_uwsgi

[uwsgi]
//运行端口号
socket = 127.0.0.1:8000 
//主进程
master = true
//多站模式
vhost = true
//多站模式时不设置入口模块和文件
no-stie = true
//子进程数
workers = 2
reload-mercy = 10
//退出、重启时清理文件
vacuum = true
max-requests = 1000
limit-as = 512
buffer-sizi = 30000
//pid文件,用于下面的脚本启动、停止该进程
pidfile = /website/logs/website_uwsgi.pid
daemonize = /website/logs/website_uwsgi.log

添加快捷启动脚本 vi /etc/init.d/website_uwsgi

其中,变量的路径值是可以变的。

#!/bin/bash

NAME='website_uwsgi'
DAEMON='uwsgi'
CONFIGFILE="/website/$NAME.ini"
PIDFILE="/website/logs/$NAME.pid"
SCRIPTNAME="/etc/init.d/$NAME"
   
do_start() {
$DAEMON $CONFIGFILE || echo -n "uwsgi  running" 
}

do_stop() {
    $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
    rm -f $PIDFILE
    echo "$DAEMON STOPED."
}

do_reload() {
    $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
}

do_status() {
    ps aux|grep $DAEMON
}

case "$1" in
status)
    echo -en "Status $NAME: \n"
    do_status
;;
start)
    echo -en "Starting $NAME: \n"
    do_start
;;
stop)
    echo -en "Stopping $NAME: \n"
    do_stop
;; 
reload|graceful)
    echo -en "Reloading $NAME: \n"
    do_reload
;;
*)
    echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
    exit 3
;;
esac
exit 0

给脚本授权 chmod 755 /etc/init.d/website_uwsgi

使用脚本启动或关闭服务

/etc/init.d/website_uwsgi start

显示相关的进程:

nginx配置

当前centos7已经安装好了nginx,还需要对nginx进行配置。

cd /usr/local/nginx/conf/
# 备份nginx.conf
cp nginx.conf nginx.con.bak

vi nginx.conf
# 在最后一个 } 前面添加如下内容,其中入口文件和根目录就是项目名字和所在目录
server {
    # 设置网站运行端口
    listen       8080;
    server_name  localhost;
   
    location / {
        include  uwsgi_params;
        # 必须和uwsgi中的设置一致
        uwsgi_pass  127.0.0.1:8000;
        # 入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
        uwsgi_param UWSGI_SCRIPT bootproject.wsgi;
        # 项目根目录
        uwsgi_param UWSGI_CHDIR /root/website/ServerWeb;
        index  index.html index.htm;
        client_max_body_size 35m;
    }

    # 静态文件目录
    #location /static/ {
    #    alias /website/nav_project/static/;
    #    index index.html index.htm;
    #}
}

由于之前说过该示例项目不需要在此指定静态文件的路径,所以此处静态文件目录的配置注释掉。

启动nginx服务 /usr/local/nginx/sbin/nginx -s reload

此时就可以根据配置的端口号以及ip地址,进行访问。

如图:

小结

总结一下,在centos7部署Django项目,首先要把对应的基础环境搭好,然后再对配置文件进行修改。

特别申明:图中数据为本地数据库以及项目示例,仅供本人练习使用,并非任何产品网站的正式数据以及项目。

参考链接:

www.cnblogs.com/Dy1an/