背景
本篇博客内容如题目所示,背景是前几天帮老师写了一个非常小的项目,大概是让学生的家长可以登陆网址查阅孩子们的成绩,前因后果就不在啰嗦了。在写完Django成绩查询小项目后,面临着项目的部署问题。在反复跳进各种坑、查阅了各种技术说明文档和很多大牛的博客后成功地进行了部署,把部署过程记录如下。当然,本人编程小白一枚,如果在以下内容中有错误或者描述不当的地方,请各位大佬留言指正~
另外,本次部署各种程序版本如下:
程序名称 | 版本号 |
---|---|
腾讯云ubuntu服务器 | Ubuntu 16.04.3 LTS |
Python | Python 2.7.12 |
Django | Django 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重启即可~
如果在以上内容中有错误或者描述不当的地方,请各位大佬留言指正~