版权声明:本文章为博主原创,转载请注明出处。保留所有权利。

Contents
  1. 1. 前言
  2. 2. 准备
  3. 3. 开始部署
  4. 4. 更新
  • 前言

    因为最近老师要承办一个会议,所以做了一个会议注册的系统。为了简单方便采用了django来做后端,前端就干脆手写一个表单。(特别鸣谢@泽华帮我实现了后端的逻辑) 本地调试当然很简单,直接使用
    1
    python manage.py runserver

就可以开一个本地服务器来进行调试。但是生产环境下显然不能用这个服务器,原因是runserver命令所创建的服务器不仅是单线程的,而且没法从外部网络进行访问。由于已经租用了centos系统的阿里云ECS云服务器,所以要将已经实现好的网站以生产环境的方式部署在服务器上,踩坑就此开始。。

  • 准备

    之前完全没有接触过django的部署,所以还是拿出看家本事“百谷”去了解。查了一些资料得知,单独的django是没办法直接部署在生产环境的,必须配合其他一些专门的http服务器工具来进行搭建。还是本着简单方便的原则,选取了UWSGI+NGINX来配合django进行部署。
    首先当然是uwsgi和nginx的安装了,centos系统下使用
    1
    pip install uwsgi

1
yum install nginx

就可以很方便地安装这两个工具,需要注意的一点是,阿里云上的centos默认安装的是运行版而不是开发版的开发环境,所以在安装uwsgi的时候可能会出现找不到<Python.h>的错误,解决办法是:通过

1
yum install python-devel

安装python开发环境即可。

  • 开始部署

    环境有了,下一步就该部署网站了。首先面对的问题就是如何把网站的代码上传到服务器上。这一步方法比较多,可以通过linux下的scp命令上传,或者如果你本地的系统是linux系统的话还可以用sshfs把服务器的目录远程挂载在本地进行方便的可视化操作。我采用的方法则是通过git来进行同步,因为我比较懒不想在我的Windows上用putty而是是直接用阿里云的网页版ssh。采用git方法的话,还可以通过git hooks来监测远程代码库的更新,并自动地更新网站服务器(虽然这一步我没有做)。
    阿里云的centos没有自带git,所以也要安装一下:
    1
    yum install git

我这里使用github作为远程git代码库,那么首先把库clone下来(xxx代表库的名字):

1
git clone https://github.com/Zeco-01/xxx.git

接下来就是正式的部署了。首先,要为uwsgi创建一个配置文件,我直接创建在工程根目录下并命名为uwsgi.ini。(uwsgi也支持xml的配置方式)文件的内容如下:

1
2
3
4
5
6
7
8
9
10
11
[uwsgi]
socket = 127.0.0.1:9090 #nginx和uwsgi之间socket通信的地址和端口
chdir=/home/xxx/xxx #uwsgi启动后自动切换路径至此文件夹,我这里选择的是工程的根目录,也就是mange.py所在的目录
module=/home/xxx/xxx/xxx/xxx.wsgi #wsgi文件,指的实际上是对应目录下的uwsgi.py,只不过这里要写成“工程名.wsgi”的形式
master = true
processes=2 #进程数
threads=2 #每个进程的线程数
max-requests=2000 #最大请求数
chmod-socket=664
vacuum=true
daemonize = /home/xxx/xxx/uwsgi.log #uwsgi日志文件路径

设置好配置文件后,可以通过:

1
uwsgi --ini uwsgi.ini

来启动uwsgi。
接下来,要为我们的工程创建nginx配置文件。(为了简单)我们可以直接在默认配置的基础上进行修改。默认配置文件的路径为/etc/nginx/nginx.conf 将其复制一份并重命名为xxx.conf,放在/usr/share/nginx/目录下。同时也要将默认路径下的uwsgi_params复制到该目录下,否则nginx无法识别uwsgi。
在xxx.conf中修改server{}一段如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
server_name localhost;
charset utf-8;
access_log /var/log/nginx_access.log;
error_log /var/log/nginx_error.log;
client_max_body_size 75M;


location /static {
alias /home/xxx/xxx/common_static;
}

location / {
include /usr/share/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
}

设置好配置文件后即可通过以下命令启动nginx:

1
nginx -c xxx.conf

至此就大功告成了!在浏览器中直接访问服务器的ip(+django里对应的url)应当就可以显示出网站的页面了。

  • 更新

    不使用git hooks进行自动更新配置的话,在更新网站时首先要使用以下命令更新代码:
    1
    git pull origin master

如果想更新的分支不是master的话,对应地更改即可。
然后要重启uwsgi:

1
2
killall -9 uwsgi
uwsgi --ini uwsgi.ini

有必要的话还可重启nginx:

1
nginx -s reload

如果想要关闭nginx,则使用以下命令:

1
nginx -s quit

至此部署就全部完成了!

打赏

取消
扫码支持

你的支持是对我最好的鼓励

Contents
  1. 1. 前言
  2. 2. 准备
  3. 3. 开始部署
  4. 4. 更新