
MicroBin на микро-VPS: развёртывание приватного pastebin на сервере с 1 ГБ ОЗУ и 5 ГБ диска
Привет! В этой статье я покажу, как развернуть собственный легковесный pastebin-сервис MicroBin на самом бюджетном VPS. Мы не будем использовать Docker (он съест половину ресурсов), а скачаем статический бинарник и настроим всё вручную.
Целевые характеристики сервера
- 1 vCPU (3.6 GHz)
- 1 ГБ DDR4 RAM
- 5 ГБ NVMe
- ОС: Debian 12 (Bookworm) minimal
⚠️ Почему именно Debian 12? Ubuntu 22.04/24.04 на старте потребляет 300+ МБ ОЗУ и занимает 3+ ГБ на диске из-за snapd и cloud-init. Debian 12 minimal стартует с ~100 МБ ОЗУ и занимает ~1.2 ГБ. На железе с 5 ГБ диска эта разница критична. FreeBSD/ZFS не подойдут — ZFS требует минимум 4–8 ГБ ОЗУ.
Шаг 0. Подготовка и установка ОС
При установке выберите Debian 12 (Bookworm) minimal / netinst. Не устанавливайте десктопное окружение и стандартные утилиты — только базовая система и SSH-сервер.
После установки подключитесь по SSH под root. Предупреждение /usr/bin/xauth: file /root/.Xauthority does not exist можно игнорировать.
Шаг 1. Обновление и базовые пакеты
apt update && apt upgrade -y
apt install -y sudo wget nano ufw fail2ban nginx certbot python3-certbot-nginx
💡 Обратите внимание: мы не устанавливаем curl, build-essential, git и Rust-тулчейн. Они могут понадобиться позже, но мы удалим их сразу после использования, чтобы сэкономить место.
Шаг 2. Создание пользователя и безопасность
Работать от root небезопасно. Создадим отдельного пользователя:
adduser microbin
usermod -aG sudo microbin
Настройка UFW
⚠️ КРИТИЧНО: Сначала разрешаем SSH, потом включаем фаервол. Иначе потеряете доступ к серверу.
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
На вопрос Command may disrupt existing ssh connections. Proceed with operation (y|n)? отвечайте y — правило для SSH уже добавлено. Проверьте статус командой ufw status.
Настройка Fail2Ban
На свежем Debian 12 minimal fail2ban не запустится из коробки с ошибкой Have not found any log file for sshd jail, потому что в системе нет файла /var/log/auth.log — логи пишутся только в journald.
Создайте локальный конфиг:
nano /etc/fail2ban/jail.local
Вставьте следующее содержимое:
[DEFAULT]
backend = systemd
[sshd]
enabled = true
port = ssh
filter = sshd
maxretry = 5
bantime = 3600
findtime = 600
Сохраните (Ctrl+O, Enter, Ctrl+X) и запустите:
systemctl restart fail2ban
sleep 2
fail2ban-client status sshd

⏱️ Обязательно добавьте sleep 2 между рестартом и проверкой статуса. На слабом железе сокет создаётся с задержкой, и без паузы вы получите ошибку Failed to access socket path.
Шаг 3. Swap-файл (ОБЯЗАТЕЛЬНО)
Без swap на 1 ГБ ОЗУ сервер упадёт при первой же нагрузке. Создаём файл на 1 ГБ:
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Проверка: free -h. Строка Swap должна показать 1.0Gi.

