Помощь с конвертацией SMF2 и выгрузкой в S3

Я искал, но не смог найти базового обзора о том, как перенести наши загрузки с DigitalOcean в S3. Несколько месяцев назад я успешно настроил S3 для новых загрузок и резервных копий. Теперь я хочу завершить перенос наших загрузок (~1,4 ГБ) в S3.

Это было преобразование из SMF2 с самого начала. У нас сейчас две папки с загрузками: одна в корне в smf2, другая в /var/discourse. Каталог SMF2 занимает 2,8 ГБ. Предполагаю, что здесь может быть два шага? Нужно ли выполнять отдельные действия для переноса из каталога SMF2 и из каталога /var/discourse?

Я наткнулся на rake to s3, но не смог найти руководства, кроме множества сообщений людей о возникших ошибках и предложениях по их исправлению. Есть ли какое-то руководство?

Пожалуйста, прочитайте эту статью — она должна помочь вам настроить задачу.

Обратите особое внимание на раздел конфигурации для секции hooks и настройте бакет с помощью переменных окружения, чтобы избежать проблем, о которых вы уже читали.

Отлично! Спасибо!

Единственное, о чём я не знаю, — это CDN. Вижу, что можно использовать Amazon CloudFront. Думаю, его не настраивали при выполнении предыдущих шагов по настройке S3. Я поищу руководство, как это сделать.

Вы можете настроить CloudFront, используя свой бакет для загрузок в качестве источника, а после его запуска — установить его в качестве ссылки CDN S3. Это всё, что нужно сделать.

Спасибо. Следовал этому видео для настройки Cloudfront:

Сейчас запускаю rake posts:rebake. У меня 84 тысячи постов, так что это займёт время.

Ой-ой… пытаюсь запустить снова…

root@discourse-app:/var/www/discourse# rake posts:rebake
Пересборка markdown-разметки постов для ‘default’
10027 / 83358 ( 12.0%)/usr/local/bin/rake: строка 2: 959 Убито RAILS_ENV=production sudo -H -E -u discourse bundle exec bin/rake “$@”

Снова произошло то же самое… Есть какие-нибудь предложения?

root@discourse-app:/var/www/discourse# rake posts:rebake
Пересборка markdown-разметки постов для ‘default’
12901 / 83359 ( 15.5%)/usr/local/bin/rake: строка 2: 2569 Убит RAILS_ENV=production sudo -H -E -u discourse bundle exec bin/rake “$@”

Некоторые посты теперь подгружают контент из Cloudfront, так что хотя бы это как-то работает.

Похоже, это происходит без моей пересборки? Sidekiq активно пытается загрузить горячие ссылки на изображения.

Хорошо, сайт пересобран, и шаги по настройке S3 выполнены.

Теперь всё должно загружаться из S3. Как это проверить? Можно ли сейчас удалить старую директорию загрузок на моём Droplet, чтобы освободить место?

Я явно что-то сделал не так. Теперь я занимаю больше места на диске, чем раньше.

Загрузка в S3 должна происходить во время пересборки. Вы должны иметь возможность просматривать ресурсы веб-сайта в бакетах S3, и все ресурсы сайта должны загружаться из предоставленной ссылки S3 или CDN. Если это не работает, значит, определенно что-то не так с вашей конфигурацией. Возникают ли у вас какие-либо ошибки?

Я подозреваю, что что-то пошло не так. Мое восстановление заняло недостаточно времени, чтобы загрузить несколько гигабайт данных в процессе.

РЕДАКТИРОВАНИЕ:
Все загрузки, сделанные несколько месяцев назад, уже шли в 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

Это означает, что у меня неправильно настроен DNS на DigitalOcean? Я добавил CNAME-запись от CloudFront.

Ого, это не помогло. Вы выбрали n для

Можете ли вы сгенерировать общедоступную версию? Вы можете поделиться ссылкой в личных сообщениях, возможно, я смогу проверить, действительно ли миграция на S3 прошла успешно или по какой-то причине не удалась?

Я пришлю тебе ссылку в личные сообщения.