博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建高性能的 Django 服务器栈
阅读量:5248 次
发布时间:2019-06-14

本文共 8887 字,大约阅读时间需要 29 分钟。

http://logic0.blog.163.com/blog/static/18892814620136258532112/

搭建高性能的 Django 服务器栈  

2013-07-25 23:00:22|  分类: |  标签:           |举报 |字号 

对不起各位,我有点稍微标题党了。
本文针对裸机 Linux 搭建 Django 的服务器栈,可直接应用在Linode,阿里云等VPS上。
Linux:Ubuntu 12.04 + ,其他版本类似
说明:
# 以#开头表示注释,$ 这里是需要执行的命令 
<尖括号包含需要你自己定义的内容>

○、连接VPS或者服务器

      不多说,putty就是个不错的工具,如果你本地有mac或者linux就更好了

一、升级软件包,打补丁

# 更新本地包的索引,这个必须做$ sudo apt-get update# 升级所有软件包$ sudo apt-get dist-upgrade# 删除不需要的软件包$ sudo apt-get autoremove# 重启系统,大多数时候不需要,但少数需要重启,以防万一还是重启下的好$ sudo reboot
二、安装Python,及Python包安装工具
首先是Python 包 和 Python 开发包
$ sudo apt-get install build-essential python-dev

安装 distribute 和 pip

