architect/standards/3-process/process-script-deployment.md

type: standard
aspect: process
title: "Размещение скриптов на хостинге"
version: 1.0.0
date: 2026-02-19
status: active


Размещение скриптов на хостинге

Версия: 2.0.0
Дата: 2026-01-25


Концепция

При работе с проектами на сторонних хостингах (Beget, Timeweb, AWS и др.) возникает необходимость выполнять скрипты в обход движка для:
- Проверки установки модулей
- Очистки базы данных
- Обслуживания и диагностики
- Миграции данных

Правило: Скрипты для хостинга НЕ должны быть доступны через веб.


Две зоны

WORKSPACE (разработка)

Где: $WORKSPACE/projects/org/{project}/app/{platform}/scripts/

Назначение:
- Разработка скриптов
- Версионирование (git)
- Документация
- Исходники с шаблонами credentials

Правила:
- ✅ Полная документация в README.md
- ✅ Credentials в .credentials.md (не в коде!)
- ✅ Git контроль
- ✅ Примеры использования

Пример:

projects/org/{PROJECT_NAME}/app/cscart/scripts/
├── check_installation.php    ← Исходник с placeholder credentials
├── clean_database.php
├── change_timestamp.sh
└── README.md                 ← Документация

ХОСТИНГ (production)

Где: Скрытая папка ВНУТРИ проекта

Путь: ~/project/.scripts/ (рекомендуется)

Варианты (устаревшие, не используйте):
- ~/.scripts/project/ - отдельная папка в home
- _scripts/ - видимая папка

Назначение:
- Выполнение скриптов на production
- Обслуживание и диагностика
- Недоступность через веб

Правила:
- ✅ Скрытая папка .scripts/ ВНУТРИ проекта
- ✅ Права доступа: chmod 700 (только владелец)
- ✅ Реальные credentials (из .credentials.md)
- ✅ Веб-доступ автоматически заблокирован (начинается с точки)
- ✅ Золотой бэкап для быстрого восстановления

Структура на хостинге:

~/work.lideravto.ru/               ← Папка проекта
├── .scripts/                      ← Скрытая папка (НЕТ веб-доступа)
│   ├── golden_cscart_419.tar.gz   ← Золотой бэкап файлов
│   ├── golden_database.sql.gz     ← Золотой бэкап БД
│   ├── restore_golden.sh          ← Быстрое восстановление
│   ├── create_golden.sh           ← Создание золотого бэкапа
│   ├── check_installation.php     ← Проверка модуля
│   ├── clean_database.php         ← Очистка БД
│   └── change_timestamp.sh        ← Изменение timestamp
├── admin.php                      ← Файлы CS-Cart (веб-доступ)
├── index.php
└── ...

Преимущества:
- Всё для проекта в одном месте
- Не нужно искать скрипты отдельно
- Легко бэкапить весь проект
- Быстрое восстановление (1-2 минуты)


Процесс деплоя

Шаг 1: Подготовка в workspace

  1. Разработать скрипт в app/{platform}/scripts/
  2. Использовать placeholder для credentials:
    php // Вместо: $DB_PASS = '8jR*Y!eB0r%G'; $DB_PASS = getenv('DB_PASS') ?: 'PLACEHOLDER';
  3. Документировать в README.md
  4. Commit в git

Шаг 2: Получение credentials

Из app/{platform}/.credentials.md проекта:

# Credentials: CS-Cart LiderAvto

## База данных (Beget)
- Host: localhost
- Database: lideravto_wcs
- User: lideravto_wcs
- Password: 8jR*Y!eB0r%G

