MaxMind DB EOL로 인해 업그레이드/재구축 실패

여러분,

누군가 여기서 도움을 줄 수 있기를 바랍니다. EC2의 docker 컨테이너에서 실행 중인 제 포럼의 업그레이드 관련해서 12개월 넘게 문제가 없었습니다.

다음과 같은 시도를 해봤습니다:

  • launcher cleanup을 했지만 디스크 공간 문제는 없습니다
  • 최신 git pull
  • 여러 번의 앱 재빌드
  • discourse-setup도 시도해 봤고, DB 복원을 시도하려 했습니다 :frowning:
  • 서버 재시작
  • apt-get update; apt-get upgrade

로그의 tail은 다음과 같습니다

Done compressing all JS files : 88.88 secs
rake aborted!
SocketError: Failed to open TCP connection to geolite.maxmind.com:443 (getaddrinfo: No address associated with hostname)
/var/www/discourse/lib/final_destination.rb:411:in `safe_session'
/var/www/discourse/lib/final_destination.rb:362:in `safe_get'
/var/www/discourse/lib/final_destination.rb:131:in `get'
/var/www/discourse/lib/file_helper.rb:51:in `download'
/var/www/discourse/lib/discourse_ip_info.rb:30:in `mmdb_download'
/var/www/discourse/lib/tasks/assets.rake:220:in `block (3 levels) in <top (required)>'
/var/www/discourse/lib/tasks/assets.rake:219:in `each'
/var/www/discourse/lib/tasks/assets.rake:219:in `block (2 levels) in <top (required)>'

Caused by:

SocketError: getaddrinfo: No address associated with hostname

/var/www/discourse/lib/final_destination.rb:411:in `safe_session'
/var/www/discourse/lib/final_destination.rb:362:in `safe_get'
/var/www/discourse/lib/final_destination.rb:131:in `get'
/var/www/discourse/lib/file_helper.rb:51:in `download'
/var/www/discourse/lib/discourse_ip_info.rb:30:in `mmdb_download'
/var/www/discourse/lib/tasks/assets.rake:220:in `block (3 levels) in <top (required)>'
/var/www/discourse/lib/tasks/assets.rake:219:in `each'
/var/www/discourse/lib/tasks/assets.rake:219:in `block (2 levels) in <top (required)>'

Tasks: TOP => assets:precompile

(See full trace by running task with --trace)

