CentOS7部署Django项目

项目的部署基于阿里云CnetOS7 + mysql5.7 + python3 + xadmin + uwsgi + nginx

CentOs同时安装python2和python3

#查看python的执行位置
which python
#通配符查看
ll python*  列出所有python相关的文件目录等
#安装依赖,使用yum安装
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
#下载python3的安装包
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
#创建安装目录
 mkdir /usr/local/python3 
#解压安装包
tar -zxvf Python-3.6.3.tgz
#进入解压目录
cd Python-3.6.3
#配置
./configure --prefix=/usr/local/python3
#编译
make && make install
#创建软链接
ln -s /user/local/python3/bin/python3 /usr/bin/python3
#pip创建软链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
#创建软连接之后 yum 不可用,需要更改 配置

修改/usr/bin/yum和/usr/bin/urlgrabber-ext-down两个文件的头文件,
即将第一行#!/usr/bin/python   
改为 #!/usr/bin/python2

安装mysql

安装的方式使用 rpm包方式安装:

#下载安装mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
#解压安装包
tar -vxf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar
#查看mysql相关
whereis mysql 
#移除mysql相关的lib(可选项操作,建议操作)
yum remove mysql-libs
#安装mysql rpm相关的包,相互之见存在依赖关系,按照顺序安装 common --> libs --> clients --> server
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm
#这个在后面安装 msyqlclient需要依赖的包
rpm -ivh mysql-community-devel-5.7.20-1.el7.x86_64.rpm
#安装完成之后,启动服务
service mysqld start
tips: 可能出现警告 # [warning: mysql-community-server-5.7.19-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY](https://www.cnblogs.com/royfans/p/7243641.html)

安装时加上命令: rpm -ivh mysql-community-server-5.7.19-1.el6.x86_64.rpm --force --nodeps

至此mysql安装完成
配置mysql相关:修改mysql的密码

#登录mysql
mysql -u root -p  #在此时需要密码,密码隐藏在log中
#查找默认随机密码
grep 'password' /var/log/mysqld.log  
#修改密码,获取随机密码之后,登录修改密码(由于mysql密码策略限制,密码需要包含大小写数字,特殊字符)
alter user 'root@localhost' identified by 'xxxxx';
#修改mysql的密码策略(以下操作可选项),配置之后,可以设置简单密码
vim /etc/my.cnf 
'#密码策略关闭'
    plugin-load =validate_password.so
    validate_password=OFF
#再次进入mysql查看信息
show databases
    use information_schema  (密码策略相关的数据库)
    show tables 
        select PLUGIN_NAME,PLUGIN_STATUS from PLUGINS;
        validate_password   #次验证已经变为disable了
#进行了以上的操作之后,可以查看设置简单的密码了
alter user 'root@localhost' identified by 'xxxxx';
#重启mysql,此时相关的策略已经生效了
mysql service mysqld restart 

配置mysql远程登录:(可选操作)

#判断网络是否通常
ping ip地址
#查看mysql的状态
service mysqld status
#查看mysql的进程
ps -aux | grep mysql
#登录mysql
mysql -u -p 
#查看相关信息
show databases 
    use mysql 
    show tables
    select host,user from user  #查看具体信息
#授予root所有的权限,此密码为远程登录密码
grant all privileges on *.* to 'root' @'%' identified by '123456'  with grant option;
#此时可以通过navcat等客服端测试,可以访问该数据库了

#注意,某系时候,可能连不上,需要关闭防火墙

#查看防火墙(因防火墙开启,可能导致连接失败)
firewall -cmd --state
#停止防火墙服务(centos7)
systemctl stop firewall.service 
#(centos 停止防火墙)
service iptables stop 

在centos下新建python虚拟环境

使用virtualenv:

#安装 virtualenv
pip3 install virtualenv
#找到虚拟环境的安装目录
find / -name virtualenv 
#新建虚拟环境,会在当前目录生成一个文件夹
/usr/local/python3/bin/virtualenv py3_test
#进入虚拟环境(命令行前面出现一个符号)
cd py3_test
source bin/activate
#退出虚拟环境
deactivate

