Инструкция по установке экземпляра ПО "Сервис видеоконсультаций Voda"

Инструкция по установке экземпляра ПО "Сервис видеоконсультаций Voda"

CCS.Deployment - Универсальная система развертывания

Подготовка

Чистый сервер на Linux (предпочтительно Debian 13+)

Закажите в облачном дата-центре (с соответствием 152-ФЗ) чистый сервер или создайте его в собственной инфраструктуре.

Для ознакомления достаточно сервера например с такими характеристиками: 2x3.3 ГГц, 4ГБ RAM, 50ГБ SSD (можно и слабее).

ОС: Debian 12-13

Домены

Подготовьте 2 домена (можно поддомены). Один для самого сервиса, другой для сервиса coturn.

Например: serv1.voda-sale.ru и coturn.serv1.voda-sale.ru.

Пропишите DNS записи A, указав IP созданного сервера.

Проследите, чтобы при наличии DNS записей типа AAAA, там был указан IPv6 созданного сервера, или удалите эти записи. Так как если оставить AAAA записи по умолчанию (ведут на хостинг провайдера), то подключение может быть не стабильно и работать через раз.

Установка

Подключитесь на пустой сервер

Либо используя пароль, либо по публичному ключу.

Как получить публичный ключ на вашем компьютере:

  • 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

Установка зависимостей и настройка под root

На минимальной установке Linux (например, Debian minimal) выполните следующие команды:

# Под root
# Получаем и запускаемм мастер-скрипт установки из открытого репозитория (https://gitflic.ru/project/ccsmskru/ccs-deployment-first)
wget "https://gitflic.ru/project/ccsmskru/ccs-deployment-first/blob/raw?file=first.sh" -O first.sh && chmod +x first.sh
Что происходит при запуске

Скрипт first.sh автоматически выполнит:

  1. Поиск ранее используемых конфигураций
  2. Определение ОС - автоматически определит дистрибутив и версию
  3. Установку зависимостей - установит git, curl, wget, vim, ...
  4. Создание пользователя под которым будет работать контейнеры с сервисами - создаст или выберет из созданных пользователя для CCS
  5. Клонирование репозитория развертывания CCS.Deployment - скачает проект РАЗВЕРТЫВАНИЯ с GitFlic или GitHub
  6. Настройки для coturn - Если проекту требуется coturn (именно на этом сервере, то можно сразу запустить настройки для него)

Параметры и опции скрипта first.sh

Использование

# Интерактивный режим (рекомендуется)
./first.sh

# Использование готовой конфигурации
./first.sh /path/to/config.cfg

Интерактивные опции (скрипт все подскажет при установке)

Выбор конфигурации

  • 0 - Стандартная установка без использования конфигурации
  • 1-N - Использование существующего файла конфигурации
  • Enter - Стандартная установка (по умолчанию)

Управление пользователями

  • 0 - Создать нового пользователя для CCS (по умолчанию). Укажите имя например ccs_voda
  • 1-N - Использовать существующего пользователя из списка

Настройка паролей (для новых пользователей)

  • 1 - Ввести пароль вручную (с проверкой надежности)
  • 2 - Автоматическая генерация надежного пароля (рекомендуется, по умолчанию)
  • Enter - Автоматическая генерация пароля (по умолчанию)

Управление паролями:

  • Пароли автоматически сохраняются в файл .ccs_install_env
  • При повторном создании того же пользователя пароль считывается из файла
  • Формат хранения: PASS_USERNAME="generated_password"
  • Файл защищен правами доступа 600 (только владелец). Не виден командой ls.

Выбор репозитория с скриптами развертывания CCS.Deployment

  • 1 - GitFlic (рекомендуется для России)
  • 2 - GitHub (международный)
  • 3 - Ввести URL вручную

Методы авторизации Git

  • 1 - SSH ключ (ваш публичный ключ нужно будет добавить на github как ключ развертывания)
  • 2 - Публичный доступ (без авторизации)
  • 3 - Токен развертывания (GitFlic)

Настройка coturn

Скрипт предложит сразу выполнить настройку coturn. Выполните это, если вам необходим сервис coturn и вы устанавливаете его на этом же сервере.

Для ознакомления с сервисом Voda coturn устанавливается на том же сервере, что и сам сервис, поэтому эту настройку необходимо выполнить.

Настройка под пользователем

В конце скрипт спросит, начать ли установку под пользователем. В текущей реализации она ничего не делает, так как вам нужно самостоятельно переподключиться под пользователем и выполнить указанные действия (см. инструкцию дальше).

