안녕하세요, 테스트용 VM인 최신 Ubuntu 20.04에 Discourse를 설치하려고 시도하고 있습니다. (CentOS Stream 9, Ubuntu 22.04, openSUSE MicroOS도 시도해 보았습니다.) 저는 프로젝트 초기부터 Discourse에 대한 경험을 가지고 있으며, 현재 마이그레이션을 위해 이를 평가하고 있습니다. 이 경우 도메인은 mydomain.tld가 될 것입니다. (프로덕션 도메인은 포럼만 사용되며 이름에 "forum"이 포함되어 있고 그렇게 잘 알려져 있으므로, discourse.mydomain.tld를 사용하는 것은 절대 원하지 않습니다.) 서브도메인 없이 Discourse를 설치하려는 최근 시도는 모두 실패했습니다. 약 6년(?) 전 서브도메인 없이 Discourse 포럼을 운영했던 적이 있어 과거에는 가능했음을 알고 있습니다. 현재 설치 과정은 성공적으로 완료되는 것처럼 보이지만, 사이트가 로드되지 않습니다. Ubuntu에서는 명시적으로 http://를 입력해도 자동으로 https://로 전환되며, 아예 로드가 되지 않습니다. CentOS와 MicroOS에서는 http://로 Nginx 환영 페이지가 로드되고, https://로는 아무것도 로드되지 않습니다.
위 운영체제에서 동일한 VM으로 서브도메인 discourse.mydomain.tld에 Discourse를 설치하면 Let’s Encrypt 자동 구성을 포함하여 모두 정상적으로 작동합니다. 도메인 등록업체의 DNS 레코드가 정확하고 적절한 rDNS 해석이 이루어지고 있다고 생각합니다. /etc/hosts의 서버 호스트 이름은 127.0.1.1 mydomain.tld mydomain으로 표시되며, discourse-install 스크립트는 도메인 이름 해석 검사를 통과합니다.
discourse-doctor 출력 결과는 다음과 같습니다. 필요하신 분을 위해 전체 discourse-install 로그도 가지고 있습니다:
DISCOURSE DOCTOR Sun Oct 9 13:32:47 UTC 2022
OS: Linux mydomain 5.4.0-125-generic #141-Ubuntu SMP Wed Aug 10 13:42:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Found containers/app.yml
==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=mydomain.tld
SMTP_ADDRESS=mail.mydomain.tld
DEVELOPER_EMAILS=REDACTED
SMTP_PASSWORD=REDACTED
SMTP_PORT=587
SMTP_USER_NAME=admin@mydomain.tld
LETSENCRYPT_ACCOUNT_EMAIL=REDACTED
==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1
DOCKER PROCESSES (docker ps -a)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6f7f53a81db local_discourse/app "/sbin/boot" 10 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
Discourse container app is running
==================== PLUGINS ====================
- git clone https://github.com/discourse/docker_manager.git
No non-official plugins detected.
See https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb for the official list.
========================================
Discourse version at mydomain.tld: NOT FOUND
Discourse version at localhost: NOT FOUND
==================== MEMORY INFORMATION ====================
OS: Linux
RAM (MB): 2029
total used free shared buff/cache available
Mem: 1935 823 547 30 564 934
Swap: 2047 0 2047
==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 38G 8.0G 28G 23% /
==================== DISK INFORMATION ====================
Disk /dev/sda: 38.15 GiB, 40961572864 bytes, 80003072 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6643DB1B-E542-4DE1-A04C-C8EB4DAAD77E
Device Start End Sectors Size Type
/dev/sda1 528384 80003038 79474655 37.9G Linux filesystem
/dev/sda14 2048 4095 2048 1M BIOS boot
/dev/sda15 4096 528383 524288 256M EFI System
Partition table entries are not in disk order.
==================== END DISK INFORMATION ====================
==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Mail test skipped.
==================== DONE! ====================
아니요, 도메인을 등록업체(레지스트라) 간에 이전할 필요는 없지만, 이 가설을 테스트하려면 Hover에서 도메인의 NS 레코드를 업데이트하여 다른 프로바이더의 DNS를 가리키도록 설정해야 합니다. 현재 NS는 ns1.hover.com과 ns2.hover.com으로 설정되어 있습니다.
이 과정은 매우 빠르고 비교적 간편합니다. CloudFlare에 가입한 후 해당 도메인을 추가하려고 하면, 두 개의 새 네임서버가 제공되며 이를 Hover에 입력해야 합니다. Hover 측 설정에 대한 가이드는 여기에서 확인할 수 있습니다:
클라우드플레어(CloudFlare)를 제외하고는 오래전에 아펙스 도메인을 사용했습니다. 잠시 후 제가 직접 테스트해서 다른 함정이 있는지 확인해 보겠습니다. 아펙스 도메인 관련 대부분의 문제는 CNAME 레코드에 적용되지만, 이제 A 레코드를 사용하고 있다는 점을 파악했습니다.
현재 app.yml에서 SSL을 비활성화하고 재빌드했으며, 이제 Discourse가 서브도메인 없이 포트 80에서 로드되고 있습니다.
또한 Hetzner DNS를 권위적 DNS로 사용하도록 변경했습니다. 이것이 문제를 해결한 것인지, 아니면 Let’s Encrypt 인증서 발급 실패 문제 때문이었는지는 확신할 수 없습니다. Let’s Encrypt 인증서를 다시 생성하고 SSL을 재활성화할 수 있게 되면, 한 번 더 재빌드한 후 다시 보고드리겠습니다.
다시 한번 @pfaffman 또는 다른 분들께 질문드립니다. 어리석은 질문일 수 있는데: ./launcher rebuild app을 실행할 때마다 Let’s Encrypt 인증서가 업데이트되나요? 다시 말해, 시행착오를 좀 해보면서 Discourse 인스턴스를 처음부터 다시 세팅하는 것이 아니라 여러 번 연속으로 리빌드(재구축)하면 레이트 리미팅(rate limiting)에 다시 걸릴 수 있나요? 감사합니다.