Django 部署笔记—— Nginx + Github + Uwsgi + Supervisor

部署Django不是一个简单的事情,我遇到相当多的麻烦

第一步,部署前的准备

来到Django项目的根目录,别忘记Django 部署之前是需要收集静态文件的,收集静态文件有很多坑。STATIC_ROOTSTATIC_URL是必须指定的

STATIC_ROOT = os.path.join(BASE_DIR, 'static') #上面的意思是把路径里面带static的文件都放在static这个静态文件夹里面.. 

STATIC_URL = '/static/' 

 STATICFILES_DIRS = [ # os.path.join(BASE_DIR, "others"),] 
 # 要注意的是!如果上面的STATIC_ROOT 已经指定的任何路径,在这里都不要再指定,这里是给你加其他静态文件的,比如url特征是别的单词

在github或者gitee 上新建一个项目,拿到项目仓库地址,https://gitee.com/projectname/master

来到你的项目根目录 git init初始化你的项目; 然后 git remote add name https://gitee.com/projectname/master 把你的项目和远程仓库绑定 然后 git add -A把文件加到暂存区,git commit -m '第一次提交' 最后,提交代码 git push name master

** 注意有时,你无法提交,因为仓库里面默认有一个文件,你先 git pull name master一下,再push!

在你的服务器安装新的虚拟环境,mkvirtualenv name 安装你需要的任何包,千万不要忘记几个重要的包,虽然项目没说需要,但是没有却报错, dev-python3 这个!

pip install uwsgi 后,你先用 uwsgi 命令测试下能不能跑起来,后面的参数意思分别是 虚拟环境目录,wsgi.py 文件路径,还有一个权限配置。

uwsgi --home /root/.virtualenvs/djshop --file MxShop/wsgi.py --chmod-socket=666 

如果你上一步没问题,说明你代码没问题,

然后你就需要写 uwsgi.ini 这个配置文件了,我给你一个样本,写好了放项目根目录

chdir     =  /path/to/project/ #项目的根目录,绝对路径
wsgi-file = Name/wsgi.py # django 下面 wsgi 路径
processes = 1  # number of cores on machine
max-requests = 5000
chmod-socket = 666
master = True
vacuum = True
socket = /srv/xxx/name.sock # 和nginx 通信的脚本位置,你在这里写的什么路径,等下在nginx 配置文件要写一样的
daemonize = /srv/xxx/log/uwsgi.log # 日志的位置

然后 uwsgi –ini uwsgi.ini 来测试下配置文件,一般没问题。

写Nginx 配置:

cd /ect/nginx/conf.d/ 下面新建一个 name.conf 文件,作为你新网站的配置文件。 最好每个网站给一个配置文件。

server {
# 监听的端口号
    listen 80;
    # 域名或者本机的ip地址
    server_name www.domain.com ;
    charset     utf-8;
    # 最大的上传大小
    client_max_body_size 75M;
    # adjust to taste

    # 访问根目录下的任何url的配置
    location / {
    # 指定访问哪个upstream
    uwsgi_pass xxx;
    # 包括uwsgi参数的文件
    include     /etc/nginx/uwsgi_params;
}
    location /static {
    alias /srv/xxx/static;
}

}

基本这样就好,nginx 和 uwsgi 就连起来来,nginx 是入口,静态文件自己处理了,其他文件就分给wusgi 处理

当然你需要使用 supervisor 来管理你的uwsgi 进程也可以,我就不细说了。