阿里云部署Django项目(超详细图文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django应用
2015-11-14 16:03
1146 查看
阿里云部署Django项目(超详细图文教程)
Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django应用
前言:
花了一个月的空闲时间,终于成功把Django网站部署到了阿里云ECS上,包含以下功能:不使用任何第三方工具,直接用网页连接阿里云ECS
使用GIT进行源码控制和上传到服务器
使用git hooks实现自动部署
用的是时下比较流行的一套部署方案——Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL
可以在同一台服务器上部署两个、甚至多个网站
光说不练假把式,建议大家边看边操作!
软件介绍
nginx: 反向代理服务器,处理静态资源,负载均衡等。gunicorn: Python WSGI HTTP Server for UNIX。
virtualenv: 创建独立的 python 环境。
supervisor: 基于linux操作系统的一款服务器管理工具,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。
1.系统更新和软件安装
依次在远程管理终端下执行以下步骤,进行服务器系统更新和依赖软件安装:* 更新系统
sudo aptitude update sudo aptitude upgrade
* 安装数据库PostgreSQL
sudo aptitude install postgresql postgresql-contrib sudo aptitude install libpq-dev python-dev
* 安装virtualenv
sudo aptitude install python-virtualenv
* 安装Supervisor
sudo aptitude install supervisor
* 安装Nginx
sudo aptitude install nginx
PS: 可以使用右上角的“复制命令输入”将命令粘贴进来
过程中会提示需要多少的磁盘空间,如果空间够用的话选择 yes 就可以继续了,耐心等待更新包安装
对比文章标题,大家会发现Gunicorn还没有安装,稍后我们会在创建出的python环境中安装Gunicorn
2. 创建一个权限组来管理应用
出于安全和方便管理的目的,使用专门的用户组来操作web应用添加用户组
sudo groupadd --system webapps
命令解释:
groupadd 添加用户组
–system 指定将要添加的用户组是系统级别的
webapps 用户组的名字,也可以叫djangoapps等,起名字最好有一定的意义
* 添加用户
sudo useradd --system --gid webapps --shell /bin/bash --home /webapps/hello_django user_hello_django
命令解释:
useradd 添加用户
–gid 指定用户所属的组,后面紧跟的webapps就指定了用户属于webapps组
–shell 用户使用shell的路径,即/bin/bash
–home 用户home文件夹位置,即/webapps/hello_django,这个目录将是web应用的根目录
user_hello_django 用户名(起名字要有辨识度,最好能自解释)
为用户设置密码
sudo passwd user_hello_django
给用户添加执行sudo命令的权限
vim /etc/sudoers
在root ALL=(ALL:ALL) ALL 下面添加一行:
user_hello_django ALL=(ALL:ALL) ALL
创建目录并授权
sudo mkdir -p /webapps/hello_django/ sudo chown user_hello_django /webapps/hello_django/
命令解释:
mkdir 创建文件夹
chown 改变文件或文件夹的所有者
这几条命令都是linux的基础命令,有疑问可以百度之。
3.创建独立的python运行环境
切换用户sudo su - user_hello_django
注意命令提示符前缀的变化。
进入应用目录
cd /webapps/hello_django/
创建环境
virtualenv -p /usr/bin/python3.4 .
命令解释:
- p /usr/bin/python3.4 表示创建python3.4的运行环境,也可以通过改变参数创建其他python版本的环境
- . 表示当前目录,也可以指定完整路径,如/webapps/hello_django/
* 激活环境
source bin/activate
4.安装Django和Gunicorn
安装pip install django pip install gunicorn pip install psycopg2
创建一个Django项目,名称为hello
django-admin.py startproject hello
验证Django是否正常工作
cd hello
python manage.py runserver 112.74.123.69:8000
命令解释:
112.74.123.69 为服务器的IP地址,注意替换为自己的
在浏览器中输入112.74.123.69:8000并跳转,看到如下页面表示成功:
5.创建Gunicorn的启动脚本
创建文件/webapps/hello_django/bin/gunicorn_startcd /webapps/hello_django/bin/ vim gunicorn_start
在vim中编辑文件
输入i进入编辑模式
粘贴文本内容
:w 保存修改
:q 退出
(...) NAME="hello_app" # Django应用的名称 DJANGODIR=/webapps/hello_django/hello # Django 项目的目录 SOCKFILE=/webapps/hello_django/run/gunicorn.sock USER=user_hello_django # 用户名 GROUP=webapps # 用户组 NUM_WORKERS=3 # 一般是服务器使用CPU的个数X2+1,所以一个CPU的话,worker就是3 DJANGO_SETTINGS_MODULE=hello.settings # Django应用使用的settings文件 DJANGO_WSGI_MODULE=hello.wsgi # WSGI 模块名称 (...)
给文件添加可执行权限
sudo chmod u+x bin/gunicorn_start
6.创建Supervisor配置文件
在/etc/supervisor/conf.d目录下创建文件hello.conf内容如下:
[program:hello] command = /webapps/hello_django/bin/gunicorn_start #指定启动Django app的命令,也是刚才创建的gunicorn脚本 user = user_hello_django #用户名 stdout_logfile = /webapps/hello_django/logs/gunicorn_supervisor.log #运行日志存放位置 redirect_stderr = true #把stderr日志也放在刚才的文件里
注意到日志文件还没有创建,我们来创建一下:
mkdir -p /webapps/hello_django/logs/ touch /webapps/hello_django/logs/gunicorn_supervisor.log
可以使用下面的命令控件Supervisor
sudo supervisorctl reread #修改配置文件后需要使用
sudo supervisorctl update #更新状态,会启动刚配置的应用
sudo supervisorctl status hello #查看应用状态
sudo supervisorctl stop hello #停止应用
sudo supervisorctl start hello #启动应用
sudo supervisorctl restart hello #重启应用
7. 创建Nginx虚拟服务器
在目录/etc/nginx/sites-available下创建hello文件upstream hello_app_server { server unix:/webapps/hello_django/run/gunicorn.sock fail_timeout=0; } server { listen 80; server_name hello.test; client_max_body_size 4G; access_log /webapps/hello_django/logs/nginx-access.log; error_log /webapps/hello_django/logs/nginx-error.log; location /static/ { alias /webapps/hello_django/static/; } location /media/ { alias /webapps/hello_django/media/; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://hello_app_server; break; } }
执行命令进行文件链接
sudo ln -s /etc/nginx/sites-available/hello /etc/nginx/sites-enabled/hello sudo service nginx restart
命令解释:
ln -s 建立两个文件之间的同步链接,这时/etc/nginx/sites-available/hello和/etc/nginx/sites-enabled/hello的内容将会完全相同,以后要修改的话也只需要修改/sites-available/hello的内容,会自动同步
如果nginx restart 显示 fail, 可以使用sudo nginx -t命令查看失败原因
注意在Django的settings文件中INSTALLED_APPS加入gunicorn
修改内容后:
sudo service nginx restart sudo supervisorctl restart hello
参考文章:
Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL
本文主要是由该文章翻译整理而来,向大神致敬。
相关文章推荐
- 小心服务器内存居高不下的元凶--WebAPI服务
- RPC failed; result=22, HTTP code = 411
- nginx代理指定目录
- git更新已經刪除的文件
- 访问Nginx发生SSL connection error的一种情况
- 运维入门
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- Nginx+Naxsi部署专业级Web应用防火墙
- CentOS 6.2实战部署Nginx+MySQL+PHP
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- nginx中http核心模块的配置指令2
- nginx中http核心模块的配置指令3
- nginx中http核心模块的配置指令4
- nginx中http的fastcgi模块的配置指令1
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- 用vsftp快速搭建ftp服务器