如何在Lighttpd环境下部署Django项目?
基于Lighttpd部署Django子域名的方案建议
核心选型:优先用uWSGI + mod_scgi
uWSGI原生支持SCGI协议,和Lighttpd的mod_scgi适配性拉满,配置直接无额外转换层,完全匹配你轻量化部署的需求。相比之下,Gunicorn默认不支持SCGI,得靠第三方工具(比如flup)转协议,反而多了一层依赖,徒增复杂度,不推荐。
具体部署步骤
1. 安装uWSGI
在Python环境里装好uWSGI:
pip install uwsgi
2. 配置uWSGI以SCGI模式运行
创建uWSGI配置文件(比如django_scgi.ini),把Django项目和SCGI监听端口绑定:
[uwsgi] # Django项目根目录 chdir = /path/to/your/django/project # 指定Django的WSGI入口模块 module = your_project.wsgi:application # 本地SCGI监听端口(别暴露到公网) socket = 127.0.0.1:9000 # 进程数,根据服务器CPU核数调整 processes = 2 # 每个进程的线程数 threads = 2 # 后台运行并输出日志 daemonize = /var/log/uwsgi/django_scgi.log # 给socket设置合理权限 chmod-socket = 664
启动uWSGI:
uwsgi --ini django_scgi.ini
3. 配置Lighttpd的子域名与SCGI转发
编辑Lighttpd配置文件(比如/etc/lighttpd/lighttpd.conf或单独的子域名配置文件),启用mod_scgi并设置路由规则:
# 启用mod_scgi模块 server.modules += ( "mod_scgi" ) # 子域名匹配规则 $HTTP["host"] == "sub.yourdomain.com" { # 静态文件直接由Lighttpd处理,减轻后端压力 alias.url += ( "/static/" => "/path/to/your/django/project/static/", "/media/" => "/path/to/your/django/project/media/" ) # 动态请求转发到uWSGI的SCGI服务 scgi.server = ( "/" => ( "django_scgi" => ( "host" => "127.0.0.1", "port" => 9000, "check-local" => "disable" ) ) ) }
4. 验证与重启服务
重启Lighttpd生效:
systemctl restart lighttpd
访问子域名,检查动态页面、静态资源是否正常加载。
备选方案:Gunicorn + flup(不推荐)
如果非要用Gunicorn,得装flup做WSGI转SCGI的适配:
pip install gunicorn flup
启动命令:
gunicorn your_project.wsgi:application -w 2 -b 127.0.0.1:9000 --worker-class=flup.server.scgi.WSGIServer
后续Lighttpd的SCGI配置和uWSGI方案一致,但多了一层依赖,稳定性和性能不如直接用uWSGI。
关键注意事项
- 先执行Django的静态文件收集命令,把静态资源集中到指定目录:
python manage.py collectstatic
- 给uWSGI日志目录创建权限,避免启动失败:
mkdir -p /var/log/uwsgi && chown www-data:www-data /var/log/uwsgi
- 可以配置systemd服务管理uWSGI,确保服务器重启后自动启动。
内容的提问来源于stack exchange,提问作者Henrique Bucher
相关产品推荐
相关产品推荐

