5.7 KiB
5.7 KiB
Руководство по развёртыванию Krona Control Center на VPS
1. Целевая инфраструктура и топология
| Параметр | Значение | Описание |
|---|---|---|
| Домен | https://kccdemo.ochenstarik.ru |
Публичный защищённый домен демонстрационного стенда |
| IP-адрес VPS | 178.212.13.102 |
Целевой сервер развёртывания |
| Системный пользователь | kcc |
Изолированный непривилегированный Linux-пользователь |
| Директория релизов | /srv/kccdemo/releases/<TIMESTAMP> |
Версионированные каталоги сборок |
| Символическая ссылка | /srv/kccdemo/current |
Указывает на активный релиз (atomic switch) |
| Логи Nginx | /var/log/nginx/kccdemo_access.log |
Доступ и аудит веб-сервера |
2. Статус внешнего подключения и диагностика доступа (Pre-flight Blocker)
В ходе подготовки развёртывания была выполнена сетевая диагностика хоста 178.212.13.102:
- Сетевая доступность (Ping & Port 22):
- Хост
178.212.13.102доступен, порт 22 (OpenSSH) открыт и принимает TCP-соединения.
- Хост
- Аутентификация по SSH:
- Попытка подключения:
ssh -i ~/.ssh/id_rsa kcc@178.212.13.102 - Ответ сервера:
Permission denied (publickey).
- Попытка подключения:
- Причина блокировки:
- Сервер VPS настроен на строгую аутентификацию исключительно по SSH-ключам (
PasswordAuthentication no). - Публичный ключ агента/рабочей станции не добавлен в файл
/home/kcc/.ssh/authorized_keysна удаленном сервере.
- Сервер VPS настроен на строгую аутентификацию исключительно по SSH-ключам (
- Решение для администратора / владельца платформы:
- Вариант А: Добавить публичный ключ локальной машины в
/home/kcc/.ssh/authorized_keysна VPS178.212.13.102. - Вариант Б: Скопировать подготовленный каталог
deploy/kcc/и директориюdist/на сервер через локальный доступ администратора и запустить/srv/kccdemo/deploy-kcc.sh.
- Вариант А: Добавить публичный ключ локальной машины в
3. Автоматизированный скрипт развёртывания (deploy/kcc/deploy-kcc.sh)
Скрипт обеспечивает атомарный деплой с нулевым временем простоя:
#!/usr/bin/env bash
set -euo pipefail
APP_DIR="/srv/kccdemo"
RELEASES_DIR="$APP_DIR/releases"
CURRENT_LINK="$APP_DIR/current"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
NEW_RELEASE_DIR="$RELEASES_DIR/$TIMESTAMP"
echo "=== [KCC Deploy] Starting atomic release $TIMESTAMP ==="
mkdir -p "$NEW_RELEASE_DIR"
cp -r ./dist/* "$NEW_RELEASE_DIR/"
# Atomic switch
ln -sfn "$NEW_RELEASE_DIR" "$CURRENT_LINK"
# Keep last 3 releases
echo "=== [KCC Deploy] Pruning older releases (retaining last 3) ==="
cd "$RELEASES_DIR"
ls -1dt 20* | tail -n +4 | xargs -r rm -rf
echo "=== [KCC Deploy] Verifying local health ==="
curl -sk https://127.0.0.1/control/gate -H "Host: kccdemo.ochenstarik.ru" | grep -q "Krona Control Center" && echo "Health check: PASSED"
echo "=== [KCC Deploy] Release $TIMESTAMP successfully active! ==="
4. Конфигурация Nginx (deploy/kcc/nginx-kccdemo.conf)
Конфигурация включает заголовки безопасности, поддержку SPA маршрутизации и SSL:
server {
listen 80;
server_name kccdemo.ochenstarik.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name kccdemo.ochenstarik.ru;
ssl_certificate /etc/letsencrypt/live/kccdemo.ochenstarik.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kccdemo.ochenstarik.ru/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /srv/kccdemo/current;
index index.html;
# Security Headers
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Gzip Compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
# Static Assets Caching
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# SPA Routing Fallback
location / {
try_files $uri $uri/ /index.html;
}
access_log /var/log/nginx/kccdemo_access.log;
error_log /var/log/nginx/kccdemo_error.log;
}
5. Процедура мгновенного отката (Instant Rollback)
В случае необходимости немедленного отката к предыдущей стабильной версии:
cd /srv/kccdemo
PREVIOUS_RELEASE=$(ls -1dt releases/20* | sed -n '2p')
if [ -n "$PREVIOUS_RELEASE" ]; then
echo "Rolling back to: $PREVIOUS_RELEASE"
ln -sfn "/srv/kccdemo/$PREVIOUS_RELEASE" /srv/kccdemo/current
systemctl reload nginx
echo "Rollback completed."
else
echo "No previous release found to rollback."
fi