저장용 Amazon S3 및 CDN용 CloudFront 설정

,

시작하기

다음 항목이 필요합니다:

  1. app.yml 접근 권한이 있는 Discourse 인스턴스
  2. AWS 계정

네이밍 전략

실수를 할 수 있는 곳이 많습니다. 자신에게(그리고 다른 사람들에게도) 의미가 있는 네이밍 규칙 전략을 사용하면 특히 여러 Discourse 인스턴스를 구성할 때 문제 해결에 도움이 됩니다.

  • IAM 사용자: your-iam-user
  • 정책: s3-discourse-policy-your-iam-user
  • 백업 버킷: yourdomain-subdomain-backups
  • 업로드 버킷: yourdomain-subdomain-uploads
  • 분배 CDN: cdn-yourdomain-subdomain 및 s3-yourdomain-subdomain-uploads

선택 사항: 구성 프로세스 버킷: a-origin-config-bucket

AWS 구성

반대로 지시되지 않는 한 AWS 구성 페이지에서 기본 설정을 사용하세요.

S3 이름, 이름, 이름

  • Discourse 인스턴스 도메인: subdomain.yourdomain.tld (www.yourdomain.tld 포함)
  • IAM 사용자: yourdomain-subdomain (아펙스/루트 도메인인 경우 yourdomain-discourse, yourdomain-forum 또는 Discourse: yourdomain-tld-www)
  • IAM 사용자용 정책: s3-discourse-policy-yourdomain-subdomain
  • 업로드 버킷: yourdomain-subdomain-uploads 참고: 버킷 > 권한 > 액세스 제어 목록(ACL) > 액세스 제어 목록(ACL) > 수혜자에서 "모두(공개 액세스)"를 "읽기"로 설정하는 것을 잊지 마세요.
  • 백업 버킷: yourdomain-subdomain-backups
  • 분배 CDN: cdn-yourdomain-subdomain 및 s3-yourdomain-subdomain-uploads
  • 구성 프로세스 버킷: a-origin-config-bucket

IAM 사용자

  1. IAM > 사용자 > “사용자 만들기” 선택
  2. IAM > 사용자 > 사용자 만들기 > 사용자 세부 정보 지정 > 사용자 세부 정보 > 사용자 이름 > 이름 입력 (예: your-iam-user) > “다음” 선택
  3. IAM > 사용자 > 사용자 만들기 > 권한 설정 > 권한 옵션 > “정책 직접 연결” 선택 > “정책 만들기” 선택 > 정책 만들기 페이지가 열립니다. (대신 정책을 먼저 Policies에서 생성한 후, 사용자 생성 시 "권한 정책"에서 선택할 수도 있습니다.)
  4. IAM > 사용자 > 사용자 만들기 > 권한 설정 > 권한 정책 > 유형 드롭다운 선택기로 필터링 > “고객 관리” 선택 > 방금 생성된 정책 선택 > “다음” 선택 > “사용자 만들기” 선택
  5. IAM > 사용자 > your-iam-user > 보안 자격 증명 > 액세스 키 > “액세스 키 만들기” 선택
  6. IAM > 사용자 > your-iam-user > 액세스 키 만들기 > 액세스 키 모범 사례 및 대안 > “기타” 선택 > “다음” 선택
  7. IAM > 사용자 > your-iam-user > 액세스 키 만들기 > 설명 태그 설정 > “액세스 키 만들기” 선택
  8. IAM > 사용자 > your-iam-user > 액세스 키 만들기 > 액세스 키 검색 > Discourse app.yml에서 사용하기 위해 액세스 키와 시크릿 액세스 키를 안전하게 저장 > “완료” 선택

정책

  1. s3-discourse-policy-your-iam-user.txt 파일을 자신의 IAM 사용자 이름과 버킷 이름으로 수정하세요.
  2. IAM > 정책 > 정책 만들기로 이동
  3. IAM > 정책 > 정책 만들기 > 권한 지정 > 정책 편집기 > 정책 편집기에서 “JSON” 선택 > s3-discourse-policy-your-iam-user.txt에서 정책을 복사하여 JSON 편집기에 붙여넣기 (기존 JSON을 복사하여 덮어쓰기) > “다음” 선택
  4. IAM > 정책 > 정책 만들기 > 검토 및 생성 > 정책 세부 정보 > 정책 이름 > 정책 이름 입력 (예: s3-discourse-policy-your-iam-user) > “다음” 선택
  5. IAM 사용자로 이동: 4단계. IAM > 사용자 > 사용자 만들기로 이동하여 사용자 생성 프로세스를 계속하세요