Повторное использование

Повторный вызов безопасен. Скрипт не будет делать повторно, то что уже сделано и спросит о всех значимых действиях.

Использование сохраненной конфигурации

# Скрипт автоматически найдет и предложит использовать
# существующие конфигурации при повторном запуске
./first.sh

Что делать дальше (под пользователем)

Войти под созданным пользователем:

  • Не используйте su, а создайте именно новое подключение под нужным пользователем. Это Важно.

Открыть и настроить config.sh (через vim или удаленный редактор в IDE или специальном ПО):

vim ~/config.sh
# заполните параметры (см. ниже) и установите
config_is_ready=1

Настройки config.sh

Ниже описаны константы, которые нужно заполнить в ~/config.sh. Он генерируется из шаблона и имеет настройки по умолчанию, однако они универсальные под различные сервисы. Часть нужно скорректировать, часть удалить.

Перед описанием всех настроек, вот пример настроенного конфига для сервиса voda для ознакомления.

(можете скопировать его, исправив домены, IP и логин и пароль для сервиса COTURN)

#!/bin/bash

# Универсальный конфигурационный файл CCS
# Поддерживает: Debian/Ubuntu, RHEL/CentOS/Rocky Linux/Fedora

config_is_ready=1

# =====================================================================================
# ОСНОВНЫЕ ПУТИ И НАСТРОЙКИ
# =====================================================================================

DEPLOY_PATH="${HOME}/CCS.Deployment" # путь к файлам развертывания (исключая start.sh)

# Определение путей в зависимости от ОС
source "${DEPLOY_PATH}/config_utils/os_paths.sh"

apps_path=~/apps
services_path=~/services
env_file="${HOME}/.env"

# Глобальный список разрешённых исходящих (rootless, per-user egress на nftables)
# Можно указывать домены и/или IP/CIDR. "*" — разрешить всё.
# Примеры:
# allowed_outgoing_urls_or_ip=("mail2.pro-fm.com" "1.2.3.4" "gitflic.ru")
# allowed_outgoing_urls_or_ip=("*")
# ВАЖНО: Если вы используете SMTP (например, порт 587), убедитесь, что хост почтового сервера разрешен.
allowed_outgoing_urls_or_ip=("*")
#allowed_outgoing_urls_or_ip=("АДРЕС_БЭКАПОВ" "git@github.com")

# =====================================================================================
# СЕРВИСЫ
# =====================================================================================

# Список сервисов для развертывания
declare services=("db" "ccs_voda" "nginx" "coturn" "backup")

# Сетевые настройки Podman
# Имя сети. Используйте 'host' для host networking (фолбэк при коллизиях подсети)
podman_net='mynet'
# Подсеть для пользовательской сети Podman (пример: '192.168.200.0/24').
# Если оставить пустым, будет создана сеть без явной подсети.
# При конфликте маршрутов скрипт установки может автоматически переключить podman_net на 'host'.
podman_subnet=''

# =====================================================================================
# НАСТРОЙКИ БАЗЫ ДАННЫХ
# =====================================================================================

db_service_name="mariadb"
db_data_path="${services_path}/db/mariadb_data"
db_conf_file="${services_path}/db/50-server.cnf"

# Версия и источник базового образа MariaDB для контейнера
# Можно указать конкретный патч-релиз (например, 12.1.2), минорную ветку (12.1),
# или мажорную (12) — в двух последних случаях будет браться последний патч релиза ветки.
# Значения по умолчанию подобраны под актуальную стабильную версию.
db_base_image_registry="docker.io/library"   # реестр/организация образа
db_base_image_name="mariadb"                 # имя образа
db_base_image_tag="12.1.2"                   # тег образа (актуальная версия по умолчанию)

# Публикация порта БД для удалённого доступа/SSH‑туннеля
# Рекомендованный безопасный сценарий: публиковать только на 127.0.0.1 и подключаться через SSH‑туннель.
# Примеры туннеля см. в README (раздел «Подключение к БД через SSH‑туннель»).
# 1 — включить публикацию порта, 0 — не публиковать порт хоста
db_publish_enabled=1
# Адрес привязки публикации. 127.0.0.1 — безопасно (порт доступен только локально на сервере)
db_publish_bind_address="127.0.0.1"
# Внешний порт БД на хосте (нестандартный по умолчанию, чтобы снизить вероятность коллизий/сканов)
db_ext_port=33060