Шаг 3: Размещение на хостинге

  1. Создать скрытую папку В ПРОЕКТЕ:
    bash ssh user@host mkdir -p ~/work.lideravto.ru/.scripts chmod 700 ~/work.lideravto.ru/.scripts

  2. Загрузить скрипты:
    ```bash
    # Локально
    cd $WORKSPACE/projects/org/{PROJECT_NAME}/app/cscart/scripts/

scp check_installation.php user@host:~/work.lideravto.ru/.scripts/
scp clean_database.php user@host:~/work.lideravto.ru/.scripts/
scp change_timestamp.sh user@host:~/work.lideravto.ru/.scripts/
scp restore_golden.sh user@host:~/work.lideravto.ru/.scripts/
scp create_golden.sh user@host:~/work.lideravto.ru/.scripts/
```

  1. Заменить credentials:
    bash # На хостинге nano ~/work.lideravto.ru/.scripts/check_installation.php nano ~/work.lideravto.ru/.scripts/clean_database.php # Заменить PLACEHOLDER на реальные значения из .credentials.md

  2. Установить права:
    bash chmod 700 ~/work.lideravto.ru/.scripts/*.php chmod 700 ~/work.lideravto.ru/.scripts/*.sh

Шаг 4: Проверка безопасности

  1. Проверить веб-доступ (должен быть запрещён):
    bash curl http://domain.ru/.scripts/lideravto/check_installation.php # Ожидаем: 403 Forbidden или 404 Not Found

  2. Проверить выполнение через SSH:
    bash ssh user@host php ~/.scripts/lideravto/check_installation.php # Ожидаем: успешное выполнение


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

✅ МОЖНО класть в скрытую папку

Тип Примеры
PHP скрипты с DB access check_installation.php, clean_database.php
Bash утилиты change_timestamp.sh, backup.sh
Python admin скрипты migrate_data.py, verify_install.py
SQL дампы schema.sql, test_data.sql
Конфиги для деплоя deploy.conf, .env.production

❌ НЕ КЛАСТЬ в скрытую папку

Тип Почему Где хранить
Конфиги движка Должны быть в правильном месте config/, settings.php
Публичные файлы Нужен веб-доступ Document root
Статика (CSS, JS, изображения) Нужен веб-доступ assets/, media/
Плагины/модули движка Должны быть в структуре движка modules/, plugins/

Credentials

НЕ хардкодить в скриптах workspace:

// ❌ ПЛОХО (в git попадёт пароль)
$DB_PASS = '8jR*Y!eB0r%G';

// ✅ ХОРОШО (placeholder для workspace)
$DB_PASS = getenv('DB_PASS') ?: 'CHANGE_ME';

На хостинге:
- ✅ Можно хардкодить (не под git)
- ✅ Или использовать environment variables
- ✅ Права доступа 700 (только владелец)


Золотой бэкап для экспериментов

Концепция: Вместо многократной установки движка создать "золотой бэкап" чистого состояния и быстро восстанавливать его для экспериментов.

Зачем нужен золотой бэкап

Проблема:
- Установка движка с нуля: 30-40 минут
- Настройка параметров: 10-15 минут
- Каждый эксперимент требует чистого состояния

Решение:
- Один раз установить чисто
- Создать золотой бэкап (БД + файлы)
- Восстановление: 1-2 минуты

Создание золотого бэкапа

1. Установить чистый движок (один раз):

# На хостинге
# Установить движок через веб-интерфейс
# Настроить базовые параметры
# Проверить что админка работает

2. Создать золотой бэкап:

ssh user@host
cd ~/work.lideravto.ru

# Запустить скрипт создания
./.scripts/create_golden.sh

# Скрипт создаст:
# - .scripts/golden_database.sql.gz (БД)
# - .scripts/golden_cscart_419.tar.gz (файлы)

Что делает create_golden.sh:
- Создаёт дамп БД
- Архивирует файлы движка (исключая cache, logs, images)
- Сохраняет в .scripts/

Быстрое восстановление

Для экспериментов:

ssh user@host
cd ~/work.lideravto.ru

# Восстановить из золотого бэкапа
./.scripts/restore_golden.sh

# 1-2 минуты → чистый движок готов

Что делает restore_golden.sh:
1. Очищает БД (DROP всех таблиц)
2. Восстанавливает БД из golden_database.sql.gz
3. Удаляет файлы проекта (кроме .scripts/ и .htaccess)
4. Распаковывает файлы из golden_cscart_419.tar.gz

Типичный workflow экспериментов

# 1. Восстановить чистый движок
./.scripts/restore_golden.sh

# 2. Установить модуль для тестирования
# (через админку или загрузить архив)

# 3. Протестировать

# 4. Если что-то сломалось:
./.scripts/restore_golden.sh  # Вернуться к чистому состоянию

# 5. Повторить эксперимент

Структура .scripts/ с золотым бэкапом

~/work.lideravto.ru/.scripts/
├── golden_cscart_419.tar.gz   ← Золотой бэкап файлов (~5-10 MB)
├── golden_database.sql.gz     ← Золотой бэкап БД (~500 KB)
├── restore_golden.sh          ← Восстановление (1-2 мин)
├── create_golden.sh           ← Создание бэкапа (один раз)
├── check_installation.php     ← Проверка модулей
├── clean_database.php         ← Очистка БД
└── change_timestamp.sh        ← Изменение timestamp

Когда обновлять золотой бэкап

Создавать новый золотой бэкап если:
- Обновили версию движка
- Изменили базовые настройки
- Установили обязательные модули в базовую конфигурацию

Не нужно обновлять:
- После каждого эксперимента
- При временных изменениях
- При тестировании модулей


Примеры по платформам

CS-Cart (PHP)

Workspace:

app/cscart/scripts/
├── check_installation.php
├── clean_database.php
└── README.md

Хостинг (Beget):

# Путь
~/.scripts/lideravto/

# Выполнение
ssh user@beget
php ~/.scripts/lideravto/check_installation.php

# Через HTTP (если нужно)
# Добавить .htaccess защиту + confirm=secret_token

Django (Python)

Workspace:

app/django/scripts/
├── check_migrations.py
├── verify_celery.py
└── README.md

Хостинг:

# Путь
~/.scripts/pirotehnika/

# Выполнение
ssh user@server
cd /path/to/project
python ~/.scripts/pirotehnika/check_migrations.py

WordPress (PHP)

Workspace:

app/wordpress/scripts/
├── check_plugins.php
├── db_optimize.php
└── README.md

Хостинг:

# Путь
~/.scripts/myblog/

# Выполнение
ssh user@host
php ~/.scripts/myblog/check_plugins.php

Node.js (JavaScript)

Workspace:

app/nextjs/scripts/
├── verify_deployment.js
├── clear_cache.js
└── README.md

Хостинг:

# Путь
~/.scripts/myapp/

# Выполнение
ssh user@server
node ~/.scripts/myapp/verify_deployment.js

Типичные скрипты

Проверка установки

#!/usr/bin/env php
<?php
// Проверяет что модуль/плагин установлен корректно
// Workspace: placeholders
// Хостинг: реальные credentials

Очистка БД

#!/usr/bin/env php
<?php
// ОСТОРОЖНО: DROP всех таблиц
// Защита: require ?confirm=yes
// Только для dev/staging

Изменение конфигов

#!/bin/bash
# Изменяет настройки через sed/awk
# Для миграций и обновлений

Миграция данных

#!/usr/bin/env python3
# Перенос данных между системами
# Использует credentials из .env

Структура документации в проекте

app/{platform}/scripts/README.md

Обязательные разделы:

  1. Список скриптов - что делает каждый
  2. Использование - CLI и HTTP примеры
  3. Безопасность - уровень доступа, credentials
  4. Размещение на хостинге - пошаговая инструкция
  5. Типичные сценарии - примеры использования

Пример:

# CS-Cart Утилиты и Скрипты

## Скрипты

### check_installation.php
Проверяет корректность установки модуля.

**Использование:**
- CLI: `php check_installation.php`
- HTTP: `curl http://domain.ru/check_installation.php`

**Безопасность:** Только чтение, безопасен

**Размещение на хостинге:**
1. Создать `~/.scripts/lideravto/`
2. Скопировать файл
3. Заменить credentials из `.credentials.md`
4. `chmod 700`

## Размещение на хостинге

ВСЕ скрипты размещать в `~/.scripts/lideravto/`:
- НЕТ веб-доступа
- Права 700
- Реальные credentials

app/{platform}/.credentials.md

Формат:

# Credentials: {Platform} {Project}

## База данных ({Хостинг})
- Host: localhost
- Database: db_name
- User: db_user
- Password: ••••••••

## API Keys
- Service: key_value

Безопасность:
- ✅ В .gitignore
- ✅ Права 600
- ✅ Только локально в workspace


Чеклист деплоя скрипта

Перед размещением на хостинге:


Связанные стандарты


Примеры проектов

LiderAvto (CS-Cart на Beget)

Workspace:

projects/org/{PROJECT_NAME}/app/cscart/
├── scripts/
│   ├── check_installation.php
│   ├── clean_database.php
│   ├── change_timestamp.sh
│   └── README.md
└── .credentials.md

Хостинг:

/home/l/lideravto/.scripts/lideravto/
├── check_installation.php     (с реальными credentials)
├── clean_database.php
└── change_timestamp.sh

Выполнение:

ssh lideravto@beget
php ~/.scripts/lideravto/check_installation.php

Версия: 1.0.0