Amazon S3 버킷

백업 버킷, 업로드 버킷, 그리고 선택적이지만 유용한 구성 프로세스 버킷을 생성하고 구성하세요.

백업 버킷 생성 yourdomain-subdomain-backups

  1. Amazon S3 버킷으로 이동 > “버킷 생성” 선택
  2. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > “일반 목적” 선택 확인
  3. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > 버킷 이름 > 백업 버킷 이름 입력 (예: yourdomain-subdomain-backups)
  4. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > “ACL 비활성화(권장됨)” 선택 확인
  5. Amazon S3 > 버킷 > 버킷 생성 > 이 버킷에 대한 공개 액세스 차단 설정 > “모든 공개 액세스 차단” 선택 해제 후, “새로운 공개 버킷 또는 액세스 포인트 정책을 통해 부여된 버킷 및 객체에 대한 공개 액세스 차단” 및 “모든 공개 버킷 또는 액세스 포인트 정책을 통해 부여된 버킷 및 객체에 대한 공개 및 계정 간 액세스 차단” 선택
  6. Amazon S3 > 버킷 > 버킷 생성 > 이 버킷에 대한 공개 액세스 차단 설정 > 모든 공개 액세스 차단을 끄면 이 버킷 및 내부 객체가 공개될 수 있음 > “현재 설정이 이 버킷 및 내부 객체가 공개될 수 있음을 확인합니다.” 선택
  7. Amazon S3 > 버킷 > 버킷 생성 > 버킷 버전 관리 > 버킷 버전 관리 > “사용” 선택 정보: 버킷 버전 관리는 "라이프사이클 규칙"에 필요합니다
  8. Amazon S3 > 버킷 > 버킷 생성 > “버킷 생성” 선택

라이프사이클 규칙 구성

백업 유지 규칙

  1. Amazon S3 > 버킷 > 방금 생성된 버킷 선택 (예: yourdomain-subdomain-backups)
  2. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > “라이프사이클 규칙 만들기” 선택
  3. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 라이프사이클 규칙 이름 > 규칙 이름 입력 (예: backup retention)
  4. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 규칙 범위 선택 > “버킷의 모든 객체에 적용” 선택
  5. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 규칙 범위 선택 > 버킷의 모든 객체에 적용 > “이 규칙이 버킷의 모든 객체에 적용됨을 확인합니다.” 선택
  6. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 라이프사이클 규칙 작업 > “객체의 비현재 버전 간 스토리지 클래스 전환”, “객체의 현재 버전 만료”, “객체의 비현재 버전 영구 삭제” 선택
  7. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 라이프사이클 규칙 작업 > 전환은 요청당 과금됨 > “이 라이프사이클 규칙이 요청당 전환 비용이 발생함을 확인합니다.” 선택
  8. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 간 스토리지 클래스 전환 > 스토리지 클래스 전환 선택 > “Glacier Instant Retrieval” 선택
  9. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 간 스토리지 클래스 전환 > 객체가 비현재 상태가 된 후 일수 > “1” 입력
  10. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 현재 버전 만료 > 객체 생성 후 일수 > “7” 또는 15 또는 30 또는 ??? 입력
  11. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 영구 삭제 > 객체가 비현재 상태가 된 후 일수 > “91” 입력
  12. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > "전환 및 만료 작업 검토"가 올바른지 확인 > “규칙 생성” 선택

