최신 업데이트 후 자체 호스팅 Discourse에 대한 보안 연결이 안 됨

최근 재빌드 이후 셀프호스트 인스턴스에서도 이 문제를 겪고 있습니다. 재빌드 자체를 제외하고는 구성 변경 사항이 없습니다. SSH를 통해 서버에 접근할 수 있으며, ./launcher logs app 명령의 출력 결과는 다음과 같습니다.


run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/install-ssl
Started runsvdir, PID is 45
ok: run: redis: (pid 55) 0s
supervisor pid: 53 unicorn pid: 76

docker ps 출력을 통해 Docker 컨테이너가 실행 중임을 확인할 수 있습니다. (컨테이너 ID는 생략함)

local_discourse/app “/sbin/boot” 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp app

강조하고 싶은 중요한 점은, 특정 발급 기관이 필요하기 때문에 인증서에 LetsEncrypt를 사용하지 않는다는 것입니다. 그러나 이 인증서는 변경된 적이 없으며, 재빌드 전에는 정상적으로 작동하고 있었습니다 (이 방식으로 발급된 인증서는 우리의 인스턴스에서 수년간 정상적으로 작동해 왔습니다).

nginx가 기대하는 IP(로컬 IP 127.0.0.1)와 컨테이너에 할당된 IP 사이에 불일치가 있는 것으로 보입니다. 컨테이너가 브리지 모드로 실행되고 있는 것 같습니다. 다음은 컨테이너의 네트워크 설정입니다. (참고로 이 로그는 금요일에 이 문제를 처음 발견하고 조사를 시작했을 때의 것입니다)

"Labels": {
    "org.opencontainers.image.created": "2025-07-25T21:40:36+00:00"
},
"NetworkSettings": {
    "Bridge": "",
    "SandboxID": "[REDACTED]",
    "SandboxKey": "[REDACTED]",
    "Ports": {
        "443/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "443"
            },
            {
                "HostIp": "::",
                "HostPort": "443"
            }
        ],
        "5432/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "5432"
            },
            {
                "HostIp": "::",
                "HostPort": "5432"
            }
        ],
        "80/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "80"
            },
            {
                "HostIp": "::",
                "HostPort": "80"
            }
        ]
    },
    "HairpinMode": false,
    "LinkLocalIPv6Address": "",
    "LinkLocalIPv6PrefixLen": 0,
    "SecondaryIPAddresses": null,
    "SecondaryIPv6Addresses": null,
    "EndpointID": "[REDACTED]",
    "Gateway": "172.17.0.1",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "IPAddress": "172.17.0.2",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "MacAddress": "[REDACTED]",
    "Networks": {
        "bridge": {
            "IPAMConfig": null,
            "Links": null,
            "Aliases": null,
            "MacAddress": "[REDACTED]",
            "DriverOpts": null,
            "GwPriority": 0,
            "NetworkID": "[REDACTED]",
            "EndpointID": "[REDACTED]",
            "Gateway": "172.17.0.1",
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "DNSNames": null
        }
    }
}