之前写PHP的时候自己一直没有手动操作在SERVER上部署项目~所以对PHP+fastcgi+Nginx的套路不是很熟悉~
好吧~作为一个SERVER工程师,欠的债总是要还的(笑)!
最近写python3的时候自己整了一发项目的SERVER部署,python框架用的是Django,SERVER部署的套路使用的是Django+uWSGI+Nginx这个套路~
基于网上搜索到的资料有的版本比较陈旧,有的帖主思维比较跳跃,导致第一次部署之旅持续了两天,简直是头破血流,极度酸爽~
本文对于Django框架的使用,uWSGI是啥,Nginx起到什么样的作用不做过多讲解!网上可以搜到很多相关资料!
主要把Django+uWSGI+Nginx成功部署的流程记录一下!
准备工作
准备一台SERVER,当然你是本地的虚拟机也可以,但是案例以阿里云为例!
申请阿里云服务器时我们选择CentOS系统!
首先,在阿里云后台实例中,我们找到已开通的实例,选择网络与安全中的安全组,添加安全组信息!
然后开启8080端口的权限,像下图这样填写信息!
再开启8000/9000端口权限(再添加一个安全组,配置信息如上图,80/80改成8000/9000即可)
接着我们需要重置一下申请到阿里云的ssh密码(不要忘记设置好密码后重启一下实例)
安装所需软件
在做完准备工作后,我们可以在阿里云实例信息里获得服务器的ip和密码
使用ssh连接阿里云,像下面这样(当然,@后的ip应该改成你自己的)
输入密码后连接到服务器
接着我们来看一下系统的版本
是CentOS,没毛病~
然后我们开始正活!
因为CentOS只自带python2,并没有预配安装python3,所以我们首先需要安装python3到服务器。
【python3.6.5安装】
(1)安装python依赖包
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 python-devel
(2)安装python
#wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
#mkdir -p /usr/local/python365
#tar zxvf Python-3.6.5.tgz
#cd Python-3.6.5
#./configure --prefix=/usr/local/python365
#make
#make install
#ln -s /usr/local/python365/bin/python3 /usr/local/bin/python3
#ln -s /usr/local/python365/bin/pip3 /usr/local/bin/pip3
#pip3 install --upgrade pip #更新pip
#pip3 install ipython #安装ipython方便调试
上面用了ln -s指令做了两个软连(如果需要在CentOS命令行中执行,都可以软连到/usr/local/bin/这个目录底下)
(3)测试安装是否正常
python3.6.5安装完成后,我们接着整一下uWSGI~
【uWSGI安装】
(1)使用pip工具包安装
#pip3 install uwsgi
#ln -s /usr/local/python365/bin/uwsgi /usr/local/bin/uwsgi3 #建立软链接
#uwsgi --version #检查安装成功
2.0.17
然后安装Django!
【Django安装】
(1)使用pip工具包安装
#pip3 install django==1.11.8
#ln -s /usr/local/python365/bin/django-admin /usr/local/bin/django-admin
这里我安装的是1.11.8版本的django~
最后把Nginx安装到我们的服务器上!
【Nginx安装】
(1)使用yum安装
#yum -y install nginx
到这里!我们就把Django+uWSGI+Nginx套路所需的软件都安装完毕了!
可以通过下图指令来查看安装软件的版本信息(我的nginx启动文件在/usr/sbin/目录下)
接下来就是修改和新建配置文件,使Django,uWSGI,Nginx联通在一起了!
#测试Nginx#
①启动nginx
如下图这样,使用 /usr/sbin/nginx 指令来启动nginx
这里如上图显示我的80端口已经被占用~不过没有关系!那是因为我现在阿里云正在跑着nginx!(如果你是首次安装nginx并启动应该不会这样)
使用 killall -9 nginx 指令来杀掉nginx的进程并再次启动nginx,像下图这样
不报错表示启动成功!
接着我们打开本地浏览器,使用ip进行访问!
如果返回上图页面,就表示我们的Nginx已经在Server上跑起来了!(注:这里nginx的配置文件我没有改,所以使用默认80端口)
#修改Nginx配置文件,创建Django项目及新建uwsgi.ini文件#
①首先我们找到Nginx的配置目录,如下图
进入conf.d目录下新建 jango_test.conf 文件,并写入配置信息,如下图
server{
listen 8099; #监听8099端口
server_name 39.106.27.2;
charset utf-8;
access_log /var/log/nginx/access.log; #日志文件位置
error_log /var/log/nginx/error.log;
client_max_body_size 75M;
location / { #访问/时
include uwsgi_params; #加载uwsgi模块
uwsgi_pass 39.106.27.2:8000; #将连接转到该IP
uwsgi_read_timeout 2;
}
location /static/ {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /server/Onlineshop/static; #访问/static时直接访问到/project/static
}
}
然后wq保存退出即可!
②然后我们在服务器 / 目录下创建 server 路径,在server路径下创建django项目jango_test,像下图这样
在项目jango_test中新建app go_test,新建目录uwsgi,新建uwsgi启动文件myweb_uwsgi.ini,项目结构像下面这样
③写入myweb_uwsgi.ini配置文件信息
myweb_uwsgi.ini配置文件信息如下
[uwsgi]
# Django-related settings
socket = :8000
# the base directory (full path)
chdir = /server/jango_test
# Django s wsgi file
module = jango_test.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
pidfile=uwsgi/uwsgi.pid
# 在后台运行, 信息保存的日志文件
daemonize=uwsgi/uwsgi.log
配置完wq退出即可
④用Django写一个简单的print用来测试
进入 /server/jango_test/jango_test/目录下
修改settings.py文件,添加服务器ip及新增的app,如下图红框处
修改urls.py文件,指定默认路由,如下图红框处
然后进入 /server/jango_test/go_test/ 目录下,修改views.py文件,return一个HttpResponse,如下图!
再到这里!所有的配置步骤就完成了!
最后使用 killall -9 先把nginx进程杀死
然后进入到 /server/jango_test/ 目录下,使用下图指令,开启uwsgi
再次启动Nginx!
打开本地浏览器,使用 ip:port ,访问阿里云上的Django项目!
如上图!就是刚才我们在Django中返回的HttpResponse!
大功告成!
参考帖子URL
①https://www.cnblogs.com/zhangxinqi/p/9084126.html
②https://blog.csdn.net/xunalove/article/details/76359890?utm_source=5ibc.net&utm_medium=referral