阿里云部署Django项目(超详细图文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django应用
来源:互联网 发布:电商数据分析淘宝实战 编辑:程序博客网 时间:2024/05/23 14:18
阿里云部署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_start
cd /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就是3DJANGO_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 restartsudo supervisorctl restart hello
参考文章:
Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL
本文主要是由该文章翻译整理而来,向大神致敬。
- 阿里云部署Django项目(超详细图文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django应用
- virtualenv+gunicorn+supervisor+nginx 部署 django项目
- 阿里云部署Django项目(超详细图文教程)—— Part3. Django settings修改、PostgreSQL配置
- nginx+gunicorn+virtualenv部署django项目
- nginx + gunicorn + virtualenv部署django
- 阿里云部署Django项目(超详细图文教程)——Part1. 服务器购买和远程连接
- [django]django 部署,gunicorn、virtualenv、nginx
- nginx&gunicorn&django阿里云简单部署
- django+nginx+supervisor+gunicorn+gevent 网站部署
- django+nginx+supervisor+gunicorn+gevent 网站部署
- django + gunicorn + nginx 部署
- nginx+gunicorn+django部署
- django+gunicorn+nginx部署项目 入门经验
- Django笔记 生产环境部署 gunicorn+nginx+supervisor
- Django+nginx+gunicorn部署流程(一)
- Django+nginx+gunicorn部署流程(二)
- Flask部署 —— nginx+gunicorn+supervisor
- Django部署——uwsgi+Nginx(超详细)
- java中的IO操作总结(一)
- 颜色意义
- TCGA-Assembler工具下载数据
- 网络获取加载图片的三种方法
- 如何在移动端调试网页?
- 阿里云部署Django项目(超详细图文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django应用
- C++迭代器
- java 线程
- java导出pdf
- Set 接口 源代码
- Cygwin各种情况下中文乱码终极解决方案
- 顺序表的实现
- MD5
- Mysql索引介绍及常见索引类别(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别