청소 규칙

  1. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > “라이프사이클 규칙 만들기” 선택
  2. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 라이프사이클 규칙 이름 > 규칙 이름 cleanup 입력
  3. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 규칙 범위 선택 > “버킷의 모든 객체에 적용” 선택
  4. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 규칙 범위 선택 > 버킷의 모든 객체에 적용 > “이 규칙이 버킷의 모든 객체에 적용됨을 확인합니다.” 선택
  5. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 라이프사이클 규칙 작업 > “객체의 비현재 버전 영구 삭제” 및 “만료된 객체 삭제 마커 또는 불완전한 멀티파트 업로드 삭제” 선택
  6. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 영구 삭제 > 객체가 비현재 상태가 된 후 일수 > “92” 입력
  7. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 영구 삭제 > 만료된 객체 삭제 마커 또는 불완전한 멀티파트 업로드 삭제 > 만료된 객체 삭제 마커 > “만료된 객체 삭제 마커 삭제” 선택
  8. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 영구 삭제 > 만료된 객체 삭제 마커 또는 불완전한 멀티파트 업로드 삭제 > 불완전한 멀티파트 업로드 > “불완전한 멀티파트 업로드 삭제” 선택
  9. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > 객체의 비현재 버전 영구 삭제 > 만료된 객체 삭제 마커 또는 불완전한 멀티파트 업로드 삭제 > 불완전한 멀티파트 업로드 > 불완전한 멀티파트 업로드 삭제 > 일수 > “3” 또는 ??? 입력
  10. Amazon S3 > 버킷 > yourdomain-subdomain-backups > 관리 > 라이프사이클 구성 > "전환 및 만료 작업 검토"가 올바른지 확인 > “규칙 생성” 선택

업로드 버킷 생성 yourdomain-subdomain-uploads

  1. Amazon S3 > 버킷으로 이동 > “버킷 생성” 선택
  2. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > “일반 목적” 선택 확인
  3. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > 버킷 이름 > 업로드 버킷 이름 입력 (예: yourdomain-subdomain-uploads)
  4. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > “ACL 활성화” 선택
  5. Amazon S3 > 버킷 > 버킷 생성 > 이 버킷에 대한 공개 액세스 차단 설정 > “모든 공개 액세스 차단” 선택 해제 후, “새로운 공개 버킷 또는 액세스 포인트 정책을 통해 부여된 버킷 및 객체에 대한 공개 액세스 차단” 및 “모든 공개 버킷 또는 액세스 포인트 정책을 통해 부여된 버킷 및 객체에 대한 공개 및 계정 간 액세스 차단” 선택
  6. Amazon S3 > 버킷 > 버킷 생성 > 이 버킷에 대한 공개 액세스 차단 설정 > 모든 공개 액세스 차단을 끄면 이 버킷 및 내부 객체가 공개될 수 있음 > “현재 설정이 이 버킷 및 내부 객체가 공개될 수 있음을 확인합니다.” 선택
  7. Amazon S3 > 버킷 > 버킷 생성 > “버킷 생성” 선택
  8. Amazon S3 > 버킷 > 버킷 화면 > 방금 생성된 버킷 선택 (예: yourdomain-subdomain-uploads)
    분배 #2 생성 후 단계 9로 돌아오세요
  9. Amazon S3 > 버킷 > yourdomain-subdomain-uploads > 권한 > 버킷 정책 > 편집 선택 > 분배 #2 생성의 JSON 붙여넣기 11. CloudFront > 분배 > 분배 ID > 오리진 편집 > 오리진 액세스 제어 > “변경 사항 저장” 선택
  10. Amazon S3 > 버킷 > yourdomain-subdomain-uploads > 권한 > 액세스 제어 목록(ACL) > 편집 선택 > 모두(공개 액세스) > “읽기” 선택 > 모두 또는 인증된 사용자 그룹의 수혜자에게 액세스를 허용하면 전 세계 누구나 이 버킷의 객체에 액세스할 수 있습니다. “이 변경 사항이 내 객체와 버킷에 미치는 영향을 이해합니다.” 선택 > “변경 사항 저장” 선택

구성 프로세스 버킷 생성 a-origin-config-bucket
분배 #1 구성 프로세스 동안 사용할 버킷을 생성합니다. 버킷은 구성 프로세스 중에 삭제될 초기 오리진으로만 일시적으로 사용되므로 이름과 구성은 중요하지 않습니다.
1. Amazon S3 > 버킷으로 이동 > “버킷 생성” 선택
2. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > “일반 목적” 선택 확인
3. Amazon S3 > 버킷 > 버킷 생성 > 일반 구성 > 버킷 이름 > 업로드 버킷 이름 입력 (예: a-origin-config-bucket)
4. 구성 페이지를 통해 진행하며 “버킷 생성” 선택

