您的位置:首页 > 数据库 > SQL

mysql+uwsgi+django+nginx部署记录

2016-03-01 16:35 826 查看
注:这是在运维人员安装完python, nginx之后的事

第一步安装uwsgi 和 mysql驱动

说明: 用的是Python3, 安装 uwsgi 的时候 会需要安装 python3-devel ,

如果安装失败 可以安装一下 开发包:

yum groupinstall "Development Tools"
sudo yum install python3-devel


安装uwsgi 就直接用pip 安装就可以了(pip 已经添加到了环境变量当中)

pip install -U uwsgi
pip install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz[/code] 
也可以通过 wget 的方法安装

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz tar zxvf uwsgi-latest.tar.gz
cd uwsgi*
python uwsgiconfig.py --build


配置、修改权限

~$ cp uwsgi /usr/bin/
~$ chmod a+x /usr/bin/uwsgi
~$ groupadd -g 51 uwsgi
~$ useradd -g 51 uwsgi


安装好了uwsgi之后了, 由于打算用mysql 必需要安装 python的mysql驱动

注: django的官网上说了, 使用python3的话需要使用mysql-client而不是原来pyMySQLDb了

https://github.com/PyMySQL/mysqlclient-python

这里有说明安装方法

先安装sudo yum install python3-devel 由于前面安装uswgi时已经安装,因此此处无需重复执行

安装mysql的开发包

sudo yum install  mysql-devel


最后使用

pip install mysqlclient


完成 在安装过程中可能会遇到一个问题

uwsgi undefined reference to `pcre_free_study’

解决办法 是直接 移除掉prce-devel包

sudo yum remove prce-devel


安装完这两个之后了, 接着要配置 uwsgi和nginx

第二步配置 uwsgi和nginx

uwsgi 使用 ini文件配置方式

[uwsgi]
socket = /home/fenglonghui/tools.sock
chdir = /var/tester
wsgi-file = tools/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191
daemonize = /var/log/uwsgi/tools.log
master = true


具体如何配置参考官方文档 http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html

配置好uswgi之后了,按照官网文档弄个简单的django app测试一下

接下来是配置 nginx 这个上面的链接中也给出了配置说明

user root;
worker_processes 4;

error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;

pid logs/nginx.pid;

events {
use epoll;
worker_connections 1024;
}

http {
upstream django {
server unix:///home/fenglonghui/tools.sock;
}

include mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
client_header_buffer_size 128k;
server {
listen 80;
server_name youserver.domain.name;
charset utf-8;
client_max_body_size 10m;
access_log logs/host.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

location ^~ /m/  {
alias /home/fenglonghui/media/;  # your Django project's media files - amend as required
}

location ^~ /s/ {
alias /home/fenglonghui/static/; # your Django project's static files - amend as required
}

location / {
uwsgi_pass django;
include uwsgi_params;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
}

}


注: 在配置这些日志文件的路径的时候, 确保这些目录路径是有效的否则会报错 ,可以查看 nginx安装目录下面的log文件夹下的 error.log来发现nginx的问题, 同理uwsgi配置的日志路径也是如此

在整个都配置好了,之后我们去外网试试能访问配置好的网站 ,

遇到个问题,当网站访问一次之后,第二次访问就访问不到了

解决这个问题用排除法, 查看日志信息,但是最后日志信息里面是没有问题的, 而你测试程序前面也测试过了, 也没有问题, 那么可能的原因是运维那边的问题, 因为在访问网页的时候提示下面这个错误

错误信息-101:连接已被重置

需要排除是否有代码错误, 而这种错误显然不是代码的错误,因为代码错误一般是500, 404之类的

最终通过运维人员排查,发现是负载均衡F5没有开通的原因,才会造成每次重启下 uwsgi就又能访问了

最终错误原因:

Offline (Enabled) - The children pool member(s) are down

由于你非正式服务 。 所以那台负载均衡设备认为你服务有问题。就拒绝给你转发请求。

所以你外网访问不到 内网可以请求

在这些问题解决之后,我们还需要将mysql与model进行同步

python manage.py makemigrations ,
python manage.py migrate


在进行迁移数据库的时候可能会出现问题,这时多运行几次命令试一试,可能第一次是在编译python代码的问题,有的时候会出现问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: