前言
本文旨在概述搭建一个具有负载均衡,高并发的django服务器的流程,包含环境准备到发布到云服务器及其一些细节的处理,并不包含django服务器的开发(可自行查阅资料),因为笔者大量查阅过
网上一些教程,这方面的资料虽然很多,但是很多都会误导新手,而且其中更是错误百出,残差不齐,所以就有了这篇文章,把整个发布的流程记录下来,然而也不敢说此文没有一点错误,这错误会因每个人的生成环境的不一致而有不同的体现,倘若有些错误也是有益的,因为编程本来就是一个不断试错的过程,牛人之所以牛,无非就是踩过的坑比你多而已。
- 非常强调:
==不要使用Python3!==
==不要使用Python3!==
==不要使用Python3!==
如果你要问我原因,我只能说现在远离它,一身轻松,
==人生苦短,我用python2==
环境准备
阿里云服务器一台 ubuntu16.04,本地mac一台
连接服务器
1ssh root@120.78.181.212 然后输入密码上传项目文件
|
|
pip安装
1sudo apt-get install python-pipMysql 安装
|
|
- 搭建虚拟环境
安装virtualenvwrapper(基于virtualenv的管理器)
|
|
查看python命令路径
配置环境变量
常用命令
|
|
依赖安装
1.首先在本地机器 项目生产依赖目录文件(上传项目前完成)
1pip freeze>requirements.txt
2.在某一环境下安装
|
|
3.创建数据库
|
|
4.迁移数据库
配置项目文件
修改setting.py
1ALLOWED_HOSTS = ['*', ]运行项目
1python manage.py runserver 0:8000访问
12在浏览器中输入自己服务器对公ip访问对公ip:8000错误解决(不能访问)
1234567891.检查防火墙sudo ufw status # 检查防火墙状态sudo ufw disable # 可以临时关闭防火墙sudo ufw allow 8000 # 或者保持防火墙开启,允许8000端口连接2.服务器安全组规则添加规则: 授权对象 0.0.0.0/0端口范围 7000/8111重启服务
12确认正常后,打开setting.pyDEBUG=False
配置uwsgi
- 安装uwsgi
|
|
检查uwsgi服务是否正常
12345678创建一个test.pydef application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return ["Hello World"] # python2# return [b"Hello World"] # python3uwsgi --http :8000 --wsgi-file test.py 运行127.0.0.1:8000 访问成功则表示服务正常uwsgi 配置
123456789101112131415项目文件下创建 uwsgi.ini文件[uwsgi]# socket = 0:8001 # 使用nginx连接时使用http = 0:8080 # 直接做web服务器使用# 项目目录chdir = /root/django_demo# 项目中wsgi.py文件的目录wsgi-file = /root/django_demo/wsgi.py# 主进程master = true# 多进程&多线程processes = 6threads = 2pidfile=uwsgi.pid #可用来停止服务命令
1234uwsgi --ini uwsgi.ini 开启服务uwsgi --stop uwsgi.pid 停止服务ps ajx|grep uwsgi 查看进程信息pkill -f -9 uwsgi 强制停止uwsgi
配置nginx
- 安装nginx
|
|
- 配置
|
|
创建 my.nginx.conf
1234567891011121314151617181920212223242526272829upstream django {server 127.0.0.1:8001;# server unix://home/python/Desktop/project_test/my_sock.sock;}server {listen 8000; # 端口号server_name 127.0.0.1; # 服务器 ip 或是域名charset utf-8; # 字符集# 最大上传限制# client_max_body_size 75M;location /media {alias /home/python/Desktop/project_test/media_common; # 媒体文件所在文件夹}location /static {alias /home/python/Desktop/project_test/static_common; # 静态文件所在文件夹}# 将所有非媒体请求转到Django服务器上location / {uwsgi_pass django; # 最上方已定义# 将所有参数都转到uwsgi下include /home/python/Desktop/project_test/uwsgi_params; # uwsgi_params的路径}}建立软链接
1sudo ln -s /root/django_demo/my_nginx.conf /etc/nginx/sites-enabled/创建静态文件
1234先获取目录权限 chmod 666 /root/django_demo创建文件夹mkdir static_commonmkdir media_common修改项目setting.py
123注释掉 STATICSTATIC_ROOT = os.path.join(BASE_DIR, 'static_common')MEDIA_ROOT = os.path.join(BASE_DIR, 'media_common')迁移
1python manage.py collectstatic问题解决
静态文件加载不出来1234561.测试 公网ip:8000/static/admin/css/base.css 是否能加载->如果403 ,先对文件夹申请权限->然后检查 /etc/nginx/nginx_conf 第一行--->正确的头应该是 user root;2.也可排查log找到具体问题/var/log/nginx 目录下会有 access.log error.log文件,打开就可排查
其它小问题
- 端口占用12345lsof -i:8000 列出端口占用程序netstat -ap 所有端口kill -9 PID号 杀掉程序
- vi 方向键失效
|
|
ubuntu Unable to locate package
1新系统需要 sudo apt-get update配置pip国内源
国内源
创建 pip.conf
|
|
编辑pip.conf,将下面内容copy进文件
ssh连接工具
Mac上可安装Shuttle来进行管理连接
Windows安装xshell
*参考资料