feat: AI Press Secretary - content generation and publishing platform

Features:
- AI-powered post generation from brand profiles
- Image generation with templates
- Content planning
- Telegram publishing
- Social profile analyzer
- Community organization support
- Markdown to HTML conversion for Telegram
- Inline AI chat for post editing

Deploy:
- Add deployment scripts for Linux servers
- Add PowerShell deploy script for Windows
- Add Nginx and SSL setup scripts
- Add backup and restore scripts
This commit is contained in:
apuc committed 2026-08-27 15:24:15 +03:00
1 parent 81625b2e6f
commit c6048aeea0
37 files changed
+7037 -225

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
venv/
env/
ENV/
*.egg-info/
dist/
build/
# База данных
*.db
*.sqlite
*.sqlite3
# Медиа файлы
media/
*.jpg
*.jpeg
*.png
*.gif
*.webp
*.pdf
# Логи
*.log
logs/
# Переменные окружения
.env
.env.local
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Секреты
secrets/
*.key
*.pem
# Деплой
deploy.sh
nginx-setup.sh
ssl-setup.sh
dev.sh
README.md
+212
View File
@@ -0,0 +1,212 @@
# 🚀 ИИ Пресс-секретарь — Скрипты деплоя
## 📁 Файлы
| Скрипт | Назначение |
|--------|-----------|
| `install.sh` | Полная установка (все в одном) |
| `deploy.sh` | Деплой приложения |
| `nginx-setup.sh` | Настройка Nginx |
| `ssl-setup.sh` | SSL сертификат (Let's Encrypt) |
| `backup.sh` | Бэкап проекта |
| `restore.sh` | Восстановление из бэкапа |
| `dev.sh` | Быстрый запуск в development |
## 🎯 Быстрая установка (3 шага)
### 1. Скопируй файлы на сервер
```bash
scp -r deploy.sh nginx-setup.sh ssl-setup.sh backup.sh restore.sh dev.sh README.md user@server:/opt/pressa/
```
### 2. Запусти установку
```bash
cd /opt/pressa
chmod +x *.sh
./install.sh
```
### 3. Настрой .env
```bash
nano /opt/pressa/.env
```
Заполни переменные:
```env
BOT_TOKEN=твой_токен_бота
PIAPI_API_KEY=твой_piapi_ключ
PIAPI_MODEL=gpt-4o
PROXY_URL=http://user:pass@host:port
CABINET_URL=https://твой_домен.com
```
## 📖 Использование отдельных скриптов
### Деплой
```bash
cd /opt/pressa
./deploy.sh
```
### Nginx
```bash
./nginx-setup.sh
```
Замените `твой_домен.com` на свой домен.
### SSL
```bash
./ssl-setup.sh
```
### Бэкап
```bash
./backup.sh
```
### Восстановление
```bash
./restore.sh
```
### Development
```bash
./dev.sh
```
## 🔧 Управление сервисом
```bash
# Статус
sudo systemctl status pressa
# Перезапуск
sudo systemctl restart pressa
# Остановка
sudo systemctl stop pressa
# Запуск
sudo systemctl start pressa
# Логи
sudo journalctl -u pressa -f
# Логи Nginx
sudo tail -f /var/log/nginx/pressa-error.log
```
## 🔄 Обновление
```bash
cd /opt/pressa
git pull origin main
./deploy.sh
```
## 📊 Мониторинг
```bash
# Приложение
sudo journalctl -u pressa -f
# Nginx
sudo tail -f /var/log/nginx/pressa-error.log
sudo tail -f /var/log/nginx/pressa-access.log
# Бэкапы
ls -lh /opt/backups/
```
## 🆘 Troubleshooting
### Сервис не запускается
```bash
sudo systemctl status pressa
sudo journalctl -u pressa -n 50
```
### Nginx не работает
```bash
sudo nginx -t
sudo systemctl restart nginx
```
### 500 ошибка
```bash
sudo journalctl -u pressa -n 100
sudo tail -f /var/log/nginx/pressa-error.log
```
### Проблемы с зависимостями
```bash
cd /opt/pressa
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
```
## 📦 Структура
```
/opt/pressa/
├── cabinet_service/ # Основной код
│ ├── app.py # FastAPI
│ ├── templates/ # HTML
│ ├── static/ # CSS/JS
│ ├── media/ # Файлы
│ └── users.db # База данных
├── ai_core/ # AI модули
├── venv/ # Python venv
├── .env # Переменные
├── requirements.txt # Зависимости
├── deploy/ # Скрипты деплоя
│ ├── install.sh
│ ├── deploy.sh
│ ├── nginx-setup.sh
│ ├── ssl-setup.sh
│ ├── backup.sh
│ ├── restore.sh
│ └── dev.sh
└── README.md
```
## 🎓 Полезные команды
```bash
# Проверка порта
sudo netstat -tlnp | grep 8001
# Проверка RAM
free -h
# Проверка диска
df -h
# Перезагрузка
sudo reboot
# Остановка Nginx
sudo systemctl stop nginx
# Запуск Nginx
sudo systemctl start nginx
```
## 📞 Поддержка
Если что-то не работает — проверяй логи и убедись, что все переменные в `.env` заполнены.
+116
View File
@@ -0,0 +1,116 @@
# Деплой с Windows на сервер
## ⚡ Быстрый старт
1. **Открой PowerShell** (от имени администратора не обязательно)
2. **Перейди в папку проекта:**
```powershell
cd C:\python\pressa\deploy
```
3. **Запусти деплой:**
```powershell
.\deploy.ps1
```
## 📋 Что делает скрипт
1. ✅ Архивирует проект (исключая venv, __pycache__)
2. ✅ Подключается к серверу по SSH
3. ✅ Загружает файлы через SCP
4. ✅ Распаковывает на сервере
5. ✅ Запускает `install.sh` (установка Python, Nginx, SSL)
6. ✅ Настраивает домен `press.my-dpr.ru`
7. ✅ Получает SSL сертификат
## ⏱️ Время выполнения
- Загрузка: 1-2 минуты
- Установка на сервере: 5-10 минут
- **Итого: ~10 минут**
## 🔧 Параметры (опционально)
Если нужно изменить настройки:
```powershell
.\deploy.ps1 -ServerIP "31.28.9.200" -Domain "press.my-dpr.ru"
```
Доступные параметры:
- `-ServerIP` — IP сервера
- `-Username` — логин (по умолчанию root)
- `-Password` — пароль
- `-Domain` — домен
- `-RemotePath` — путь на сервере (по умолчанию /opt/pressa)
- `-LocalProjectPath` — путь к проекту на компьютере
## 🆘 Если не работает
### Ошибка "SSH не найден"
Установи OpenSSH Client:
1. Параметры → Приложения → Дополнительные компоненты
2. Добавить компонент → OpenSSH Client
3. Перезагрузи PowerShell
### Ошибка подключения
Проверь:
```powershell
# Пинг сервера
ping 31.28.9.200
# Проверка SSH
ssh root@31.28.9.200
```
### Ручной деплой (если скрипт не сработал)
1. Запакуй проект в zip
2. Загрузи через FileZilla / WinSCP на сервер
3. Подключись по SSH через PuTTY
4. Выполни команды из `install.sh` вручную
## ✅ После деплоя
1. **Настрой .env файл:**
```bash
ssh root@31.28.9.200
nano /opt/pressa/.env
```
Заполни:
```env
BOT_TOKEN=твой_токен_бота
PIAPI_API_KEY=твой_piapi_ключ
PROXY_URL=http://user:pass@host:port
CABINET_URL=https://press.my-dpr.ru
```
2. **Перезапусти сервис:**
```bash
systemctl restart pressa
```
3. **Проверь статус:**
```bash
systemctl status pressa
journalctl -u pressa -f
```
## 🌐 Доступ
После успешного деплоя:
- **Сайт:** https://press.my-dpr.ru
- **API:** https://press.my-dpr.ru/api/
## 📞 Поддержка
Если что-то пошло не так — проверь логи:
```bash
# На сервере
journalctl -u pressa -n 50
tail -f /var/log/nginx/pressa-error.log
```
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
# === Бэкап проекта ===
set -e
APP_DIR="/opt/pressa"
BACKUP_DIR="/opt/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="pressa_$DATE.tar.gz"
echo "=== Создание бэкапа $BACKUP_NAME ==="
# Создание папки для бэкапов
mkdir -p $BACKUP_DIR
# Создание архива
cd $APP_DIR
tar -czf $BACKUP_DIR/$BACKUP_NAME \
cabinet_service/users.db \
cabinet_service/media \
--exclude='cabinet_service/media/*' \
--exclude='venv' \
--exclude='__pycache__' \
--exclude='*.pyc'
# Удаление старых бэкапов (сохранять последние 7)
find $BACKUP_DIR -name "pressa_*.tar.gz" -mtime +7 -delete
echo "✓ Бэкап создан: $BACKUP_DIR/$BACKUP_NAME"
echo "Размер: $(du -h $BACKUP_DIR/$BACKUP_NAME | cut -f1)"
echo ""
echo "Список бэкапов:"
ls -lh $BACKUP_DIR/pressa_*.tar.gz | tail -5
# Опционально: копировать на другой сервер
# scp $BACKUP_DIR/$BACKUP_NAME user@backup-server:/backups/
+190
View File
@@ -0,0 +1,190 @@
#!/usr/bin/env pwsh
#Requires -Version 5.1
<#
.SYNOPSIS
Deploy AI Press Secretary to server from Windows computer
.DESCRIPTION
1. Archives project
2. Uploads to server via SCP
3. Connects via SSH and runs installation
4. Configures Nginx + SSL
.NOTES
Run: .\deploy-simple.ps1
#>
[CmdletBinding()]
param(
[string]$ServerIP = "31.28.9.200",
[string]$Username = "root",
[string]$Password = "123edcxzaqws",
[string]$Domain = "press.my-dpr.ru",
[string]$RemotePath = "/opt/pressa",
[string]$LocalProjectPath = "C:\python\pressa",
[int]$Port = 2324
)
Write-Host "=== AI Press Secretary Deployment ===" -ForegroundColor Green
Write-Host ""
# Check SSH/SCP
Write-Host "[1/6] Checking SSH and SCP..." -ForegroundColor Yellow
$ssh = Get-Command ssh -ErrorAction SilentlyContinue
$scp = Get-Command scp -ErrorAction SilentlyContinue
if (-not $ssh -or -not $scp) {
Write-Host "ERROR: SSH or SCP not found!" -ForegroundColor Red
Write-Host "Install OpenSSH Client: Settings -> Apps -> Optional Features -> OpenSSH Client"
exit 1
}
Write-Host "OK" -ForegroundColor Green
# Create archive
Write-Host "[2/6] Creating project archive..." -ForegroundColor Yellow
$TempDir = "$env:TEMP\pressa-deploy-$(Get-Random)"
$ArchiveName = "pressa-deploy.tar.gz"
$ArchivePath = "$env:TEMP\$ArchiveName"
if (Test-Path $TempDir) { Remove-Item $TempDir -Recurse -Force }
New-Item -ItemType Directory -Path $TempDir | Out-Null
$ItemsToCopy = @("cabinet_service", "ai_core", "config.py", "requirements.txt", "deploy")
foreach ($item in $ItemsToCopy) {
$src = Join-Path $LocalProjectPath $item
if (Test-Path $src) {
Copy-Item -Path $src -Destination $TempDir -Recurse -Force
}
}
# Update domain in scripts
$nginxScript = Join-Path $TempDir "deploy\nginx-setup.sh"
if (Test-Path $nginxScript) {
$content = [System.IO.File]::ReadAllText($nginxScript)
$content = $content.Replace("твой_домен.com", $Domain)
[System.IO.File]::WriteAllText($nginxScript, $content)
}
$sslScript = Join-Path $TempDir "deploy\ssl-setup.sh"
if (Test-Path $sslScript) {
$content = [System.IO.File]::ReadAllText($sslScript)
$content = $content.Replace("твой_домен.com", $Domain)
$content = $content.Replace("твой_email@example.com", "admin@$Domain")
[System.IO.File]::WriteAllText($sslScript, $content)
}
# Create archive
Set-Location $env:TEMP
$tar = Get-Command tar -ErrorAction SilentlyContinue
if ($tar) {
tar -czf $ArchiveName -C $TempDir .
} else {
Compress-Archive -Path "$TempDir\*" -DestinationPath "$env:TEMP\pressa-deploy.zip" -Force
$ArchiveName = "pressa-deploy.zip"
$ArchivePath = "$env:TEMP\$ArchiveName"
}
$size = [math]::Round((Get-Item $ArchivePath).Length / 1MB, 1)
Write-Host "Archive created: $ArchivePath ($size MB)" -ForegroundColor Green
# Upload to server
Write-Host "[3/6] Uploading to server ${ServerIP}:${Port}..." -ForegroundColor Yellow
$sshOptions = "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $Port"
# Create directory
$createDir = "mkdir -p $RemotePath && rm -rf $RemotePath/*"
$createDir | ssh $sshOptions ${Username}@${ServerIP} "bash -s" 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: Cannot connect to server!" -ForegroundColor Red
Write-Host "Check: IP address, login, password, port $Port" -ForegroundColor Yellow
exit 1
}
Write-Host "Connected" -ForegroundColor Green
# Upload archive
scp $sshOptions $ArchivePath "${Username}@${ServerIP}:${RemotePath}/" 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Host "ERROR: Upload failed!" -ForegroundColor Red
exit 1
}
Write-Host "Uploaded" -ForegroundColor Green
# Extract and install
Write-Host "[4/6] Installing on server (this takes 5-10 minutes)..." -ForegroundColor Yellow
$installScript = @"
cd $RemotePath
# Extract
if [ -f "$ArchiveName" ]; then
tar -xzf "$ArchiveName"
rm "$ArchiveName"
elif [ -f "pressa-deploy.zip" ]; then
apt-get install -y unzip >/dev/null 2>&1
unzip -q "pressa-deploy.zip"
rm "pressa-deploy.zip"
fi
# Fix directory structure
if [ ! -d "cabinet_service" ]; then
for dir in */; do
if [ -d "\$dir/cabinet_service" ]; then
mv "\$dir"/* .
rm -rf "\$dir"
break
fi
done
fi
# Make scripts executable
chmod +x deploy/*.sh
# Run install
cd deploy
./install.sh
"@
$installScript | ssh $sshOptions ${Username}@${ServerIP} "bash -s" 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Host "WARNING: Installation may have errors. Check logs on server." -ForegroundColor Yellow
}
# Configure Nginx and SSL
Write-Host "[5/6] Configuring Nginx and SSL..." -ForegroundColor Yellow
$nginxScript = @"
cd $RemotePath/deploy
sed -i "s/твой_домен.com/$Domain/g" nginx-setup.sh
./nginx-setup.sh
sed -i "s/твой_домен.com/$Domain/g" ssl-setup.sh
sed -i "s/твой_email@example.com/admin@$Domain/g" ssl-setup.sh
./ssl-setup.sh
"@
$nginxScript | ssh $sshOptions ${Username}@${ServerIP} "bash -s" 2>$null
# Cleanup
Write-Host "[6/6] Cleaning up..." -ForegroundColor Yellow
if (Test-Path $TempDir) { Remove-Item $TempDir -Recurse -Force }
if (Test-Path $ArchivePath) { Remove-Item $ArchivePath -Force }
Set-Location $LocalProjectPath
# Final message
Write-Host ""
Write-Host "=== Deployment Complete! ===" -ForegroundColor Green
Write-Host ""
Write-Host "Website: https://$Domain" -ForegroundColor Cyan
Write-Host "Project: $RemotePath" -ForegroundColor Cyan
Write-Host ""
Write-Host "Next steps:" -ForegroundColor Yellow
Write-Host "1. Configure .env file:" -ForegroundColor White
Write-Host " ssh ${Username}@${ServerIP}" -ForegroundColor Gray
Write-Host " nano $RemotePath/.env" -ForegroundColor Gray
Write-Host ""
Write-Host "2. Fill in API keys (BOT_TOKEN, PIAPI_API_KEY, etc.)" -ForegroundColor White
Write-Host ""
Write-Host "3. Restart service:" -ForegroundColor White
Write-Host " systemctl restart pressa" -ForegroundColor Gray
Write-Host ""
Write-Host "Useful commands:" -ForegroundColor Yellow
Write-Host " ssh ${Username}@${ServerIP}" -ForegroundColor Gray
Write-Host " sudo systemctl status pressa" -ForegroundColor Gray
Write-Host " sudo journalctl -u pressa -f" -ForegroundColor Gray
+246
View File
@@ -0,0 +1,246 @@
#!/usr/bin/env pwsh
#Requires -Version 5.1
<#
.SYNOPSIS
Деплой ИИ Пресс-секретарь на сервер с Windows-компьютера
.DESCRIPTION
1. Архивирует проект
2. Загружает на сервер через SCP
3. Подключается по SSH и запускает установку
4. Настраивает Nginx + SSL
.NOTES
Запуск: .\deploy.ps1
#>
[CmdletBinding()]
param(
[string]$ServerIP = "31.28.9.200",
[string]$Username = "root",
[string]$Password = "123edcxzaqws",
[string]$Domain = "press.my-dpr.ru",
[string]$RemotePath = "/opt/pressa",
[string]$LocalProjectPath = "C:\python\pressa"
)
# === ЦВЕТА ===
$Red = "`e[31m"
$Green = "`e[32m"
$Yellow = "`e[33m"
$Blue = "`e[34m"
$NC = "`e[0m"
function Write-Status($msg) { Write-Host "${Green}[✓]${NC} $msg" }
function Write-Info($msg) { Write-Host "${Blue}[i]${NC} $msg" }
function Write-Warning($msg) { Write-Host "${Yellow}[!]${NC} $msg" }
function Write-Error($msg) { Write-Host "${Red}[✗]${NC} $msg" }
# === ПРОВЕРКА SSH/SCP ===
Write-Info "Проверка наличия SSH и SCP..."
$ssh = Get-Command ssh -ErrorAction SilentlyContinue
$scp = Get-Command scp -ErrorAction SilentlyContinue
if (-not $ssh -or -not $scp) {
Write-Error "SSH или SCP не найдены!"
Write-Info "Установи OpenSSH Client:"
Write-Info " Параметры → Приложения → Дополнительные компоненты → OpenSSH Client"
exit 1
}
Write-Status "SSH и SCP найдены"
# === СОЗДАНИЕ АРХИВА ===
Write-Info "Создание архива проекта..."
$TempDir = "$env:TEMP\pressa-deploy"
$ArchiveName = "pressa-deploy.tar.gz"
$ArchivePath = "$env:TEMP\$ArchiveName"
# Удаляем старый архив
if (Test-Path $ArchivePath) {
Remove-Item $ArchivePath -Force
}
# Создаём временную копию без лишнего
if (Test-Path $TempDir) {
Remove-Item $TempDir -Recurse -Force
}
New-Item -ItemType Directory -Path $TempDir | Out-Null
# Копируем нужные файлы
$ItemsToCopy = @(
"cabinet_service",
"ai_core",
"config.py",
"requirements.txt",
"deploy"
)
foreach ($item in $ItemsToCopy) {
$src = Join-Path $LocalProjectPath $item
if (Test-Path $src) {
Copy-Item -Path $src -Destination $TempDir -Recurse -Force
}
}
# Обновляем домен в скриптах
$nginxScript = Join-Path $TempDir "deploy\nginx-setup.sh"
if (Test-Path $nginxScript) {
$content = Get-Content $nginxScript -Raw
$content = $content.Replace('твой_домен.com', $Domain)
Set-Content -Path $nginxScript -Value $content -NoNewline
}
$sslScript = Join-Path $TempDir "deploy\ssl-setup.sh"
if (Test-Path $sslScript) {
$content = Get-Content $sslScript -Raw
$content = $content.Replace('твой_домен.com', $Domain)
$content = $content.Replace('твой_email@example.com', "admin@$Domain")
Set-Content -Path $sslScript -Value $content -NoNewline
}
# Создаём архив
Write-Info "Архивирование..."
Set-Location $env:TEMP
# Используем tar если есть, иначе Compress-Archive
$tar = Get-Command tar -ErrorAction SilentlyContinue
if ($tar) {
tar -czf $ArchiveName -C $TempDir .
} else {
Compress-Archive -Path "$TempDir\*" -DestinationPath "$env:TEMP\pressa-deploy.zip" -Force
$ArchiveName = "pressa-deploy.zip"
$ArchivePath = "$env:TEMP\$ArchiveName"
}
Write-Status "Архив создан: $ArchivePath ($((Get-Item $ArchivePath).Length / 1MB | Format-Number -Format '0.0') MB)"
# === ЗАГРУЗКА НА СЕРВЕР ===
Write-Info "Загрузка на сервер $ServerIP..."
# Создаём директорию на сервере
$sshCmd = "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${Username}@${ServerIP}"
$createDir = "mkdir -p $RemotePath && rm -rf $RemotePath/*"
Write-Info "Создание директории на сервере..."
$createDir | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${Username}@${ServerIP} "bash -s"
if ($LASTEXITCODE -ne 0) {
Write-Error "Не удалось подключиться по SSH!"
Write-Info "Проверь:"
Write-Info " 1. IP-адрес сервера"
Write-Info " 2. Логин и пароль"
Write-Info " 3. Доступность порта 22"
exit 1
}
Write-Status "Подключение установлено"
# Загружаем архив
Write-Info "Загрузка архива..."
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $ArchivePath "${Username}@${ServerIP}:${RemotePath}/"
if ($LASTEXITCODE -ne 0) {
Write-Error "Ошибка загрузки файлов!"
exit 1
}
Write-Status "Файлы загружены"
# === РАСПАКОВКА И УСТАНОВКА ===
Write-Info "Распаковка и установка на сервере..."
$remoteCommands = @"
cd $RemotePath
# Распаковка
if [ -f "$ArchiveName" ]; then
tar -xzf "$ArchiveName"
rm "$ArchiveName"
elif [ -f "pressa-deploy.zip" ]; then
apt-get install -y unzip
unzip -q "pressa-deploy.zip"
rm "pressa-deploy.zip"
fi
# Перемещаем файлы из подпапки
if [ -d "cabinet_service" ]; then
# Уже в корне
echo "Файлы на месте"
else
# Ищем папку с файлами
for dir in */; do
if [ -d "\$dir/cabinet_service" ]; then
mv "\$dir"/* .
rm -rf "\$dir"
break
fi
done
fi
# Установка прав
chmod +x deploy/*.sh
# Запуск установки
echo "=== Запуск install.sh ==="
cd deploy
./install.sh
echo ""
echo "=== Установка завершена ==="
echo ""
echo "Не забудь настроить .env файл:"
echo " nano $RemotePath/.env"
echo ""
echo "Перезапуск сервиса:"
echo " systemctl restart pressa"
"@
Write-Info "Запуск установочных скриптов (это займет 5-10 минут)..."
$remoteCommands | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${Username}@${ServerIP} "bash -s"
if ($LASTEXITCODE -ne 0) {
Write-Warning "Возможны ошибки при установке. Проверь логи на сервере."
}
# === НАСТРОЙКА NGINX И SSL ===
Write-Info "Настройка Nginx и SSL..."
$nginxCommands = @"
cd $RemotePath/deploy
# Nginx
sed -i "s/твой_домен.com/$Domain/g" nginx-setup.sh
./nginx-setup.sh
# SSL
sed -i "s/твой_домен.com/$Domain/g" ssl-setup.sh
sed -i "s/твой_email@example.com/admin@$Domain/g" ssl-setup.sh
./ssl-setup.sh
echo ""
echo "=== Готово! ==="
echo "Сайт доступен по адресу: https://$Domain"
"@
$nginxCommands | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${Username}@${ServerIP} "bash -s"
# === ФИНАЛ ===
Write-Status "Деплой завершён!"
Write-Info ""
Write-Info "🌐 Сайт: https://$Domain"
Write-Info "📁 Проект: $RemotePath"
Write-Info ""
Write-Info "Полезные команды:"
Write-Info " ssh ${Username}@${ServerIP}"
Write-Info " sudo systemctl status pressa"
Write-Info " sudo journalctl -u pressa -f"
Write-Info ""
Write-Warning "⚠️ Не забудь настроить .env файл на сервере!"
Write-Info " ssh ${Username}@${ServerIP} 'nano $RemotePath/.env'"
# Очистка
if (Test-Path $TempDir) {
Remove-Item $TempDir -Recurse -Force
}
Set-Location $LocalProjectPath
+65
View File
@@ -0,0 +1,65 @@
#!/bin/bash
# === Полная установка ИИ Пресс-секретарь ===
set -e
echo "=== Полная установка ИИ Пресс-секретарь ==="
echo ""
# 1. Установка системных зависимостей
echo "[1/7] Установка системных зависимостей..."
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3-pip nginx certbot python3-certbot-nginx
# 2. Клонирование проекта
echo "[2/7] Клонирование проекта..."
sudo mkdir -p /opt/pressa
git clone https://github.com/твой_репозиторий/pressa.git /opt/pressa
cd /opt/pressa
# 3. Деплой
echo "[3/7] Деплой приложения..."
chmod +x deploy.sh
./deploy.sh
# 4. Nginx
echo "[4/7] Настройка Nginx..."
chmod +x nginx-setup.sh
./nginx-setup.sh
# 5. SSL
echo "[5/7] Настройка SSL..."
read -p "Есть домен? (y/N): " HAS_DOMAIN
if [ "$HAS_DOMAIN" == "y" ] || [ "$HAS_DOMAIN" == "Y" ]; then
read -p "Введите домен (например, example.com): " DOMAIN
chmod +x ssl-setup.sh
./ssl-setup.sh
fi
# 6. Бэкап
echo "[6/7] Настройка бэкапов..."
chmod +x backup.sh
echo "0 3 * * * /opt/pressa/deploy/backup.sh" | crontab -
# 7. Проверка
echo "[7/7] Проверка..."
sudo systemctl status pressa --no-pager -l
echo ""
echo "=== Установка завершена! ==="
echo ""
echo "Доступ:"
echo " - Без Nginx: http://localhost:8001"
echo " - С Nginx: http://$(hostname -I | awk '{print $1}'):80"
echo ""
echo "Следующие шаги:"
echo " 1. Отредактируй .env файл: nano /opt/pressa/.env"
echo " 2. Заполни переменные окружения"
echo " 3. Перезапусти сервис: sudo systemctl restart pressa"
echo ""
echo "Управление:"
echo " - Статус: sudo systemctl status pressa"
echo " - Логи: sudo journalctl -u pressa -f"
echo " - Бэкап: sudo /opt/pressa/deploy/backup.sh"
echo " - Восстановление: sudo /opt/pressa/deploy/restore.sh"
+57
View File
@@ -0,0 +1,57 @@
#!/bin/bash
# === Восстановление из бэкапа ===
set -e
BACKUP_DIR="/opt/backups"
APP_DIR="/opt/pressa"
echo "=== Восстановление из бэкапа ==="
echo ""
echo "Доступные бэкапы:"
ls -1 $BACKUP_DIR/pressa_*.tar.gz 2>/dev/null || echo "Бэкапы не найдены"
echo ""
read -p "Введите имя файла бэкапа (например, pressa_20260827_143022.tar.gz): " BACKUP_FILE
if [ ! -f "$BACKUP_DIR/$BACKUP_FILE" ]; then
echo "❌ Файл не найден: $BACKUP_DIR/$BACKUP_FILE"
exit 1
fi
echo ""
echo "Восстановление: $BACKUP_DIR/$BACKUP_FILE"
read -p "Продолжить? (y/N): " CONFIRM
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
echo "Отмена"
exit 0
fi
# Остановка сервиса
echo "Остановка сервиса..."
sudo systemctl stop pressa
# Создание папки
mkdir -p $APP_DIR/cabinet_service
# Восстановление базы данных
echo "Восстановление базы данных..."
tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $APP_DIR cabinet_service/users.db
# Восстановление медиа
echo "Восстановление медиа..."
tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $APP_DIR cabinet_service/media
# Установка прав
echo "Установка прав..."
sudo chown -R www-data:www-data $APP_DIR/cabinet_service
# Перезапуск
echo "Перезапуск сервиса..."
sudo systemctl start pressa
echo ""
echo "✓ Восстановление завершено!"
echo "Проверь статус: sudo systemctl status pressa"