Django部署(Centos7+nginx+uwsgi+python3+django)

开发之路,羊肠九曲,荆棘密布,幸得高人指点,前辈填坑,一路谨小慎微,终得工程圆满;其间填坑之经验,开路之历程,皆为精华,不可弃之;记录于此,以便事后回顾,亦想于有相关开发疑惑之同学做参考之用,文中如若有错,恳请雅正,不胜感激。

环境

系统版本
centos7

python版本
使用官方python3.6.4正式版

django版本
使用本文发布时最新的1.11.7

uwsgi版本
使用本文发布时最新的2.0.15

nginx版本
使用本文发布时官网最新的1.13.7

服务器配置

纯净的CentOS7系统默认已经安装了Python2 ,但是我们的项目很多情况下都是Python3,所以就需要安装Python3,并保留python2.7

python3安装

安装依赖

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 gcc libffi-devel python-devel openssl-devel libcurl-dev libcurl-devel

获取tgz包

get https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

解压切换安装

tar -zxvf Python-3.6.4.tgz
cd Python-3.6.4

./configure --prefix=/usr/local
./configure --enable-optimizations
make && make install

创建Python3的软链接

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

创建Pip3的软链接

ln -s /usr/local/bin/pip3 /usr/bin/pip3

安装完后,输入命令 python3即可看到安装版本,若报错,则安装过程出现问题,可重新执行。

nginx安装

本地项目是用的宝塔面板直接装的nginx,添加站点并开放端口后,直接配置反向代理即可访问

单nginx安装步骤如下:

进入home目录,执行以下命令:

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

下载完成后,执行解压命令:

tar -zxvf nginx-1.13.7.tar.gz

进入解压后的nginx-1.13.7文件夹,依次执行以下命令:

./configure
make
make install

nginx一般默认安装好的路径为/usr/local/nginx
在/user/local/nginx/conf/中打开nginx.conf,加入以下内容

server {
    listen 8996; #暴露给外部访问的端口
    server_name localhost;
        charset utf-8;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8997; #外部访问8996就转发到内部8997
    }
    location /static/ {
        alias /home/www/myproject/myapp/static/; #项目静态路径设置
    }
}

(以上内容请保证在默认内容的大括号内)

wq保存后进入/usr/local/nginx/sbin/目录
执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:
./nginx
终端没有任何提示就证明nginx启动成功,可以通过链接查看nginx是否启动成功:
http://192.168.1.111 (请将该ip替换成你的服务器ip)

django配置

一般服务器上我们会放很多站点,不同的项目对python包的支持也有所不同,所有virtualenv的使用,很方便,可以隔离项目之间的第三方包依赖

安装虚拟环境

pip3 install virtualenv

安装django uwsgi

pip3 install django
pip3 install uwsgi

项目部署,上传项目文件至服务器,加入服务器上的项目目录是/home/wwwroot/myproject
进入项目目录,生成环境

virtualenv venv

这样会在该项目下生成一个venv的文件夹,然后激活虚拟环境

source venv/bin/active

退出环境

deactivate

我们先不要退出环境,先安装改项目所有的依赖,默认我们会再本地开发的时候将所有依赖写入requirements.txt文件

pip3 install -r requirements.txt

测试项目是否正常运行
在启动开发服务器之前,必须采用查看安全组是否已经开放其端口,并且查看防火墙是不是已经开放这个端口

python3 manage.py runserver 0.0.0.0:8081

这样我们访问 http://IP:8081即可看到项目
可能会出现的错误有 端口被占用
解决办法:

netstat -nlp

查看端口情况,然后选择一个未被占用的端口,并在防火墙或者安全组里放开。不要设置小于1024的端口

uwsgi安装

前面已经安装好了uwsgi

快速测试

uwsgi --http :8081 --home /home/wwwroot/myproject/venv  --chdir /home/wwwroot/myproject -w myproject.wsgi

如果不报错 即正常

创建配置文件
我们不可能每次启动都敲一遍命令,所以我们需要写一个配置文件将项目的相关配置固定下来,uwsgi可以有xml 和ini两种配置文件,我们这里选择ini文件,比较方便

vi /home/wwwroot/myproject/config.ini

创建文件,并写入一下内容,中文注释内容需要删掉

#config.ini file 
[uwsgi]  //必须要有,不然会报找不到 section uwsgi 的错
chdir           = /home/wwwroot/myproject //项目根目录
wsgi-file = /home/wwwroot/myproject /wsgi.py  //wsgi.py文件,该文件一般自动生成
home = /home/wwwroot/myproject /venv //之前创建的项目的虚拟环境地质
virtualenv = /home/wwwroot/myproject /venv //之前创建的项目的虚拟环境地质
static-map=/static=/home/wwwroot/myproject /static //项目的静态目录,如果使用 django-admin,此项必填,不然样式引入不了

module          = myproject .wsgi:application
master          = true
processes       = 3
http = 0.0.0.0:8001  //项目访问地址,如果直接nginx配置,可以用socket = 127.0.0.1:8001,需要直接访问可改为http

vacuum          = true
enable-threads = true

配置好之后,可以启动项目

uwsgi --ini config.ini

如果项目可以访问,及正确,一般出错是路径及虚拟环境问题。

开机启动

这块很重要,我们不能每次重启服务器后手动来开启项目,很麻烦,我们可以给uwsgi创建一个系统单元,让其自动管理我们的uwsgi服务

vi /etc/systemd/system/uwsgi.service

填入

[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /home/wwwroot/myproject/config.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

开启服务

systemctl enable uwsgi
systemctl start uwsgi

查看状态

systemctl status uwsgi

至此,一个django项目的部署就完成了!

参考文章
https://www.cnblogs.com/sumoning/p/7147755.html
https://www.yuwenlaoshi.com/vps/nginx/201807043635.html
https://www.cnblogs.com/levelksk/p/7921066.html

你可能感兴趣的:(python,django)