ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenProject 本地开发环境启用 HTTPS:Apache2 反向代理与自签名证书配置指南

OpenProject 本地开发环境启用 HTTPS:Apache2 反向代理与自签名证书配置指南 OpenProject 本地开发环境启用 HTTPSApache2 反向代理与自签名证书配置指南【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject本篇技术指南介绍如何在本地为 OpenProject 开发环境搭建 HTTPS 访问链路通过 Apache2 反向代理终结 SSL 请求再将流量转发到本地 Puma 服务。适用场景主要是开发或调试 OmniAuth 插件——这类插件需要回调地址指向 HTTPS 域名纯http://localhost:3000无法满足。读完本文你将能够完整配置自签名证书、Apache 虚拟主机与 OpenProject 的环境变量并按需切换到 Docker 反向代理的替代方案。为什么本地开发需要 HTTPS日常开发中OpenProject 直接跑在http://localhost:3000开发服务器/Puma 端口。但某些功能依赖 HTTPS 上下文才能正确工作最典型的是OmniAuth 认证插件OIDC、SAML 等身份提供方通常要求回调 URL 为 HTTPS 地址本地若是 HTTP 协议授权流程会在重定向阶段失败。此外按“反向代理终结 SSL”的方式在本地运行也更接近打包版与 Docker 生产部署的真实拓扑便于提前发现协议相关的配置问题。官方文档docs/development/localhost-ssl/README.md给出的方案是Apache2 作为反向代理在 443 端口终结 SSL通过ProxyPass将请求转发到本机 3000 端口的开发服务器。该文档的前提是你已经按照 本地开发环境指南 配置好了 OpenProject 开发环境。第一步创建自签名证书在开发用途下用openssl生成一张自签名证书即可无需 CA 签发sudo mkdir -p /etc/ssl/openproject-dev/ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/openproject-dev/privkey.key -out /etc/ssl/openproject-dev/cert.crt参数说明-x509直接输出自签名证书而不是 CSR-nodes不对私钥加密码保护方便 Apache 无交互加载-days 365有效期 365 天到期后重新生成即可-newkey rsa:2048生成 2048 位 RSA 密钥产物私钥/etc/ssl/openproject-dev/privkey.key与证书/etc/ssl/openproject-dev/cert.crt供 Apache2 引用。执行过程中openssl req会交互式询问国家、组织、Common Name 等信息Common Name 可填入你计划使用的开发域名如openproject.example.com。注意自签名证书浏览器会显示“不受信任”警告开发用途下可手动信任或忽略。第二步设置自定义主机名为了模拟完整域名场景建议为开发环境分配一个专用主机名例如openproject.example.com。编辑/etc/hosts把该域名指向本机openproject.example.com 127.0.0.1这样做的原因是后续 Apache 虚拟主机、OpenProject 的 host 白名单以及 OmniAuth 回调地址都会统一引用这个域名避免localhost与域名混杂导致 Cookie、跳转和 CSRF 校验出现跨源问题。第三步安装并配置 Apache2 反向代理安装 Apache2 并确认所需模块以 apt 系发行版为例sudo apt-get install apache2随后确认mod_ssl、mod_proxy、mod_proxy_http、mod_headers四个模块已安装并处于激活状态各发行版启用方式不同请查阅对应的 Apache 配置文档可用以下命令核对加载情况apachectl -M四个模块的分工mod_ssl提供 SSL 终结能力mod_proxymod_proxy_http提供 HTTP 反向代理mod_headers用于修改请求头下文会用它注入协议头。编写虚拟主机配置在 Debian/Ubuntu 上创建站点配置文件RHEL/Fedora 系通常位于/etc/apache2/conf.d/nano /etc/apache2/sites-available/openproject-dev-ssl.conf文档给出的完整示例配置如下VirtualHost *:80 ServerName openproject.example.com redirect permanent / https://openproject.example.com/ /VirtualHost VirtualHost *:443 # # SSL Start # SSLEngine On SSLCertificateFile /etc/ssl/openproject-dev/cert.crt SSLCertificateKeyFile /etc/ssl/openproject-dev/privkey.key # If you have a chain file (not self-signed certificate), uncomment this # SSLCertificateChainFile /etc/ssl/openproject-dev/chain.pem # Set Forwarded protocol header to proxy # otherwise OpenProject doesnt know were terminating SSL here. RequestHeader set X_FORWARDED_PROTO https # # SSL End # ServerName openproject.example.com ServerAdmin adminexample.com # Proxy requests to development localhost:3000 / puma worker ProxyRequests off ProxyPass / http://127.0.0.1:3000/ retry0 ProxyPassReverse / http://127.0.0.1:3000/ /VirtualHost关键配置项解析80 端口虚拟主机将 HTTP 访问 301 永久重定向到 HTTPS保证入口统一走加密链路SSLEngine On 证书/私钥路径第一步生成的自签名证书在此生效如果你的证书来自 CA 且带有中间链文件取消SSLCertificateChainFile注释并指向链文件RequestHeader set X_FORWARDED_PROTO https这是整套配置中最容易被忽略的一行。SSL 在 Apache 层终结后发往后端的实际请求是 HTTP通过注入X_FORWARDED_PROTO头OpenProject 才能感知到外部是 HTTPS 协议从而正确生成绝对 URL、回调地址和 Cookie 属性。缺了这一行应用侧生成的链接仍是http://开头OmniAuth 等依赖协议判断的功能会出问题ProxyRequests off关闭正向代理能力Apache 只做反向代理这是安全惯例ProxyPass / http://127.0.0.1:3000/ retry0把所有请求转发到本机 3000 端口的开发服务器Puma。retry0表示后端连接失败时立即返回错误而不重试开发环境下避免请求在服务器未就绪时被静默挂起。仓库中根目录的 Docker Compose 覆盖示例 同样把3000端口映射到宿主机${PORT:-3000}:3000印证了 3000 是 OpenProject 后端服务的标准端口ProxyPassReverse改写后端返回响应中的Location等头使重定向 URL 指向代理域名而不是内部地址。保存配置后激活站点并重载 Apachesudo a2ensite openproject-dev-ssl.conf apachectl configtest # 先确认语法正确 sudo systemctl reload apache2SELinux 环境注意事项在启用了 SELinux 的系统上Apache 默认不允许发起对外网连接还需要放行其对本地应用服务器的访问/usr/sbin/setsebool -P httpd_can_network_connect 1否则ProxyPass到127.0.0.1:3000的请求会被 SELinux 策略拦截表现为 503 或连接拒绝。第四步配置 OpenProject 使用 HTTPS这一步让 OpenProject 应用自身接受新域名并切换到 HTTPS 模式。注册开发域名OPENPROJECT_DEV_EXTRA_HOSTSRails 开发环境默认有 host 白名单机制Host Authorization未知域名会被拒绝访问。OpenProject 在开发环境配置中提供了专门的白名单扩展入口config/environments/development.rb 中的实现为if ENV[OPENPROJECT_DEV_EXTRA_HOSTS].present? config.hosts.push(*ENV[OPENPROJECT_DEV_EXTRA_HOSTS].split(,)) end可以看到该变量以逗号分隔解析把每个域名追加进config.hosts。因此只需在开发环境的环境变量配置中加入OPENPROJECT_DEV_EXTRA_HOSTS: openproject.example.com如果你有多个开发域名用逗号分隔即可例如OPENPROJECT_DEV_EXTRA_HOSTS: a.local,b.local。切换协议与主机名OPENPROJECT_HTTPS 与 OPENPROJECT_HOST__NAMEexport OPENPROJECT_HTTPS true export OPENPROJECT_HOST__NAME openproject.example.comOPENPROJECT_HOST__NAME将 OpenProject 对外呈现的主机名设为你的开发域名所有生成的绝对 URL邮件链接、导出、回调地址等都会基于该域名OPENPROJECT_HTTPS告知应用当前以 HTTPS 模式运行。这一点在打包部署流程中也有直接印证——lib/tasks/packager.rake 在配置生产实例时当检测到SERVER_PROTOCOL为https或SERVER_PROTOCOL_FORCE_HTTPS时会执行config:set OPENPROJECT_HTTPStrue并配套开启OPENPROJECT_HSTStrue而仅提供SERVER_PROTOCOL_HTTPS_NO_HSTS变量时则只设置OPENPROJECT_HTTPStrue并显式关闭 HSTS注释中说明这是为了“SSL 在前端代理处终结、不希望启用 HSTS 头”的场景。本地开发正属于这类“代理处终结 SSL”的情形所以只设置OPENPROJECT_HTTPS而无需启用 HSTS。生产环境下该配置的最终体现位于 config/environments/production.rbconfig.force_ssl OpenProject::Configuration.https?即OPENPROJECT_HTTPS为真时应用会对 HTTP 请求做 301 强制跳转。开发环境虽然不走force_ssl但应用需要这个开关来正确感知协议。启动验证分别启动 OpenProject 开发服务器和前端服务器然后在浏览器访问https://openproject.example.com若看到页面正常加载伴随自签名证书的信任警告即说明 Apache 到 Puma 的反向代理链路已打通。调试时建议依次检查浏览器请求是否到达 443 虚拟主机apachectl configtest、apachectl -M、后端 3000 端口是否存活、X_FORWARDED_PROTO头是否注入可临时在后端日志中观察请求头。替代方案基于 Docker 开发环境如果你使用 OpenProject 的 Docker 开发环境而非裸机安装也可以按同样的“代理终结 SSL”思路改造在 Docker 栈中引入一个反向代理文档以 traefik 为例此处仅说明其作用——按主机名路由流量具体步骤创建docker-compose.override.yml仓库根目录提供了 docker-compose.override.example.yml 可作参考起点通过标签为你的 OpenProject 服务暴露特定主机名。以 traefik 为例给backend服务添加主机路由规则labels: - traefik.http.routers.op-backend.ruleHost(op-backend.local)在宿主机/etc/hosts中把额外的主机名指向localhost把额外主机名加入backend服务的环境变量格式同样是逗号分隔见前文config.hosts的解析逻辑environment: OPENPROJECT_DEV_EXTRA_HOSTS: op-backend.local提示文档明确标注该 Docker 方案仍处于实验性质This setup is still experimental and under further development仅在熟悉 Docker 网络与代理配置的前提下使用。方案要点回顾环节关键配置作用SSL 终结openssl自签名证书 SSLEngine On在 Apache 443 端口完成 TLS 握手协议感知RequestHeader set X_FORWARDED_PROTO https让应用知道外部是 HTTPS正确生成 URL 与回调地址流量转发ProxyPass / http://127.0.0.1:3000/ retry0反向代理到 Puma 开发服务器域名白名单OPENPROJECT_DEV_EXTRA_HOSTS逗号分隔绕过 Rails 开发环境 Host Authorization 拦截协议切换OPENPROJECT_HTTPStrue、OPENPROJECT_HOST__NAME应用侧以 HTTPS 域名输出所有对外地址SELinux可选setsebool -P httpd_can_network_connect 1放行 Apache 对本地后端的连接整套配置的精髓在于“SSL 在代理层终结、应用层通过头与开关感知协议”这与 OpenProject 打包版/Docker 生产部署的拓扑一致——因此本地调通后迁移到生产环境的配置经验可以直接复用。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表