Мы используем более крупную установку Discourse на VPS, которая в целом работает у нас очень хорошо. По производительности CPU и памяти у нас есть запас. Однако с дисковым пространством возникают некоторые сложности — не в повседневной работе, но, например, при обновлении Postgres (обновление с версии 13 до 15 пока отложено именно по этой причине) нам не хватает места, и мы не можем его легко расширить.
Я знаю, что существуют другие варианты обновления Postgres, но рассматриваю это скорее как общий вопрос.
Мы работаем на Hetzner, где сетевое хранилище легко доступно для временного использования.
На тестовом сервере я сейчас экспериментирую с временным решением: сначала восстановить резервную копию с рабочего сайта, а затем протестировать обновление Postgres. Пока что мне это не удалось.
Я уже пробовал использовать символические ссылки, но заметил, что это не работает, и также где-то читал, что это не рекомендуемый способ. Также я пробовал переместить общую папку /shared из /var/discourse/shared/standalone в /mnt/ext-storage/standalone и перенести туда файлы — к сожалению, без проблем не обошлось. Я даже не могу завершить сборку.
Есть ли способ, который работает для таких случаев? Я понимаю, что производительность диска значительно ниже, чем у локального, но я не планирую запускать форум на нём. Мне бы очень хотелось иметь удобный способ использовать его для определённых сценариев.
Если ваша цель — выполнить обновление максимально просто, лучше всего создать новую виртуальную машину и мигрировать на неё. Так вы избежите необходимости обновлять базу данных и получите новую операционную систему на вашей виртуальной машине, что вам, скорее всего, всё равно нужно сделать.
Если ваши резервные копии хранятся в S3, процесс очень прост: заморозьте старый сервер, создайте резервную копию и восстановите её на новой машине.
Если у Hetzner есть постоянный IP-адрес, который можно назначать разным серверам, вам даже не придётся менять DNS.
Вам важно убедиться, что вы можете создать новый сервер, чтобы в случае необходимости всегда иметь такую возможность. Это отличный шанс потренироваться.
На самом деле это не вариант. В любом случае, для повседневных задач места не заканчивается. К тому же у нас сейчас диск на 600 ГБ, и используется около 50%. Более крупного варианта нет — по крайней мере, у Hetzner.
Я не предлагал переходить на диск большего размера, просто купите новый сервер точно такой же, как тот. Установите Discourse и восстановите вашу базу данных.
Это очень хороший вопрос.
Да. Каждая пересборка создает новый контейнер, и каждый из них занимает место. Если вы никогда этого не делали, вы можете освободить десятки гигабайт.
Наше руководство по обновлению включает инструкцию именно для вашего случая.
Мы добавили эту опцию для людей, находящихся в такой же ситуации, как и вы. Обязательно создайте резервную копию на удалённом носителе перед попыткой этого действия!
Полезно хранить ваши загрузки, например в /var/discourse/shared/web_only, на сетевом хранилище. Вам нужно отредактировать файл yml, чтобы указать путь к нему, а не использовать символическую ссылку (символическая ссылка не работает, потому что контейнер не может получить доступ к месту, на которое указывает ссылка).
Затем, если вы перенесёте систему на новую виртуальную машину, вам достаточно будет просто перемонтировать это сетевое хранилище, вместо того чтобы копировать данные.
Я не рекомендую использовать сетевое хранилище для базы данных, так как это работает медленнее.
Я думаю, стоит разобрать, как именно расходуется место. Размер вашей базы данных может быть не таким уж большим, если основная часть использования приходится на загрузки, а только часть базы данных требует примерно в 3 раза больше места во время обновления.
Один из способов проверить это — сравнить размер резервной копии с загрузками и без них.
Или используйте командную строку. Вот вывод с моего довольно небольшого форума:
Надо было быть более точным изначально, но я не ожидал такого широкого отклика.
Наши загрузки и резервные копии хранятся в S3. Размер базы данных на рабочей системе сейчас составляет около 230 ГБ. Сжатые резервные копии, думаю, занимают около 25 ГБ.
Думаю, так и должно быть. Я не до конца понимаю, что именно его запускает. Считаю, что выполнить дополнительную процедуру не повредит и может освободить немного места. Это рекомендуется делать после обновления, если вы обновляете систему на месте. Несколько раз я видел, как она освобождала значительный объем места.
Если размер вашей базы данных составляет 230 ГБ, я бы определенно восстановил её на новом сервере. Простой, связанный с чтением и записью 230 ГБ, будет существенным.