# πŸš€ Руководство ΠΏΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ SmartSolTech ## πŸ“‹ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° сСрвСра ### БистСмныС трСбования - **OS**: Ubuntu 20.04+ / CentOS 8+ / Debian 11+ - **RAM**: ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ 2GB, рСкомСндуСтся 4GB+ - **Storage**: ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ 20GB свободного мСста - **Network**: ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ 80, 443, 8000, 5432, 8080 ### Установка Docker ```bash # Ubuntu/Debian curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ docker sudo usermod -aG docker $USER # Установка Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` ## πŸ”§ Настройка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ### 1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория ```bash git clone https://github.com/smartsoltech/smartsoltech.kr.git cd smartsoltech.kr ``` ### 2. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния ```bash # ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ cp smartsoltech/.env.example smartsoltech/.env # Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ nano smartsoltech/.env ``` **ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:** ```env DEBUG=False SECRET_KEY=your-super-secret-key DATABASE_URL=postgresql://user:password@postgres_db:5432/smartsoltech TELEGRAM_BOT_TOKEN=your-telegram-bot-token ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com ``` ### 3. Настройка Telegram Bot ```bash # ОбновлСниС Ρ‚ΠΎΠΊΠ΅Π½Π° Π±ΠΎΡ‚Π° ./bin/update_telegram_token.py # Или Ρ‡Π΅Ρ€Π΅Π· CLI ./cli manage set_telegram_token ``` ## πŸš€ Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ### АвтоматичСскоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ```bash # ПолноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ запуск ./update # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса ./cli status ``` ### ПошаговоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ```bash # 1. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° старых ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ./stop # 2. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ² docker-compose build --no-cache # 3. Запуск сСрвисов docker-compose up -d # 4. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ./cli migrate # 5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ./cli createsuperuser # 6. Π‘Π±ΠΎΡ€ статичСских Ρ„Π°ΠΉΠ»ΠΎΠ² ./cli collectstatic ``` ## πŸ”’ Настройка SSL/HTTPS ### ИспользованиС Let's Encrypt ```bash # Установка Certbot sudo apt install certbot python3-certbot-nginx # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСртификата sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # Настройка автообновлСния sudo crontab -e # Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ: 0 12 * * * /usr/bin/certbot renew --quiet ``` ### Настройка Nginx ```nginx # /etc/nginx/sites-available/smartsoltech server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; location / { proxy_pass http://localhost:8000; 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; } location /static/ { alias /path/to/smartsoltech.kr/smartsoltech/staticfiles/; expires 1y; add_header Cache-Control "public, immutable"; } location /media/ { alias /path/to/smartsoltech.kr/smartsoltech/media/; expires 1y; add_header Cache-Control "public, immutable"; } } ``` ## πŸ“Š ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈ ### БистСмныС Π»ΠΎΠ³ΠΈ ```bash # Π›ΠΎΠ³ΠΈ всСх сСрвисов ./logs # Π›ΠΎΠ³ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сСрвиса ./logs web ./logs db ./logs pgadmin # ПослСдниС 100 строк ./logs --tail 100 ``` ### ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ рСсурсов ```bash # ИспользованиС рСсурсов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ docker stats # Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker system df # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° дискового пространства df -h ``` ### Health Checks ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° состояния сСрвисов ./cli status # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ./cli dbshell # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Django ./cli check ``` ## πŸ”„ Backup ΠΈ восстановлСниС ### Настройка автоматичСских бэкапов ```bash # Настройка backup рСпозитория ./bin/setup-backup.sh git@backup-server.com:backups/smartsoltech.git # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² crontab crontab -e # Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ: 0 2 * * * cd /path/to/smartsoltech.kr && ./update origin backup ``` ### Backup Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ```bash # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°ΠΌΠΏΠ° Π‘Π” docker-compose exec postgres_db pg_dump -U postgres smartsoltech > backup_$(date +%Y%m%d).sql # ВосстановлСниС ΠΈΠ· Π΄Π°ΠΌΠΏΠ° docker-compose exec -i postgres_db psql -U postgres smartsoltech < backup_20231125.sql ``` ### Backup ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ² ```bash # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΠ²Π° ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ² tar -czf media_backup_$(date +%Y%m%d).tar.gz smartsoltech/media/ # ВосстановлСниС ΠΌΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»ΠΎΠ² tar -xzf media_backup_20231125.tar.gz ``` ## 🚨 Troubleshooting ### ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ **1. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ запускаСтся** ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΎΠ² ./logs web # ΠŸΠ΅Ρ€Π΅ΡΠ±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ./stop --clean ./update ``` **2. Ошибки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…** ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π” ./cli dbshell # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ./cli showmigrations # Бброс ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ (ΠžΠ‘Π’ΠžΠ ΠžΠ–ΠΠž!) ./cli migrate --fake-initial ``` **3. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с статичСскими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ** ```bash # ΠŸΠ΅Ρ€Π΅ΡΠ±ΠΎΡ€ статики ./cli collectstatic --clear # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² доступа ./cli exec ls -la /app/smartsoltech/staticfiles/ ``` ### Π›ΠΎΠ³ΠΈ для диагностики ```bash # Django Π»ΠΎΠ³ΠΈ ./logs web # Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π»ΠΎΠ³ΠΈ ./logs db # Nginx Π»ΠΎΠ³ΠΈ (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ) sudo tail -f /var/log/nginx/error.log # БистСмныС Π»ΠΎΠ³ΠΈ sudo journalctl -u docker.service ``` ## πŸ“ˆ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ### Настройки Django ```python # smartsoltech/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'OPTIONS': { 'MAX_CONNS': 20, 'conn_max_age': 600, } } } # ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': 'redis://redis:6379/1', } } ``` ### Docker ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ```yaml # docker-compose.yml services: web: deploy: resources: limits: memory: 512M reservations: memory: 256M ``` ## πŸ” Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ### ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ 1. **ОбновлСниС систСмы:** ```bash sudo apt update && sudo apt upgrade ``` 2. **Настройка Firewall:** ```bash sudo ufw enable sudo ufw allow ssh sudo ufw allow 80 sudo ufw allow 443 ``` 3. **ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅:** ```python # settings.py ADMIN_URL = 'secret-admin-url/' ``` 4. **РСгулярныС обновлСния:** ```bash # Π•ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ./update ``` --- 🎯 **Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги**: [API докумСнтация](API.md) | [Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ скриптами](SCRIPTS_README.md)