# =====================================================================================
# CCS ПРИЛОЖЕНИЯ
# =====================================================================================

# CCS APP (Backend)
ccs_voda_service_name="ccs_voda"
ccs_voda_name="ccs_voda"
ccs_voda_service_template="app_template"
#ccs_voda_service_dir="ccs_voda" # Директория для кастомных файлов. По умолчанию = ccs_voda_service_name
ccs_voda_path="${apps_path}/${ccs_voda_name}"
ccs_voda_git_url="git@gitflic.ru:ccsmskru/voda.git" # SSH формат. Или https://gitflic.ru/project/user/repo.git
ccs_voda_git_branch="master"


# Настройки приложения
ccs_voda_node_max_memory=2048
ccs_voda_port=8080
ccs_voda_ext_port=8080
ccs_voda_db_service_name="mariadb"
ccs_voda_init_sql="ccs.init.sql"

# Настройки доменов и Nginx
# Можно указать протокол, тогда конфиг будет соответствующий. По умолчанию HTTPS
# Можно указать несколько доменов разделенных пробелом
ccs_voda_domains=("serv1.voda-sale.ru")
ccs_voda_public_root="${ccs_voda_name}/public"
# Если сервис сохраняет location в routes/.env то переменная ccs_voda_nginx_location будет проигнорирована
#ccs_voda_nginx_location="~ ^/(index\.html|login\.html|api|check|socket\.io|uploadFile|upload-avatar|resetpassword|files/.*|scripts/|confirmEmail|payment/uniteller/confirm|payment/tbank/confirm)"

# Общие настройки бэкапа
ccs_voda_backup_remote_dir_name="${ccs_voda_name}"

# Расписание резервного копирования (cron формат)
ccs_voda_backup_db_daily="0 22 * * *"      # ежедневно в 22:00 по МСК
ccs_voda_backup_db_monthly="0 0 1 * *"     # ежемесячно 1 числа в 00:00
ccs_voda_backup_db_yearly="0 21 31 12 *"   # ежегодно 31 декабря в 21:00
ccs_voda_backup_files_daily="0 2 * * *"    # ежедневно в 02:00

# Настройки удаленного хранения
# Если "localhost" то дампы будут только на этом же сервере
ccs_voda_backup_db_remote_address=("localhost") # Пример: ("myuser@192.168.1.100" "myuser@514.1.17.64")

# Для резервного копирования файлов
ccs_voda_backup_files_remote_address=("localhost")
ccs_voda_backup_files_directories=("files" "public/upload" "public/savedFiles" "serverUploads")




# =====================================================================================
# НАСТРОЙКИ NGINX
# =====================================================================================

nginx_service_name="nginx"
nginx_confd_path="${services_path}/nginx/conf.d"
nginx_ssl_path="${services_path}/nginx/ssl-nginx"
nginx_well_known_path="${services_path}/nginx/.well-known"

# Сервисы для получения доменов и путей (используется ${service}_domains => app_domains)
nginx_services=("ccs_voda" "coturn")

# =====================================================================================
# НАСТРОЙКИ COTURN (если нужен вашему сервису)
# =====================================================================================
coturn_service_name="coturn"
coturn_name="coturn"
coturn_service_template="coturn"

# ATTENTION! If you change default ports, you need to open it in firewall
# ATTENTION! Default ports you need open too. Please use prepareOS/open_ports_for_coturn.sh

#coturn_listening_port=3478
#coturn_tls_listening_port=5349
#coturn_min_port=49152
#coturn_max_port=65535

coturn_domain="coturn.serv1.voda-sale.ru"
coturn_external_ip="000.000.000.000" # Please set the external IP of the server

coturn_username="serv1_coturn_voda_user"
coturn_password="CHANGE_ME_al18Q#u$"

coturn_ssl_path="${nginx_ssl_path}" # Common path to certificates for coturn and nginx


#You can specify the protocol, then the config will be appropriate. Default is HTTPS

coturn_domains=("coturn.serv1.voda-sale.ru")
coturn_public_root="${services_path}/${coturn_name}"
# Если сервис сохраняет location в routes/.env то переменная coturn_nginx_location будет проигнорирована
coturn_nginx_location="~ ^/(coturn/)"
coturn_nginx_http_conf="coturn_http.conf"
coturn_nginx_https_conf="coturn_https.conf"


# =====================================================================================
# НАСТРОЙКИ РЕЗЕРВНОГО КОПИРОВАНИЯ
# =====================================================================================

