你是我唯一的希望。我正在拔头发。我尝试做一件非常简单的事情,将Woodpecker CI
实例与Gitea
实例配对。
- 我有一个在单独的主机上运行的 Gitea。
- 我在 Gitea 的用户配置中创建了一个用于 Woodpecker 的 oauth2 应用程序。
- 我有一个
Woodpecker CI
为 Gitea 配置的实例,实际上可以通过 https 访问。它有效,有一个“登录”按钮。 - 我点击它。它将我重定向到 Gitea。我登录Gitea并在Gitea中授权Woodpecker。
- 然后,我通过 Gitea 应用程序配置中的重定向 URI 重定向回 Woodpecker,突然间,我
HTTP ERROR 502
从 Woodpecker 实例获取,无法从那里继续。
有关设置的一些信息。Woodpecker server
我在 LXD/LXC 容器中运行二进制文件。它位于反向代理后面:Caddy
。此503
错误在 Caddy 的日志中留下痕迹:
Jun 19 23:01:37 woodpecker-server caddy[158]: {"level":"error","ts":1687208497.326067,"logger":"http.handlers.reverse_proxy","msg":"reading from backend","error":"unexpected EOF"}
Jun 19 23:01:37 woodpecker-server caddy[158]: {"level":"error","ts":1687208497.326134,"logger":"http.handlers.reverse_proxy","msg":"aborting with incomplete response","error":"unexpected EOF"}
啄木鸟的原木里什么也没有。
这是我的啄木鸟的配置:
WOODPECKER_HOST=[REDACTED]
WOODPECKER_ADMIN=[REDACTED]
WOODPECKER_LOG_LEVEL=warn
WOODPECKER_LETS_ENCRYPT=false
WOODPECKER_GITEA=true
WOODPECKER_GITEA_URL=[REDACTED]
WOODPECKER_GITEA_CLIENT=[REDACTED]
WOODPECKER_GITEA_SECRET=[REDACTED]
WOODPECKER_GITEA_SKIP_VERIFY=false
Caddyfile
[REDACTED] {
reverse_proxy localhost:8000
}
# caddy version
v2.6.4 h1:2hwYqiRwk1tf3VruhMpLcYTg+11fCdr8S3jhNAdnPy8=
# woodpecker-server --version
woodpecker-server version 0.15.9
令我困惑的是,啄木鸟服务器登录页面似乎可以工作。它将我重定向到我的 Gitea,它允许我授权啄木鸟并将我重定向回啄木鸟的https://[HOST]/authorize
页面。所以,看起来所有数据都是正确的。但由于某种原因,在这一步之后它无法提供正确的响应。
我确信 Gitea+Woodpecker 设置非常常见。有谁知道这可能是什么原因?看什么?
更多信息: Gitea 位于 nginx 后面,其配置为:
server {
listen 80;
listen 443 ssl;
server_name [REDACTED];
ssl_certificate /etc/letsencrypt/live/[REDACTED]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[REDACTED]/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
location / {
client_max_body_size 512M;
proxy_pass http://unix:/run/gitea/gitea.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}