2018-12-15 Centos7+Nginx+uWsgi部署Django项目

安装MariaDB

自己也可以安装mysql,MariaDB是mysql的一个分支,它的安装比较方便,并且它 的使用命令和mysql的相同

安装命令

yum -y install mariadb mariadb-server

安装完成MariaDB,首先启动MariaDB

systemctl start mariadb

设置开机启动

systemctl enable mariadb

设置密码

命令: mysql_secure_installation

Enter current password for root:<–初次运行直接回车

设置密码

Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车

New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码

其他配置

Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,

Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

初始化MariaDB完成,接下来测试登录

mysql -u root -p

开启远程连接

在mysql数据库中的user表中可以看到默认是只能本地连接的,所有可以添加一个新的用户,该用户可以远程访问

1. 创建用户

# 先使用数据库
use mysql;

# 针对ip
create user 'root'@'192.168.10.10' identified by 'password';

#全部
 create user 'root'@'%' identified by 'password';

2. 授权

# 给用户最大权限
grant all privileges on *.* to 'root'@'%' identified by 'password';

# 给部分权限(test 数据库)

grant all privileges on test.* to 'root'@'%' identified by 'password' with grant option;

# 刷新权限表
flush privileges;

# 查看
show grants for 'root'@'localhost';

接下来就可以在远程的数据库可视化工具中直接访问该服务器中的mysql了。

# 访问数据库
mysql -u root -p

安装python3.6

在centos中,系统默认只提供python2.7的版本,但是项目我们使用的python3.6的版本。所有我们自己安装python3

安装Python3的方法

首先安装依赖包

安装Python3.6所需要的依赖包:

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.7还需额外安装依赖包:

yum install libffi-devel -y

然后根据自己需求下载不同版本的Python3,这里下载的是Python3.6.2

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

然后解压压缩包,进入该目录,安装Python3

tar -xvJf  Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install

最后创建软链接

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

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

安装环境

1. 安装virtualenv

yum install python-virtualenv

2. 创建虚拟环境

virtualenv --no-site-packages env
如果你的服务器上有过个python环境这里需要根据自己的项目需求指定用哪个python版本创建虚拟环境(如下)
virtualenv --no-site-packages -p /usr/local/python3/bin/python3

进入刚创建的虚拟环境
cd env

# 激活虚拟环境
source bin/activate

3. 安装环境需要的包

pip3 install -r re_install.txt

我们可以在存放项目代码的文件夹中创建这个re_install.txt文件,把运行项目需要安装包的名称以及对应的版本写在里面。(如下)

进入存放项目代码的文夹中创建re_install.txt文件

cd /home/src/
mkdir re_install.txt

打开文件写入对应的内容

vim re_install.txt

在文件中写入本次项目所需的包

django==1.11
pymysql
pillow  

部署

该部署采用的是cenots7系统来部署

Django的项目中,在工程目录下settings.py文件中有一个DEBUG=True参数,如果DEBUG=False则会出现js,css,img无法加载的情况出现。

原因如下:
Django框架仅在开发模式下提供静态文件服务。当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。想一想这是符合Django的哲学的:这部分事情标准服务器都很擅长,就让服务器去做吧!

1. 测试环境中部署方式

urls.py中的修改

在测试环境中一般都直接使用python manage.py runserver的方式去运行项目。其中就涉及到DEBUG=False的修改,静态目录的修改等,具体修改如下:

a. 修改settings.py配置文件中的DEBUG=False模式,修改ALLOEWD_HOST=['*']

b. 修改工程目录下的urls.py

from django.views.static import serve

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^axf/', include('axf.urls', namespace='axf')),

    # 增加以下的url路由
    url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATICFILES_DIRS[0]}),
    
    url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),


    url(r'^$', views.home)
]
中间件的修改

如果中间件是过滤哪些地址不需要登录验证的话,可以设置如下的static和media过滤地址的参数:

# 验证用户的登录状态
paths = ['/user/login/', '/user/register/',
         '/axf/market/', '/axf/marketparams/(\d+)/(\d+)/(\d+)/',
        '/static/[0-9a-zA-Z/\.]', '/media/[0-9a-zA-Z/\.]']

for path in paths:
    if re.match(path, request.path):
        return None

