Discourse(2.7.0.beta1)를 설치하고 이전 Google Groups 게시글을 가져온 후, S3 버킷/키 설정(CDN URL은 제외)을 추가하고 다음을 실행했습니다.
rake uploads:migrate_to_s3
이 작업은 잘 진행되는 것처럼 보였습니다. 모든 이미지가 S3로 업로드되었고, Discourse는 자동으로 생성된 S3 URL을 통해 이미지에 접근하려고 했습니다. URL은 다음과 같은 형태였습니다.
https://ortus-discourse.s3.dualstack.us-west-2.amazonaws.com/original/1X/75747ca17a3ca01f298f836691e1990916bafccb.png
그 후 버킷 이름을 변경(ortus-discourse-uploads)하고, Cloudflare로 설정된 CNAME인
https://communitycdn.ortussolutions.com/
이라는 Cloudfront 배포를 그 앞에 설정했습니다. CNAME, Cloudfront, S3 모두 정상적으로 작동하고 있습니다. 다음과 같은 URL은 버킷 내 이미지가 올바르게 제공되고 있습니다.
https://communitycdn.ortussolutions.com/original/1X/75747ca17a3ca01f298f836691e1990916bafccb.png
그러나 문제는 Discourse가 버킷 이름 변경으로 인해 작동하지 않는 이전 도메인인 ortus-discourse.s3.dualstack.us-west-2.amazonaws.com에 완전히 고정되어 있다는 것입니다. 컨테이너를 재구축하거나 이전 게시글을 다시 생성(rebake)하는 횟수에 관계없이, Discourse가 새로운 CDN URL을 사용하도록 만드는 것이 불가능합니다. 이 문제에 대해 하루 종일 구글링을 했고, 다양한 설정으로 app 컨테이너 내에서 아마도 열두 번쯤 다시 생성(rebake)을 시도해 보았습니다. 모든 포럼 스레드에서는 동일한 조언(재구축 및 다시 생성)만 제시하고 있지만, 이는 작동하지 않습니다.
깨진 것은 게시글 내 이미지뿐만 아니라, <link rel="icon" type="image/png" href=""> 및 사이트 로고도 이전 도메인에 고정되어 S3 CDN URL을 사용하지 않습니다.
현재 S3 설정은 다음과 같습니다.
DISCOURSE_S3_ACCESS_KEY_ID: '********'
DISCOURSE_S3_SECRET_ACCESS_KEY: '******'
DISCOURSE_BACKUP_LOCATION: 's3'
DISCOURSE_ENABLE_S3_UPLOADS: true
DISCOURSE_S3_BUCKET: 'ortus-discourse-uploads'
DISCOURSE_S3_UPLOAD_BUCKET: 'ortus-discourse-uploads'
DISCOURSE_S3_BACKUP_BUCKET: 'ortus-discourse-backups'
DISCOURSE_S3_REGION: 'us-west-2'
DISCOURSE_S3_CDN_URL: https://communitycdn.ortussolutions.com
DISCOURSE_CDN_URL: https://community.ortussolutions.com
게시글에서 다음과 같이 이전 URL을 새로운 URL로 재매핑(remap)하는 것도 시도해 보았습니다.
rake posts:remap["ortus-discourse.s3.dualstack.us-west-2.amazonaws.com","communitycdn.ortussolutions.com"]
그러나 명령어는 0개의 게시글이 영향을 받았다고 보고했습니다.
env 변수나 DB 설정 어디에도 이전 버킷 이름인 ortus-discourse를 참조하는 것이 없으므로, Discourse가 어디서 그 값을 가져오는지 알 수 없습니다. 저는 Discourse 초보자이며 Ruby 개발자가 아니므로, app.yml, 관리자 UI, 그리고 포럼에서 찾은 rake 명령어의 출력 범위보다 더 깊이 살펴본 적이 없습니다.