NGINX Unit

Trac§

警告

到目前为止,Unit 还不支持直接处理 REMOTE_USER 标头,因此应通过外部方式实现身份验证。例如,考虑使用 trac-oidcOAuth2Plugin

使用 Unit 运行 Trac 问题跟踪系统

  1. 使用 Python 2 语言模块安装 Unit

    注意

    截至目前,Trac 不支持 Python 3。请注意,Python 2 已正式弃用。

  2. 准备并激活 虚拟环境 以包含你的安装(假设已安装 virtualenv

    $ mkdir -p /path/to/app/
    $ cd /path/to/app/
    $ virtualenv venv
    $ source venv/bin/activate
    
  3. 接下来,安装 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
    
  4. 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)
    
  5. 运行以下命令,以便 Unit 可以访问 应用程序目录

    # chown -R unit:unit /path/to/app/
    

    注意

    unit:unit 用户组对仅适用于 官方包、Docker 映像 以及一些 第三方仓库。否则,帐户名称可能有所不同;运行 ps aux | grep unitd 命令以确保这一点。

    有关更多详细信息,包括权限,请参阅 安全检查清单

  6. 接下来,准备 Trac 配置以用于 Unit(对 sharepathhomemoduleTRAC_ENVPYTHON_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/ 目录。

  7. 上传更新后的配置。假设上述 JSON 已添加到 config.json

    # curl -X PUT --data-binary @config.json --unix-socket \
           /path/to/control.unit.sock http://localhost/config/
    

    注意

    控制套接字 路径可能有所不同;运行 unitd -h 或参阅 启动和关闭 了解更多详细信息。

    更新成功后,Trac 应可在侦听器的 IP 地址和端口上使用

    Trac on Unit - New Ticket Screen