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

Django + Vue 项目部署(1panel + openresty)

前言

大家好,我是绿藻头,一名全栈工程师,目前专注于Python的开发,以及Vue和微信小程序的开发。写博客的原因有两个:一是方便将自己的笔记保存下来,二是给自己找些小事做,总比下班后躺在床上玩手机好。

准备工作
在开始之前,请确保你已经完成以下准备工作:

  • 一个你自己定义好的Python项目(比如,已经写好几个接口)。
  • 一个配置好的Vue项目,记得配置好网址。
  • 一台已经安装好1Panel的服务器。
  • 在服务器中安装了OpenResty。

Python项目

首先,创建一个Python项目并编写一些接口(这部分内容不重点讨论)。
常见问题
作为初学者,我常常思考一些问题,比如:
如何将项目上传到自己的服务器?
如何更新项目?
相信很多人都有类似的疑问,针对这些问题,我目前有两种方案:

上传源码到服务器 如果你的项目接口较少,或者接口已经基本开发完成,那么可以直接将源码上传到服务器。

你可以使用xftp或SSH(在Mac上我用的是SSH)将文件传输到服务器上,注意:不要上传虚拟环境(.venv文件夹)。

使用Git进行管理 如果你希望能够方便地更新项目代码,并且使用版本控制,可以考虑使用Git。举个例子,这是我的一个GitHub仓库:JobSubmissionPlatform。 在服务器上执行以下命令:

git init # 初始化本地Git仓库

git remote add origin https://github.com/duasong111/JobSubmissionPlatform.git  # 添加远程仓库
git remote -v  # 查看远程仓库
git pull origin main  # 拉取远程仓库的代码

这样,代码就成功下载到服务器上,后续你可以通过git pull来拉取更新的代码。
创建并激活Python虚拟环境
在服务器上,你需要创建一个虚拟环境来隔离项目的依赖。操作步骤如下:
创建虚拟环境(假设环境名称为myenv):
python -m venv myenv # 创建虚拟环境
激活虚拟环境:
source myenv/bin/activate # 激活虚拟环境
如果命令行前缀变成(myenv),说明虚拟环境已经激活成功。
安装依赖并启动项目
安装项目的依赖:
pip install -r requirements.txt # 安装依赖
启动项目:
python manage.py runserver 0.0.0.0:8000 # 启动项目,使用0.0.0.0表示允许所有IP访问
为什么使用0.0.0.0? 这是一个回环地址,意味着项目可以通过所有IP进行访问,直到没有报错为止。
使用uWSGI进行生产环境部署
我们不希望每次手动启动项目,使用uWSGI可以在生产环境中方便地部署Django应用。
首先安装uWSGI:

pip install uwsgi

创建uwsgi.ini配置文件:

[uwsgi]
chdir = /home/Web_python/JobSubmissionPlatform  # 项目路径
module = wsgi:application  # 入口模块
master = true  # 启动master进程
processes = 2  # 启动2个worker进程
socket = 127.0.0.1:8000  # 设置监听端口
vacuum = true  # 清理进程
env = DJANGO_SETTINGS_MODULE=JobSubmissionPlatform.settings  # 环境变量
daemonize = /home/Web_python/uwsgi.log  # 日志文件路径

查看进程是否启动:

启动uWSGI:
uwsgi --ini uwsgi.ini  # 启动uWSGI进程
ps aux | grep uwsgi  # 查看uWSGI进程是否存在
netstat -tnlp | grep 9000  # 检查端口是否监听

配置Shell脚本用于启动与关闭uWSGI
为了方便管理uWSGI进程,我们可以配置两个Shell脚本来启动和停止uWSGI进程。

停止的脚本

