Инструкция по установке экземпляра ПО “Сервис видеоконсультаций Voda”
CCS Deployment - Универсальная система развертывания
Поддерживаемые операционные системы скрипта развертывания
- Операционные системы семейства Linux (предпочтительно Debian 12+)
Подключитесь на пустой сервер (OS предпочтительно Debian)
Либо используя пароль, либо по публичному ключу.
Как получить публичный ключ на вашем компьютере:{
- Windows (PowerShell):
cat ~\.ssh\id_rsa.pub - Windows (Git Bash):
cat ~/.ssh/id_rsa.pub - Mac / Linux:
cat ~/.ssh/id_rsa.pub(Если ключа нет, создайте его командой:ssh-keygen)
Сменить root пароль на чистой системе (необязательно)
Сгенерировать новый пароль (не забудьте сохранить его себе)
openssl rand -base64 16
Установить новый пароль (если вы только получили пароль от провайдера на чистую ОС)
passwd
Быстрая установка на чистую ОС
Подготовка на чистой системе
На минимальной установке Linux (например, Debian minimal) выполните следующие команды:
# Под root
# Создаем мастер-скрипт установки и делаем его исполняемым. Внутрь копируем содержимое prepareOS/first.sh
vi first.sh && chmod +x first.sh
# Запускаем установку
./first.sh
Скопируйте содержимое скрипта prepareOS/first.sh из репозитория или документации.
# Запускаем установку
./first.sh
Что происходит при запуске
Скрипт first.sh автоматически выполнит:
- Поиск конфигураций - найдет существующие файлы конфигурации установки
- Определение ОС - автоматически определит дистрибутив и версию
- Установку зависимостей - установит git, curl, wget, vim, sudo
- Создание пользователя - создаст или выберет пользователя для CCS
- Клонирование репозитория CCS.Deployment - скачает проект РАЗВЕРТЫВАНИЯ с GitFlic или GitHub
- Запуск мастера установки - автоматически запустит основной процесс установки
Параметры и опции скрипта first.sh
Использование
# Интерактивный режим (рекомендуется)
./first.sh
# Использование готовой конфигурации
./first.sh /path/to/config.cfg
Интерактивные опции
Выбор конфигурации
- 0 - Стандартная установка без использования конфигурации
- 1-N - Использование существующего файла конфигурации
- Enter - Стандартная установка (по умолчанию)
Управление пользователями
- 0 - Создать нового пользователя для CCS (по умолчанию)
- 1-N - Использовать существующего пользователя из списка
Настройка паролей (для новых пользователей)
- 1 - Ввести пароль вручную (с проверкой надежности)
- 2 - Автоматическая генерация надежного пароля (рекомендуется, по умолчанию)
- Enter - Автоматическая генерация пароля (по умолчанию)
Управление паролями:
- Пароли автоматически сохраняются в файл
.ccs_install_env - При повторном создании того же пользователя пароль считывается из файла
- Формат хранения:
PASS_USERNAME="generated_password" - Файл защищен правами доступа 600 (только владелец). Не виден командой ls.
Выбор репозитория
- 1 - GitFlic (рекомендуется для России)
- 2 - GitHub (международный)
- 3 - Ввести URL вручную
Методы авторизации Git
- 1 - SSH ключ
- 2 - Публичный доступ (без авторизации)
- 3 - Токен развертывания (GitFlic)
Настройка под пользователем
В конце скрипт спросит, начать ли установку под пользователем. В текущей реализации она ничего не делает, так как вам нужно самостоятельно переподключиться под пользователем и выполнить указанные действия (см. инструкцию дальше).
Повторное использование
Повторный вызов безопасен. Скрипт не будет делать повторно, то что уже сделано и спросит о всех значимых действиях.
Использование сохраненной конфигурации
# Скрипт автоматически найдет и предложит использовать
# существующие конфигурации при повторном запуске
./first.sh
Ручное указание конфигурации
./first.sh /path/to/ccs_install_20250911_123456.cfg
Что делать дальше (под пользователем)
Войти под созданным пользователем:
- Не используйте su, а создайте именно новое подключение под нужным пользователем. Это Важно.
Открыть и настроить config.sh (через vim или удаленный редактор в IDE или специальном ПО):
vim ~/config.sh
# заполните параметры (см. ниже) и установите
config_is_ready=1
Настройки config.sh
- Конфиг разбит на несколько блоков
- В самом верху находится флаг готовности “config_is_ready”
- Блок разрешенных исходящих запросов из под этого пользователя (можно пропустить).
- Если указана *, то разрешены все исходящие
- Важно. Если вы все же перечислите разрешенные, то имейте ввиду, что обновление кода не будет работать если в списке нет github/gitflic/…, а их добавлять крайне не рекомендуется, так как в этом случае такая защита теряет смысл.
- На период обновления вы можете отключать механизм, установив *.
- Изменения вступают в силу НЕ СРАЗУ после сохранения файла, а в течении нескольких минут.
- Вы можете применить их сразу выполнив systemctl start ccs-rootless-egress.service (потребуется пароль от текущего пользователя).
- Механизм работает по IP, который определяется из url, таким образом мы не можем ограничить точным url с путем (если открыто для домена, то открыта для всех его путей)
- Список используемых сервисов и общие настройки для всех сервисов
- В списке укажите только те, что используете. Например, для сервиса Voda, потребуется db, ccs_voda, nginx, coturn, backup. Обычно coturn работает на отдельном сервисе, но для примера можно и на том же.
- ВНИМАНИЕ! Если используете coturn, то он должен быть установлен ПОСЛЕ nginx. То есть порядок может быть такой: db, ccs_voda, nginx, coturn, backup. А НЕ ТАКОЙ: db, ccs_voda, coturn, nginx, backup.
- В списке укажите только те, что используете. Например, для сервиса Voda, потребуется db, ccs_voda, nginx, coturn, backup. Обычно coturn работает на отдельном сервисе, но для примера можно и на том же.
- Блоки ваших сервисов
-
Для каждого сервиса имеется ряд специфичных настроек. В шаблоне уже введены наиболее подходящие настройки, но кое-какие специфичны именно для конкретного разворачиваемого сервиса.
-
db
- Указанные настройки можно не менять. Все подписаны.
-
ccs_app
- Это наше приложение, написанное на платформе GoCore и для него есть свой шаблон развертывания (app_template).
- Обратите внимание, что это может быть и другое имя, например ccs_voda, но легче не переписывать и использовать по умолчанию ccs_app.
- Если вы будете переименовывать, то все переменные этого сервиса также должны начинаться с ccs_voda, а не с ccs_app. Это легко сделать в IDE.
- ccs_app_service_name должно соответствовать имени указанном в списке сервисов (ccs_voda).
- ccs_app_name совпадает с предыдущим
- ccs_app_init_sql в репозитории вашего проекта, должна лежать init база в DB/ccs.init.sql (сделано). Если база файл назван по другому, укажите это в этой переменной. Она будет залита при установке.
- ccs_app_git_url указать git репозиторий приложения
- ccs_app_git_branch указать ветку
- Авторизация будет запрошена скриптом в процессе установке
- ccs_app_domains это список доменов для которых будут созданы конфигурационные файлы.
- ccs_app_nginx_location - (УСТАРЕЛО) это список маршрутов, которые nginx будет перенаправлять в приложение (ccs_voda). Те маршруты которые не указаны будут обрабатываться самим nginx как статика (из диреткории ccs_app_public_root).
- Теперь эти значения берутся из самого проекта и собираются автоматически в routes/.env
- Настройки для сервиса бэкапирования
- Настройки подписаны. Но на некоторые обращу внимание.
- db_remote_address, files_remote_address - список серверов, куда отправлять бэкапы. Если указать localhost, то бэкапы будут сохраняться только локально ~/backup. Если хотите сохранять на удаленный сервер укажите его в формате ssh (пользователь@адрес). Если указываете внешний сервис, localhost указывать в списке НЕ НАДО, локально все равно будет сохраняться. Можно указать несколько серверов через пробел.
- files_directories - директории сервиса, которые следует бэкапить (нарастающим итогом через rsync). База же сохраняется, та что создана для указанного сервиса. Бд архивируется и отправляется согласно расписанию (каждый раз новый файл).
-
ccs_app_front
- Это указано для примера, когда есть еще дополнительно отдельный сайт, который также нужно расположить на том же сервере. Он может быть интегрирован с основным приложением или быть независимым. Иногда для наших сервисов мы пишем отдельный сайт, помимо основной админки, которая имеется из коробки и может быть полноценным сервисом для пользователей и не требовать отдельного сайта. Такой отдельный сайт может быть также построен на GoCore и тогда имеет схожие настройки. Или на другой технологии, тогда там будут свои настройки.
- Для сервиса Voda, который мы рассматриваем в примере, этого сервиса просто нет. Просто сотрите этот блок (все переменные начинающиеся на ccs_app_front_).
-
nginx
- Базовые настройки не требуют изменений
- nginx_services - перечислите сервисы, на которые должен смотреть nginx при установке (какие конфиги подготавливать исходя из списка доменов). Не забудьте вписать coturn, если используете его.
-
coturn
- Там также подписаны все настройки.
- coturn_domain указать домен, который также нужно создать и настроить ему DNS на этот сервер
- coturn_domains - этот же домен надо прописать в эту переменную, чтобы nginx подхватил его и создал конфиг
- Важно! Не забудьте добавить сервис “coturn” в список сервисов для nginx в переменной nginx_services (см. пункт про переменные nginx выше)
- coturn_external_ip - для корректной работы пропишите также внешний IP вашего сервера
- coturn_username, coturn_password - придумайте и впишите. Они будут использованы в настройках клиентов.
- Необходимо единожды открыть порты. Для этого есть скрипт (ccs-prepare/open_ports_for_coturn.sh). Его надо запустить из под root, но при этом через sudo вашего пользователя (в примере ccs_voda)
- Порты берутся из конфига или используются дефолтные
# Под root sudo /home/ccs_voda/ccs-prepare/open_ports_for_coturn.sh ccs_voda -
backup
- backup_services - перечислите сервисы, для которых нужно делать бэкапы согласно их настройкам.
-
- Все что ниже настраивать не надо.
- После заполнения, установите параметр config_is_ready=1 (в самом верху) и сохраните.
DNS
Для тех доменов, которые вы указали в конфиге необходимо прописать A и AAAA записи вашего сервера. AAAA может быть не обязательн, но если он есть, то должен указывать корректно. В противном случае certbot не сможет корректно подтвердить владение сервером и не выпустит сертификаты.
Установить сервисы из конфига (пример):
Авторизация в docker
Во время установки, система запрашивает образы из docker. Если образов много, или если вы делаетенесколько попыток (так как забыли что-то указать в конфиге или еще по каким причинам), вы можете столкнуться с лимитом на неавторизованные запросы.
You have reached your unauthenticated pull rate limit. https://www.docker.com/increase-rate-limit
Чтобы избежать этого, или по факту, авторизуйтесь в докере (вам нужен аккаунт на docker.com):
# Скрипт использует podman, а не docker, поэтому используем его
podman login docker.io
Запуск установки
Чтобы запустить установку, наберите start.sh имя_команды список_сервисов_к_которым_применить_команду
Вы всегда можете просто запустить ./start.sh и получить помощь по командам и синтаксису. А также список прописанных в конфиге сервисов “Available services:”
./start.sh install db nginx ccs_app ccs_app_front backup
Следуйте инструкциям скрипта.
- После успешной установки сервис уже может работать на http.
- Появится файл .env в котором будут сохранены данные установки, в том числе и root пароль БД
- Далее вам может потребоваться отредактировать конфигурационные файлы своих сервисов (не путать с config.sh), например, прописать актуальные “боевые” настройки для почты, различных внешних сервисов, да и общие настройки конкретного запущенного инстанса, например Имя и актуальный url. См. пункт настроек ниже.
- Если используете coturn, откройте порты (под root):
# Под root
sudo /home/ccs_voda/ccs-prepare/open_ports_for_coturn.sh ccs_voda
- Также потребуется установить сертификаты. Это будет выполнено с установкой сертификатов для основного сервиса (если в config.sh все верно прописано: coturn_domains и coturn в массиве сервисов nginx_services)
Правка конфига конкретного сервиса после установки
Рассмотрим на примере сервиса Voda. Ключевые параметры уже заполнены, такие как настройки подключения к БД и прочее.
- Перейдите в директорию сервиса ~/apps/ccs_voda/config
- Вообще сервисы располагаются в ~/services/, например nginx, db, backup, но для кастомных сервисов (веб приложений) выделена отдельная директория ~/apps/. Там будет располагаться кодовая база и все что относится к конкретному приложению.
- Откройте для редактирования config.json и отредактируйте, то что вам нужно
- instance
- name
- url - может использоваться внутри приложения для формирования внешних ссылок, в том числе и в письма. Суда следует вписать актуальный домен.
- notification
- mail
- mailTransport …
- from
- notificationEmail - можно несколько через запятую
- feedbackEmail
- Может что-то еще
- iceServers
- Логин и пароль вы указывали в config.sh, их нужно взять оттуда
- instance
После изменения и сохранения конфигурации требуется перезапустить сервис, а также nginx
./start.sh restart ccs_app nginx
SSL‑сертификаты: выпуск и автообновление
Как установить
После установки сервисов, включая nginx, и настройки DNS для указанных доменов, можно выпускать сертификаты.
Это делается под root пользователем из домашней директории.
# под root
#./cert.sh <имя_пользователя>
./cert.sh ccsuser
Необходимо ответить на стандартные вопросы certbot, указав почту администратора и согласившись с лицензией.
После успешного выпуска, нужно снова зайти под пользователем (не через su, а отдельной сессией) и выполнить повторную установку сервиса nginx.
# Под пользователем ccsuser (или того, которого вы создали на начальном этапе)
./start.sh install nginx
При этом скрипт, обнаружив в нужной директории сертификаты, подготовит новые конфиги уже для работы по https, а http будет перенаправляться на https.
Что делает система
- Первичный выпуск выполняется скриптом под root:
./cert.sh <имя_пользователя>.- Скрипт читает домены из
~/config.shпользователя (массивы*_domainsизnginx_services). - Выпуск по схеме webroot (HTTP‑01). Файлы Let’s Encrypt появляются в
/etc/letsencrypt/live/<domain>/. - Копии ключей и цепочки сохраняются в пользовательский каталог
${nginx_ssl_path}/<domain>/. - Создаётся deploy‑hook
/usr/local/bin/ccs-cert-deploy.sh, который при продлении:- копирует свежие сертификаты пользователю;
- перезапускает
nginxвнутри контейнера: мягкийnginx -s reloadс проверкой конфига и fallbackpodman restart.
- Скрипт читает домены из
- Автообновление сертификатов выполняет cron:
/etc/cron.d/ccs-cert-renew.- По умолчанию 2 раза в день:
03:17и15:17. - Запускается стандартная команда Certbot:
certbot renew --quiet --deploy-hook /usr/local/bin/ccs-cert-deploy.sh. - Certbot сам решает, когда реально обновлять — если ещё рано, ничего не делает.
- По умолчанию 2 раза в день:
Логи и отладка
- Логи Certbot:
/var/log/letsencrypt/letsencrypt.log. - Лог deploy‑hook:
/var/log/ccs-cert-deploy.log. - Пробный прогон (без реального выпуска):
certbot renew --dry-run --deploy-hook /usr/local/bin/ccs-cert-deploy.sh
Готово.
Обновление приложения
Кодовая база
Обновление производится через тот же скрипт ./start.sh и предусмотрено несколько режимов:
- update - Обновит только код из репозитория и перезапустит сервис
- update2 - Обновит код из репозитория, выполнит сборку фронт части приложения и перезапустит сервис.
- update3 - Обновит код из репозитория, выполнит npm install, выполнит сборку фронт части приложения и перезапустит сервис.
После обновления обязательно перезапустить nginx
./start.sh update2 ccs_app && ./start.sh restart nginx
Обновление БД
Платформа GoCore на которой построено приложение большую часть профайлов различных сущностей хранит в базе данных. Поэтому при крупных доработках, требуется также обновление базы.
Автоматизированного механизма миграций в текущей версии продукта не имеется, однако разработчик может смерджить необходимые таблицы встроенными средствами. Это может быть сделано на компьютере разработчика, но для этого потребуется скачивать актуальную базу. Или это можно сделать через удаленное подключение к базе на сервере через ssh тунель. Ниже будет описано, как настроить такой доступ.
Действия для обновления
- Остановить сервис. ./start.sh stop ccs_app
- Выполнить резервный бэкап базы.
- Можно использовать скрипт, котрый используется фоновой задачей:
./services/backup/scripts/ccs_app_backup.sh day - Восстановить базу из бекапа можно скриптом ./fillDB.sh из домашней директории пользователя.
- Можно использовать скрипт, котрый используется фоновой задачей:
- Смерджить базу локально (тогда нужно будет ее залить) или удаленно
- Перезапустить ccs_app и nginx
./start.sh restart ccs_app nginx
Настройка тунеля для удаленного доступа к БД
# Пробрасываем локальный порт 3306 к серверному 127.0.0.1:33060
ssh -N -L 3306:127.0.0.1:33060 user@your.server
# Затем подключаемся клиентом к localhost:3306
# host: localhost
# port: 3306
# user/pass: согласно настройкам/приложению
Важно:
- При
db_publish_bind_address=127.0.0.1правила firewall не требуются. - Не публикуйте БД на
0.0.0.0, если это не необходимо. Если всё же нужно —- используйте нестандартный порт (
db_ext_port), - откройте только нужный порт в firewall (желательно ограничив по исходному IP),
- используйте нестандартный порт (