CloudFront 분배

AWS S3 Cloudfront 분배를 두 개 생성합니다. 하나는 웹사이트 자산을 제공하고, 다른 하나는 업로드 버킷 자산을 제공합니다.

분배 #1 생성

  분배 #1
    DISCOURSE_CDN_URL
      분배 이름: cdn-yourdomain-subdomain
      오리진: subdomain.yourdomain.tld
      분배 도메인 이름(Cloudfront URL): AWS-assigned.cloudfront.net
      대체 도메인 이름: discourse-cdn.yourdomain.tld
  1. CloudFront > 분배로 이동 > “생성” 선택
  2. CloudFront > 분배 > 분배 생성 > 플랜 선택 > “사용량 기반 과금” 선택 > “다음” 선택
  3. CloudFront > 분배 > 분배 생성 > 시작하기 > 분배 옵션 > 분배 이름 > 분배 이름 입력 (예: cdn-yourdomain-subdomain)
  4. CloudFront > 분배 > 분배 생성 > 시작하기 > 분배 옵션 > 설명 - 선택 사항 > “cdn-yourdomain-subdomain” 입력 (선택 사항이지만 가시성에 도움이 됨)
  5. CloudFront > 분배 > 분배 생성 > 시작하기 > 분배 옵션 > 분배 유형 > “단일 웹사이트 또는 앱” 선택 확인 > “다음” 선택
  6. CloudFront > 분배 > 분배 생성 > 오리진 지정 > 오리진 유형 > “기타” 선택 AWS 또는 비-AWS 오리진을 공개적으로 해석 가능한 URL을 통해 참조하세요.
  7. CloudFront > 분배 > 분배 생성 > 오리진 지정 > 오리진 > 사용자 지정 오리진 > 도메인 입력 (예: subdomain.yourdomain.tld)
  8. CloudFront > 분배 > 분배 생성 > 오리진 지정 > 설정 > 캐시 설정 > “캐시 설정 사용자 지정” 선택
  9. CloudFront > 분배 > 분배 생성 > 오리진 지정 > 설정 > 캐시 설정 > 캐시 정책 > 드롭다운에서 “CachingOptimized” 선택 > “다음” 선택
  10. CloudFront > 분배 > 분배 생성 > 보안 활성화 > 이 가이드를 위한 선택 사항 - > “보안 보호 기능 비활성화” 선택 > “다음” 선택
  11. CloudFront > 분배 > 분배 생성 > 검토 및 생성 > “분배 생성” 선택
    브랜드 CDN URL을 사용하는 경우 → 단계 12
  12. CloudFront > 분배 > 분배 ID > 대체 도메인 이름 > “도메인 추가” 선택
  13. CloudFront > 분배 > 분배 ID > 대체 도메인 이름 > 도메인 추가 > 도메인 구성 > 도메인 > 제공할 도메인 > DISCOURSE_CDN_URL 입력 (예: discourse-cdn.yourdomain.tld) > “다음” 선택

미완료: 대체 도메인 이름: discourse-cdn.yourdomain.tld

