mysql+uwsgi+django+nginx部署记录

  • 注:这是在运维人员安装完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

也可以通过 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代码的问题,有的时候会出现问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值