Всем привет. Меня зовут Ли, и я занимаюсь самостоятельным хостингом Discourse с переменным успехом с 2013 года. Помню, как приходилось возиться с rbenv, чтобы вообще начать. Помню, как приходилось компилировать nginx с Phusion Passenger, чтобы всё заработало. Помню, как около десяти лет назад спорил с @sam, что переход на Docker — это капитуляция перед слабостью разработчиков, у которых «всё работает на их домашней директории и в их кошмаре с dot-файлами» (и я был абсолютно неправ!). Помню первый раз, когда услышал фразу «bike-shedding». Цитируя того самого человека: я помню всё.
После нескольких лет отсутствия у меня появилась возможность вернуться к самостоятельному хостингу Discourse в качестве замены нативным комментариям WordPress на погодном сайте в Хьюстоне, который обычно обслуживает около 10 тыс. просмотров в день, но во время ураганов может достигать 2 млн просмотров в день и 1 млн уникальных посетителей. Мы годами боролись с нативными комментариями WordPress, но по состоянию на прошлую среду мы перешли на самостоятельный хостинг Discourse. (И к тому же на Graviton3! Серьёзно, это просто работает, и это здорово.)
Вот к чему я веду: сейчас 2025 год, и как самостоятельный хостер я всё ещё вынужден вручную управлять пространством образов Docker. Приведу историю про /dev/root, рассказанную через фрагменты кода, после менее чем недели работы в продакшене:
[11:49:56] 0 ✓ (1.8ms)
root@discourse:/var/discourse # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 21G 9.6G 69% /
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 3.1G 1.1M 3.1G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
efivarfs 128K 3.6K 125K 3% /sys/firmware/efi/efivars
/dev/nvme1n1p16 891M 109M 720M 14% /boot
/dev/nvme1n1p15 98M 6.4M 92M 7% /boot/efi
/dev/nvme0n1 32G 346M 30G 2% /var/discourse
tmpfs 1.6G 12K 1.6G 1% /run/user/1001
overlay 30G 21G 9.6G 69% /var/lib/docker/overlay2/5a649418bbfc064f488e895572eec1ace487a3eaa324fe1d8e3b395e6c5e3645/merged
[11:49:59] 0 ✓ (4.8ms)
root@discourse:/var/discourse # ./launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: discourse/base@sha256:3696bdf18652b5455bd33795ec3b8e0f201c17a04f0e0126fc0317ed821373cd
....
[целая куча строк удалена]
....
Total reclaimed space: 12.43GB
[11:50:34] 0 ✓ (27.8s)
root@discourse:/var/discourse # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 30G 6.9G 24G 23% /
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 3.1G 1.1M 3.1G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
efivarfs 128K 3.6K 125K 3% /sys/firmware/efi/efivars
/dev/nvme1n1p16 891M 109M 720M 14% /boot
/dev/nvme1n1p15 98M 6.4M 92M 7% /boot/efi
/dev/nvme0n1 32G 346M 30G 2% /var/discourse
tmpfs 1.6G 12K 1.6G 1% /run/user/1001
overlay 30G 6.9G 24G 23% /var/lib/docker/overlay2/5a649418bbfc064f488e895572eec1ace487a3eaa324fe1d8e3b395e6c5e3645/merged
[11:55:28] 0 ✓ (3.3ms)
root@discourse:/var/discourse #
Я вас люблю, ребята. Я люблю Discourse. Я предан этому продукту и планирую продолжать его использовать, по большому счёту, вечно.
Но, знаете ли… просто, почему. Почему сейчас 2025 год, и я лично, в одиночку, всё ещё возюсь с launcher cleanup? Почему управление образами не является встроенной функцией launcher?
Снова повторяю: я вас люблю, ребята. Я выбрал Discourse для SCW, потому что верю в то, что вы создали, и мне нравится его использовать. Но, знаете ли… половина объёма загрузочного тома моей бедной AMI занята бесполезным мусором, который, по крайней мере, если я правильно понимаю техническую сторону вопроса, мог бы управляться автоматически.
Не хочу жаловаться — просто снова заглянул после нескольких лет отсутствия в кресле администратора. Мне очень нравится AI-обнаружение спама и AI-сортировка, особенно на погодном форуме, где политически заряженные посты о климатических изменениях (как за, так и против) являются регулярным явлением. Спасибо вам за всё <3