Развертывание CapRover на VPS: self-hosted PaaS для легкого деплоя приложений
TL;DR
В этом подробном руководстве мы шаг за шагом настроим CapRover — мощную self-hosted PaaS (Platform as a Service) — на вашем VPS. CapRover позволяет автоматизировать развертывание, масштабирование и управление веб-приложениями, базами данных и микросервисами, предоставляя функциональность, схожую с Heroku или Netlify, но под вашим полным контролем. Вы научитесь подготавливать сервер, устанавливать Docker и CapRover, конфигурировать домены, деплоить приложения и настраивать резервное копирование, получая полную свободу и экономию.
- Вы развернете полноценную PaaS на своем VPS, управляемую через удобный веб-интерфейс или CLI.
- Научитесь автоматизировать деплой приложений из Git-репозиториев с поддержкой CI/CD.
- Получите бесплатные SSL-сертификаты для всех ваших приложений благодаря интеграции с Let's Encrypt.
- Освоите базовые принципы обслуживания сервера, бэкапов и устранения неполадок.
- Сэкономите на облачных PaaS-сервисах, сохраняя полный контроль над инфраструктурой и данными.
Что мы настраиваем и зачем
В современном мире разработки приложений скорость и простота развертывания играют ключевую роль. CapRover — это бесплатная и открытая PaaS (Platform as a Service) платформа, которая превращает ваш VPS или выделенный сервер в мощную среду для хостинга приложений. Представьте себе Heroku или Netlify, но полностью под вашим контролем и без ежемесячных платежей за каждый деплоймент.
CapRover позволяет разработчикам легко развертывать любые веб-приложения (Node.js, Python, Ruby, PHP, Go, Java и другие), статические сайты, базы данных и контейнеризированные сервисы. Он предоставляет все необходимые инструменты: автоматический SSL (через Let's Encrypt), CI/CD (непрерывная интеграция и доставка), масштабирование, мониторинг и управление доменными именами. В основе CapRover лежит Docker и Nginx, что обеспечивает высокую производительность и гибкость.
В итоге, по завершении этого руководства, вы получите полностью настроенную платформу, на которой сможете развертывать свои проекты за считанные минуты. Больше не нужно вручную настраивать Nginx, Docker Compose или Let's Encrypt для каждого нового приложения – CapRover сделает это за вас.
Альтернативы и преимущества self-hosted
На рынке существует множество альтернатив: от полностью управляемых облачных PaaS-сервисов (Heroku, Vercel, Render, DigitalOcean App Platform) до более низкоуровневых решений, таких как ручное управление Docker-контейнерами или кластерами Kubernetes. Почему же стоит выбрать self-hosted CapRover на VPS?
- Полный контроль и владение данными: Ваши данные и приложения находятся на вашем сервере, а не у стороннего провайдера. Это критично для проектов с высокими требованиями к безопасности или соблюдению регулятивных норм.
- Экономия средств: Облачные PaaS-сервисы могут быстро стать дорогими по мере роста проекта. С CapRover вы платите только за VPS, а количество развернутых приложений практически не ограничено. Это особенно выгодно для разработчиков, запускающих множество небольших проектов или прототипов.
- Гибкость: Возможность установки любых Docker-образов, настройки произвольных переменных окружения, использования собственных
captain-definitionфайлов для точного контроля над сборкой и развертыванием. - Обучение и опыт: Настройка собственной PaaS дает ценный опыт работы с Docker, Linux, сетевыми конфигурациями и системным администрированием, что повышает вашу техническую экспертизу.
- Независимость от поставщика: Вы не привязаны к экосистеме одного облачного провайдера, что дает свободу выбора и миграции.
Конечно, self-hosted решение требует больше начальных усилий и минимальных знаний администрирования. Однако CapRover значительно снижает этот порог входа, автоматизируя большую часть сложных задач.
Какой VPS-конфиг нужен под эту задачу
Выбор подходящего VPS является критически важным для стабильной и производительной работы CapRover и ваших приложений. Требования зависят от количества и сложности развертываемых сервисов. Ниже приведены рекомендации для 2026 года.
Минимальные требования
Для базовой установки CapRover и запуска нескольких нетребовательных приложений (например, статический сайт, небольшой API, тестовая база данных):
- CPU: 2 vCPU. Этого достаточно для работы Docker, CapRover и обработки небольшого трафика.
- RAM: 4 GB. Docker и CapRover сами по себе потребляют значительную часть памяти. 4 GB хватит для нескольких легковесных Node.js или Python приложений.
- Диск: 80 GB SSD (NVMe предпочтительнее). SSD обязателен для производительности Docker. 80 GB позволят хранить несколько Docker-образов, логи и данные приложений. NVMe диски значительно ускоряют операции ввода-вывода.
- Сеть: 1 Gbit/s порт с безлимитным трафиком или большим ежемесячным лимитом (от 1 TB). Стабильное и быстрое сетевое соединение важно для деплоя и доступности приложений.
Рекомендуемый VPS-план для активной разработки и нескольких приложений
Если вы планируете активно использовать CapRover для нескольких средних приложений, включая базы данных, или для проектов с умеренным трафиком, рассмотрите следующую конфигурацию:
- CPU: 4 vCPU. Обеспечит достаточную производительность при пиковых нагрузках и для нескольких параллельных процессов.
- RAM: 8 GB. Позволит комфортно размещать несколько приложений, базы данных и иметь запас для системных нужд.
- Диск: 160-250 GB NVMe SSD. Достаточно места для большого количества Docker-образов, объемных логов и масштабируемых данных приложений. NVMe значительно улучшит общую отзывчивость системы.
- Сеть: 1 Gbit/s порт с безлимитным трафиком.
Для аренды VPS с указанными характеристиками можно рассмотреть VPS с такими характеристиками у надежного провайдера.
Когда нужен dedicated сервер, а не VPS
Выделенный сервер (dedicated server) становится необходимым, когда:
- Высокая производительность: Ваши приложения требуют максимальной производительности CPU, RAM или I/O, которую VPS не может гарантировать из-за виртуализации и "шумных соседей".
- Большое количество приложений/пользователей: Вы планируете хостить десятки приложений, обслуживать тысячи одновременных пользователей или работать с очень большими объемами данных.
- Специфические аппаратные требования: Вам нужны специализированные аппаратные компоненты (например, GPU для машинного обучения, RAID-контроллеры для повышенной надежности дисковой подсистемы).
- Строгие требования к безопасности/комплаенсу: Для некоторых индустрий или типов данных необходим полный физический контроль над оборудованием.
В большинстве случаев, для начала работы с CapRover и даже для многих продакшн-проектов, мощный VPS будет более чем достаточен и экономически выгоден. Если вы достигли пределов VPS, вы всегда можете мигрировать на подходящий dedicated сервер.
Локация VPS: на что влияет
Выбор географической локации VPS влияет на несколько ключевых факторов:
- Задержка (Latency): Чем ближе сервер к вашей целевой аудитории, тем ниже задержка и быстрее загружаются страницы для пользователей.
- Законодательство и приватность: Законы о хранении данных и приватности могут сильно отличаться в разных странах. Выбирайте локацию, соответствующую вашим требованиям и требованиям вашего проекта.
- Пропускная способность и пиринг: Некоторые локации имеют лучшее сетевое соединение с определенными регионами мира. Уточните у провайдера информацию о пиринге.
- Стоимость: Цены на VPS могут варьироваться в зависимости от локации из-за различий в затратах на электроэнергию, инфраструктуру и налоги.
Обычно рекомендуется выбирать локацию, максимально близкую к основной массе ваших пользователей.
Подготовка сервера
После получения доступа к вашему новому VPS (предполагаем, что это Ubuntu Server 24.04 LTS), необходимо выполнить ряд базовых настроек для повышения безопасности и удобства работы.
1. Подключение к серверу
Сначала подключитесь к серверу по SSH, используя учетные данные, предоставленные вашим VPS-провайдером (обычно это пользователь root и пароль).
ssh root@ВАШ_IP_АДРЕС_VPS
Если это первое подключение, вас могут попросить подтвердить отпечаток RSA-ключа.
2. Обновление системы
Всегда начинайте с обновления списка пакетов и установки всех доступных обновлений. Это гарантирует, что у вас будут самые свежие версии системных утилит и исправлений безопасности.
sudo apt update && sudo apt upgrade -y
Эта команда обновит кэш пакетов и установит все доступные обновления без запроса подтверждения.
3. Создание нового пользователя с правами sudo
Работа под пользователем root небезопасна. Создайте нового пользователя для повседневной работы и предоставьте ему права sudo.
# Замените 'deployuser' на желаемое имя пользователя
adduser deployuser
Следуйте инструкциям, чтобы установить пароль и заполнить информацию о пользователе (можно оставить пустым). Затем добавьте нового пользователя в группу sudo:
usermod -aG sudo deployuser
Теперь вы можете переключиться на нового пользователя и продолжить работу:
su - deployuser
Или, еще лучше, откройте новое SSH-соединение под новым пользователем, чтобы убедиться, что все работает:
exit
ssh deployuser@ВАШ_IP_АДРЕС_VPS
4. Настройка аутентификации по SSH-ключам (рекомендуется)
Аутентификация по SSH-ключам гораздо безопаснее, чем по паролю. Если у вас еще нет SSH-ключа, сгенерируйте его на вашей локальной машине:
# На вашей локальной машине
ssh-keygen -t ed25519 -C "ваш[email protected]"
Затем скопируйте публичный ключ на сервер:
# На вашей локальной машине
ssh-copy-id deployuser@ВАШ_IP_АДРЕС_VPS
Если ssh-copy-id недоступен, можно сделать это вручную:
# На вашей локальной машине
cat ~/.ssh/id_ed25519.pub
# Скопируйте вывод, затем на сервере:
ssh deployuser@ВАШ_IP_АДРЕС_VPS
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# Вставьте скопированный ключ и сохраните файл (Ctrl+X, Y, Enter)
chmod 600 ~/.ssh/authorized_keys
exit
После успешной настройки ключей, отключите аутентификацию по паролю для root и для deployuser (если вы хотите полностью исключить парольный доступ). Отредактируйте файл /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Найдите и измените следующие строки (или добавьте, если их нет):
# Отключить вход для root по паролю
PermitRootLogin prohibit-password
# Отключить вход по паролю для всех пользователей
PasswordAuthentication no
Перезапустите SSH-сервис:
sudo systemctl restart sshd
ВАЖНО: Убедитесь, что вы можете войти по SSH-ключу, прежде чем отключать парольную аутентификацию. Иначе вы рискуете потерять доступ к серверу.
5. Настройка брандмауэра (UFW)
Брандмауэр UFW (Uncomplicated Firewall) прост в настройке и значительно повышает безопасность. Разрешите только необходимые порты.
sudo apt install ufw -y # Установка UFW
sudo ufw allow OpenSSH # Разрешить SSH (порт 22)
sudo ufw allow http # Разрешить HTTP (порт 80)
sudo ufw allow https # Разрешить HTTPS (порт 443)
sudo ufw enable # Включить брандмауэр
sudo ufw status # Проверить статус
CapRover будет использовать порты 80 и 443 для обслуживания приложений, поэтому их необходимо открыть. Порт 3000 будет временно использоваться для первичной настройки CapRover UI, но CapRover сам перенастроит Nginx на 80/443 после установки домена.
6. Установка Fail2ban
Fail2ban защищает сервер от атак методом подбора пароля, блокируя IP-адреса, с которых поступает слишком много неудачных попыток входа.
sudo apt install fail2ban -y # Установка Fail2ban
sudo systemctl enable fail2ban # Включить автозапуск
sudo systemctl start fail2ban # Запустить сервис
Базовая конфигурация Fail2ban уже работает "из коробки" для SSH. Для более тонкой настройки можно скопировать и отредактировать файл /etc/fail2ban/jail.conf в /etc/fail2ban/jail.local.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Вы можете изменить bantime (время блокировки) или maxretry (количество неудачных попыток) в секции [DEFAULT].
После этих шагов ваш сервер будет готов к установке CapRover.
Установка ПО — пошагово
CapRover полностью основан на Docker, поэтому первым шагом будет установка Docker Engine. Также нам понадобится Node.js и npm для установки CapRover CLI.
1. Установка Docker Engine
Для установки актуальной версии Docker Engine (предположительно Docker Engine 25.x или 26.x в 2026 году) будем использовать официальный установочный скрипт Docker. Это гарантирует получение последней стабильной версии.
# Обновить список пакетов
sudo apt update
# Установить необходимые пакеты для использования HTTPS в apt
sudo apt install ca-certificates curl gnupg -y
# Добавить официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Добавить репозиторий Docker в sources.list
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Обновить список пакетов с учетом нового репозитория Docker
sudo apt update
# Установить Docker Engine, containerd и Docker Compose
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
После установки добавьте вашего пользователя в группу docker, чтобы запускать команды Docker без sudo:
# Замените 'deployuser' на ваше имя пользователя
sudo usermod -aG docker deployuser
# Чтобы изменения вступили в силу, либо выйдите и войдите заново, либо перезапустите сессию
# Например, можно просто выйти из SSH и заново подключиться
exit
ssh deployuser@ВАШ_IP_АДРЕС_VPS
Проверьте, что Docker установлен корректно:
docker run hello-world
Вы должны увидеть сообщение "Hello from Docker!".
2. Установка Node.js и npm
CapRover CLI (captain) написан на Node.js, поэтому нам понадобится Node.js и менеджер пакетов npm. Будем использовать актуальную LTS-версию Node.js (предположительно Node.js 20.x или 22.x в 2026 году).
# Установить Node.js LTS (например, 20.x, или более свежую LTS, актуальную для 2026)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
Проверьте установку Node.js и npm:
node -v # Должен показать v20.x.x или v22.x.x
npm -v # Должен показать версию npm
3. Установка CapRover CLI (captain)
Теперь, когда Node.js и npm установлены, можно установить глобальный CLI-инструмент CapRover.
sudo npm install -g caprover
Проверьте установку CLI:
captain --version
Вы должны увидеть номер версии CapRover CLI.
4. Развертывание CapRover Server
Основной компонент CapRover — это Docker-контейнер, который управляет всей PaaS-инфраструктурой. Запустим его.
# Запуск контейнера CapRover
# -p 80:80, -p 443:443: Открываем порты HTTP/HTTPS для приложений
# -p 3000:80: Временно открываем порт 3000 для доступа к CapRover UI (внутри контейнера на 80)
# -v /var/run/docker.sock:/var/run/docker.sock: Позволяем CapRover управлять Docker на хосте
# -v /var/caprover:/var/caprover: Сохраняем данные CapRover на хосте для персистентности
# caprover/caprover: Используем официальный Docker-образ CapRover
sudo docker run -p 80:80 -p 443:443 -p 3000:80 -v /var/run/docker.sock:/var/run/docker.sock -v /var/caprover:/var/caprover caprover/caprover
Эта команда запустит CapRover в фоновом режиме. Если вы хотите, чтобы контейнер перезапускался автоматически при перезагрузке сервера, добавьте флаг --restart always:
# Сначала остановите предыдущий контейнер, если он был запущен без --restart always
# sudo docker ps -a
# sudo docker stop
# sudo docker rm
# Затем запустите с --restart always
sudo docker run -p 80:80 -p 443:443 -p 3000:80 -v /var/run/docker.sock:/var/run/docker.sock -v /var/caprover:/var/caprover --restart always --name caprover-main caprover/caprover
Убедитесь, что контейнер CapRover запущен:
docker ps
Вы должны увидеть контейнер caprover/caprover в списке запущенных.
5. Настройка DNS
Для работы CapRover вам понадобится доменное имя (например, mydomain.com) и поддомен для самого CapRover (например, captain.mydomain.com), а также wildcard-поддомен для ваших приложений (.mydomain.com). Перейдите в панель управления вашего доменного регистратора или DNS-провайдера и создайте следующие записи:
- A-запись:
- Хост:
@(илиmydomain.com) - Значение:
ВАШ_IP_АДРЕС_VPS
- Хост:
- A-запись:
- Хост:
captain - Значение:
ВАШ_IP_АДРЕС_VPS
- Хост:
- A-запись:
- Хост:
- Значение:
ВАШ_IP_АДРЕС_VPS
- Хост:
Распространение DNS-записей может занять от нескольких минут до нескольких часов. Вы можете проверить статус распространения с помощью онлайн-инструментов, таких как dnschecker.org.
На этом этапе основные компоненты установлены. Теперь перейдем к конфигурации CapRover через его веб-интерфейс.
Конфигурация
После установки CapRover Server и настройки DNS, можно приступать к его первоначальной конфигурации через веб-интерфейс, а затем развертывать приложения.
1. Первоначальная настройка CapRover UI
Откройте веб-браузер и перейдите по адресу http://ВАШ_IP_АДРЕС_VPS:3000. Вы увидите страницу приветствия CapRover.
- Установите пароль администратора: При первом входе вам будет предложено установить пароль для учетной записи администратора CapRover. Выберите надежный пароль.
- Настройте домен CapRover: После входа в панель управления, перейдите в раздел "Cluster" (или "Настройки кластера"). В поле "Root Domain" введите ваш основной домен (например,
mydomain.com). CapRover автоматически настроитcaptain.mydomain.comдля своей панели управления. - Включите SSL: CapRover автоматически запросит и установит бесплатные SSL-сертификаты от Let's Encrypt для вашего корневого домена и всех развернутых приложений. Убедитесь, что DNS-записи полностью распространились, иначе получение сертификата может не удастся.
После успешной настройки домена и SSL, доступ к панели CapRover будет осуществляться по адресу https://captain.mydomain.com, а порт 3000 больше не будет использоваться напрямую (он будет перенаправлен на 80/443).
2. Развертывание первого приложения (Hello World Node.js)
Развернем простое Node.js приложение, чтобы продемонстрировать процесс.
Пример приложения (app.js):
const http = require('http');
const hostname = '0.0.0.0'; // Слушаем на всех интерфейсах
const port = process.env.PORT || 3000; // Используем порт из переменной окружения или 3000
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello from CapRover on ' + process.env.CAPROVER_APP_NAME + '!\n');
});
server.listen(port, hostname, () => {
console.log(Server running at http://${hostname}:${port}/);
});
Пример package.json:
{
"name": "my-first-caprover-app",
"version": "1.0.0",
"description": "A simple Node.js app for CapRover",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "Your Name",
"license": "MIT"
}
Пример .captain-definition (для CapRover):
Создайте файл с именем .captain-definition в корне вашего проекта. Этот файл сообщает CapRover, как собирать и развертывать ваше приложение.
{
"schemaVersion": 1,
"templateId": "node-js-express",
"variables": []
}
Для простых Node.js приложений CapRover может автоматически определить тип проекта. Если у вас более сложный проект или другой язык, вы можете указать собственный Dockerfile или использовать другие templateId.
Развертывание через CLI:
На вашей локальной машине, в корневой директории приложения:
# Авторизация в CapRover (потребует ввода URL CapRover и пароля)
captain login
# Создание нового приложения в CapRover
# Замените 'myapp' на желаемое имя приложения
captain app create myapp
# Развертывание приложения из текущей директории
# CapRover автоматически определит настройки на основе .captain-definition и package.json
captain deploy --appName myapp
После успешного развертывания, CapRover предоставит вам URL для вашего приложения (например, https://myapp.mydomain.com). Автоматически будет выпущен SSL-сертификат.
Развертывание через UI:
- Войдите в панель CapRover по адресу
https://captain.mydomain.com. - Перейдите в раздел "Apps" и нажмите "Create New App". Введите имя приложения (например,
myapp). - Перейдите в настройки созданного приложения. В разделе "Deployment" выберите "Tar File" или "Upload Git Repository". Для локальной папки можно сжать ее в
.tarили.zipи загрузить. Или подключитесь к Git-репозиторию. - После загрузки CapRover начнет сборку и развертывание. Вы можете отслеживать процесс в логах приложения.
3. Управление переменными окружения
Для настройки приложений и хранения секретов используйте переменные окружения. Это безопаснее, чем хранить конфиденциальные данные в коде или файлах конфигурации.
В панели CapRover, в настройках вашего приложения, перейдите в раздел "Environment Variables". Здесь вы можете добавлять пары ключ-значение. Например, для подключения к базе данных:
DB_HOST=my-database-serviceDB_USER=adminDB_PASSWORD=your_secret_password
После сохранения изменений, CapRover перезапустит ваше приложение, и новые переменные будут доступны. В Node.js они доступны через process.env.DB_HOST.
4. Настройка постоянного хранилища (Persistent Storage)
Если вашему приложению необходимо сохранять данные (например, загруженные файлы, пользовательские данные), которые не должны исчезать при перезапуске или обновлении контейнера, используйте постоянные тома CapRover.
В настройках приложения перейдите в раздел "Persistent Apps". Здесь вы можете указать путь внутри контейнера, который будет монтироваться к постоянному хранилищу на сервере.
# Пример: монтирование /app/data из контейнера к постоянному хранилищу
Container Path: /app/data
CapRover создаст и будет управлять этим томом. Данные, записанные в /app/data внутри контейнера, будут сохраняться даже после обновления приложения.
5. Интеграция с базами данных (One-Click Apps)
CapRover предоставляет "One-Click Apps" для быстрого развертывания популярных сервисов, таких как PostgreSQL, MongoDB, Redis, MySQL. Это значительно упрощает настройку базы данных для вашего приложения.
- В панели CapRover перейдите в раздел "One-Click Apps".
- Выберите нужную базу данных (например, "PostgreSQL").
- Введите имя сервиса (например,
my-pg-app) и нажмите "Deploy".
CapRover развернет базу данных как отдельное приложение и предоставит переменные окружения для подключения (например, PG_HOST, PG_USER, PG_PASSWORD). Вы можете скопировать эти переменные и добавить их в настройки вашего основного приложения.
6. Проверка работоспособности
После деплоя приложения и настройки домена, убедитесь, что все работает корректно:
- Откройте URL вашего приложения (например,
https://myapp.mydomain.com) в браузере. - Используйте
curlна сервере для проверки доступности:curl https://myapp.mydomain.comВы должны получить ответ от вашего приложения.
- Проверьте логи приложения через панель CapRover или CLI:
captain logs myappЭто поможет убедиться, что приложение запускается без ошибок и обрабатывает запросы.
- Проверьте статус Docker-контейнеров:
docker psУбедитесь, что контейнер вашего приложения и контейнеры CapRover запущены.
Теперь у вас есть полностью функционирующий CapRover, способный хостить ваши приложения.
Бэкапы и обслуживание
Надежное резервное копирование и регулярное обслуживание — ключевые аспекты для любого продакшн-сервера. CapRover упрощает деплой, но ответственность за бэкапы данных лежит на вас.
Что бэкапить
- Конфигурация CapRover: Все настройки CapRover, SSL-сертификаты, информация о приложениях и их переменные окружения хранятся в директории
/var/caprover. Это критически важная директория для восстановления всей вашей PaaS. - Данные приложений: Любые данные, которые ваши приложения сохраняют в постоянные тома CapRover (настроенные в секции "Persistent Apps"). Эти данные обычно находятся в поддиректориях
/var/caprover/appsили в других местах, куда монтируются тома. - Базы данных: Если вы используете One-Click Apps для баз данных (PostgreSQL, MongoDB и т.д.), их данные также необходимо резервировать. Обычно это делается с помощью специальных утилит для каждой БД (
pg_dumpдля PostgreSQL,mongodumpдля MongoDB). - Конфиги сервера: Если вы внесли какие-либо критические изменения в системные файлы (например,
/etc/ssh/sshd_config, конфигурация Nginx, если вы его используете напрямую), их также стоит бэкапить.
Стратегия бэкапа и инструменты
Для автоматизации бэкапов рекомендуется использовать cron для планирования задач и специализированные инструменты для эффективного хранения и управления версиями.
Популярные инструменты для бэкапа:
- Restic: Отличный инструмент для дедуплицированных, зашифрованных бэкапов в облачные хранилища (S3, Backblaze B2, SFTP).
- BorgBackup: Аналогично Restic, поддерживает дедупликацию и шифрование, хорошо работает с локальными и удаленными SSH-хранилищами.
- rsync: Простой и эффективный для синхронизации файлов, но не предоставляет дедупликации или версионирования "из коробки".
Рассмотрим пример скрипта для restic, бэкапирующего директорию CapRover и данные PostgreSQL в S3-совместимое хранилище. Предполагаем, что restic уже установлен (sudo apt install restic -y).
#!/bin/bash
# --- Настройки бэкапа ---
# URL репозитория Restic (например, S3-совместимое хранилище)
# Замените на ваши данные
REPO="s3:s3.eu-central-1.amazonaws.com/your-caprover-backup-bucket"
# Путь к файлу с паролем Restic (создайте его с правами 600)
PASSWORD_FILE="/etc/restic/backup_password"
# Переменные окружения для S3 (если используется)
export AWS_ACCESS_KEY_ID="YOUR_AWS_ACCESS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="YOUR_AWS_SECRET_ACCESS_KEY"
# Имя приложения PostgreSQL (если используется One-Click App)
POSTGRES_APP_NAME="my-pg-app"
# Путь для временного дампа БД
DUMP_FILE="/tmp/caprover_pg_dump.sql"
# --- Инициализация репозитория (выполнить один раз вручную) ---
# restic init --repo $REPO --password-file $PASSWORD_FILE
# --- Бэкап конфигурации CapRover ---
echo "--- Starting CapRover config backup ($(date)) ---"
restic backup /var/caprover \
--repo $REPO \
--password-file $PASSWORD_FILE \
--tag caprover_config \
--exclude-file /etc/restic/exclude-caprover.txt \
--verbose
echo "--- CapRover config backup finished ---"
# --- Бэкап базы данных PostgreSQL (если приложение существует) ---
# Проверяем, запущен ли контейнер базы данных
if docker ps --format '{{.Names}}' | grep -q "${POSTGRES_APP_NAME}_db"; then
echo "--- Starting PostgreSQL database backup ($(date)) ---"
# Создаем дамп базы данных
docker exec "${POSTGRES_APP_NAME}_db" pg_dumpall -U postgres > "$DUMP_FILE"
# Бэкапим дамп
restic backup "$DUMP_FILE" \
--repo $REPO \
--password-file $PASSWORD_FILE \
--tag ${POSTGRES_APP_NAME}_db \
--verbose
# Удаляем временный файл дампа
rm "$DUMP_FILE"
echo "--- PostgreSQL database backup finished ---"
else
echo "PostgreSQL app ${POSTGRES_APP_NAME} not found or not running. Skipping DB backup."
fi
# --- Очистка старых снимков (политика хранения) ---
echo "--- Starting cleanup of old snapshots ($(date)) ---"
restic forget \
--repo $REPO \
--password-file $PASSWORD_FILE \
--prune \
--keep-hourly 24 \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-yearly 1
echo "--- Cleanup finished ---"
echo "--- Backup process completed ($(date)) ---"
Создайте файл /etc/restic/backup_password с вашим паролем для Restic и установите права sudo chmod 600 /etc/restic/backup_password.
Создайте файл /etc/restic/exclude-caprover.txt для исключения ненужных файлов из бэкапа /var/caprover, например, кэшей Docker:
/var/caprover/docker-cache
Сохраните этот скрипт как /usr/local/bin/caprover_backup.sh и сделайте его исполняемым:
sudo nano /usr/local/bin/caprover_backup.sh # Вставьте скрипт
sudo chmod +x /usr/local/bin/caprover_backup.sh
Добавьте задачу в cron для ежедневного выполнения:
sudo crontab -e
Добавьте строку для ежедневного бэкапа, например, в 03:00 ночи:
0 3 /usr/local/bin/caprover_backup.sh >> /var/log/caprover_backup.log 2>&1
Куда складывать бэкапы
- Облачные хранилища: S3-совместимые сервисы (AWS S3, DigitalOcean Spaces, Backblaze B2, MinIO) — это наиболее надежный и масштабируемый вариант. Храните бэкапы географически отдельно от вашего VPS.
- Отдельный VPS: Можно использовать второй, менее мощный VPS исключительно для хранения бэкапов.
- Локальный диск: Если нет других вариантов, можно сохранять бэкапы на отдельный раздел диска VPS, но это не защитит от сбоя всего сервера.
Обновления: rolling vs maintenance window
Регулярные обновления важны для безопасности и получения новых функций. Для CapRover и Docker применяются разные подходы:
- Обновления CapRover: CapRover можно обновить до последней версии через CLI командой
captain updateили через веб-интерфейс в разделе "Cluster" -> "Update CapRover". Это обычно не требует простоя и является "rolling update". - Обновления Docker: Обновления Docker Engine и Docker Compose выполняются через менеджер пакетов (
sudo apt update && sudo apt upgrade -y). Эти обновления могут потребовать перезапуска Docker-сервиса, что приведет к кратковременному простою всех ваших приложений. Планируйте это в "maintenance window" (окно обслуживания), когда трафик минимален. - Обновления ОС: Обновления операционной системы (Ubuntu) также выполняются через
apt. Крупные обновления ядра или системных компонентов почти всегда требуют перезагрузки сервера, что также вызывает простой. Планируйте их в maintenance window.
Всегда тестируйте обновления на стейджинг-среде, если это возможно, прежде чем применять их на продакшн-сервере.
Troubleshooting + FAQ
Даже при самой тщательной настройке могут возникнуть проблемы. Этот раздел поможет вам диагностировать и решить наиболее распространенные неполадки, а также ответит на частые вопросы.
CapRover UI недоступен по адресу http://ВАШ_IP_АДРЕС_VPS:3000
Что проверить:
- Состояние контейнера CapRover: Убедитесь, что контейнер CapRover запущен.
- Брандмауэр (UFW): Убедитесь, что порт 3000 открыт.
- Сетевое подключение: Проверьте, что ваш VPS доступен из интернета (например, попробуйте пингануть его).
sudo docker ps -a | grep caprover/caprover
Если контейнер не запущен или находится в состоянии "Exited", проверьте логи:
sudo docker logs caprover-main # Или ID контейнера
sudo ufw status verbose
Если порт 3000 не разрешен, добавьте правило:
sudo ufw allow 3000/tcp
Развертывание приложения завершается ошибкой
Что проверить:
- Логи деплоя: CapRover предоставляет подробные логи процесса сборки и развертывания. Доступны через UI в разделе приложения ("Logs" -> "Deployment Logs") или через CLI:
- Логи приложения: После развертывания, если приложение не запускается, проверьте его рантайм-логи.
- Файл
.captain-definition: Убедитесь, что файл.captain-definitionкорректен и соответствует требованиям вашего приложения (например, указывает правильныйtemplateIdилиdockerfileLines). - Переменные окружения: Проверьте, все ли необходимые переменные окружения установлены и доступны приложению.
- Ресурсы сервера: Убедитесь, что на сервере достаточно RAM и CPU. Недостаток памяти часто приводит к сбоям при сборке Docker-образов.
captain deploy --appName myapp --log
captain logs myapp
SSL-сертификат Let's Encrypt не выдается или истекает
Что проверить:
- DNS-записи: Самая частая причина. Убедитесь, что A-записи для вашего основного домена,
captain.yourdomain.comи.yourdomain.comуказывают на IP вашего VPS и полностью распространились. Используйте dnschecker.org. - Брандмауэр: Порты 80 и 443 должны быть открыты для входящих соединений, так как Let's Encrypt использует их для проверки владения доменом (ACME-challenge).
- Лимиты Let's Encrypt: Если вы часто пытались получить сертификаты, возможно, вы наткнулись на лимиты Let's Encrypt. Подождите некоторое время.
- Логи CapRover: Проверьте системные логи CapRover для ошибок, связанных с ACME или Nginx.
sudo ufw status verbose
sudo docker logs caprover-main
Приложение работает медленно или падает
Что проверить:
- Ресурсы VPS: Проверьте загрузку CPU, использование RAM и дисковый I/O на вашем VPS.
- Логи приложения: Ищите ошибки, утечки памяти или долгие операции в логах вашего приложения.
- Масштабирование: Если приложение сильно нагружено, попробуйте увеличить количество экземпляров приложения в настройках CapRover.
- Оптимизация кода: Возможно, проблема в самом коде приложения, а не в инфраструктуре.
htop # Для интерактивного мониторинга
df -h # Для использования диска
Как подключить собственную базу данных (не One-Click App)?
Если ваша база данных развернута вне CapRover (например, на отдельном сервере или в управляемом облачном сервисе), вы можете подключиться к ней, используя переменные окружения.
В настройках вашего приложения CapRover, в разделе "Environment Variables", добавьте переменные, содержащие данные для подключения к вашей внешней БД (хост, порт, имя пользователя, пароль, имя базы данных). Например:
DB_HOST=my-external-db.example.com
DB_PORT=5432
DB_USER=myuser
DB_PASSWORD=mypassword
DB_NAME=mydb
Затем используйте эти переменные в коде вашего приложения для установления соединения.
Какой VPS-конфиг минимально подойдёт?
Для базовой установки CapRover и нескольких нетребовательных приложений (например, статические сайты, простые API) минимально подойдет VPS с 2 vCPU, 4 GB RAM и 80 GB SSD-диском. Этого будет достаточно для ознакомления с платформой и запуска небольших проектов. Однако для более серьезных задач или нескольких активных приложений рекомендуется увеличить ресурсы.
Что выбрать — VPS или dedicated для этой задачи?
Для большинства пользователей, включая разработчиков, solo-фаундеров и небольшие команды, VPS будет оптимальным выбором. Он предлагает отличный баланс между стоимостью, гибкостью и производительностью. Выделенный сервер стоит рассматривать только в случаях крайне высокой нагрузки, специфических требований к аппаратному обеспечению, строгих регуляторных норм или когда вы достигли пределов масштабирования на самом мощном VPS.
Как масштабировать приложение в CapRover?
Масштабирование приложений в CapRover очень простое. В панели управления CapRover, в настройках вашего приложения, найдите раздел "Instances". Здесь вы можете указать желаемое количество экземпляров (контейнеров) вашего приложения. CapRover автоматически развернет и будет управлять этими экземплярами, распределяя между ними нагрузку. Это позволяет легко увеличивать производительность вашего приложения по мере роста трафика.
Выводы и следующие шаги
Вы успешно развернули CapRover на своем VPS, создав мощную и гибкую self-hosted PaaS. Теперь у вас есть полный контроль над вашей инфраструктурой, возможность быстро деплоить приложения, базы данных и сервисы, а также пользоваться преимуществами автоматического SSL и CI/CD. Это значительно упрощает управление жизненным циклом ваших проектов, снижает операционные расходы и предоставляет ценный опыт в области DevOps.
Вот несколько шагов, куда можно двигаться дальше:
- Исследуйте дополнительные возможности CapRover: Ознакомьтесь с такими функциями, как вебхуки для автоматического деплоя при пуше в Git, настройка пользовательских доменов для каждого приложения, мониторинг ресурсов и другие One-Click Apps.
- Разверните более сложные проекты: Попробуйте развернуть полноценное full-stack приложение, включающее фронтенд, бэкенд и базу данных, используя различные языки программирования и фреймворки.
- Оптимизация и безопасность: Продумайте дополнительные меры безопасности для ваших приложений и сервера. Оптимизируйте конфигурацию CapRover и ваших приложений для повышения производительности и экономии ресурсов.
- Масштабирование кластера: Если одного VPS становится недостаточно, изучите возможности CapRover по добавлению новых узлов (серверов) в ваш кластер для горизонтального масштабирования.
CapRover — это отличный инструмент, который позволяет вам быть независимым и эффективным в управлении вашими веб-проектами. Продолжайте экспериментировать, учиться и развивать свои навыки!