当前位置:   article > 正文

Django + Vue前后端分离项目部署

django和vue前后端分离的项目怎么部署

后端用的Django REST Framework,使用的是uwsgi+nginx,前端使用的Vue。

一、配置uwsgi.ini

进入服务器项目文件目录下,我的django项目放在了“/usr/myProjects/”目录下了。在manage.py同级目录下创建uwsgi.ini文件,配置如下:

  1. #添加配置选择
  2. [uwsgi]
  3. #配置和nginx连接的socket连接
  4. socket= :8888
  5. #配置项目路径,项目的所在目录
  6. chdir=/usr/myProject/dacts
  7. #配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名(dacts/wsgi.py)
  8. module=dacts.wsgi
  9. #配置启动的进程数
  10. processes=4
  11. #配置每个进程的线程数
  12. threads=2
  13. #配置启动管理主进程
  14. master=True
  15. #配置存放主进程的进程号文件
  16. pidfile=uwsgi.pid
  17. #配置dump日志记录
  18. daemonize=uwsgi.log

测试效果命令:

uwsgi --http :8000 --module dacts.wsgi

如果访问:xxx.xxx.xxx.xx:8000 成功,  则uwsgi.ini配置成功。

84bc3b78e8d7523f4d7913a65de329a9.png

二、配置nginx

我的nginx.conf所在位置是“/etc/nginx/nginx.conf”

配置文件如下:

  1. user root nginx;
  2. worker_processes auto;
  3. error_log /var/log/nginx/error.log;
  4. pid /run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  10. '$status $body_bytes_sent "$http_referer" '
  11. '"$http_user_agent" "$http_x_forwarded_for"';
  12. access_log /var/log/nginx/access.log main;
  13. sendfile on;
  14. tcp_nopush on;
  15. tcp_nodelay on;
  16. keepalive_timeout 65;
  17. types_hash_max_size 2048;
  18. include /etc/nginx/mime.types;
  19. default_type application/octet-stream;
  20. # 前端vue服务器
  21. server {
  22. listen 8008;
  23. server_name xxxx.com 47.xx.xxx.xx; # 此处填写服务器域名+ 空格+ ip
  24. location / {
  25. root /root/dist; #打包后的vue项目地址,我直接丢root目录下了
  26. index index.html index.html;
  27. try_files $uri $uri/ /index.html;
  28. }
  29. location /api/ {
  30. proxy_pass http://xxxxx.com; # 反向代理地址
  31. proxy_read_timeout 600s;
  32. client_max_body_size 100M;
  33. proxy_set_header Host $host;
  34. proxy_set_header X-Real-IP $remote_addr;
  35. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  36. }
  37. error_page 404 /404.html;
  38. location = /40x.html {
  39. }
  40. error_page 500 502 503 504 /50x.html;
  41. location = /50x.html {
  42. }
  43. }
  44. # 后端drf服务器
  45. server {
  46. listen 80;
  47. server_name xxxxxx.com; #改为自己的域名
  48. charset utf-8;
  49. location / {
  50. include uwsgi_params;
  51. uwsgi_pass 127.0.0.1:8888; #端口要和uwsgi里配置的一样
  52. uwsgi_read_timeout 2;
  53. }
  54. location /static {
  55. alias /usr/myProject/dacts/static/;
  56. }
  57. location /media {
  58. alias /usr/myProject/dacts/media/;
  59. }
  60. }
  61. }

三、部分配置解析:

1、第一行

user root nginx;

主要就是给nginx加权限,vue部署后使用history路由时会去掉地址后面的‘#’号,打包部署后不加权限会有bug。


2、如配置所示,有两个Server,分别部署了前端服务,和后端服务,值得注意的是两个Server用的是同一个服务器,监听的端口不同。


3、vue部署需要注意的是反向代理地址:

proxy_pass http://xxxxx.com;   # 反向代理地址

以及后面的端口问题:

  1. proxy_set_header Host $host;
  2. proxy_set_header X-Real-IP $remote_addr;
  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

4、后端的Server需要注意location中的uwsgi_pass 后面的端口号要和uwsgi.ini中配的相同,否则监听不到

  1. location / {
  2. include uwsgi_params;
  3. uwsgi_pass 127.0.0.1:8888; #端口要和uwsgi里配置的一样
  4. }

5、后端跨域问题。如果遇到跨域需要自己网上找配置,我的没遇到,可能是因为我在django的settings中配置了跨域。


6、我开始后台监听的是8008端口,vue前端监听的是80端口,这样前端显示好看。然而问题出现了,虽然后台api可以正常访问,vue的本地开发环境也能正常运行且文字、图片资源均显示正常,但是前端vue打包线上部署后,文字信息显示正常,图片信息缺失8008端口,导致显示不出来。为图方便我选择了前端监听8008端口,后端监听80,部署后显示正常。原因不太清楚。


7、不要问我为啥都前后端分离了还部署到一个服务器上?穷,而且只是测试,没必要.


8、此文仅适合入门。如果样式缺失,输入如下命令:

python manage.py collectstatic

接下来你就回发现static文件中包含了css文件,此时再打开网站,样式显示正常。uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

关于uwsgi,进入同届目录下启动:

uwsgi --ini uwsgi.ini
重启:
uwsgi --reload uwsgi.pid
停止:
uwsgi --stop uwsgi.pid

教训:

ee68e8aefd566df793af334d3631c819.png

获取不到环境,那就指定环境。

a47465a93c96d5f3470a32162b20d83e.png

6e98a13f333745edf67c8023224f3654.png

另外:记得重启uwsgi,重启Nginx,实在不行就先把监听的端口kill掉再重启。

暴力删端口:fuser -k 80/tcp

netstat -aptn命令行,查看所有开启的端口号

netstat -ntlp | grep 80  查看具体的端口是否使用
ps -ef | grep uwsgi   查看是否有uwsgi端口存在


作者:蜗牛LR
链接:https://www.jianshu.com/p/376b5554c457
来源:简书

推荐阅读

Docker-compose 八步部署Django + Uwsgi + Nginx + MySQL + Redis升级篇

生产环境使用Uvicorn和Nginx部署Django

如何在阿里云Ubuntu服务器通过uWSGI和Nginx部署Django项目教程-大江狗原创出品

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/879890
推荐阅读
相关标签
  

闽ICP备14008679号