Files
infra/servers/fr1.md
2026-06-21 19:35:06 +03:00

4.7 KiB
Raw Blame History

fr1 — fr1.ruzzy.dev (161.97.93.252)

Снимок состояния сервера. Секреты (пароли/токены) — только на сервере, не здесь.

Провайдер: Contabo VPS · France / Lauterbourg (Grand Est) ОС: Ubuntu 24.04 LTS · kernel 6.8.0-106-generic Ресурсы: 8 vCPU / 23 GB RAM / 387 GB hostname: fr1 (FQDN fr1.ruzzy.dev через /etc/hosts)


Пользователи и доступ

  • Пользователь rus (uid 1000, группы rus, sudo, users), sudo по паролю.
  • Вход с Mac: ssh rus-161 (алиас в ~/.ssh/config) → ключ ~/.ssh/id_161_97_93_252 (ed25519).
  • root-доступ по SSH закрыт; для root изнутри — sudo -i.

SSH (/etc/ssh/sshd_config.d/00-hardening.conf)

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
MaxAuthTries 3
AllowUsers rus

Через socket-activation (ssh.socket).

DNS

  • Зона ruzzy.dev — Namecheap (NS dns1/dns2.registrar-servers.com).
  • fr1.ruzzy.dev A → 161.97.93.252.
  • PTR (reverse DNS): дефолтный vmi3387709.contaboserver.net (не менялся).

Firewall (ufw)

  • Default: deny incoming, allow outgoing.
  • Открыто: 22/tcp, 80/tcp, 443/tcp (IPv4 + IPv6).

fail2ban (/etc/fail2ban/jail.local)

[DEFAULT]
bantime=1h  findtime=10m  maxretry=5
ignoreip = 127.0.0.1/8 ::1 31.153.37.106
backend=systemd  banaction=ufw

[sshd]      enabled=true
[recidive]  enabled=true  bantime=1w  findtime=1d  maxretry=5
            backend=auto  logpath=/var/log/fail2ban.log

Обновления

  • Ubuntu Pro подключён (аккаунт ruzzyrullezz@gmail.com): livepatch, esm-infra, esm-apps — enabled.
  • unattended-upgrades: Update-Package-Lists "1", Unattended-Upgrade "1" (ежедневно, security). Авто-reboot выключен.

Система

  • swap: /swapfile 2 GB (в /etc/fstab), vm.swappiness=10 (/etc/sysctl.d/99-swappiness.conf).
  • journald: Storage=persistent, SystemMaxUse=500M.
  • AppArmor включён; время — systemd-timesyncd.

Docker

  • Docker 29.6 + Compose v5.1 (официальный репозиторий). rus в группе docker.

nginx + TLS

  • nginx 1.24 (apt) + certbot 2.9 (python3-certbot-nginx), автопродление через systemd-таймер certbot.
  • vhost /etc/nginx/sites-available/mon.ruzzy.dev.conf → проксирует на Grafana (127.0.0.1:3000), HTTPS-редирект, websocket.

Мониторинг (~/monitoring, stack в репо stacks/monitoring/)

  • Стек: Prometheus + Grafana + node-exporter + cAdvisor + Alertmanager (docker compose).
  • Алерты: Alertmanager → Telegram (бот @ultimate_log_bot, chat 607015). Правила prometheus/rules/alerts.yml: TargetDown, HostHighCPU, HostLowMemory, HostDiskLow/Critical. Токен — в ~/monitoring/alertmanager/telegram_token (chown 65534, не в git).
  • Prometheus: retention 90d, слушает 127.0.0.1:9090. Скрейпит node-exporter + cadvisor (job'ы node/cadvisor, instance fr1).
  • Grafana: 127.0.0.1:3000, доступ снаружи через https://mon.ruzzy.dev (nginx + Let's Encrypt). Datasource Prometheus (uid prometheus) и дашборды (Node Exporter Full, cAdvisor, папка Infra) провижатся автоматически. Пароль admin — в ~/monitoring/docker-compose.yml на сервере (в репо вынесен в ${GF_ADMIN_PASSWORD}).
  • Multi-server: таргеты через file_sd (prometheus/targets/{node,cadvisor}/*.yml) — новый сервер = добавить файл + curl -X POST .../-/reload. См. stacks/monitoring/README.md.
  • DNS: mon.ruzzy.dev → 161.97.93.252.
  • Планируется: VPN-экспортёры (wireguard/openvpn/telemt) + подключение de1 по туннелю.

Telegram-уведомления

  • Бот @ultimate_log_bot. Конфиг /etc/tg-notify.conf (chmod 600, токен+chat_id — секрет на сервере).
  • /usr/local/bin/tg-notify.sh "msg" — универсальная отправка (HTML, префикс hostname).
  • /usr/local/bin/uu-telegram-report.sh — сводка автообновлений + reboot-required; повешен на apt-daily-upgrade.service через drop-in /etc/systemd/system/apt-daily-upgrade.service.d/telegram.conf (ExecStartPost). Молчит, если нечего сообщать.

Установленные пакеты (сверх базы)

htop, mtr-tiny, tmux, vim, curl, wget, git, unzip, net-tools, dnsutils, ncdu, rsync, fail2ban, unattended-upgrades.