문제가 한도와는 관련이 없다고 생각합니다. 다시 말해, 잘못된 키나 계정 ID를 입력해도 에러가 발생합니다. 여기서는 다음과 같이 문제를 해결할 수 있습니다: 에러가 발생하면 기존 데이터베이스를 사용하고 재구축을 계속하도록 하는 것입니다. 물론 이 문제의 근본적인 원인을 파악하는 것이 매우 중요합니다.
2일 전에 예제를 만들어 보았더니 에러가 발생했습니다. 한도와는 아무런 관련이 없었습니다. 왜냐하면 그날 처음 재구축을 한 것이었기 때문입니다. 그 후 새로운 키를 만들어 시도해 보니 작동했습니다. 여기에는 다음과 같은 상황이 있습니다: 키를 생성하면 활성화되는 데 시간이 걸립니다. 바로 다시 생성하면 에러가 발생합니다.
네. 특히 인스턴스 간에 공유할 수 있다면, 해당 파일들을 영속적 저장소(persistent storage)에 유지할 수 있으면 좋겠습니다. 저는 traefik 뒤에 동일한 머신에 Discourse 사이트 여러 개를 운영하고 있는데, 이 사이트들이 모두 동일한 mmdb 파일을 공유할 수 있다면 여러 개의 개별 사본을 유지하고 다운로드하는 수고를 덜 수 있을 것입니다. 표준 설치 환경에서도 빌드 간에 파일이 영속적으로 유지될 수 있으면 좋겠습니다. 이미 가능한 것일까요? /var/www/discourse/vendor/data를 영속적인 위치에 마운트하는 것만으로 충분할까요?
아, 그렇군요. GlobalSetting.maxmind_backup_path가 바로 그 용도로 사용되는 것 같습니다. 즉, 어떤 이유로든 maxminddb를 가지고 있다면 DISCOURSE_MAXMIND_BACKUP_PATH를 컨테이너에서 접근 가능한 경로로 설정할 수 있을 것 같습니다.
다시 한번 감사합니다. /var/discourse/shared/discourse_test/data/mmdb를 생성했고, app.yml에는 다음과 같이 수정했습니다:
## The maxmind geolocation IP address key for IP address lookup
## see https://meta.discourse.org/t/-/137387/23 for details
DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb
## The Docker container is stateless; all data is stored in /shared
volumes:
- volume:
host: /var/discourse/shared/discourse_test
guest: /shared
- volume:
host: /var/discourse/shared/discourse_test/log/var-log
guest: /var/log
- volume:
host: /var/discourse/shared/discourse_test/data
guest: /data
DISCOURSE_MAXMIND_BACKUP_PATH를 추가하고 세 번째 볼륨을 추가했습니다.
DISCOURSE_MAXMIND_BACKUP_PATH의 디렉토리가 올바른가요? 이 경로는 컨테이너 내부의 경로를 의미하나요?
이제 DISCOURSE_MAXMIND_ACCOUNT_ID와 DISCOURSE_MAXMIND_LICENSE_KEY를 제거해야 하나요?
Detected MaxMindDB backup (downloaded: 2024-07-17 23:15:02 +0000) at /data/mmdb
Copying MaxMindDB from /data/mmdb to /var/www/discourse/vendor/data
Skip downloading MaxMindDB as it was last downloaded at 2024-07-17 23:15:02 +0000
그대로 두는 것이 좋겠다고 생각합니다. 제 눈에 더 명확한 구성이며, 몇 달이 지나도 여전히 이해할 수 있습니다. 또한 제 용도뿐 아니라 더 다양한 사용 사례에 적용할 수 있는 더 범용적인 구성일 수도 있습니다.
Maxmind에서 mmdb 파일 3개를 다운로드할 때 해당 디렉터리로 복사합니다. 제가 사용하는 스크립트를 조정했을 뿐입니다 (참고로, 다운로드에는 geoipupdate를 사용하는데, 이 도구는 Debian(그리고 아마도 다른 대부분의 Linux 배포판)에서도 패키지로 제공됩니다).
방금 4개의 서로 다른 Discourse 컨테이너를 다시 빌드했는데, 모두 오류 없이 완료되었습니다! 몇 달간 이런 일이 없었거든요. 정말 좋습니다!