您的位置:首页 > 运维架构 > Nginx

小白教你如何用Django+uwsgi+Nginx+腾讯云ubuntu服务器部署项目

2018-02-01 15:14 1196 查看

背景

  本篇博客内容如题目所示,背景是前几天帮老师写了一个非常小的项目,大概是让学生的家长可以登陆网址查阅孩子们的成绩,前因后果就不在啰嗦了。在写完Django成绩查询小项目后,面临着项目的部署问题。在反复跳进各种坑、查阅了各种技术说明文档和很多大牛的博客后成功地进行了部署,把部署过程记录如下。当然,本人编程小白一枚,如果在以下内容中有错误或者描述不当的地方,请各位大佬留言指正~

  另外,本次部署各种程序版本如下:

程序名称版本号
腾讯云ubuntu服务器Ubuntu 16.04.3 LTS
PythonPython 2.7.12
DjangoDjango 1.10.6

部署过程

一、 准备项

  1、配置好Django环境的腾讯云ubuntu服务器。这个登录腾讯云购买就行了,学生的话有额外活动~我的腾讯云shell登录方式就是最简单的用户名口令,此外还可以用SSH密钥登录。

  2、Django项目。我的Django项小目名为:InquireScore,下文如用到的InquireScore字样的地方,可替换为任意项目名;

  3、安装了Xshell & Xftp的windows系统电脑。我用到的版本是Xshell5 & Xftp5,用这个的目的就是远程登录腾讯云,并且把文件传到云上(主要是这点,在之后的配置过程中需要在配置文件中写入配置信息,在命令行下用vim敲好麻烦,不如写好直接传上去覆盖,我承认不太会用vim,哈哈)。

  一切就绪~现在开始部署工作~

二、 Xshell & Xftp登录云服务器并传输Django项目

  首先打开Xshell5,点击左上角“新建”,即红框中按钮:

。然后点击“连接”,输入“名称”(随便起一个名字)和“主机”(腾讯云的IP地址)。写完后先别点“确定”,后点击左上角“用户身份验证”,输入“用户名”(腾讯云shell名)和“密码”(shell登录密码),最后点击“确定”。

(注:如果是用SSH密钥登录可以在“方法”中选择“PublicKey”然后选择登录密钥文件,即可。)

  过程截图如下:

   


   


  成功登陆后,点击下图中Xftp图标:

   


  点击后进入文件传输界面,拖动Django项目文件夹至云主机中,如下图:

   


  至此,该步骤完成~

三、 测试Django项目并整理目录

  在Django目录至云端后,有几个需要注意的地方。

目录结构问题。

  我的Django项目中只有一个主要的app名为Inquire,该app有自己的静态文件夹static。在正常的Django项目中,不同的app也应该有各自的static文件夹,但是在之后的nginx配置过程中,我们需要提供项目的一个静态目录地址,这就需要把Django项目所有app的static文件整合到一个文件夹中。此时setting.py文件中关于静态目录的设置如下:

STATIC_URL = '/static/'
# 添加app的静态文件地址,绝对地址和相对地址都可以
STATICFILES_DIRS = [
"/home/ubuntu/InquireScore/Inquire/static"
]
# 统一的静态文件地址
STATIC_ROOT = os.path.join(BASE_DIR, "static/")


  配置好后,我们Xshell命令行中的/home/ubuntu/InquireScore目录下执行以下语句完成整合:

>> python manage.py collectstatic


  执行后的目录结构如下图所示:

        


公网访问配置。

  我们需要在浏览器中打开链接完成项目测试,由于不是本机测试,所以我们需要通过公网访问测试,在setting.py中修改输入:

DEBUG = False
ALLOWED_HOSTS = ['*']


测试

  注意到以上两点后,我们可以进行测试了,在Xshell命令行中的/home/ubuntu/InquireScore目录下输入:

