# πŸš€ Руководство ΠΏΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ SmartSolTech Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ ## πŸ“‹ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования ### На ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ сСрвСрС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ установлСно: - Ubuntu 20.04/22.04 ΠΈΠ»ΠΈ Debian 11/12 - Docker 24.0+ - Docker Compose 2.0+ - Nginx (для reverse proxy) - Certbot (для SSL сСртификатов) - Git ## πŸ”§ Π¨Π°Π³ 1: ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° сСрвСра ### 1.1 ОбновлСниС систСмы ```bash sudo apt update && sudo apt upgrade -y ``` ### 1.2 Установка Docker ```bash # Установка Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ docker sudo usermod -aG docker $USER newgrp docker # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° установки docker --version docker compose version ``` ### 1.3 Установка Nginx ΠΈ Certbot ```bash sudo apt install nginx certbot python3-certbot-nginx -y ``` ### 1.4 Настройка firewall ```bash sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable ``` ## πŸ“¦ Π¨Π°Π³ 2: ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ```bash # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° sudo mkdir -p /var/www/smartsoltech.kr sudo chown $USER:$USER /var/www/smartsoltech.kr # ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория cd /var/www/smartsoltech.kr git clone https://github.com/your-username/smartsoltech.kr.git . # Или Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· SCP/SFTP ``` ## πŸ” Π¨Π°Π³ 3: Настройка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния ### 3.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ .env Ρ„Π°ΠΉΠ»Π° ```bash cd /var/www/smartsoltech.kr cp .env.example .env nano .env ``` ### 3.2 Настройка .env для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ```bash # Django Settings SECRET_KEY=GENERATE_NEW_SECRET_KEY_HERE_MINIMUM_50_CHARACTERS DEBUG=False ALLOWED_HOSTS=localhost,127.0.0.1,smartsoltech.kr,www.smartsoltech.kr CSRF_TRUSTED_ORIGINS=https://smartsoltech.kr,https://www.smartsoltech.kr # PostgreSQL Database POSTGRES_DB=smartsoltech_db POSTGRES_USER=smartsoltech_user POSTGRES_PASSWORD=STRONG_PASSWORD_HERE POSTGRES_HOST=postgres_db # PgAdmin (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π΅) PGADMIN_DEFAULT_EMAIL=admin@smartsoltech.kr PGADMIN_DEFAULT_PASSWORD=ANOTHER_STRONG_PASSWORD # Zabbix Agent ZBX_SERVER_HOST=your-zabbix-server-ip # Telegram Bot (настраиваСтся Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ) # TELEGRAM_BOT_TOKEN=your-bot-token-from-botfather # Email Settings (настраиваСтся Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ) # SMTP_SERVER=smtp.gmail.com # SMTP_PORT=587 # SENDER_EMAIL=your-email@gmail.com ``` ### 3.3 ГСнСрация Π½ΠΎΠ²ΠΎΠ³ΠΎ SECRET_KEY ```bash # На сСрвСрС запуститС: python3 -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())" ``` ## 🐳 Π¨Π°Π³ 4: Настройка Docker Compose для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ### 4.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ docker-compose.prod.yml ```bash nano docker-compose.prod.yml ``` ```yaml version: '3.8' services: postgres_db: image: postgres:17-alpine container_name: postgres_db restart: always environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data networks: - backend healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 5 django_app: build: . container_name: django_app restart: always command: > sh -c "python manage.py collectstatic --noinput && python manage.py migrate && gunicorn smartsoltech.wsgi:application --bind 0.0.0.0:8000 --workers 4 --timeout 120" volumes: - static_volume:/app/staticfiles - media_volume:/app/media environment: - SECRET_KEY=${SECRET_KEY} - DEBUG=${DEBUG} - ALLOWED_HOSTS=${ALLOWED_HOSTS} - CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS} - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_HOST=${POSTGRES_HOST} depends_on: postgres_db: condition: service_healthy networks: - backend expose: - "8000" telegram_bot: build: . container_name: telegram_bot restart: always command: python manage.py run_telegram_bot environment: - SECRET_KEY=${SECRET_KEY} - DEBUG=${DEBUG} - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_HOST=${POSTGRES_HOST} depends_on: postgres_db: condition: service_healthy networks: - backend nginx: image: nginx:alpine container_name: nginx restart: always ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/conf.d:/etc/nginx/conf.d:ro - static_volume:/var/www/static:ro - media_volume:/var/www/media:ro - /etc/letsencrypt:/etc/letsencrypt:ro - /var/www/certbot:/var/www/certbot:ro depends_on: - django_app networks: - backend volumes: postgres_data: static_volume: media_volume: networks: backend: driver: bridge ``` ## 🌐 Π¨Π°Π³ 5: Настройка Nginx ### 5.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Nginx ```bash mkdir -p nginx/conf.d nano nginx/conf.d/smartsoltech.conf ``` ```nginx # Π Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ с www Π½Π° non-www server { listen 80; listen [::]:80; server_name www.smartsoltech.kr; return 301 https://smartsoltech.kr$request_uri; } # HTTP β†’ HTTPS Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ server { listen 80; listen [::]:80; server_name smartsoltech.kr; # Let's Encrypt challenge location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://$server_name$request_uri; } } # HTTPS конфигурация server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name smartsoltech.kr; # SSL сСртификаты ssl_certificate /etc/letsencrypt/live/smartsoltech.kr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/smartsoltech.kr/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/smartsoltech.kr/chain.pem; # SSL настройки ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Security headers add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; # ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² client_max_body_size 100M; # БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ location /static/ { alias /var/www/static/; expires 30d; add_header Cache-Control "public, immutable"; } # МСдиа Ρ„Π°ΠΉΠ»Ρ‹ location /media/ { alias /var/www/media/; expires 7d; add_header Cache-Control "public"; } # Django ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ location / { proxy_pass http://django_app: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; proxy_redirect off; proxy_buffering off; } # Π›ΠΎΠ³ΠΈ access_log /var/log/nginx/smartsoltech_access.log; error_log /var/log/nginx/smartsoltech_error.log; } ``` ### 5.2 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ nginx.conf ```bash nano nginx/nginx.conf ``` ```nginx user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; } ``` ## πŸ”’ Π¨Π°Π³ 6: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ SSL сСртификата ### 6.1 Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ запуск для получСния сСртификата ```bash # Запуск Ρ‚ΠΎΠ»ΡŒΠΊΠΎ postgres ΠΈ django docker compose -f docker-compose.prod.yml up -d postgres_db django_app # ОТиданиС запуска sleep 10 # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСртификата sudo certbot certonly --webroot -w /var/www/certbot \ -d smartsoltech.kr \ -d www.smartsoltech.kr \ --email admin@smartsoltech.kr \ --agree-tos \ --no-eff-email ``` ### 6.2 Настройка автообновлСния сСртификата ```bash # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ cron Π·Π°Π΄Π°Ρ‡ΠΈ sudo crontab -e # Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку: 0 3 * * * certbot renew --quiet --post-hook "docker exec nginx nginx -s reload" ``` ## πŸš€ Π¨Π°Π³ 7: Запуск прилоТСния ### 7.1 Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ```bash cd /var/www/smartsoltech.kr # Π‘Π±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ² docker compose -f docker-compose.prod.yml build # Запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker compose -f docker-compose.prod.yml up -d # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса docker compose -f docker-compose.prod.yml ps ``` ### 7.2 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΎΠ² ```bash # Π›ΠΎΠ³ΠΈ Django docker logs django_app --tail 100 -f # Π›ΠΎΠ³ΠΈ Nginx docker logs nginx --tail 100 -f # Π›ΠΎΠ³ΠΈ PostgreSQL docker logs postgres_db --tail 100 -f ``` ## πŸ‘€ Π¨Π°Π³ 8: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ```bash docker exec -it django_app python smartsoltech/manage.py createsuperuser ``` ## πŸ“Š Π¨Π°Π³ 9: Настройка ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) ### 9.1 Zabbix Agent ```bash # ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² .env ZBX_SERVER_HOST=your-zabbix-server-ip # ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ docker compose -f docker-compose.prod.yml restart ``` ### 9.2 Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ```bash # Настройка Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² sudo nano /etc/logrotate.d/docker-containers # Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: /var/lib/docker/containers/*/*.log { rotate 7 daily compress missingok delaycompress copytruncate } ``` ## πŸ”„ Π¨Π°Π³ 10: ОбновлСниС прилоТСния ### 10.1 Π‘ΠΊΡ€ΠΈΠΏΡ‚ для обновлСния ```bash nano /var/www/smartsoltech.kr/update.sh chmod +x /var/www/smartsoltech.kr/update.sh ``` ```bash #!/bin/bash set -e echo "πŸ”„ Начало обновлСния..." # ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° cd /var/www/smartsoltech.kr # ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ послСдних ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ git pull origin master # ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker compose -f docker-compose.prod.yml down # ΠŸΠ΅Ρ€Π΅ΡΠ±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ² docker compose -f docker-compose.prod.yml build # Запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker compose -f docker-compose.prod.yml up -d # ОТиданиС запуска sleep 10 # ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ docker exec django_app python smartsoltech/manage.py migrate # Π‘Π±ΠΎΡ€ΠΊΠ° статики docker exec django_app python smartsoltech/manage.py collectstatic --noinput # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса docker compose -f docker-compose.prod.yml ps echo "βœ… ОбновлСниС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ!" ``` ### 10.2 ИспользованиС ```bash /var/www/smartsoltech.kr/update.sh ``` ## πŸ” ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности ### ЧСклист ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: - [ ] Π‘Π°ΠΉΡ‚ доступСн ΠΏΠΎ https://smartsoltech.kr - [ ] SSL сСртификат Π²Π°Π»ΠΈΠ΄Π΅Π½ - [ ] Π Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ с HTTP Π½Π° HTTPS Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ - [ ] Π Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ с www Π½Π° non-www Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ - [ ] БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ - [ ] Админ панСль доступна: /admin/ - [ ] ВсС страницы ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±Π΅Π· ошибок - [ ] Π€ΠΎΡ€ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ - [ ] Telegram Π±ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ - [ ] Email увСдомлСния приходят ### ВСстированиС ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° SSL curl -I https://smartsoltech.kr # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΠ² curl -I http://smartsoltech.kr curl -I http://www.smartsoltech.kr # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° страниц curl https://smartsoltech.kr/ curl https://smartsoltech.kr/services/ curl https://smartsoltech.kr/about/ curl https://smartsoltech.kr/blog/ ``` ## πŸ› УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ ### ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΎΠ² docker compose -f docker-compose.prod.yml logs # ΠŸΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker compose -f docker-compose.prod.yml down -v docker compose -f docker-compose.prod.yml up -d ``` ### ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: 502 Bad Gateway ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса Django docker exec django_app ps aux # ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ Django docker compose -f docker-compose.prod.yml restart django_app ``` ### ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ```bash # ΠŸΠ΅Ρ€Π΅ΡΠ±ΠΎΡ€ΠΊΠ° статики docker exec django_app python smartsoltech/manage.py collectstatic --noinput # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² docker exec nginx ls -la /var/www/static/ ``` ## πŸ“± Настройка Telegram Π±ΠΎΡ‚Π° 1. Π—Π°ΠΉΡ‚ΠΈ Π² Π°Π΄ΠΌΠΈΠ½ панСль: https://smartsoltech.kr/admin/ 2. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² "Настройки ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ" β†’ "Telegram settings" 3. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ bot token ΠΈ bot name 4. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ telegram_bot ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€: ```bash docker compose -f docker-compose.prod.yml restart telegram_bot ``` ## πŸ“§ Настройка Email 1. Π—Π°ΠΉΡ‚ΠΈ Π² Π°Π΄ΠΌΠΈΠ½ панСль: https://smartsoltech.kr/admin/ 2. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² "Настройки ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ" β†’ "Email settings" 3. Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ SMTP настройки 4. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ тСстовоС письмо ## πŸ” Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ### Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ: 1. **РСгулярно обновляйтС систСму**: ```bash sudo apt update && sudo apt upgrade ``` 2. **НастройтС fail2ban**: ```bash sudo apt install fail2ban sudo systemctl enable fail2ban ``` 3. **НастройтС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘Π”**: ```bash # Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ скрипт backup.sh #!/bin/bash docker exec postgres_db pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} > /backups/smartsoltech_$(date +%Y%m%d).sql # Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² crontab 0 2 * * * /var/www/smartsoltech.kr/backup.sh ``` 4. **ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π»ΠΎΠ³ΠΎΠ²**: ```bash tail -f /var/log/nginx/smartsoltech_error.log docker logs django_app --tail 100 -f ``` ## πŸ“Š ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ### Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ настройки сСрвСра: - **CPU**: ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 2 ядра - **RAM**: ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 4GB - **Disk**: ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 40GB SSD - **Bandwidth**: ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 100Mbps ### ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Django: - Gunicorn workers: `(2 Γ— CPU cores) + 1` - PostgreSQL shared_buffers: `25% ΠΎΡ‚ RAM` - Nginx worker_connections: `1024` --- ## πŸŽ‰ Π“ΠΎΡ‚ΠΎΠ²ΠΎ! Π’Π°Ρˆ сайт Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ адрСсу: **https://smartsoltech.kr** Для получСния ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².