mysql+uwsgi+django+nginx部署记录
2016-03-01 16:35
826 查看
注:这是在运维人员安装完python, nginx之后的事
如果安装失败 可以安装一下 开发包:
安装uwsgi 就直接用pip 安装就可以了(pip 已经添加到了环境变量当中)
第一步安装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代码的问题,有的时候会出现问题
相关文章推荐
- 浅谈SQL Server中的三种物理连接操作(HASH JOIN MERGE JOIN NESTED LOOP)
- mysql运维3--备份
- [oracle] 设置PL/SQL Developer 字符集
- tpcc-mysql安装、使用、结果解读
- SQL truncate 、delete与drop区别
- mysql运维2--基本操作
- Mysql server的系统架构
- django+mysql
- 搭建mysql主从数据库实现双机热备架构
- mysql运维1--mysql多实例
- Android的数据存储(Preference、SQLite、SDCard、File、ContentProvider)【未完,待编辑】
- mysql loop if
- MySQL Replication的基本架构
- 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构
- MySQL 高可用架构在业务层面细化分析研究
- mysql分享一:运维角度浅谈MySQL数据库优化
- DatabaseError:database disk image is malformed的解决方法
- SQLiteOpenHelper基础使用
- SQLiteOpenHelper对数据库进行版本管理
- SQLiteDatabase 和 SQLiteOpenHelper