# 下载 distribute 安装文件, curl 不可用也可以用 wget http://python-distribute.org/distribute_setup.py$ curl -O http://python-distribute.org/distribute_setup.py# 安装distribute$ sudo python distribute_setup.py# 安装文件可以删除了$ rm distribute*# 用 distribute 安装 pip$ sudo easy_install pip
三、安装virtualenv,提供虚拟环境执行支持
# 安装 virtualenv 和 virtualenvwrapper$ sudo pip install virtualenv virtualenvwrapper# 编辑用户的bash配置文件$ vim .bashrc# 在文件末尾增加下边这一行,让 virtualenvwrapper.sh 能自动执行,给shell添加命令source /usr/local/bin/virtualenvwrapper.sh# 保存文件退出# 可以使用exit 推出重新登录,使 virtualenvwrapper 生效,也可以使用source 使之生效$ exit
怎么使用 virtualenv
# 创建一个虚拟运行环境,一般使用 VIRTUALENV_NAME=你的project名字就好。<>包含的是需要你自己指定的东西,以下不再说明 $ mkvirtualenv 
# 创建完后会自动启动虚拟环境,使用 deactivate 可退出$ deactivate# 激活特定的虚拟环境 或者 更改到另一个虚拟环境,执行下边的命令$ workon
通过下边的命令你可以看到 系统环境 和 虚拟环境 的不同
# 退出虚拟环境,如果你在虚拟环境内的话$ deactivate$ pip freeze                  # pip freeze 可以查看都安装了哪些软件包及其版本$ workon 
# 切换到虚拟环境$ pip freeze # 查看虚拟环境内的软件包及版本,就可以发现不同
================= 以下操作均在虚拟环境内进行,不再说明 ==================
四、安装Django
# 安装最新版的Django,需要特定版本请查看 pip 指定版本的方法$ pip install django# 安装 docutils, Django 的 admin 会用到这个$ pip install docutils# 测试 Django 是否安装成功$ django-admin.py startproject 
$ cd
# 给 manage.py 运行权限$ chmod +x manage.py# 测试服务器,如果只是在本机测试则不需要指定 0.0.0.0$ ./manage.py runserver 0.0.0.0:8000
五、安装 PIL/PILLOW,提供图形支持
python 图形库,例如验证码、二维码之类的会用到。
# 给系统添加相应的图形软件包支持,这步要在最先执行,因为PIL 需要编译,如果没有jpeg就无法支持.jpg图片$ sudo apt-get install libjpeg8-dev libfreetype6-dev zlib1g-dev# 以下两个任选一个,有人说 PIL 偶尔会有问题,如果你也不确定,那就选 Pillow 吧$ pip install pillow$ pip install pil
六、安装数据库
选择MySQL,怪我不才,只对MySQL熟悉一些,你选别的也可以
# 安装 MySQL$ sudo apt-get install mysql-server libmysqlclient-dev
# 安装 MySQL 的 Python 连接器$ pip install MySQL-Python
七、安装South,增强scheme管理
这个不是强制的,但确是极推荐的。Django 自带的 Scheme 管理器不能对 表结构变更起效,当你改变Model 的时候,必须手工的更改数据库表结构,何其蛋疼,何其容易出错。
$ pip install south# 将 south 加到你的 Django 工程的配置文件里$ vim 
/settings.pyINSTALLED_APPS = ... 'south', ...
八、安装 memcached,提供cache
KV cache,减少数据库查询数量 和 增强性能
# 安装 memcached 和 开发包$ sudo apt-get install memcached libmemcached-dev# 安装 memcached 的 Python 连接器,有很多同类型的连接器,推荐pylibmc$ pip install pylibmc# 修改 Django project 的配置文件settings.py,添加 cache 支持$ vim 
/settings.pyCACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', }}
九、安装 RabbitMQ 和 celery ,提供异步执行支持
RabbitMQ,安装完必须要 创建用户 并 赋权
$ sudo apt-get install rabbitmq-server$ sudo rabbitmqctl add_user 
$ sudo rabbitmqctl add_vhost
$ sudo rabbitmqctl set_permissions -p
".*" ".*" ".*"
celery ,安装很简单,但是要对 Django project 的 settings.py 进行配置
# 通过pip 安装$ pip install django-celery$ vim 
/settings.py# 将 djcelery 应用安装到当前的 projectINSTALLED_APPS = ... 'djcelery', ...# 乱七八糟的配置,甭管具体是啥了,加上就是了,注意修改需要自定义的部分BROKER_URL = "amqp://
:
@localhost:5672/
"CELERY_RESULT_BACKEND = "database"CELERY_RESULT_DBURI = "mysql://
:
@localhost/
"# 把这两行放到 settings.py 文件尾import djcelerydjcelery.setup_loader()
十、安装 Gunicorn 提供网站服务器
apache + mod_wsgi,uWSGI 都是不错的选择,但是看你个人的爱好了。gunicorn 不需要多少配置就能工作得不错,还是值得用的。
# pip 安装 Gunicorn$ pip install gunicorn# 将 Gunicorn 添加到你的 Django project 中$ vim 
/settings.pyINSTALLED_APPS = ... 'gunicorn', ...
Gunicorn 有好多的命令参数,你可以看  ,一般用4个worker ,同时支持gevent 就好了
测试Gunicorn
$ ./manage.py run_gunicorn -w 4 -k gevent# Ctrl+C 可以退出 Gunicorn,PS:如果它成功运行的话
十一、安装 Supervisor,提供自启动支持
通过 apt-get 安装的 server 是立即启动,并开机自启动的,但是 celery 和 gunicorn 是通过 pip 安装的,不能自启动。而supervisor 是通过 apt-get 安装的,是可以自启动的。
Supervisor 同时也提供任务监控的功能,如果 Gunicorn 突然由于某个异常挂了,Supervisor 会重启它,而不需要你干预。你可以想下你的站凌晨三点因为一个偶尔出现的异常挂掉,你却没有Supervisor 是什么感觉。不过这个功能也只是用来对付偶然,如果你的关键服务挂了导致 Gunicorn 挂掉,重启多少遍都是没用的。
# apt-get 安装 Supervisor$ sudo apt-get install supervisor
# 配置文件必须放在 /etc/supervisor/conf.d/ 目录下,而且必须以 .conf 后缀结尾# celery 配置文件 /etc/supervisor/conf.d/celeryd.conf# 告诉 Supervisor 这个程序叫什么名字[program:celeryd]# 启动命令,你可以注意到这里的python 是用的 virtualenv 下的 pythoncommand = /home/
/.virtualenvs/
/bin/python /home/
/
/manage.py celeryd -B -E# 服务运行时处在哪个目录directory = /home/
/
# 以哪个用户的身份运行user =
# 是否随系统自动启动autostart = true# 挂掉后是否自动重启autorestart = true# 标准输出和错误信息log文件stdout_logfile = /var/log/supervisor/celeryd.logstderr_logfile = /var/log/supervisor/celeryd_err.log
# celery 监控进程配置文件 /etc/supervisor/conf.d/celerycam.conf[program:celerycam]command = /home/
/.virtualenvs/
/bin/python /home/
/
/manage.py celerycamdirectory = /home/
/
user =
autostart = trueautorestart = truestdout_logfile = /var/log/supervisor/celerycam.logstderr_logfile = /var/log/supervisor/celerycam_err.log
# Gunicorn 的配置文件 /etc/supervisor/conf.d/gunicorn.conf[program:gunicorn]command = /home/
/.virtualenvs/
/bin/python /home/
/
/manage.py run_gunicorn -w 4 -k geventdirectory = /home/
/
user =
autostart = trueautorestart = truestdout_logfile = /var/log/supervisor/gunicorn.logstderr_logfile = /var/log/supervisor/gunicorn_err.log
Supervisor 管理命令,上边配置文件完成后,需要重启Supervisor,以便于发现新的配置
# 重启 Supervisor$ sudo service supervisor restart# restart/stop/start Supervisor 管理的所有服务$ sudo supervisorctl restart all$ sudo supervisorctl stop all$ sudo supervisorctl start all# 只重启 celeryd,这个名字,就是在配置文件里告诉 Supervisor的那个$ sudo supervisorctl restart celeryd# 只启动 Gunicorn$ sudo supervisorctl start gunicorn
十二、安装Nginx,添加静态文件支持
Django 的静态文件分为 static 和 media ,两者都是静态文件,只是前者由你产生,后者是用户上传的文件
PS:Django 的 DEBUG=True 模式支持静态文件调试,但是 DEBUG=False 后就不支持了
# 创建文件目录 static 、 mediasudo mkdir /var/wwwsudo mkdir /var/www/staticsudo mkdir /var/www/media# 赋权sudo chown -R 
:www-data /var/www$ vim
/settings.py# 修改 Django project 配置MEDIA_ROOT = '/var/www/media/'MEDIA_URL = '/media/'STATIC_ROOT = '/var/www/static/'STATIC_URL = '/static/'# 每次static 文件发生变更,要运行下边的命令$ ./manage.py collectstatic
nginx 安装
# 安装 nginx$ sudo apt-get install nginx
nginx 配置
nginx 配置有两个目录,/etc/nginx/sites-available/ 和 /etc/nginx/sites-enabled/,前者是可用的站点配置目录,后者是起作用的站点配置目录
# 删除默认$ sudo rm /etc/nginx/sites-enabled/default# 空白配置文件,并建立一个连接到 sites-enabled 使其生效$ sudo touch /etc/nginx/sites-available/
<你的应用>
$ cd /etc/nginx/sites-enabled$ sudo ln -s ../sites-available/
<你的应用>
# 编辑配置文件$ vim /etc/nginx/sites-available/
<你的应用>
配置文件样例:
# 配置一个 upstream server ,起个名字叫 gunicorn,监听 8000 端口upstream gunicorn {    server localhost:8000;}# 配置 nginx 服务器server {    # 监听 80 端口    listen 80;    # 绑定对这些域名的请求    server_name 
<你的域名>
.com www.
<你的域名>
.com; # 在这个目录下查找文件 root /var/www/; # log文件 access_log /var/log/nginx/
<你的应用>
.access.log; error_log /var/log/nginx/
<你的应用>
.error.log; # 这个选项来指定用户可以上传大文件 # 具体见 http://wiki.nginx.org/HttpCoreModule#client_max_body_size # 不知道放到哪儿好,写了两次,正常运行 client_max_body_size 0; # 这行比较重要 # 尝试以静态文件方式处理当前请求 # 如果找不到满足条件的静态文件,就把连接传给 Gunicorn try_files $uri @gunicorn; # 配置 Gunicorn 信息 location @gunicorn { # 再写一次,以防万一 client_max_body_size 0; # 转发给上边配置的 upstream server proxy_pass http://gunicorn; # 确保 URL 不转到 http://gunicorn proxy_redirect off; # Gunicorn 在5 minutes 内没有回应就放弃 # 这个时间可以随意改,自己看着办 proxy_read_timeout 5m; # 确定这些 HTTP headers 配置是正确的 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}

