Trac§
警告
到目前为止,Unit 还不支持直接处理 REMOTE_USER 标头,因此应通过外部方式实现身份验证。例如,考虑使用 trac-oidc 或 OAuth2Plugin。
使用 Unit 运行 Trac 问题跟踪系统
使用 Python 2 语言模块安装 Unit。
注意
截至目前,Trac 不支持 Python 3。请注意,Python 2 已正式弃用。
准备并激活 虚拟环境 以包含你的安装(假设已安装 virtualenv)
$ mkdir -p /path/to/app/ $ cd /path/to/app/ $ virtualenv venv $ source venv/bin/activate
接下来,安装 Trac 及其可选依赖项,然后初始化 Trac 环境 并部署静态文件
$ pip install Trac $ pip install babel docutils genshi \ pygments pytz textile # optional dependencies $ mkdir static/ # will store Trac's /chrome/ tree $ mkdir trac_env/ $ trac-admin trac_env/ initenv # initialize Trac environment $ trac-admin trac_env/ deploy static/ # extract Trac's static files $ mv static/htdocs static/chrome # align static file paths $ rm -rf static/cgi-bin/ # remove unneeded files $ deactivate
Unit 使用 WSGI 来运行 Python 应用程序,因此需要一个 包装器 脚本来将 Trac 作为一个 Unit 应用程序运行;我们将其保存为 /path/to/app/trac_wsgi.py。此处,application 可调用对象用作应用程序的入口点
import trac.web.main def application(environ, start_response): environ["trac.locale"] = "en_US.UTF8" return trac.web.main.dispatch_request(environ, start_response)
运行以下命令,以便 Unit 可以访问 应用程序目录
# chown -R unit:unit /path/to/app/
有关更多详细信息,包括权限,请参阅 安全检查清单。
接下来,准备 Trac 配置以用于 Unit(对 share、path、home、module、TRAC_ENV 和 PYTHON_EGG_CACHE 使用实际值)
{ "listeners": { "*:80": { "pass": "routes" } }, "routes": [ { "match": { "uri": "/chrome/*" }, "action": { "share": "/path/to/app/static$uri" } }, { "action": { "pass": "applications/trac" } } ], "applications": { "trac": { "type": "python 2", "path": "/path/to/app/", "home": "/path/to/app/venv/", "module": "trac_wsgi", "environment": { "TRAC_ENV": "/path/to/app/trac_env/", "PYTHON_EGG_CACHE": "/path/to/app/trac_env/eggs/" } } } }
该路由提供对 Trac 中 /chrome/ 层次结构 中静态文件的请求,这些文件来自 static/ 目录。
上传更新后的配置。假设上述 JSON 已添加到
config.json
# curl -X PUT --data-binary @config.json --unix-socket \ /path/to/control.unit.sock http://localhost/config/
更新成功后,Trac 应可在侦听器的 IP 地址和端口上使用