You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Hetzner托管服务器部署Django应用的问题排查

问题分析与解决方案

核心问题

你当前的部署逻辑完全错误:定时任务无法维持Django服务持续运行——它只是周期性执行脚本(甚至你的命令没加runserver参数,连开发服务器都没启动)。你看到的index页面要么是静态文件,要么是Apache直接返回的文件内容,但Django的路由系统根本没在工作。点击/reg/这类路径时,Apache会去文件系统找对应的目录/文件,找不到就返回404。

关于Docker和Nginx的说明

Hetzner的WordPress托管属于共享Web托管,这类环境默认用Apache+Passenger(或WSGI模块)部署Python应用:

  • 不需要Docker:共享托管服务商几乎不允许使用Docker,且完全没必要用它部署简单的Django应用
  • 不需要自行配置Nginx:服务商已经配置好Web服务器,你只需要让服务器把请求转发给Django即可

正确部署步骤

1. 删除无效定时任务

直接删掉执行manage.py的定时任务——它除了浪费资源毫无作用,定时任务是用来跑周期性脚本(比如定时清理数据),不是用来维持Web服务的。

2. 配置Passenger WSGI入口文件

在你的Django项目根目录(/usr/home/username/public_html/testbox/)创建passenger_wsgi.py文件,内容如下:

import sys, os

# 将项目根目录加入Python路径
sys.path.insert(0, os.path.dirname(__file__))

# 设置Django的配置模块
os.environ['DJANGO_SETTINGS_MODULE'] = 'testbox.settings'

# 初始化Django WSGI应用
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

3. 调整Django项目配置

修改testbox/settings.py:

  • 允许你的子域名访问:
    ALLOWED_HOSTS = ['your-subdomain.example.com', 'localhost']  # 替换成你的实际子域名
    
  • 设置静态文件收集目录(确保Apache能正确加载CSS):
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • 执行静态文件收集:
    cd /usr/home/username/public_html/testbox/
    python3 manage.py collectstatic
    
    执行时输入yes确认,静态文件会被统一收集到static/目录。

4. 配置托管面板的子域名设置

登录Hetzner控制面板,找到你的子域名管理:

  • 将子域名的文档根目录设置为Django项目的根目录(/usr/home/username/public_html/testbox/)
  • 确保选择的Python版本和你安装Django的版本匹配

5. 添加.htaccess触发Passenger重启

在项目根目录创建.htaccess文件,内容:

# 指定Python解释器路径
PassengerPython /usr/bin/python3
# 指定Django应用根目录
PassengerAppRoot /usr/home/username/public_html/testbox/

修改这个文件会触发Passenger自动重启应用,加载你的Django配置。

验证部署

完成上述步骤后,访问你的子域名:

  • 首页会由Django渲染(而非静态文件)
  • 点击/reg/等路径时,Django路由系统会正常处理请求,不会再返回404

内容的提问来源于stack exchange,提问作者DerJK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:23:09