# PARAMS FOR BACKUP
backup_service_name="backup"
# services to get BACKUP (${service}_backup_db_daily => app_backup_db_daily)
backup_services=("ccs_voda")

# =====================================================================================
# СИСТЕМНЫЕ НАСТРОЙКИ
# =====================================================================================

# Настройки бэкапа (системный сервис)
backup_service_name="backup"

# Дополнительные переменные среды (добавьте свои если нужно)
# export CUSTOM_VAR="value"

# =====================================================================================
# ПРОВЕРКА КОНФИГУРАЦИИ
# =====================================================================================

# Функция проверки конфигурации (вызывается автоматически)
validate_config() {
    local errors=0

    echo "Проверка конфигурации..."

    # Проверяем основные пути
    if [[ ! -d "$DEPLOY_PATH" ]]; then
        echo "ОШИБКА: DEPLOY_PATH не найден: $DEPLOY_PATH"
        errors=$((errors + 1))
    fi

    # Проверяем Git URL
    for service in "${services[@]}"; do
        local git_url_var="${service}_git_url"
        local git_url="${!git_url_var}"

        if [[ -n "$git_url" && ! "$git_url" =~ ^git@.* && ! "$git_url" =~ ^https://.* ]]; then
            echo "ПРЕДУПРЕЖДЕНИЕ: Некорректный Git URL для $service: $git_url"
        fi
    done

    # Проверяем домены
    for service in nginx_services; do
        local domains_var="${service}_domains"
        if [[ -n "${!domains_var}" ]]; then
            echo "Настроены домены для $service: ${!domains_var}"
        fi
    done

    if [[ $errors -gt 0 ]]; then
        echo "Найдено ошибок: $errors"
        return 1
    fi

    echo "Конфигурация прошла базовую проверку"
    return 0
}

# Автоматическая проверка если config_is_ready = 1
if [[ $config_is_ready == 1 ]]; then
    validate_config || {
        echo "ВНИМАНИЕ: Найдены проблемы в конфигурации!"
    }
fi
  • Конфиг разбит на несколько блоков
    • В самом верху находится флаг готовности "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.
    • Блоки ваших сервисов
      • Для каждого сервиса имеется ряд специфичных настроек. В шаблоне уже введены наиболее подходящие настройки, но кое-какие специфичны именно для конкретного разворачиваемого сервиса.

      • 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 (first.sh), если вы соглаитесь на предложенный вам запрос.
          • Порты берутся из конфига или используются дефолтные
          • Если вы в конфиге под пользователем будете менять порты, то потребуется запустить еще раз first.sh и на этапе запроса выполнения настроек для coturn, подтвердить их выполнение. Или вместо first.sh, можно вызвать скрипт открытия сразу (под root):
        # Под 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
    # Или на примере сервиса VODA
    # ./start.sh install db ccs_voda nginx coturn backup

Следуйте инструкциям скрипта.

  • После успешной установки сервис уже может работать на http.
  • Появится файл .env в котором будут сохранены данные установки, в том числе и root пароль БД
  • Далее вам может потребоваться отредактировать конфигурационные файлы своих сервисов (не путать с config.sh), например, прописать актуальные "боевые" настройки для почты, различных внешних сервисов, да и общие настройки конкретного запущенного инстанса, например Имя и актуальный url. См. пункт настроек ниже.
  • Также потребуется установить сертификаты. Это будет выполнено с установкой сертификатов для основного сервиса (если в 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, их нужно взять оттуда

    После изменения и сохранения конфигурации требуется перезапустить сервис


    ./start.sh restart ccs_app
    # ./start.sh restart voda

SSL‑сертификаты: выпуск и автообновление

Как установить

После установки сервисов, включая nginx, и настройки DNS для указанных доменов, можно выпускать сертификаты.

Это делается под root пользователем из домашней директории.

# под root
#./cert.sh <имя_пользователя>
./cert.sh ccs_voda

Необходимо ответить на стандартные вопросы certbot, указав почту администратора и согласившись с лицензией.

После успешного выпуска, нужно снова зайти под пользователем (не через su, а отдельной сессией) и выполнить повторную установку сервиса nginx.

# Под пользователем ccs_voda (или того, которого вы создали на начальном этапе)
# ./start.sh install nginx && ./start.sh restart coturn # Если используется coturn то его нужно перезапустить, чтобы он подтянул сертификаты
./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 с проверкой конфига и fallback podman 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 сам решает, когда реально обновлять — если ещё рано, ничего не делает.

Логи и отладка

  • Логи 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),
Made on
Tilda