Self-hosting начинается довольно невинно.
Сначала появляется один маленький сервер. Потом на нём оказывается ещё один сервис. Потом второй сервер нужен для первого сервера. В какой-то момент становится понятно, что это уже не «поставлю себе Nextcloud», а небольшая инфраструктура.
И в этом есть определённый смысл.
Собственные сервисы дают контроль над данными, конфигурацией и способом работы. Взамен приходится самостоятельно заниматься обновлениями, резервными копиями, мониторингом и всеми остальными радостями эксплуатации.
Главный принцип
Мне нравится держать инфраструктуру максимально простой.
Если сервис можно нормально запустить без пяти дополнительных компонентов, лучше не добавлять эти пять компонентов.
Например:
Internet
|
v
Reverse Proxy
|
+----> Web service
|
+----> Git
|
+----> Other services
Чем меньше скрытой магии между запросом пользователя и приложением, тем проще потом понять, почему оно перестало работать в воскресенье вечером.
Что важно
Минимальная инфраструктура всё равно должна иметь:
резервные копии; мониторинг; понятную документацию; обновления; нормальное логирование.
Последний пункт особенно полезен, когда система сообщает только:
something went wrong
Очень информативно. Спасибо, компьютер. Конфигурация живёт рядом с сервисом, данные имеют понятное расположение, а резервные копии не лежат в том же каталоге, который они должны спасать.
Nginx
Reverse proxy остаётся отдельным слоем:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://172.24.23.10:8080;
}
}
Это немного скучно.
Именно поэтому это хорошо.
Скучная инфраструктура обычно ломается заметно реже той, которая выглядит как архитектурная диаграмма из конференционного доклада.
Обновления
Хорошая система должна позволять ответить на простой вопрос:
Что произойдёт, если я обновлю этот пакет?
Если ответ неизвестен, сначала делается резервная копия, затем обновление, затем проверка.
Это не особенно интересно, зато сильно интереснее восстановления из ничего.