nginx+uwsgi+django+celery+supervisord环境部署
前言
很久没更博客了,最近新写了一个小项目,后边有时间把一些心得放上来,先把环境的部署方式整理出来。
部署过程
先将环境的python升级为2.7
保证有pip
安装了nginx并配置
vim /Data/apps/nginx/conf/include/sqlaudit.conf
server {
listen 80; #对外80端口
server_name sqladmin.xxxx.net;
location / {
root /Data/apps/djangoproject/sqlaudit/; #项目目录的位置
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
uwsgi_param UWSGI_CHDIR /Data/apps/djangoproject/sqlaudit/;
uwsgi_param UWSGI_SCRIPT sqlaudit_wsgi; #对应的sqlaudit_wsgi.py脚本
access_log /Data/apps/nginx/logs/sqlaudit_access.log;
error_log /Data/apps/nginx/logs/sqlaudit_error.log;
}
location /static/ { #静态文件单独处理一下
alias /Data/apps/djangoproject/sqlaudit/static/;
index index.html;
access_log /Data/apps/nginx/logs/sqlaudit_access.log;
error_log /Data/apps/nginx/logs/sqlaudit_error.log;
}
}
```
4. 安装uwsgi
/usr/local/bin/pip install uwsgi
5. 把相关依赖都装上
yum install redis mysql
yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel mysqlclient16-devel mysqlclient16
vim /etc/ld.so.conf.d/mysqlclient18-x86_64.conf
/usr/local/lib/
ldconfig
6. 代码部署
cd /Data/apps/djangoproject/
git clone https://git.coding.net/caseast/SQLaudit.git sqlaudit/
把代码拿下来之后
初始化数据库,然后执行
pip install -r requirement.txt -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
python manage_prod.py loaddata sqlaudit_init.json
7. supervisord启动celery相关
pip install supervisor -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
echo_supervisord_conf > /etc/supervisord.conf
vim /etc/supervisord.conf
```python
[program:celery]
command=/usr/bin/python manage_prod.py celery worker -c 4
directory=/Data/apps/djangoproject/sqlaudit
stdout_logfile=/Data/apps/nginx/logs/celery.log
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT
user=nginx
[program:flow]
command=/usr/bin/python manage_prod.py celery flower
directory=/Data/apps/djangoproject/sqlaudit
stdout_logfile=/Data/apps/nginx/logs/flow.log
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT
user=nginx
```
8. 配置uwsgi,uwsgi就类似tomcat,是真正解析python的容器
cd /Data/apps/djangoproject/sqlaudit && cp uwsgi /etc/init.d/ #先把启停脚本弄好
```bash
#!/bin/bash
# uwsgi script
# it is v.0.0.1 version.
# chkconfig: - 89 19
# description: uwsgi script
# processname: uwsgi
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
uwsgi_config=/Data/apps/djangoproject/sqlaudit/sqlaudit.ini
#uwsgi_pid=`ps -eo pid,comm|grep uwsgi|grep -v 'init.d'|grep -v grep|sed -n 1p|awk '{print $1}'`
uwsgi_pid=`ps -ef|grep uwsgi|grep -v 'init.d'|grep -v grep|sed -n 1p|awk '{print $2}'`
uwsgi_PID=/Data/apps/nginx/logs/uwsgi.pid
uwsgi=/usr/bin/uwsgi
RETVAL=0
prog="uwsgi"
# Source function library.
. /etc/rc.d/init.d/functions
if [ $(id -u) != "0" ]; then
printf "Error: You must be root to run this script!\n"
exit 1
fi
# Start nginx daemons functions.
start() {
uwsgi_pn=`ps aux|grep -v "grep"|grep -c "uwsgi"`
if [ $uwsgi_pn -gt 4 ];then
action "uwsgi is running!" /bin/true
exit 0
fi
daemon $uwsgi --ini ${uwsgi_config}
action "uwsgi start ..." /bin/true
}
# Stop nginx daemons functions.
stop() {
uwsgi_pn=`ps aux|grep -v "grep"|grep -c "uwsgi"`
if [ $uwsgi_pn -gt 4 ]
then
kill -9 $uwsgi_pid
RETVAL=$?
action "uwsgi stopping ..." /bin/true
else
action "uwsgi not running!" /bin/false
fi
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
sleep 2
start;;
*)
echo $"Usage: $prog {start|stop|restart}"
exit 1
esac
exit $RETVAL
```
下边附上uwsgi的配置文件sqlaudit.ini,需要和nginx的配置对应
/Data/apps/djangoproject/sqlaudit/sqlaudit.ini
```python
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /Data/apps/djangoproject/sqlaudit/
# Django's wsgi file
module = sqlaudit_wsgi #这个需要和nginx配置里的uwsgi_param UWSGI_SCRIPT对应
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 8
# the socket (use the full path to be safe
socket = 127.0.0.1:9000 #这个也和nginx配置对应
# clear environment on exit
vacuum = true
daemonize=/Data/apps/nginx/logs/sqlaudit_uwsgi.log
```
- 最后启动一切服务
/Data/apps/redis/bin/redis-server &
/Data/apps/mysql/bin/mysqld_safe &
/usr/local/bin/supervisord
/etc/init.d/uwsgi start
/Data/apps/nginx/sbin/nginx - 备注
这个非部署问题了,就是把django项目部署到nginx上之后,会找不到admin相关的static文件
所以在代码里执行这个,把admin相关的static文件搞到项目的static中
python manage.py collectstatic
nginx+uwsgi+django+celery+supervisord环境部署的更多相关文章
- Nginx + uwsgi + django + websocket(dwebsocket)环境部署
1.安装nginx(/export/servers/nginx/) 保证/export/servers/nginx/是nginx的安装目录 /export/servers/nginx/conf/dom ...
- Nginx+uwsgi+Django 的web应用环境部署-完整记录
Python作为当前最火爆最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twisted.Bottle和Web.py等 ...
- 【金】nginx+uwsgi+django+python 应用架构部署
网上有很多这种配置,但就是没一个靠普的,费了好大的力气才完成架构部署.顺便记录一下. 一.部署前的说明 先安装好 python,django,uwsgi,nginx软件后.后配置运行的软件是分先后的. ...
- nginx+uwsgi+django 部署原理
python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器
nginx+uWSGI+django+virtualenv+supervisor发布web服务器 导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...
- 12,nginx+uWSGI+django+virtualenv+supervisor发布web服务器
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...
- 08 nginx+uWSGI+django+virtualenv+supervisor发布web服务器
一.为什么要用nginx,uwsgi? 1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx, 2nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静 ...
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
随机推荐
- MyEclipse中如何安装插件(以Subclipse为例)[转]
一.到官方上下载svn1.8.3,下载后的文件名叫site-1.8.3.zip 地址:http://subclipse.tigris.org/servlets/ProjectDocumentList? ...
- 据说练就了一指禅神功的觅闻实时手机新闻网,正以每天2000+IP的用户量递增。有智能手机的可以当场进行体验,没有的就算了哈
据说练就了一指禅神功的觅闻实时手机新闻网,正以每天2000+IP的用户量递增.有智能手机的可以当场进行体验,没有的就算了哈 觅闻实时手机新闻网 http://m.yunxunmi.com 在IOS. ...
- AngularJs学习的前景及优势
一.趋势 互联网未来的发展趋势是前端后端只靠json数据来进行通信.后端只处理和发送一段json数据到前端,然后计算和模板渲染都在前端进行,而前端的改动,形成json数据然后传回到后端.未来趋势就是: ...
- 在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)
一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAP ...
- java提高篇(十一)-----强制类型转换
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- .net 时间戳和日期互转
1.时间戳转日期 public static DateTime IntToDateTime(int timestamp) { ,,)).AddSeconds(timestamp); } 调用: ...
- 用C表达面向对象语言的机制2——颠覆你对方法调用的看法!
用C表达面向对象语言的机制2——颠覆你对方法调用的看法! 源代码在文末.推荐阅读本文PDF版,格式更好看. 在上一篇<用C表达面向对象语言的机制——C#版>中,我们获知了如何用C表达面向对 ...
- Node.js刷新session过期时间
在Node.js中,我们通常使用express-session这个包来使用和管理session,保存服务端和客户端浏览器之间的会话状态.那如何才能实现当用户刷新当前页面或者点击页面上的按钮时重新刷新s ...
- TACACS.Net Group 配置
Tacacs作为一个验证工具,其网站上资料较少,只有一些缺省配置,并且没有提到如果在应用中与其自带的Group功能做集成, 这里使用免费的windows 版的TACACS.net 作介绍http:// ...
- Javascript模块化编程笔记
最近在读阮一峰的博客http://www.ruanyifeng.com/blog/2012/10/javascript_module.html,随手记录一些重要笔记. Javascript模块的雏形 ...