분배 #2 생성

  분배 #2
    DISCOURSE_S3_CDN_URL
      분배 이름: s3-yourdomain-subdomain-uploads
      오리진: yourdomain-subdomain-uploads
      분배 도메인 이름(Cloudfront URL: AWS-assigned.cloudfront.net
      대체 도메인 이름: s3-cdn.yourdomain.tld
  1. CloudFront > 분배 > 분배 생성
  2. CloudFront > 분배 > 분배 생성 > 플랜 선택 > “사용량 기반 과금” 선택 > “다음” 선택
  3. CloudFront > 분배 > 분배 생성 > 시작하기 > 분배 옵션 > 분배 이름 > 분배 이름 입력 (예: s3-yourdomain-subdomain-uploads)
  4. CloudFront > 분배 > 분배 생성 > 시작하기 > 분배 옵션 > 설명 - 선택 사항 > “s3-yourdomain-subdomain-uploads” 입력 (선택 사항이지만 가시성에 도움이 됨)
  5. CloudFront > 분배 > 분배 생성 > 시작하기 > 분배 옵션 > 분배 유형 > “단일 웹사이트 또는 앱” 선택 확인 > “다음” 선택
  6. CloudFront > 분배 > 분배 생성 > 오리진 지정 > 오리진 유형 > “Amazon S3” 선택 확인
  7. CloudFront > 분배 > 분배 생성 > 오리진 지정 > 오리진 > S3 오리진 > “S3 탐색” 선택 > 업로드 버킷 “yourdomain-subdomain-uploads” 선택 > “선택” 선택 > “다음” 선택
  8. CloudFront > 분배 > 분배 생성 > 보안 활성화 > 이 가이드를 위한 선택 사항 - > “보안 보호 기능 비활성화” 선택 > “다음” 선택
  9. CloudFront > 분배 > 분배 생성 > 검토 및 생성 > “검토 및 생성: 올바른지” 확인 > “분배 생성” 선택 → 방금 생성된 분배 정보 페이지가 CloudFront > 분배 > 분배 ID에서 열려야 함
  10. CloudFront > 분배 > 분배 ID > 오리진 > 오리진 선택 > “편집” 선택
  11. CloudFront > 분배 > 분배 ID > 오리진 편집 > 오리진 액세스 제어 > ! 이 정책을 사용하여 CloudFront 액세스를 허용해야 합니다… > “정책 복사” 선택 > 업로드 버킷 생성 9. Amazon S3 > 버킷 > yourdomain-subdomain-uploads > 권한 > 버킷 정책으로 이동

미완료: 대체 도메인 이름: s3-cdn.yourdomain.tld

Discourse 관리자

현재 Discourse 버전 기준: 2025.12.0-latest

Discourse 관리자 UI에서 다음 변경 사항을 수행하세요

백업 설정 /admin/backups/settings

  1. 최대 백업 수 > 로컬에 유지할 백업 수 입력
  2. 업로드 포함 백업 > “예약된 백업에 업로드 포함. 이 기능을 비활성화하면 데이터베이스만 백업됩니다.” 선택

S3 설정 /admin/site_settings/category/all_results?filter=S3

  1. S3 모든 업로드에 CDN URL 사용 > “이미지만이 아닌 S3에 업로드된 모든 파일에 CDN URL 사용.” 선택 (Discourse는 기본적으로 선택 해제됨)

구성 편집 (app.yml) 브랜드 없는 URL

브랜드 URL 또는 브랜드 없는 Cloudfront URL을 위해 아래 변경 사항을 수행하여 app.yml을 편집하세요.

Discourse 브랜드 없는 URL

브랜드 없는 Cloudfront 분배에 이것을 사용하세요. DISCOURSE_S3_REGION이 다를 수 있습니다.
DISCOURSE_CDN_URL: https://amazonassigned.cloudfront.net

S3 스토리지 구성 (브랜드 없음)

  ## S3 스토리지 구성
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION:  us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: key obfuscated
  DISCOURSE_S3_SECRET_ACCESS_KEY: key obfuscated
  DISCOURSE_S3_CDN_URL: https://amazonassigned.cloudfront.net
  DISCOURSE_S3_BUCKET: your-bucket-name-uploads
  DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name-backups
  DISCOURSE_BACKUP_LOCATION: s3

Discourse 브랜드 URL

DNS 구성

CDN에 yourdomain.com 기반 URL을 사용하려면 일부 DNS 변경 사항이 필요하며 CDN URL을 조정해야 합니다.

팁: 각 Cloudfront 분배의 "대체 도메인 이름"에 discourse-cdn.yourdomain.com과 s3-cdn.yourdomain.com을 도메인 이름으로 추가하는 것을 잊지 마세요.

도메인 브랜드 Cloudfront 분배를 사용하려면 DNS 구성.

DISCOURSE_CDN_URL

기존 레코드:	A   discourseinstance.yourdomain.com   인스턴스 IP  참고: 이것은 기존 Discourse 설치 IP입니다.
새 레코드:		A   discourse-cdn-cloudfront.yourdomain.com   인스턴스 IP
새 레코드: 		CNAME discourse-cdn.yourdomain.com  ->   amazonassigned.cloudfront.net

DISCOURSE_S3_CDN_URL

새 레코드:		CNAME s3-cdn-cloudfront.yourdomain.com  ->   amazonassigned.cloudfront.net
새 레코드: 	CNAME  s3-cdn.yourdomain.com  ->   s3-cdn-cloudfront.yourdomain.com

구성 편집 (app.yml) 브랜드 URL

DNS 변경 사항이 완료되면 아래 변경 사항을 수행하여 app.yml을 편집할 수 있습니다.

Cloudfront 분배에 도메인 CNAME을 사용하는 경우 DISCOURSE_CDN_URL 및/또는 DISCOURSE_S3_CDN_URL을 변경하세요 (amazonassigned.cloudfront.net).

DISCOURSE_CDN_URL: https://discourse-cdn.yourdomain.com

S3 스토리지 구성 (브랜드 있음)

## S3 스토리지 구성
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION:  us-east-1
DISCOURSE_S3_ACCESS_KEY_ID: key obfuscated
DISCOURSE_S3_SECRET_ACCESS_KEY: key obfuscated
DISCOURSE_S3_CDN_URL: https://s3-cdn.yourdomain.com
DISCOURSE_S3_BUCKET: your-bucket-name-uploads
DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name-backups
DISCOURSE_BACKUP_LOCATION: s3

추가 구성 편집 (app.yml)

브랜드 또는 Cloudfront URL 중 어떤 접근 방식을 사용하든, 이후 재빌드 동안 모든 것이 최신 상태를 유지하도록 하기 위해 아래 after_assets_precompile 섹션이 필요합니다.

  hooks:
    after_code:
      - exec:
          cd: $home/plugins
          cmd:
            - git clone https://github.com/discourse/docker_manager.git
            -you may have more plugins
    after_assets_precompile:
      - exec:
          cd: $home
          cmd:
            - sudo -E -u discourse bundle exec rake s3:upload_assets
            - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

./launcher rebuild app을 사용하여 인스턴스를 재빌드하세요.

./launcher rebuild app이 성공적으로 완료되면 다음 rake를 실행하세요.

./launcher enter app

rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

rake가 오류 없이 완료되면 준비가 된 것입니다.

일부 사이트에서는 s3:upload_assets와 관련된 오류로 인해 초기 재빌드가 실패할 수 있습니다. 이 경우,

업로드 버킷의 “읽기” 설정을 확인하세요. 올바르게 설정되어 있다면,

after_assets_precompile 섹션을 주석 처리하거나 제거하세요:

  after_assets_precompile:
      - exec:
          cd: $home
          cmd:
            - sudo -E -u discourse bundle exec rake s3:upload_assets
            - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

그리고 ./launcher rebuild app을 다시 실행하세요. 그런 다음 "rake s3:upload_assets"와 "rake s3:expire_missing_assets"를 실행하세요.

두 rake 모두 오류 없이 완료되면 after_assets_precompile 섹션을 다시 추가하거나 주석 해제하고, 다시 재빌드한 후 위에 나열된 모든 rake를 실행하세요.

rake 중 하나에서 오류가 발생하거나 재빌드가 다시 실패하면 app.yml 및/또는 AWS S3 구성 및/또는 DNS 레코드에 문제가 있는 것입니다. 즐거운 탐험을! :slight_smile:

s3-discourse-policy-your-iam-user.txt (697 Bytes)

1개의 좋아요

AWS 지원팀의 답변: Cleanup 규칙 접근 방식 확인

제안하신 Lifecycle 규칙 구성을 검토하였으며, 백업 버킷 관리에 대한 AWS 모범 사례를 따르는 잘 설계된 구성임을 기쁘게 확인해 드립니다.

========== Lifecycle 규칙 평가 ==========

귀하의 구성은 우수하며, 백업 정리와 관련된 주요 영역을 다루고 있습니다:

• 비현재 버전 정리 (92일): 이는 저장 비용과 복구 필요성을 균형 있게 맞추는 합리적인 보존 기간입니다. 92일 보존은 백업 검증에 충분한 시간을 제공하면서도 무기한 저장 공간 축적을 방지합니다.

• 만료된 삭제 마커 제거: 고립된 삭제 마커를 자동으로 정리하도록 올바르게 구성되어 있어, 저장 비용 및 버킷 성능 최적화에 도움이 됩니다.

• 미완료 멀티파트 업로드 정리 (3일): 3일 설정은 최적입니다. 실패한 업로드로 인한 저장 공간 낭비를 방지할 만큼 짧으면서도, 합법적인 대규모 백업 작업을 처리할 만큼 충분히 길게 설정되어 있습니다.

• 적용 범위: "버킷 내 모든 객체"에 적용하는 것은 모든 콘텐츠가 동일한 라이프사이클 패턴을 따르는 전용 백업 버킷에 적합합니다.

AWS 지원팀의 답변: 백업 버킷 라이프사이클 구성

백업 버킷용 S3 라이프사이클 구성 검토

완전한 라이프사이클 구성 설정을 분석하였으며, “backup retention” 규칙이 잘 구조화되어 있고 백업 관리에 대한 AWS 모범 사례를 따르고 있음을 확인했습니다.

조사 결과를 통한 주요 발견 사항:

  • 버킷에는 효과적으로 함께 작동하는 두 개의 보완적인 라이프사이클 규칙이 있습니다.
  • “backup retention” 규칙은 적절한 시간표에 따라 현재 및 비현재 버전을 올바르게 처리합니다.
  • 구성에는 비현재 버전을 위한 비용 효율적인 저장 전환이 포함되어 있습니다.
  • 모든 규칙 구성 요소가 적절한 시간 매개변수로 올바르게 구성되었습니다.
  • 버킷은 us-east-1에 적절한 권한과 함께 올바르게 설정되어 있습니다.

구성 평가:

귀하의 “backup retention” 규칙은 백업 객체의 라이프사이클을 효과적으로 관리합니다:

  • 1일 후 비현재 버전을 Glacier Instant Retrieval로 전환 (비용 최적화)
  • 7일 후 현재 버전 만료 (정기 백업에 적합)
  • 91일 후 비현재 버전 영구 삭제 (좋은 보존 기간)

이 규칙은 다음을 처리하는 “cleanup” 규칙과 보완적입니다:

  • 만료된 삭제 마커 제거 (고립된 마커 방지)
  • 3일 후 미완료 멀티파트 업로드 정리 (저장 공간 낭비 방지)
  • 92일 후 비현재 버전 삭제 (완전한 정리 보장)

두 규칙 모두 버킷 내 모든 객체에 적용되며, 이는 모든 콘텐츠가 동일한 라이프사이클 패턴을 따르는 전용 백업 저장소에 적합합니다.

현재 버전에 대한 7일 만료는 정기 백업 시나리오에 적합해 보이지만, 특정 보존 요구 사항(더 긴 보존이 필요한 경우 15일 또는 30일)에 따라 조정할 수 있습니다.

귀하의 구현은 완성되었으며, S3 라이프사이클 관리에 대한 AWS 모범 사례를 따르고 있습니다.


결국 더 효율적인 방법이 있었습니다.

CloudFront > 배포 > 배포 생성 > 오리진 지정 > 오리진 유형 > “기타” 선택. 공개적으로 해결 가능한 URL을 통해 AWS 또는 비-AWS 오리진에 대한 참조.

CloudFront > 배포 > 배포 생성 > 오리진 지정 > 오리진 > 사용자 정의 오리진 > 도메인 입력 (예: subdomain.yourdomain.tld)

CloudFront > 배포 > 배포 생성 > 오리진 지정 > 설정 > 캐시 설정 > “캐시 설정 사용자 지정” 선택

CloudFront > 배포 > 배포 생성 > 오리진 지정 > 설정 > 캐시 설정 > 캐시 정책 > 드롭다운에서 “CachingOptimized” 선택 > “다음” 선택

보안 설정을 계속 진행하며, 원래의 단계 10 - 14는 무시합니다.

CloudFront > 배포 > 배포 생성 > 검토 및 생성 > “배포 생성” 선택