>> python manage.py runserver 0.0.0.0:8888


  成功运行后在浏览器中输入:http://IP:8888 进行测试,可以进行正常功能即可进行下一步。测试后按ctrl+c关闭测试进程。

  (关于settings.py文件的设置项,可以参照官方文档提示,链接为:https://docs.djangoproject.com/

四、 安装并配置uwsgi

安装测试uwsgi

  简单介绍一下:uWSGI是一个Web服务器,而uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。由于uWSGI是C语言应用程序,所以需要一个C编译器(gcc或clang)和Python开发头文件,所以输入以下语句:

>> sudo apt-get install build-essential python-dev


  build-essential提供编译程序必须软件包的列表信息。python-dev就可以让我们安装一个源外的,内含需要编译的调用python api的c/c++文件的python类库。然后输入以下指令安装uwsgi:

>> sudo pip install uwsgi # 安装


  安装后进行简单的测试,在本地写好如下的测试代码命名为 test.py,把文件用Xftp传到云主机任意目录下:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return ["success!"]


  该目录下输入以下命令:

>> uwsgi --http :8000 --wsgi-file test.py


  输入信息无误执行后将会出现以下信息:

  


  在浏览器中打开:http://IP:8000 ,若出现“success!”则安装测试成功,如下图:

  


  注意:测试过后,用ctrl+c来终止程序,而不要用ctrl+z挂起程序,否则该8000端口会一直开启使用,影响后续配置过程。测试后 test.py 文件即可删除。

配置uwsgi

  在InquireScore文件夹与manage.py同级的目录下创建.ini文件,命名任意,我命名为InquireScore_uwsgi.ini,文件内容如下(注意路径):

# InquireScore_uwsgi.ini file
[uwsgi]
# uwsgi监听的socket,一会儿配置Nginx会用到
socket = 127.0.0.1:8000
# 在app加载前切换到该目录,设置为Django项目根目录
chdir           = /home/ubuntu/InquireScore
# 加载指定的python WSGI模块,设置为Django项目的wsgi文件
module          = InquireScore.wsgi
# 启动一个master进程来管理其他进程
master          = true
# 工作的进程数
processes       = 4
# 每个进程下的线程数量
threads = 2
# 当服务器退出的时候自动删除unix socket文件和pid文件
vacuum          = true
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize = /home/ubuntu/InquireScore/uwsgi.log


  然后在该目录下输入:

>> uwsgi --ini InquireScore_uwsgi.ini


  则会出现如下截图:

  


  其他的启动信息记录在日志文件中,暂时先把uwsgi关闭,uwsgi的关闭方法我一般都是简单粗暴的输入(hiahia~):

>> sudo killall -9 uwsgi


  (关于uwsgi更多的参数信息,你也可以在命令行下输入:>> uwsgi –help 来查看。关于uwsgi的安装与相关配置问题也可参照文档:http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html

  接下来继续配置ngnix。

五、 安装与配置Nginx

安装测试Nginx

  输入以下指令进行安装:

>> sudo apt-get install nginx  # 安装


  然后输入以下指令启动测试:

>> /etc/init.d/nginx start  # 启动


  启动后在浏览器中输入 http://IP 或者 http://IP:80 ,若出现以下界面则安装成功:

  


配置nginx

  首先用vim打开配置文件:

>> sudo vim /etc/nginx/nginx.conf


  打开配置文件,在Http内创建server子项如下:

server {
listen         8888; # 设置监听端口号
server_name    XXX.XXX.XXX.XXX; # 设置对外访问入口,可以是域名可以是IP地址,我设置的是IP
charset        UTF-8;  # 设置访问的语言编码
access_log     /var/log/nginx/InquireScore_access.log; # 访问日志记录
error_log      /var/log/nginx/InquireScore_error.log;  # 错误日志记录

location / {   # 设置虚拟主机的基本信息
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 刚才uwsgi设置的socket
uwsgi_read_timeout 2;
}
location /static {   # 静态文件设置,nginx自己处理
expires 7d;      # 过期时间
alias /home/ubuntu/InquireScore/static/;  # 项目静态文件地址
}
}


  保存即可。当然,也可以在本地写完后用Xftp传输到 /home/ubuntu/ 目录下,再用 sudo cp -f /home/ubuntu/nginx.conf /etc/nginx/ 将其替换原来的配置文件(我承认我懒。。而且vim用的不熟练)

  (关于Nginx的安装与相关配置问题可参照文档:http://nginx.org/en/docs/

六、见证奇迹的时刻

  切换到/home/Ubuntu/InquireScore/目录下运行:

>> uwsgi --ini InquireScore_uwsgi.ini


  然后再输入:

>> /etc/init.d/nginx restart


  若重启失败,则需要检查,输入 sudo nginx -t 测试配置文件是否正确。如果在浏览器中输入: http://IP:8888,即可进行项目访问。当当当当~~

七、 后续

  项目有更新的时候,需要先关闭uwsgi然后重启即可,关闭wsgi依然可以用一招解决输入:

>> sudo killall -9 uwsgi


  更新后将Ngnix重启即可~

  如果在以上内容中有错误或者描述不当的地方,请各位大佬留言指正~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息