mysql+uwsgi+django+nginx部署记录

来源:互联网 发布:游戏锁定fps软件 编辑:程序博客网 时间:2024/05/21 05:40
  • 注:这是在运维人员安装完python, nginx之后的事

第一步安装uwsgi 和 mysql驱动

说明: 用的是Python3, 安装 uwsgi 的时候 会需要安装 python3-devel ,
如果安装失败 可以安装一下 开发包:

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

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

pip install -U uwsgipip install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz

也可以通过 wget 的方法安装

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gztar zxvf uwsgi-latest.tar.gzcd 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.sockchdir = /var/testerwsgi-file = tools/wsgi.pyprocesses = 4threads = 2stats = 127.0.0.1:9191daemonize = /var/log/uwsgi/tools.logmaster = 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代码的问题,有的时候会出现问题

0 0
原创粉丝点击