使用virtualenvwrapper:这个是virtualenv的扩展工具,使用更为方便

#安装virtualenvwrapper
pip3 install virtualenvwrapper
#新建放置所有虚拟环境的目录
mkdir py_vm
#设置环境变量
vim /etc/profile 
export WORKON_HOME=/root/py_vm (绝对路径)
source /usr/local/python3/bin/virtualenvwrapper.sh

导出依赖包

#在虚拟环境中,导出依赖包
pip freeze >requirements.txt
#导出的默认位置
C:\Users\Administrator\requirements.txt

安装依赖包

#安装项目依赖
pip3 install -r requirements.txt

注意:
安装pip3 install mysqlclient 时会出错: mysql_config: command not found

#需要安装mysql-dev
rpm -ivh mysql-community-devel-5.7.18-1.el7.x86_64.rpm
#在次安装即可
pip3 install mysqlclient

上传项目到服务器

  1. 使用git 方便管理(方便管理,开发,正式,修复分支等)
  2. 使用war包,防止上传的时候,文件丢失

测试运行项目

修改项目 setting.py配置文件

#修改数据库配置,设置为127.0.0.1  设置为ifconfig查出来的地址,报权限不行
DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'django_pua',
    'USER': 'root',
    'PASSWORD': 'xxxxx',
    'HOST': '127.0.0.1',
    'OPTONS': {
        'init_command': "SET storage_engine='INNODB'",
        'charset': 'utf8mb4',
        'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
    }
}
}
#在 manage.py目录中 数据库表的初始化操作,如果没有权限记得添加sudo
python3 manage.py makemigrations
python3 manage.py migrate
#查看ip地址
ifconfig
#运行项目,此处的ip地址为上面查出来的地址
sudo python3 manage.py runserver 172.19.01.146:8000
#远程访问项目
通过阿里云分配的公网地址,进行访问验证即可

以上的操作,跟开发的过程一样,可以完整的跑起来,并且没有异常就可以开始项目的部署了

安装uwsig服务器

#安装uwsgi服务器
pip3 install uwsgi
#创建软件链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
#在项目目录,通过uwsgi启动项目
uwsgi --http 172.17.91.146:8001  --file DRF_SHOP/wsgi.py --static-map=/static=static
#通过地址访问,验证,此时呢,静态资源还没有加载

通过配置文件启动uWSGI

编写配置文件:

[uwsgi]
# 项目目录,该目录为settings.py所在的目录
chdir=/opt/django_pua/django_pua/
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 指定项目的application,该目录为wsgi.py所在的目录
module=django_pua.wsgi:application
# 指定sock的文件路径
socket=/opt/script_pua/uwsgi.sock
# 启用主进程
master=true
# 进程个数
workers=5
pidfile=/opt/script_pua/uwsgi.pid
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置后台启动
daemonize=/opt/script_pua/uwsgi.logi

通过配置文件启动:

#通过该配置文件启动
uwsgi --ini uwsgi.ini
#查看进程相关的信息
ps aux |grep uwsgi
#停掉uwsig
uwsgi --stop uwsgi.pid

安装nginx

#配置安装源
vim /etc/yum.repos.d/nginx.repo
#添加以下语句
[nginx]
name=nginx repo
#下面这行centos根据你自己的操作系统修改比如:OS/rehel
#7是你Linux系统的版本,可以通过URL查看路径是否正确
baseurl=http://nginx.org/packages/centos/7/$basearch/
#gpgcheck是gpg验证是否开启的选项,1是开启,0是不开启,一般情况可以关掉
gpgcheck=0
enabled=1

#安装nginx
yum -y install nginx

nginx配置文件

编写配置文件放置到项目目录下:在配置文件放置到nginx配置文件目录下 /etc/nginx/conf.d/