重启Nginx,搞定!你可以运行你的Django 应用了。

# 重启 nginx$ sudo service nginx restart
转载请注明地址:http://logic0.blog.163.com/blog/static/18892814620136258532112/

转载于:https://www.cnblogs.com/yeyong/p/3906362.html

你可能感兴趣的文章
代替oracle dblink,oracle dblink
查看>>
linux中检测用户信息的命令是,Linux中系统状态检测命令
查看>>
凯撒字母加密算法c语言,C语言实现:凯撒密码算法(加密 与 解密)
查看>>
求矩形的最小值c语言,C语言复习---矩形法求定积分函数
查看>>
c语言找到串口,再次熟悉串口
查看>>
c语言删除数组重复元素并升序,C语言编程题: 编写函数,从一个已经排序的数组中删去某数后,该数组仍然有序....
查看>>
国二C语言大题评分,计算机二级C语言题型和评分标准
查看>>
android修改屏幕长宽比例,Android屏幕适配之修改density
查看>>
android map数据更新数据,Android的Databinding-数据、Map绑定
查看>>
微型计算机原理及应用 课程设计,《微型计算机原理及其应用》课程设计.docx
查看>>
用户输入查询与拼音首字母的结合,提高用户的操作体验
查看>>
bzoj 3996 最小割
查看>>
每天的记录1-padStart(); padEnd();Object.values();Object.entries()
查看>>
Golang从零开始(二):命名规范、变量和常量
查看>>
WeGeek直播课:从0到1快速开发电商小程序(文字版)
查看>>
iOS 2019最新Jenkins集成gitblit实现自动打包攻略
查看>>
Python 操作 MySQL 的5种方式
查看>>
ffiddler抓取手机(app)https包
查看>>
【Python】 SQLAlchemy的初步使用
查看>>
javaweb本地启动很快,服务器上面启动特别慢
查看>>