Описание и материалы, необходимые для установки программного обеспечения "Система предиктивной аналитики производственных параметров для заводов по производству газобетона"
Документ содержит информацию, необходимую для установки программного обеспечения SmartControl, включая подготовку сервера и развёртывание системы.
Скачать документацию (PDF)ssh root@ВАШ_IP_АДРЕС
Или с использованием ключа:
ssh -i /path/to/private_key root@ВАШ_IP_АДРЕС
apt-get update
apt-get upgrade -y
apt-get install -y curl wget git
Самый простой способ развертывания — использование автоматического скрипта:
curl -fsSL https://raw.githubusercontent.com/smartcontrolsoft-lab/gazobeton-docker3/main/deploy-server.sh | sudo bash
Что делает скрипт:
Время развертывания: 25-35 минут
Если автоматический скрипт не подходит, выполните следующие шаги вручную:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
rm get-docker.sh
Проверка установки:
docker --version
docker compose version
Git LFS необходим для загрузки дампа базы данных (65 MB):
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash apt-get install git-lfs -y
git lfs install
Проверка установки:
git lfs version
# Создание директории для проекта
mkdir -p /opt/gazobeton
# Клонирование репозитория
git clone https://github.com/smartcontrolsoft-lab/gazobeton-docker3.git /opt/gazobeton
# Переход в директорию проекта
cd /opt/gazobeton
ВАЖНО: Дамп базы данных хранится в Git LFS и должен быть загружен отдельно:
cd /opt/gazobeton
git lfs pull
Проверка наличия дампа:
ls -lh database/init/01-restore.sql
Размер файла должен быть примерно 65 MB.
Если необходимо изменить настройки по умолчанию, скопируйте пример файла:
cp env.docker.example gazobeton-back-dev/.env
Отредактируйте файл .env в директории gazobeton-back-dev/:
cd /opt/gazobeton
docker compose up -d --build
Что происходит:
Время сборки: 20-30 минут (зависит от скорости интернета и сервера)
Подождите 30-60 секунд, пока все сервисы запустятся:
# Проверка статуса контейнеров
docker compose ps
# Просмотр логов
docker compose logs -f
Дождитесь сообщений о готовности всех сервисов.
Laravel Passport необходим для аутентификации через OAuth2:
docker compose exec -T backend php artisan passport:install --force
Вы должны увидеть вывод с ключами Passport.
Проверка контейнеров:
docker compose ps
Все контейнеры должны быть в статусе "Up".
Проверка логов:
# Логи backend
docker compose logs backend
# Логи frontend
docker compose logs frontend
# Логи database
docker compose logs database
Проверка доступности:
Настройте A-записи в вашем DNS-провайдере:
apt-get install -y nginx certbot python3-certbot-nginx
Создайте файл /etc/nginx/sites-available/gazobeton.tech:
server {
listen 80;
server_name gazobeton.tech www.gazobeton.tech;
root /var/www/landing;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Активируйте конфигурацию:
ln -s /etc/nginx/sites-available/gazobeton.tech /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Создайте файл /etc/nginx/sites-available/app.gazobeton.tech:
server {
listen 80;
server_name app.gazobeton.tech;
location / {
proxy_pass http://localhost:3000 ;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 3600;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
}
location /api {
proxy_pass http://localhost:8000 ;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
}
}
Активируйте конфигурацию:
ln -s /etc/nginx/sites-available/app.gazobeton.tech /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
# Для landing page
certbot --nginx -d gazobeton.tech -d www.gazobeton.tech
# Для приложения
certbot --nginx -d app.gazobeton.tech
Certbot автоматически настроит HTTPS и перенаправление с HTTP.
Обновите файл frontend/config.js в репозитории для использования правильного API хоста:
const URL_PREFIX = "";
let HOST_API = undefined;
window.getUrlPrefix = () => {
return URL_PREFIX;
}
window.getHostApi = () => {
if(!HOST_API) {
const protocol = window.location.protocol;
const hostname = window.location.hostname;
HOST_API = protocol + "//" + hostname + "/";
}
return HOST_API;
}
Пересоберите frontend:
cd /opt/gazobeton
docker compose up -d --build frontend
После успешного развертывания:
cd /opt/gazobeton
docker compose ps
# Все сервисы
docker compose logs -f
# Конкретный сервис
docker compose logs -f backend
docker compose logs -f frontend
docker compose logs -f database
# Все сервисы
docker compose restart
# Конкретный сервис
docker compose restart backend
docker compose down
docker compose down -v
ВНИМАНИЕ: Это удалит все данные, включая базу данных!
cd /opt/gazobeton
docker compose down
git pull origin main
git lfs pull # Если обновлялся дамп БД
docker compose up -d --build
docker compose exec backend php artisan migrate --force
docker compose exec backend php artisan cache:clear
docker compose exec backend php artisan config:clear
docker compose exec backend php artisan route:clear
docker compose exec database psql -U postgres -d gazobeton
docker compose exec -T database psql -U postgres -d gazobeton -c "SELECT COUNT(*) FROM users;"
docker compose exec -T database pg_dump -U postgres gazobeton > backup_$(date +%Y%m%d_%H%M%S).sql
docker compose exec -T database psql -U postgres -d gazobeton < backup_20240101_120000.sql
Поместите CSV файлы в директорию:
gazobeton-back-dev/storage/app/files/data/import/
Поддерживаемые файлы:
После размещения файлов выполните синхронизацию через веб-интерфейс.
curl -X POST http://localhost:8000/api/analysis/train \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"data_id": 1, "model_type": "catb"}'
# Использование CPU и памяти
docker stats
# Использование диска
df -h docker system df
# Проверка backend
curl http://localhost:8000/api/health
# Проверка frontend
curl http://localhost:3000
# Проверка database
docker compose exec database pg_isready -U postgres
# Просмотр логов
docker compose logs [service_name]
# Проверка конфигурации
docker compose config
# Пересборка без кеша
docker compose build --no-cache
docker compose up -d
docker compose exec backend chmod -R 777 storage bootstrap/cache
# Проверка наличия дампа
ls -lh database/init/01-restore.sql
# Ручное восстановление
docker compose exec -T database psql -U postgres -d gazobeton < database/init/01-restore.sql
# Сброс и повторное применение миграций
docker compose exec backend php artisan migrate:fresh --seed --force
ВНИМАНИЕ: Это удалит все данные!
# Проверка логов backend
docker compose logs backend | grep -i error
# Очистка кеша
docker compose exec backend php artisan cache:clear
docker compose exec backend php artisan config:clear
# Проверка использования памяти
docker stats
# Увеличение лимитов в docker-compose.yml
# Добавьте в секцию services:
# deploy:
# resources:
# limits:
# memory: 4G
# Проверка логов supervisor
docker compose exec backend supervisorctl status
# Перезапуск ML-сервера
docker compose exec backend supervisorctl restart [server_name]
# Проверка логов Python
docker compose exec backend tail -f /var/www/storage/logs/laravel.log
# Проверка доступности ML-серверов
curl http://localhost:1082/prepare
curl http://localhost:1083/predict
# Проверка портов
netstat -tulpn | grep -E '3000|8000'
# Проверка firewall
ufw status
iptables -L
# Проверка контейнеров
docker compose ps
docker compose logs [service_name]
docker system prune -a
docker volume prune
Создайте скрипт /opt/gazobeton/scripts/backup-db.sh:
#!/bin/bash
BACKUP_DIR="/opt/gazobeton/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
docker compose exec -T database pg_dump -U postgres gazobeton | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
# Удаление старых бэкапов (старше 30 дней)
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete
Сделайте скрипт исполняемым:
chmod +x /opt/gazobeton/scripts/backup-db.sh
Настройте cron для автоматического резервного копирования:
crontab -e
Добавьте строку (резервное копирование каждый день в 2:00):
0 2 * * * /opt/gazobeton/scripts/backup-db.sh
cd /opt/gazobeton
docker compose exec -T database pg_dump -U postgres gazobeton > backup_$(date +%Y%m%d_%H%M%S).sql
cd /opt/gazobeton
docker compose exec backend tar -czf /tmp/storage_backup.tar.gz /var/www/storage
docker cp gazobeton-backend:/tmp/storage_backup.tar.gz ./backups/storage_$(date +%Y%m%d_%H%M%S).tar.gz
cd /opt/gazobeton
docker compose exec backend tar -czf /tmp/models_backup.tar.gz /var/www/storage/app/files/analysis/model
docker cp gazobeton-backend:/tmp/models_backup.tar.gz ./backups/models_$(date +%Y%m%d_%H%M%S).tar.gz
# Остановка контейнеров (опционально)
docker compose stop backend
# Восстановление
docker compose exec -T database psql -U postgres -d gazobeton < backup_20240101_120000.sql
# Или для сжатого файла
gunzip < backup_20240101_120000.sql.gz | docker compose exec -T database psql -U postgres -d gazobeton
# Перезапуск контейнеров
docker compose start backend
# Восстановление storage
docker cp ./backups/storage_20240101_120000.tar.gz gazobeton-backend:/tmp/
docker compose exec backend tar -xzf /tmp/storage_20240101_120000.tar.gz -C /
# Восстановление моделей
docker cp ./backups/models_20240101_120000.tar.gz gazobeton-backend:/tmp/
docker compose exec backend tar -xzf /tmp/models_20240101_120000.tar.gz -C /
Создайте скрипт для полного резервного копирования:
#!/bin/bash
BACKUP_DIR="/opt/gazobeton/backups/full"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Резервное копирование БД
docker compose exec -T database pg_dump -U postgres gazobeton | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# Резервное копирование storage
docker compose exec backend tar -czf /tmp/storage.tar.gz /var/www/storage
docker cp gazobeton-backend:/tmp/storage.tar.gz $BACKUP_DIR/storage_$DATE.tar.gz
# Резервное копирование моделей
docker compose exec backend tar -czf /tmp/models.tar.gz /var/www/storage/app/files/analysis/model
docker cp gazobeton-backend:/tmp/models.tar.gz $BACKUP_DIR/models_$DATE.tar.gz
# Резервное копирование конфигурации
tar -czf $BACKUP_DIR/config_$DATE.tar.gz docker-compose.yml env.docker.example
echo "Резервное копирование завершено: $BACKUP_DIR"
/opt/gazobeton/
├── backend/ # Конфигурация backend
│ ├── Dockerfile
│ ├── nginx.conf
│ └── supervisord.conf
├── frontend/ # Конфигурация frontend
│ ├── Dockerfile
│ ├── nginx.conf
│ └── config.js
├── database/ # Конфигурация БД
│ └── init/
│ └── 01-restore.sql
├── gazobeton-back-dev/ # Исходный код backend
├── gazobeton-front-dev/ # Исходный код frontend
├── docker-compose.yml # Конфигурация Docker Compose
├── deploy-server.sh # Скрипт автоматического развертывания
└── scripts/ # Вспомогательные скрипты
├── backup-db.sh
└── restore-db.sh
# Просмотр использования ресурсов
docker stats
# Просмотр логов в реальном времени
docker compose logs -f [service]
# Выполнение команд в контейнере
docker compose exec [service] [command]
# Пересборка конкретного сервиса
docker compose up -d --build [service]
# Очистка неиспользуемых ресурсов
docker system prune -a
# Просмотр volumes
docker volume ls # Просмотр сетей docker network ls