Скачать резервную копию по ссылке из письма с помощью `wget`

Для опытного системного администратора предпочтительным способом перемещения больших файлов является использование таких инструментов, как rsync или scp, но иногда у вас нет доступа по SSH к хосту, с которого нужно загрузить большой файл резервной копии.

Поскольку файлы резервных копий содержат конфиденциальную информацию, в Discourse реализованы функции безопасности, которые значительно затрудняют несанкционированное получение резервной копии. Вы должны получить ссылку для загрузки по электронной почте и использовать её, будучи авторизованным под тем же пользователем, который инициировал запрос. Если вы хотите загрузить данные через веб-браузер, это довольно просто. Однако если вы планируете переместить эту резервную копию на другой сервер в интернете, большинство домашних интернет-провайдеров превращают это в очень трудоемкую задачу. На моём домашнем подключении загрузка файла размером 2,3 ГБ занимает более 20 минут. Файл объёмом 12 ГБ в данном случае потребовал бы примерно два часа.

Ниже описано, как получить ссылку, которая позволит вам загрузить резервную копию с сайта Discourse через wget.

Сначала запустите загрузку как обычно, затем откройте страницу загрузок в Chrome (chrome://downloads/). Щёлкните правой кнопкой мыши по URL-адресу и скопируйте его.

Затем в оболочке на машине, куда вы хотите сохранить файл, вставьте этот URL-адрес в запрос wget. Обязательно заключите его в кавычки, так как символы & могут вызвать проблемы. Также убедитесь, что вы сохранили исходное имя файла резервной копии. Ваш запрос должен выглядеть примерно так:

wget --show-progress "https://bucket-name.s3.us-west-2.amazonaws.com/backups/xyz/multisitename/discourse-2020-11-19-001538-v20201116132948.tar.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAWWK5WHOFJ%2F20201119%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20201119T013442Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=1753b97a8aaf6953c89aa28628b8db" -o discourse-2020-11-19-001538-v20201116132948.tar.gz

Также можно опустить параметр -o filename и переименовать файл (который по умолчанию будет иметь в качестве имени полный URL-адрес) после загрузки. Ссылка действует ограниченное время, поэтому инициировать загрузку нужно только тогда, когда вы готовы начать её на сервере.

После этого вы можете переместить файл в /var/discourse/shared/standalone/backups/default и восстановить его через веб-интерфейс или с помощью команд:

cd /var/discourse
./launcher enter app
discourse enable_restore
discourse restore

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

14 лайков

К сожалению, это, похоже, не работает вне сайтов, использующих S3.

Я полагаю, что это сработает.

1 лайк

Я думаю, это не сработает, так как S3 аутентифицирует личность через параметр X-Amz-Signature в URL, тогда как прямая загрузка с Discourse требует аутентификации на основе cookies. Простого копирования URL в wget недостаточно для аутентификации.

1 лайк

Хм. Возможно, это так. Возможно, я всегда делал это через S3 (как, вероятно, с сайтов CDCK, где у меня нет доступа по SSH).