Windows 开机自动启动 Django 项目

直接 python manage.py runserver 8008 不适合生产,仅适合内网调试;runserver 是开发服务器,性能弱,不能对外公网暴露。

两种方案:任务计划程序(简单,适合调试) 、Windows 服务(后台无窗口,推荐)

方式一:任务计划程序开机自启(最简单,会弹出黑窗口)

1、写启动脚本 start_django.bat

新建文本文档,改后缀为 .bat,编辑内容:

复制代码
@echo off
:: 切换到你的django项目根目录
cd /d E:\code\my_django_project
:: 激活虚拟环境(如果你用venv)
call venv\Scripts\activate.bat
:: 启动,端口8008
python manage.py runserver 0.0.0.0:8008

0.0.0.0:8008 代表允许局域网其他设备访问;只本机访问写 127.0.0.1:8008

保存,测试双击 bat,访问 http://127.0.0.1:8008 确认正常。

2、Windows 任务计划程序设置

  1. Win 搜索:任务计划程序
  2. 创建基本任务
    • 名称:DjangoAutoStart8008
    • 触发器:计算机启动时
    • 操作:启动程序
    • 程序或脚本:选择刚才的 start_django.bat
    • 勾选:不管用户是否登录都要运行 ✅
    • 取消勾选 "不存储密码",勾选最高权限运行
  3. 保存。

缺点:开机弹出 cmd 黑框,关掉窗口 Django 就停止;机器登录后才真正执行。


方式二:Windows 服务运行 Django(无黑窗口,真正后台驻留)

runserver 不适合做服务,改用 waitress 作为 WSGI 服务器。

步骤 1:安装 waitress

复制代码
pip install waitress

步骤 2:项目根目录新建 service_run.py

复制代码
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

from waitress import serve
from myproject.wsgi import application

# 监听全部网卡,端口8008
serve(application, host="0.0.0.0", port=8008)

把 myproject 替换为自己 Django 项目文件夹名。 测试运行:python service_run.py,访问 8008 确认正常。

步骤 3:用 nssm 把 python 脚本注册成 Windows 系统服务

  1. 下载 nssm(免安装工具),解压

  2. cmd 管理员身份,进入 nssm 的win64目录(32位系统进入win32)执行命令:

    nssm install DjangoService8008

弹出窗口:

  • Path:选择你的 python 解释器路径,例:E:\code\my_django_project\venv\Scripts\python.exe
  • Arguments:service_run.py
  • Startup directory:填 Django 项目根目录 E:\code\my_django_project

设置服务:启动类型 =自动。

复制代码
nssm start DjangoService8008

✅开机就后台自动跑,没有黑窗口,崩溃会自动重启。

NSSM常用命令:

复制代码
nssm start DjangoService8008     #启动
nssm stop DjangoService8008      #停止
nssm restart DjangoService8008   #重启
nssm edit DjangoService8008     #编辑配置界面
nssm remove DjangoService8008 confirm  #删除服务

⚠重要提醒

  1. 防火墙放行端口 8008,否则局域网访问不了。
  2. manage.py runserver 禁止公网直接使用,仅内网调试;正式环境务必用 waitress/gunicorn。
  3. 如果使用虚拟环境,脚本 / 服务里必须使用虚拟环境下的 python.exe,不要用系统 python。

防火墙放行 8008 快速命令(管理员 cmd)

复制代码
netsh advfirewall firewall add rule name="Django8008" dir=in action=allow protocol=TCP localport=8008 profile=any remoteip=any enable=yes
相关推荐
一晌小贪欢40 分钟前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚2 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
学长毕设2 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端
10年前端老司机2 小时前
Milvus 8种检索能力实践
数据库·python·agent
梦里寻码2 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
鶴哥只手遮天2 小时前
《Redis 8.10.3 深度剖析》系列 ·第 10 章 Hash 一:`listpack`、`hashtable` 与 `LISTPACK_EX`
redis·后端·开源
johnjincaaaa3 小时前
WebAssembly 逆向实战:从 0 搞懂猿人学第 15 题
后端
Gopher_HBo3 小时前
Go CPU 剖析:四角色白话机制 + 实测实验
后端
猿人谷3 小时前
Surrogate Model:让进化算法学会“预测”,为什么它正在成为智能优化的重要技术?
后端·算法·架构
Sakura_j_h_3 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc