SMF2 변환 및 S3로 Rake 전송 관련 도움

검색해 보았지만, 업로드 파일을 DigitalOcean에서 S3로 이동하는 기본적인 개요를 찾지 못했습니다. 몇 달 전에는 새 업로드와 백업을 위해 S3를 성공적으로 설정한 적이 있습니다. 이제 업로드 파일(약 1.4GB)을 S3로 완전히 이전하고 싶습니다.

이 시스템은 처음부터 SMF2에서 전환된 것입니다. 현재 두 개의 업로드 폴더가 있는데, 하나는 루트 디렉터리의 smf2에, 다른 하나는 /var/discourse에 있습니다. SMF2 디렉터리의 크기는 2.8GB입니다. 아마도 여기에는 두 단계가 필요할 것 같습니다. SMF2 디렉터리에서와 /var/discourse 디렉터리에서 각각 별도의 단계를 거쳐 이동해야 하는가요?

rake to s3를 찾아보았지만, 사람들이 겪은 오류와 수정 방법에 대한 논의 외에는 가이드를 찾을 수 없습니다. 공식 가이드가 있을까요?

이 기사를 읽어보세요. 작업을 설정하는 방법에 대한 안내가 포함되어 있습니다.

hooks 섹션의 설정 부분을 확인하고, 이미 읽은 문제들을 피하기 위해 환경 변수를 사용하여 버킷을 설정해야 합니다.

정말 좋네요! 감사합니다!

거기서 제가 잘 모르는 건 CDN뿐입니다. Amazon CloudFront를 사용할 수 있는 것 같네요. 아마 이전 S3 설정 단계에서 CDN은 설정하지 않았을 것 같습니다. CDN 설정 방법을 안내해 주는 가이드를 찾아보겠습니다.

업로드 버킷을 오리진으로 사용하여 CloudFront를 설정할 수 있으며, 설정이 완료되면 이를 S3 CDN 링크로 지정하면 됩니다. 할 일은 이것뿐입니다.

감사합니다. 이 영상을 따라 Cloudfront 설정을 진행했습니다:

지금 rake posts:rebake를 실행 중입니다. 게시물이 84,000개나 되니 시간이 좀 걸릴 것 같습니다.

아니… 다시 시작해 보고 있어요…

root@discourse-app:/var/www/discourse# rake posts:rebake
‘default’ 게시물의 마크다운을 다시 처리하는 중
10027 / 83358 ( 12.0%)/usr/local/bin/rake: line 2: 959 Killed RAILS_ENV=production sudo -H -E -u discourse bundle exec bin/rake “$@”

다시 일어났습니다… 조언이 있을까요?

root@discourse-app:/var/www/discourse# rake posts:rebake
Rebaking post markdown for ‘default’
12901 / 83359 ( 15.5%)/usr/local/bin/rake: line 2: 2569 Killed RAILS_ENV=production sudo -H -E -u discourse bundle exec bin/rake “$@”

일부 게시물이 이제 Cloudfront에서 콘텐츠를 가져오고 있으므로, 적어도 그 부분은 작동하는 것으로 보입니다.

내가 rebake를 하지 않은 상태인데도 이런 일이 일어나는 것 같습니다. Sidekiq이 핫링크된 이미지를 계속 가져오고 있네요.

네, 사이트를 다시 구축했고 S3 설정 단계를 따랐습니다.

이제 모든 것이 S3에서 로드되어야 합니다. 이를 어떻게 확인합니까? 이제 드롭렛의 기존 업로드 디렉토리를 삭제하여 공간을 확보해도 될까요?

확실히 내가 뭔가 잘못한 것 같습니다. 이전보다 디스크 공간이 더 많이 사용되고 있습니다.

S3로의 업로드는 리빌드 중에 수행되어야 합니다. S3 버킷에서 웹사이트 에셋을 탐색할 수 있어야 하며, 모든 사이트 에셋은 제공된 S3 또는 CDN 링크에서 로드되어야 합니다. 작동하지 않는다면 설정 방식에 분명히 문제가 있는 것입니다. 어떤 오류가 발생하고 있나요?

무언가 잘못되었을 것 같습니다. 재구축이 끝날 때까지 몇 GB의 데이터가 업로드될 정도로 시간이 길지 않았거든요.

수정:
몇 개월 전부터 모든 업로드는 이미 S3로 전송되고 있었습니다. S3로 전환되기 전의 레거시 데이터를 이동하고 싶은 겁니다.

서버가 브로드밴드 연결보다 훨씬 빠른 속도로 동작한다는 점을 염두에 두세요. 호스트에서 이미지를 S3로 업로드하는 데는 몇 분이면 충분해야 합니다. 다만 업로드가 실제로 이루어졌는지 확인하려면 리빌드 로그를 주의 깊게 살펴봐야 합니다.

또는 ./discourse-doctor를 실행하여 검토용 로그를 생성할 수도 있습니다.

스크립트 출력 결과는 다음과 같습니다:

DNS 섹션에서 굵게 표시된 부분만 눈에 띕니다.

> root@discourse:/var/discourse# ./discourse-doctor
> DISCOURSE DOCTOR Thu May 14 11:35:17 UTC 2020
> OS: Linux discourse 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
> 
> 
> Found containers/app.yml
> 
> ==================== YML SETTINGS ====================
> DISCOURSE_HOSTNAME=
> SMTP_ADDRESS=
> DEVELOPER_EMAILS=
> SMTP_PASSWORD=
> SMTP_PORT=
> SMTP_USER_NAME=
> LETSENCRYPT_ACCOUNT_EMAIL=
> 
> ==================== DOCKER INFO ====================
> DOCKER VERSION: Docker version 18.09.6, build 481bc77
> 
> DOCKER PROCESSES (docker ps -a)
> 
> CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                      NAMES
> db900fc77ebe        local_discourse/app   "/sbin/boot"        15 hours ago        Up 15 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
> 
> db900fc77ebe        local_discourse/app   "/sbin/boot"        15 hours ago        Up 15 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
> 
> Discourse container app is running
> 
> 
> ==================== PLUGINS ====================
>             exec: {cd: $home/plugins, cmd: ['git clone https://github.com/discourse/docker_manager.git', 'git clone https://github.com/procourse/procourse-static-pages.git', 'git clone https://github.com/discourse/discourse-bbcode.git', 'git clone https://github.com/discourse/discourse-adplugin.git']}
> 
> No non-official plugins detected.
> 
> See https://github.com/discourse/discourse/blob/master/lib/plugin/metadata.rb for the official list.
> 
> ========================================
> Discourse version at : NOT FOUND
> Discourse version at localhost: Discourse 2.5.0.beta4
**> ==================== DNS PROBLEM ====================**
**> This server reports Discourse 2.5.0.beta4 , but  reports NOT FOUND.**
**> This suggests that you have a DNS problem or that an intermediate proxy is to blame.**
**> If you are using Cloudflare, or a CDN, it may be improperly configured.**
> 
> 
> ==================== MEMORY INFORMATION ====================
> RAM (MB): 1008
> 
>               total        used        free      shared  buff/cache   available
> Mem:            985         636          69         121         279          88
> Swap:          2047         775        1272
> 
> ==================== DISK SPACE CHECK ====================
> ---------- OS Disk Space ----------
> Filesystem      Size  Used Avail Use% Mounted on
> /dev/vda1        25G   20G  4.8G  81% /
> 
> ---------- Container Disk Space ----------
> Filesystem      Size  Used Avail Use% Mounted on
> overlay          25G   20G  4.8G  81% /
> /dev/vda1        25G   20G  4.8G  81% /shared
> /dev/vda1        25G   20G  4.8G  81% /var/log
> 
> ==================== DISK INFORMATION ====================
> Disk /dev/vda: 25 GiB, 26843545600 bytes, 52428800 sectors
> 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: 02CBFCD2-7495-4A08-A11B-28E7D3872FAA
> 
> Device      Start      End  Sectors  Size Type
> /dev/vda1  227328 52428766 52201439 24.9G Linux filesystem
> /dev/vda14   2048    10239     8192    4M BIOS boot
> /dev/vda15  10240   227327   217088  106M Microsoft basic data
> 
> 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/
> Or just send a test message to yourself.
> Email address for mail test? ('n' to skip) []: n
> Mail test skipped.
> Replacing: SMTP_PASSWORD
> Replacing: LETSENCRYPT_ACCOUNT_EMAIL
> Replacing: DEVELOPER_EMAILS
> Replacing: DISCOURSE_DB_PASSWORD
> Replacing: Sending mail to
> 
> ==================== DONE! ====================
> Would you like to serve a publicly available version of this file? (Y/n)n
> root@discourse:/var/discourse#

app.yml의 해당 섹션은 다음과 같습니다:

> 
>     DISCOURSE_USE_S3: true
>     DISCOURSE_S3_REGION: us-east-1
>     DISCOURSE_S3_ACCESS_KEY_ID: <MY KEY>
>     DISCOURSE_S3_SECRET_ACCESS_KEY: <MY SECRET KEY>
>     DISCOURSE_S3_CDN_URL: 'https://d2hneyr8lp58j4.cloudfront.net'
>     DISCOURSE_S3_BUCKET: brcuploads
>     DISCOURSE_S3_BACKUP_BUCKET: bcruploads-backups
>     DISCOURSE_BACKUP_LOCATION: s3

이것은 DigitalOcean의 DNS 설정이 잘못되었다는 뜻인가요? Cloudfront에서 CNAME을 추가했습니다.

와, 이건 도움이 안 되네요.

여기서 n을 선택하셨는데, 공개 버전을 생성해 주실 수 있나요? 링크를 DM으로 공유해 주시면, s3 마이그레이션이 실제로 성공했는지 아니면 어떤 이유로 실패했는지 확인해 볼 수 있을 것 같습니다.

URL을 DM으로 보내드릴게요.