I, [2019-12-30T18:56:27.608998 #1] INFO -- : Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps
I, [2019-12-30T18:56:27.633923 #1] INFO -- : Terminating async processes
I, [2019-12-30T18:56:27.637383 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/10/bin/postmaster -D /etc/postgresql/10/main pid: 49
I, [2019-12-30T18:56:27.639770 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 166
166:signal-handler (1577732187) Received SIGTERM scheduling shutdown...
2019-12-30 18:56:27.639 UTC [49] LOG: received fast shutdown request
2019-12-30 18:56:27.654 UTC [49] LOG: aborting any active transactions
166:M 30 Dec 2019 18:56:27.666 # User requested shutdown...
166:M 30 Dec 2019 18:56:27.694 * Saving the final RDB snapshot before exiting.
2019-12-30 18:56:27.702 UTC [49] LOG: worker process: logical replication launcher (PID 58) exited with exit code 1
2019-12-30 18:56:27.711 UTC [53] LOG: shutting down
2019-12-30 18:56:27.819 UTC [49] LOG: database system is shut down
166:M 30 Dec 2019 18:56:27.885 * DB saved on disk
166:M 30 Dec 2019 18:56:27.886 # Redis is now ready to exit, bye bye...

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile' failed with return #<Process::Status: pid 507 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake assets:precompile'"]}
fcf17d793c27c4e87616420ead222cc3f4a9fc163f239a5542b1c9a092579b30

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

정말 누군가 이 문제에 대해 도움을 주기를 바랍니다.

감사합니다.

기존 라이선스로 게시된 마지막 파일들을 계속 사용하려는 분들을 위해, archive.org에 모두 저장해 두었습니다.

모든 파일은 MaxMind가 제작했으며 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 배포됩니다.

archive.org URL MD5 해시 Last-Modified 헤더
GeoLite2-City.tar.gz 7ba2c58b4e0eac6c08c6399aebdae26c Tue, 24 Dec 2019 17:46:00 GMT
GeoLite2-Country.tar.gz dc6224c648350d90f344a0c5c3ca5474 Tue, 24 Dec 2019 17:40:42 GMT
GeoLite2-ASN.tar.gz f3c9c5775fd226db6e8098675ff65861 Tue, 24 Dec 2019 14:16:58 GMT
GeoLite2-City-CSV.zip 89e5bf01a970b5668d74cf29a242d546 Tue, 24 Dec 2019 17:45:52 GMT
GeoLite2-Country-CSV.zip f50b518341de54fe48c5e34f13e24e99 Tue, 24 Dec 2019 17:40:41 GMT
GeoLite2-ASN-CSV.zip 463ccd73c104c52547fa50a84fc2f86e Tue, 24 Dec 2019 14:16:58 GMT

정보 페이지 아카이브 (스크린샷)

이제 공식적으로 권장되는 방식으로 데이터베이스를 가져오는 것을 지원합니다:

정기적인 MaxMind 업데이트를 받으려면 Create an account | MaxMind 으로 이동하여 계정을 등록하고 라이선스 키를 생성해야 합니다.

이후 컨테이너를 수정하여 env: 섹션에 이를 포함해야 합니다:

env:
   DISCOURSE_MAXMIND_LICENSE_KEY: ...여기에 키 입력...

이 수정으로 인해 더 이상 시간 폭탄 같은 문제가 발생하지 않습니다. 라이선스 키가 없으면 파일을 다운로드하려고 시도하지 않습니다.

새로운 베이스 이미지에서 업데이트된 DB를 번들링하는 가능성을 MaxMind와 논의 중입니다. 결과에 따라 셀프 호스터를 위한 두 가지 대안이 있습니다:

  1. 라이선스를 추가할 때까지 사용자 프로필 페이지와 관리자 페이지에서 IP 해석이 비활성화됩니다.

  2. 베이스 이미지를 받은 후(즉, ./launcher rebuild app 를 실행한 후) N일 동안만 구식 IP 해석이 제공됩니다.

셀프 호스터의 경우 (1)번이 적용될 가능성이 매우 높습니다.

다른 대안들도 조사하고 있지만, 선택지가 많이 제한되어 있습니다.

웹 서비스를 통해 IP 조회를 수행하는 기능을 코어에 추가하는 것은 정보 제3자 노출을 초래하므로 이를 매우 반대합니다. 실제로는 두 가지 주요 대안만 있으며, 모두 등록이 필요합니다.

@sam 작은 기능 요청이 있습니다. 관리 패널에 MaxMind 라이선스 키를 추가할 수 있는 설정을 추가할 수 있을까요?

가까운 미래에는 가능성이 낮습니다. 이는 전역 설정이며, 멀티사이트에서 사이트별로 설정하는 것은 의미가 없습니다.

maxmind 계정에 가입하려고 할 때 이 오류가 발생하는 분은 저 말고도 다른 사람이 있나요?

계정 가입이 문제없이 완료되었음을 확인했습니다. 계정 관련 문제는 MaxMind에 직접 문의하셔야 하며, 저희에서는 도움을 드릴 수 없습니다.

2.3.8에서 2.3.9로 업그레이드를 시도하고 있지만 아무것도 작동하지 않습니다.

제가 파악한 바로는 관련 오류는 이 토픽에서 논의된 것입니다.

rake aborted!
SocketError: Failed to open TCP connection to geolite.maxmind.com:443 (getaddrinfo: Name or service not known)

app.yml 파일에서 해당 env 플래그에 30, 100, 0 값을 시도해 보았습니다:

DISCOURSE_REFRESH_MAXMIND_DB_DURING_PRECOMPILE_DAYS: 0

하지만 아무런 차이가 없는 것 같습니다(적절하게 인식되고 있는지 의문이 듭니다).

그렇다면 무엇을 더 시도해 볼 수 있을까요?

지난 몇 주 동안 빠른 수정 작업을 위해 노력해 주신 모든 분들께 감사드립니다. Matomo에서도 같은 작업을 수행해야 했는데, 그때는 훨씬 더 힘들었습니다(수동 작업이었으니까요).

이로 인해 질문이 생겼습니다: MaxMind 데이터는 어디에서 사용되고 있나요? 관리자가 사용자의 IP 주소를 확인할 때만 사용되나요? 제가 생각하지 못한 다른 용도가 있을까요?

물론 이미 MaxMind 계정은 가지고 있지만, 긴급하게 처리할 가치가 있는지 궁금합니다.

IP 번호의 지리적 조회를 수행합니다. 최근 API 키를 설정하지 않은 채로 여러 번 설치와 업그레이드를 수행했지만, 재빌드는 정상적으로 작동했습니다. (현재 버전은 베타 10)

또한, 데이터베이스를 다운로드하기 위한 키를 얻는 것이 그렇게 어렵지 않습니다.

다음 주에 discourse-setup을 업데이트하여 키를 설정할 수 있도록 할 예정입니다.

네, 맞습니다. 관리자가 사용자 IP를 조회할 때 사용됩니다. 또한 사용자 설정의 “최근 사용된 기기” 목록과, 다른 위치에서 계정에 로그인한 것이 감지될 때 관리자에게 알림을 보내는 데도 사용됩니다.

방해가 될까 봐 죄송하지만, IP 조회를 비활성화할 수 있는 기능을 계속 유지할 계획인지 궁금해서 여쭤봅니다. 관리자에게 제3자 서비스 구독을 강요하는 것은 좋은 아이디어가 아니라고 생각합니다. 저는 이미 다른 용도로 라이선스 키를 보유하고 있으므로, 여기서는 일반적인 관점에서 말씀드린 것입니다.

라이선스 키를 입력하지 않으면 해당 기능이 비활성화됩니다. 관리자가 설정하도록 강제하는 요소는 없습니다.

또한 혹시 오해가 있을 수 있으니 명확히 하자면, Discourse는 IP 주소를 제3자에게 전송하지 않습니다. Discourse는 MaxMind에서 IP 위치 정보 전체 데이터베이스를 다운로드한 후, 내부적으로 조회를 수행합니다.

좋아요, 설명해 주셔서 감사합니다!

이 부분을 수정합니다 … 이는 안정판으로 역적용되었습니다.