当前位置: 首页 > news >正文

linux + 宝塔 + django + websocket 部署

记坑一个:

     如果服务器上的代码views.py/settings.py/模板html等更新了,需要重启daphne服务,否则还是显示旧内容。测试中某段代码修改后,尝试重启python项目、重启nginx都依然显示旧内容,莫名其妙到怀疑人生,最后重启daphne后正常了。用户访问80端口时其实时候被反向代理到daphne,再经过asgi.py分流去http或ws的


1、宝塔面板: 网站--python项目--添加python项目

3、删除站点根目录下面index.html和404.html,然后上传文件到网站根目录
这时应该可以通过"添加python项目"时所设置的端口访问到网站
4、在ssh终端,通过命令source py-project-env [项目名称] 进入该项目虚拟环境,安装依赖。退出时使用deactivate
5、打开 网站--python项目--(具体项目)设置 对话框,
[域名管理]中填写域名,[外网访问]中打开"外网映射",
[配置文件]
主要是修改网站跟目录 "/" 地址的指向"location / {}"
如果不需要websocket,就指向uwsgi端口
如果需要websocket,就指向daphne端口。 由于asgi.py及settings.py中设置了http指向 <项目名称>.wsgi.application。所以http流量去到asgi.py时会被分流到wsgi(uwsgi)
[uwsgi配置]中填写:

#添加配置选择
[uwsgi]
module = <项目名称>.wsgi:application  # wsgi应用的入口
#配置和nginx连接的socket连接
socket=127.0.0.1:9001
#配置项目路径,项目的所在目录
chdir=/www/wwwroot/<站点根目录>/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录
wsgi-file=<项目名称>/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log

6、(临时测试)启动daphne:
ssh终端进入 /www/wwwroot/<站点目录>
执行:
export DJANGO_SETTINGS_MODULE=<项目名称>.settings
daphne -p 8001 <项目名称>.asgi:application -b 0.0.0.0

7、持久运行daphne需要借助supervisor:

(1) 安装宝塔插件“进程守护管理器” (supervisor)

(2) 以下代码保存为ws.sh 放在站点根目录

if [[ "$PATH" =~ "^/www/server/pyporject_evn/<(网站->python项目->添加python项目 时填写的)项目名称>_venv/bin:.*" ]]; then { echo "虚拟环境已就绪!"; } else { export PATH="/www/server/pyporject_evn/<(网站->python项目->添加python项目 时填写的)项目名称>_venv/bin:${PATH}"; echo "虚拟环境已就绪!"; } fiexport DJANGO_SETTINGS_MODULE=<(django-admin startproject 命令创建项目时填写的)项目名称>.settings
daphne -p 8001 backend.asgi:application -b 0.0.0.0

(3)进入supervisor创建进程守护:配置填写注意:项目目录是你.sh文件的目录,启动命令为/bin/bash ./ws.sh

参考:

https://www.cnblogs.com/Rrea/p/17668114.html

https://blog.csdn.net/xiao_a_lian/article/details/138492925

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++前后缀分解】1888. 使二进制字符串字符交替的最少反转次数|2005
  • Docker部署Joplin Server教程
  • 嵌入式开发—CAN通信协议详解与应用(中)
  • Java 线程超时时间:作用于核心线程还是最大线程?
  • libyuv之linux编译
  • 【揭秘Java】线程安全中的有序性之谜
  • 信通院发布首个《大模型媒体生产与处理》标准,阿里云智能媒体服务作为业界首家“卓越级”通过
  • 树莓派智能语音助手实现音乐播放
  • TSRPC+Cocos
  • 在react中 使用redux
  • 2024年最新软件测试学习路线图(从入门到精通)
  • 利用长度选择器优化Prompt示例选择:提升AI对话效率
  • python实现多个pdf文件合并
  • docker镜像结构
  • pikachu下
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【5+】跨webview多页面 触发事件(二)
  • 【EOS】Cleos基础
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Android组件 - 收藏集 - 掘金
  • AngularJS指令开发(1)——参数详解
  • CentOS 7 防火墙操作
  • iOS编译提示和导航提示
  • Laravel5.4 Queues队列学习
  • Next.js之基础概念(二)
  • React的组件模式
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Web Storage相关
  • 第2章 网络文档
  • 前端面试总结(at, md)
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 由插件封装引出的一丢丢思考
  • 做一名精致的JavaScripter 01:JavaScript简介
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​用户画像从0到100的构建思路
  • ## 基础知识
  • ###STL(标准模板库)
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (3)llvm ir转换过程
  • (6)设计一个TimeMap
  • (C++)八皇后问题
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (vue)页面文件上传获取:action地址
  • (二)丶RabbitMQ的六大核心
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)memcache、redis缓存
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)hibernate缓存
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?