GitLab 无法访问 docker 容器中的 PlantUml

问题描述 投票:0回答:2

所以我在 Ubuntu 20.04 上安装并设置了 GitLab EE 服务器(Omnibus)。 接下来,按照 GitLab PlantUML 集成 上的官方文档,我在一个 docker 容器中启动了 PlantUML,这是我使用以下命令完成的:

docker run -d --name plantuml -p 8084:8080 plantuml/plantuml-server:tomcat

接下来,我还配置了 /etc/gitlab/gitlab.rb 文件并添加了下一行用于重定向,因为我的 GitLab 服务器正在使用 SSL:

nginx['custom_gitlab_server_config'] = "location /-/plantuml/ { \n    proxy_cache off; \n    proxy_pass  http://plantuml:8080/; \n}\n"

在管理面板的 GitLab 服务器 GUI 中,在设置 -> 常规中,当我展开 PlantUML 时,我将 PlantUML URL 的值设置为(两种方式):

第一种方法

https://HOSTNAME:8084/-/plantuml

然后,当尝试通过此地址(https://HOSTNAME:8084/-/plantuml)通过浏览器访问它时,我得到

此站点无法提供安全连接。

HOSTNAME 发送了无效的响应。

ERR_SSL_PROTOCOL_ERROR



第二种方法: 我还尝试在设置 -> 常规 -> PlantUML -> PlantUML URL:

中尝试不同的值

https://HOSTNAME/-/plantuml

然后,当尝试通过此地址(https://HOSTNAME/-/plantuml)通过浏览器访问它时,我得到

502

糟糕,GitLab 的响应时间太长了



在这两种情况下,当我使用

gitlab-ctl tail
跟踪日志时,我得到相同的错误:

[crit] *901 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: CLIENT_IP, server: 0.0.0.0:443
[error] 1123593#0: *4 connect() failed (113: No route to host) while connecting to upstream

我的问题是以上两种方式中哪一种是正确的,可以使用上述配置访问 PlantUML,我是否缺少任何配置?

docker gitlab docker-container plantuml gitlab-omnibus
2个回答
2
投票

我认为问题是您在 docker 容器中运行 plantuml,然后尝试通过 gitlab(在本地主机上)使用名称访问它。

为了检查是否是问题所在,请更改

proxy_pass  http://plantuml:8080/

proxy_pass http://localhost:8080/

然后用第一种方法再试一次。

您的第二种方法似乎缺少 url 中的容器端口。


0
投票

你是对的。 PlantUML TomCat 或 Jetty 有同样的问题,只提供 HTTP 而不是 HTTPS。 如果您需要 HTTPS,则由 nginx 提供该层。

这是我本地 plantuml 的 Nginx 配置。我知道你想要与 gitlab 的整体集成。也许因为这是 6 个月大,你找到了解决方案。

无论如何,您可以看到 nginx 正在处理 ssl,而 proxy_pass 仅通过 http。

upstream jetty {  server 127.0.0.1:8084 weight=100 max_fails=5 fail_timeout=5;}
server {
    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl; # managed by Certbot

    listen 80;
    listen [::]:80;
     
    server_name plantuml.mycompany.example;
    
    access_log /var/log/nginx/plantuml.mycompany.example.access.log;
    error_log /var/log/nginx/plantuml.mycompany.example.error.log;
    
    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/mycompany.example-0001/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mycompany.example-0001/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
     
    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    location / {
     proxy_set_header X-Forwarded-Host $host;
     proxy_set_header X-Forwarded-Server $host;
     proxy_pass http://jetty/;
     sub_filter '"http://jetty/'  '"/';
     sub_filter_once off;
    }
}

如果您找到解决方案,请分享。

© www.soinside.com 2019 - 2024. All rights reserved.