Шаг 4. Nginx и SSL-сертификат
Создаём конфиг виртуального хоста (замените bin.icelake.ru на ваш домен):
nano /etc/nginx/sites-available/bin.icelake.ru
server {
listen 80;
listen [::]:80;
server_name bin.icelake.ru;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Активируем сайт:
ln -s /etc/nginx/sites-available/bin.icelake.ru /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl enable --now nginx
Получение SSL
⚠️ До выполнения этой команды убедитесь, что DNS A-запись для вашего домена уже указывает на IP сервера.
certbot --nginx -d bin.icelake.ru
Укажите email, согласитесь с условиями и автоматическим редиректом HTTP→HTTPS. Проверка: ls /etc/letsencrypt/live/bin.icelake.ru/ (должны быть файлы fullchain.pem и privkey.pem).
Шаг 5. Установка MicroBin
❌ Почему НЕЛЬЗЯ собирать из исходников на 5 ГБ диске
Компиляция Rust-проекта на 1 vCPU создаёт временные артефакты размером 1–2 ГБ в директории target/. Вместе с системой (~2.8 ГБ) и swap-файлом (1 ГБ) места физически не хватает. Вы получите ошибку No space left on device (os error 28), и даже cargo clean может не помочь, так как кеш Cargo хранится в /root/.cargo.
✅ Правильный способ: скачать prebuilt-бинарник
Узнаём актуальную ссылку на последний релиз:
wget -qO- https://api.github.com/repos/szabodanika/microbin/releases/latest | grep "browser_download_url.*x86_64.*linux" | cut -d '"' -f 4

Скачиваем и устанавливаем (замените URL на полученный выше):
mkdir -p /opt/microbin/data
cd /opt/microbin
wget <URL_ИЗ_ПРЕДЫДУЩЕЙ_КОМАНДЫ> -O microbin.tar.gz
tar xzf microbin.tar.gz
chmod +x microbin
rm -f microbin.tar.gz

💡 Musl-сборка (x86_64-unknown-linux-musl) предпочтительнее glibc-версии: она статически линкована, весит ~15 МБ и потребляет всего 1.1 МБ ОЗУ при работе.
Если ссылка вернула 404, используйте проверенный v2.0.4:
wget https://github.com/szabodanika/microbin/releases/download/v2.0.4/microbin-v2.0.4-x86_64-unknown-linux-gnu.tar.gz -O microbin.tar.gz
Шаг 6. Настройка systemd-юнита
Создаём сервис:
nano /etc/systemd/system/microbin.service
[Unit]
Description=MicroBin Pastebin Service
After=network.target
[Service]
Type=simple
User=microbin
Group=microbin
WorkingDirectory=/opt/microbin
ExecStart=/opt/microbin/microbin --port 8080 --data-dir /opt/microbin/data --public-path https://bin.icelake.ru
Restart=on-failure
RestartSec=5
Environment=MICROBIN_NO_ETERNAL_PASTES=true
Environment=MICROBIN_MAX_PASTE_SIZE=1048576
[Install]
WantedBy=multi-user.target
🔒 Защита диска: MICROBIN_NO_ETERNAL_PASTES=true запрещает вечные пасты, MICROBIN_MAX_PASTE_SIZE=1048576 ограничивает размер 1 МБ. Без этих настроек ваш диск на 5 ГБ заполнится за несколько дней активного использования.
Настраиваем права и запускаем:
chown -R microbin:microbin /opt/microbin
systemctl daemon-reload
systemctl enable --now microbin
systemctl status microbin
Ожидаемый статус: active (running), потребление памяти ~1.1M.

Шаг 7. Финальная проверка
df -h /
free -h
systemctl is-active nginx fail2ban microbin

Откройте https://ваш-домен в браузере. Вы должны увидеть интерфейс MicroBin.



Чек-лист: что пошло не так и как избежать
| Проблема | Причина | Решение |
|---|---|---|
No space left on device при сборке Rust | Артефакты компиляции + система > 5 ГБ | Используйте prebuilt-бинарник, не собирайте из исходников |
fail2ban: Failed to access socket path | Проверка статуса сразу после рестарта | Добавьте sleep 2 перед fail2ban-client status |
Have not found any log file for sshd jail | Debian 12 minimal не создаёт /var/log/auth.log | Укажите backend = systemd в jail.local |
Потеря SSH после ufw enable | Не добавлено правило OpenSSH до включения | Всегда сначала ufw allow OpenSSH, потом ufw enable |
| Certbot не подтверждает домен | DNS A-запись ещё не распространилась | Проверьте dig +short ваш-домен перед получением сертификата |
| Диск забился через неделю | Нет ограничений на размер/TTL паст | Используйте MICROBIN_NO_ETERNAL_PASTES и MICROBIN_MAX_PASTE_SIZE |
Мониторинг и обслуживание
Периодически проверяйте состояние:
df -h / && du -sh /opt/microbin/data
Если данные занимают >500 МБ, добавьте в юнит переменную MICROBIN_DEFAULT_EXPIRY=3600 (TTL по умолчанию 1 час) и перезапустите сервис.
Для обновления MicroBin просто скачайте новый бинарник, замените файл /opt/microbin/microbin и выполните systemctl restart microbin.
MicroBin потребляет 1.1 МБ ОЗУ и 15 МБ на диске. Это один из самых эффективных self-hosted сервисов, который реально запустить на микро-VPS. Никакого Docker, никаких тяжелых рантаймов — только статический бинарник и nginx.