#!/usr/bin/env bashecho -e "\033[34m----------------wsgi process--------\033[0m"# 获取 uWSGI 进程的 PID
PIDS=$(ps -ef | grep '[u]wsgi.*uwsgi.ini' | awk '{print $2}')if [ -z "$PIDS" ]; thenecho -e "\033[31mNo uWSGI processes found for uwsgi.ini\033[0m"exit 1
fiecho -e "\n-----------going to close ----------------"
for PID in $PIDS; doecho "Stopping uWSGI process with PID: $PID"kill -15 "$PID"  # 使用 SIGTERM 优雅终止sleep 1# 检查进程是否仍在运行if ps -p "$PID" > /dev/null; thenecho -e "\033[31mProcess $PID did not terminate, forcing kill...\033[0m"kill -9 "$PID"  # 如果 SIGTERM 失败,强制终止fi
doneecho -e "\033[32mAll uWSGI processes stopped\033[0m"

重启的脚本

#!/usr/bin/env bashecho -e "\033[34m----------------wsgi process--------\033[0m"# 获取 uWSGI 进程的 PID
PIDS=$(ps -ef | grep '[u]wsgi.*uwsgi.ini' | awk '{print $2}')if [ -n "$PIDS" ]; thenecho -e "\n-----------going to close ----------------"for PID in $PIDS; doecho "Stopping uWSGI process with PID: $PID"kill -15 "$PID"  # 使用 SIGTERM 优雅终止sleep 1# 检查进程是否仍在运行if ps -p "$PID" > /dev/null; thenecho -e "\033[31mProcess $PID did not terminate, forcing kill...\033[0m"kill -9 "$PID"  # 如果 SIGTERM 失败,强制终止fidone
elseecho -e "\033[31mNo uWSGI processes found for uwsgi.ini\033[0m"
fiecho -e "\n-------starting uWSGI---------"
# 使用虚拟环境中的 uwsgi,确保路径可移植
UWSGI_BIN=$(command -v uwsgi)
if [ -z "$UWSGI_BIN" ]; thenecho -e "\033[31mError: uwsgi not found in PATH\033[0m"exit 1
fi$UWSGI_BIN --ini uwsgi.ini &sleep 1echo -e "\033[34m----------------wsgi process--------\033[0m"
ps -ef | grep '[u]wsgi.*uwsgi.ini'if [ $? -eq 0 ]; thenecho -e "\033[32muWSGI restarted successfully\033[0m"
elseecho -e "\033[31mFailed to start uWSGI\033[0m"exit 1
fi

哎呦,这个csdn的内容展示不行,不能达到很好的效果啊

http://www.dtcms.com/a/314619.html

相关文章:

  • 制造业引入设备管理系统,实现智能资产运维与效率飞跃
  • Node.js(四)之数据库与身份认证
  • Nestjs框架: Node.js 多环境配置策略与 dotenv 与 config 库详解
  • 【计算机网络 | 第2篇】计算机网络概述(下)
  • Go 语言模糊测试 (Fuzz Testing) 深度解析与实践
  • Onnx模型部署到Arm64进行推理
  • MAC-Spring Cloud + Spring Boot + RocketMQ集成
  • 「查漏补缺」ZGC相关内容整理
  • 机器学习(13):逻辑回归
  • 一周学会Matplotlib3 Python 数据可视化-Hello World编写
  • 半同步复制原理
  • 企业级库存穿透技术实现:基于LSTM的实时损耗控制算法在快鹭AI办公系统中的实践
  • Jmeter进行性能并发测试
  • mybatis知识
  • 网安学习NO.21
  • 飞算JavaAI需求转SpringBoot项目沉浸式体验
  • 探访WAIC2025:当AI成为双刃剑,合合信息如何破解真假难题
  • 北京JAVA基础面试30天打卡01
  • SpringMvc跨域配置方法详解
  • Linux网络编程【基于UDP网络通信的群聊服务】
  • 通用代码自用
  • 李沐写作笔记
  • C语言结构体、位段、枚举、联合体
  • Codeforces Round 1004 (Div. 2)
  • win10 系统,一键保存截图, shift + print_screen
  • Ubuntu 下 MySQL 运维自动化部署教程(在线简易版)
  • 0.08B参数以小博大:用小模型生成媲美GPT-4o的古典诗词
  • TCP 四次挥手详解
  • springboot博客实战笔记01
  • 常见的Prompt设计误区