Django + Nginx + Uwsgi部署服务器
摘要
写这篇博客主要是为了记录一下自己部署的历程(太艰辛了),同时也为了让其他人能够在看了本博文后能够少走弯路。希望这篇博文能够对大家有所帮助。
环境
本人所使用的环境如下
1 | Ubuntu 18.04.4(腾讯云服务器) |
环境搭建
在上述环境的基础上进行部署django所需的环境的配置和搭建
首先是pip3的安装,这一步就不再赘述了。
然后是git的安装,直接apt-get install git
就行了,主要是为了后面能够从github上clone源码。也可以通过wget 项目地址.zip 下载地址
的方式下载项目zip包然后解压。
然后是django所需环境的安装,可以通过虚拟环境的方式安装,也可以直接安装,因为本人是只用在服务器上部署这一个django项目,所以本人直接安装并没有通过虚拟环境,先导出requirements.txt然后在这里安装就可以了
1 | pip install -r requirements.txt |
mysql的安装也不在这里说了,因为不是重点,大家度娘都能够解决。并且mysql的安装对部署的影响并不大。
然后则是uwsgi的安装了,uwsgi大家可以直接通过pip install uwsgi
的方式完成安装,不过请确定是最新版,否则容易出现bug,安装完成后可以测试一下
首先在manage.py同一级目录下创建test.py
1 | # test.py |
然后运行
1 | wsgi --http :8000 --wsgi-file test.py |
打开<公网ip:8000>
看能否访问并看到hello world,如果能看到则没问题
然后是对nginx的安装,同理apt-get install nginx
,安装完后,可以通过service --status-all
查看niginx前面是否有+号,如果没问题,再访问公网ip
,如果出现nginx的欢迎界面,则nginx安装成功
配置
环境安装好了,接下来就是最重要的配置环节了。
首先是对uwsgi的配置,首先在manage.py同级目录下创建uwsgi.ini文件用于配置,配置内容如下
#对应是注释,复制的时候最好把中文删去,省去编码问题
1 | [uwsgi] |
然后是对nginx的配置
首先了解一下nginx的配置文件
1 | 主配置文件:/etc/nginx/nginx.conf一般不用动 |
1 | cd /etc/nginx/sites-available |
然后在xxx.conf文件中写入以下内容
1 | upstream django { |
然后将此文件再sites-enabled中创建一个软连接,表示此配置文件已经启用:
1 | ln -s /etc/nginx/sites-available/xxx.conf /etc/nginx/sites-enabled/xxx.conf |
另外我们还需要将启动nginx的用户改为root,要不然会出现403 forbidden的错误。打开/etc/nginx/nginx.conf文件,将第一行中user后面的用户改为root即可。
然后需要对django进行一下小修改
首先是对settings.py中的debug改为false,allowed_host改为[‘*‘]或者[‘公网ip’],这样才能访问到。
然后在最后加入STATIC_ROOT = os.path.join(BASE_DIR,'static')
,之后再进入项目执行python3 manage.py collectstatic
执行之后就能看到项目中新增了一个static目录,这样nginx就能访问到了,才能正确加载项目的静态文件,否则访问的就是缺失css样式的项目
重启
然后就是将nginx重启服务并且将uwsgi启动的阶段了
1 | sudo service nginx restart |
第一行是nginx的重启,第二行则是启动uwsgi服务,最后一行是需要关闭uwsgi服务所需要执行的命令
启动uwsgi系统提示
1 | [uWSGI] getting INI configuration from uwsgi.ini |
则代表启动成功了,现在就可以访问公网ip:8000
访问你的项目了
如果出现问题,可查看uwsgi的日志文件,也就是前面所配置的daemonize = /root/myblog/mysite.log
,从而帮助找到错误,进而解决。
补充 前端部署
首先本地运行以下命令打包
1 | npm run build |
然后将生成的dist文件夹拷贝到服务器上的任意一个位置(下面配置)
然后将上文配置好的nginx的配置文件(/etc/nginx/site-available/xxx.conf
)再次打开,再加入一个server即可。
1 | server { |
最后重启nginx服务即配置完毕(比后端好配置多了)
注意
需要注意的点是,uwsgi的socket和nginx里的配置一定要一样,同时不要使用8000端口(不要问我怎么知道的),上文使用的是8888端口,同时需要查看相应端口的防火墙是否已经打开,如果出现问题可以在服务器上通过curl
进行本地访问测试。