#添加nginx配置文件
vim django_pua.conf
#编写一下内容
 server {
                listen 80;
                #该地址为 你的阿里云服务ifconfig查出来的地址
                server_name 10.129.205.183 ;
                access_log  /var/log/nginx/access.log  main;
                charset  utf-8;
                gzip on;
                gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;

                error_page  404           /404.html;
                error_page   500 502 503 504  /50x.html;
                # 指定项目路径uwsgi
                location / {
                    include uwsgi_params;
                    uwsgi_connect_timeout 30;
                    #该路径uwsgi配置文件中指定sock的路径
                    uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock;
                }
                # 指定静态文件路径
                location /static/ {
                    #这个路径是在后续操作中,收集项目静态资源的路径 python3 manage.py collectstatic 该命令收集资源的文件夹的路径
                    alias  /opt/project_teacher/teacher/static/;
                    index  index.html index.htm;
                }

}
#在settings.py中, 添加配置,主要是把项目的静态资源收集,位置在项目目录下
STATIC_ROOT = os.path.join(BASE_DIR, "static_all")
#执行收集命令,在 django_pua.config 配置文件下 静态资源的路径
python3 manage.py collectstatic

启动nginx:

#启动nginx
service nginx start
#停止nginx
service nginx stop
#重启nginx
service nginx restart

至此可以通过浏览器访问验证

编写自动化脚本

进入到 /etc/init.d/
vi manage_pua

#! /bin/sh
# chkconfig: 345 85 15
# 上面一行注释:哪些Linux级别需要启动manage_pua(3,4,5);启动序号(85);关闭序号(15)。
# description: manage script is the django_pua daemon.
# Author: xxxx
# 指定项目目录
PROJECT_DIR="/opt/django_pua"
# 指定脚本目录在哪里
SCRIPTS_DIR="/opt/script_pua"
# 描述
DESC="django_pua daemon"
# 名称
NAME="django_pua"
# 脚本名称
SCRIPT_FILENAME="manage_pua.sh"
# 脚本目录名称
SCRIPTNAME=`pwd`/$SCRIPT_FILENAME

# PID
PID="uwsgi.pid"

# 启动函数
d_start(){
# 进入到项目目录
cd $SCRIPTS_DIR
# 判断这个PID是否存在
if [ ! -f $PID ];then
echo -e "\n\033[34m$NAME项目启动中........\033[0m"
# 如果不存在执行
uwsgi --ini uwsgi.ini
killall nginx
/etc/init.d/nginx start
# 自动收集静态文件
cd $PROJECT_DIR && python3 manage.py collectstatic --noinput
echo -e "\n\033[32m$NAME 项目启动完成........\033[0m"
exit 0
fi
echo -e "\n\033[33m$NAME 项目已启动请勿重复启动\033[0m"
}
# 关闭函数
# 关闭项目
d_stop(){
# 进入脚本目录
cd $SCRIPTS_DIR
# 判断这个pid文件是否存在
if [ ! -f "uwsgi.pid" ];then
# 这个项目已经关闭了
echo -e "\n\033[33m$NAME 项目已经关闭了请先启动\033[0m"
fi
echo -e "\n\033[34m$NAME 项目关闭中........\033[0m"
echo -e "\nStop $DESC: $NAME"
# 如果没有关闭
uwsgi --stop uwsgi.pid
# 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意]
killall nginx
/etc/init.d/nginx start
echo -e "\n\033[32m$NAME 项目关闭完成........\033[0m"
}

d_restart(){
d_stop
sleep 1
d_start
}

case "$1" in
start)
echo -e "\nstarting $DESC: $NAME"
d_start
;;
stop)
echo -e "\nStop $DESC: $NAME"
d_stop
;;
restart)
echo -e "\nRestart $DESC: $NAME"
d_restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac

# 添加服务
chkconfig --add manage_pua
# 开机启动
[root@localhost init.d]# chkconfig manage_pua on 
# 查看启动级别
[root@localhost init.d]# chkconfig --list manage_pua
manage_teacher  0:off   1:off   2:on    3:on    4:on    5:on    6:off

# 然后就可以通过命令
[root@localhost ~]# service manage_pua start
[root@localhost ~]# service manage_pua stop
[root@localhost ~]# service manage_pua restart

你可能感兴趣的:(CentOS7部署Django项目)