2. 正式环境中部署方式

正式环境中部署为 Nginx + uwsgi 来部署django项目

2.1 安装nginx

a. 添加nginx存储库

yum install epel-release

b. 安装nginx

yum install nginx

c. 运行nginx

Nginx不会自行启动。要运行Nginx

systemctl start nginx

nginx的运行命令:

 systemctl status nginx 查看nginx的状态
 systemctl start/stop/enable/disable nginx 启动/关闭/设置开机启动/禁止开机启动

d. 系统启动时启用Nginx

systemctl enable nginx

e. 如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:

sudo firewall-cmd --permanent --zone=public --add-service=http 

sudo firewall-cmd --permanent --zone=public --add-service=https

sudo firewall-cmd --reload

运行结果如下:

django_centos_nginx.png

3.配置uwsgi

3.1 安装uwsgi

在虚拟环境中安装uwsgi,假设虚拟环境安装在/home/env/freshenv中
这里强行指定使用虚拟环境中的pip安装,相当于在激活环境状态下安装

/home/env/freshenv/bin/python3/pip3 install uwsgi

4. 配置项目代码,配置项目nginx,配置uwsgi.ini等

本案例的配置文件,都习惯将每一个项目的配置文件,日志文件,虚拟环境放在一起,这样开发方便,运维也方便维护

项目的目录结构如下:

1.png

其中:

conf是配置文件,用于存放项目的nginx.conf文件,uwsgi.ini文件

logs是日志文件,用于存放nginx的启动成功和失败文件,以及uwsgi的运行日志文件

env是用于存放虚拟环境

src是项目文件,该目录下上传的是目录代码

4.1 配置nginx.conf文件

<b>首先</b>:编写自己项目的nginx.conf文件如下:

每一个项目对应有一个自己定义的nginx的配置文件,比如天天生鲜项目,我定义为TTSX.conf文件

server {
     # 指定启动端口
     listen       80;
     # 指定服务器ip也就是待会可以通过这个ip访问我们的网站,有域名的就换成自己的域名即可
     server_name 192.168.156.1;
     # 指定成功启动的日志文件存放位置
     access_log /home/logs/access.log;
     # 指定启动失败的日志存放位置
     error_log /home/logs/error.log;
     # 指定静态文件路径 
     location /static/ {
         alias /home/src/fresh_shop/static/;
         expires 30d;
     }
     # 指定媒体文件的存放路径  
     location /media/ {
         alias /home/src/fresh_shop/media/;
     }
     # 指定Nginx服务器与uwsgi通信的ip地址和端口
     location / {
         # 改参数是固定写法
         include uwsgi_params;
         uwsgi_pass 127.0.0.1:8080;
     }

 }

<b>其次</b>:修改总的nginx的配置文件,让总的nginx文件包含我们自定义的项目的TTSX.conf文件

如果Nginx是默认安装路径的话,总的nginx配置文件在:/etc/nginx/nginx.conf中

django_centos_nginx_peizhi.png

以上步骤操作完成以后,需要重启nginx:

systemctl restart nginx

如果自定义的TTSX.conf文件没有错误的话,查看nginx的运行状态会有如下的结果:

2.png

4.2 配置uwsgi文件

在conf文件夹下除了包含自定义的TTSX.conf文件,还要自定义定义uwsgi.ini文件

[uwsgi]
# 下面这两个参数可有可无,没有时就强行指定项目地址即可
projectname = TTSX
base = /home/src

# 守护进程
master = true

# 进程个数,根据需求自行修改
processes = 4

# 指定启动项目使用的虚拟环境
pythonhome = /home/env/freshen

# 指定项目存放地址
# chdir = %(base)/%(projectname)
chdir = /home/src/fresh_shop

# 指定python版本
pythonpath = /usr/local/python3/bin/python3

# 指定uwsgi文件
# module = %(projectname).wsgi
module = fresh_shop.wsgi

# 指定uwsgi和nginx通信ip:端口(这里必须和上面我们自定义的Nginx配置文件中的一致)
socket = 127.0.0.1:8080

# 日志文件地址
logto = /home/logs/uwsgi.log

运行项目:

/home/env/freshenv/bin/python3/uwsgi --ini uwsgi.ini
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容