ServerName poker.yourdomain.com ServerAdmin admin@yourdomain.com # Логи ErrorLog ${APACHE_LOG_DIR}/poker_error.log CustomLog ${APACHE_LOG_DIR}/poker_access.log combined # Проксирование на Docker контейнер ProxyPreserveHost On ProxyPass / http://localhost:3336/ ProxyPassReverse / http://localhost:3336/ # WebSocket поддержка RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://localhost:3336/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://localhost:3336/$1 [P,L] # Заголовки для WebSocket ProxyPass http://localhost:3336/ ProxyPassReverse http://localhost:3336/ ProxyPreserveHost On # WebSocket headers RequestHeader set X-Forwarded-Proto "http" RequestHeader set X-Forwarded-Port "80" # SSL версия (если используете HTTPS) ServerName poker.yourdomain.com ServerAdmin admin@yourdomain.com # SSL сертификаты SSLEngine on SSLCertificateFile /etc/ssl/certs/poker.crt SSLCertificateKeyFile /etc/ssl/private/poker.key # SSLCertificateChainFile /etc/ssl/certs/chain.pem # Логи ErrorLog ${APACHE_LOG_DIR}/poker_ssl_error.log CustomLog ${APACHE_LOG_DIR}/poker_ssl_access.log combined # Проксирование на Docker контейнер ProxyPreserveHost On ProxyPass / http://localhost:3336/ ProxyPassReverse / http://localhost:3336/ # WebSocket поддержка RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://localhost:3336/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://localhost:3336/$1 [P,L] # Заголовки для WebSocket ProxyPass http://localhost:3336/ ProxyPassReverse http://localhost:3336/ ProxyPreserveHost On # WebSocket headers RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" # Безопасность Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" # 🃏 Texas Hold'em Poker - Развертывание в Docker ## 📋 Содержание - [Быстрый старт](#быстрый-старт) - [Развертывание с Docker](#развертывание-с-docker) - [Настройка Apache](#настройка-apache) - [Переменные окружения](#переменные-окружения) - [Backup и восстановление](#backup-и-восстановление) --- ## 🚀 Быстрый старт ### Запуск через Docker Compose (рекомендуется) ```bash # Клонируйте репозиторий git clone cd onlinepocker # Запустите контейнер docker-compose up -d # Проверьте статус docker-compose ps # Просмотр логов docker-compose logs -f ``` Приложение будет доступно по адресу: `http://localhost:3336` --- ## 🐳 Развертывание с Docker ### Сборка Docker образа вручную ```bash # Сборка образа docker build -t texas-holdem-poker:latest . # Запуск контейнера docker run -d \ --name poker-app \ -p 3336:3336 \ -v $(pwd)/data:/app/data \ -e NODE_ENV=production \ -e PORT=3336 \ texas-holdem-poker:latest # Проверка работы docker ps docker logs poker-app ``` ### Управление контейнером ```bash # Остановка docker stop poker-app # Запуск docker start poker-app # Перезапуск docker restart poker-app # Удаление docker stop poker-app docker rm poker-app # Просмотр логов docker logs -f poker-app ``` ### Docker Compose команды ```bash # Запуск в фоне docker-compose up -d # Остановка docker-compose down # Перезапуск docker-compose restart # Пересборка образа docker-compose build # Пересборка и запуск docker-compose up -d --build # Просмотр логов docker-compose logs -f # Остановка с удалением volumes docker-compose down -v ``` --- ## 🌐 Настройка Apache ### Включение необходимых модулей Apache ```bash # Включаем модули для проксирования и WebSocket sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod proxy_wstunnel sudo a2enmod rewrite sudo a2enmod headers sudo a2enmod ssl # Если используете HTTPS # Перезапуск Apache sudo systemctl restart apache2 ``` ### Копирование конфигурации ```bash # Копируем конфиг в Apache sudo cp apache-config.conf /etc/apache2/sites-available/poker.conf # Редактируем домен (замените poker.yourdomain.com на ваш домен) sudo nano /etc/apache2/sites-available/poker.conf # Включаем сайт sudo a2ensite poker.conf # Проверяем конфигурацию sudo apache2ctl configtest # Перезагружаем Apache sudo systemctl reload apache2 ``` ### Проверка статуса Apache ```bash # Проверка статуса sudo systemctl status apache2 # Просмотр логов ошибок sudo tail -f /var/log/apache2/poker_error.log # Просмотр логов доступа sudo tail -f /var/log/apache2/poker_access.log ``` --- ## ⚙️ Переменные окружения ### Основные переменные | Переменная | Значение по умолчанию | Описание | |------------|----------------------|----------| | `PORT` | 3336 | Порт для запуска сервера | | `NODE_ENV` | production | Режим работы (production/development) | ### Настройка в docker-compose.yml ```yaml environment: - NODE_ENV=production - PORT=3336 ``` ### Настройка в Dockerfile ```dockerfile ENV NODE_ENV=production ENV PORT=3336 ``` --- ## 📦 Структура проекта после развертывания ``` onlinepocker/ ├── data/ # База данных (создается автоматически) │ └── poker.db ├── logs/ # Логи приложения (опционально) ├── public/ # Статические файлы ├── node_modules/ # Зависимости ├── server.js # Основной сервер ├── database.js # Работа с БД ├── package.json ├── Dockerfile # Docker образ ├── docker-compose.yml # Docker Compose конфигурация ├── .dockerignore # Исключения для Docker └── apache-config.conf # Конфигурация Apache ``` --- ## 💾 Backup и восстановление ### Создание резервной копии базы данных ```bash # Остановка контейнера docker-compose stop # Копирование БД cp data/poker.db data/poker.db.backup.$(date +%Y%m%d_%H%M%S) # Запуск контейнера docker-compose start ``` ### Восстановление из резервной копии ```bash # Остановка контейнера docker-compose stop # Восстановление БД cp data/poker.db.backup.20260201_120000 data/poker.db # Запуск контейнера docker-compose start ``` ### Автоматический backup (cron) ```bash # Создаем скрипт backup nano /opt/poker-backup.sh ``` ```bash #!/bin/bash BACKUP_DIR="/opt/poker-backups" DATE=$(date +%Y%m%d_%H%M%S) # Создаем директорию для backup mkdir -p $BACKUP_DIR # Копируем БД docker cp texas-holdem-poker:/app/data/poker.db $BACKUP_DIR/poker.db.$DATE # Удаляем старые backup (старше 30 дней) find $BACKUP_DIR -name "poker.db.*" -mtime +30 -delete echo "Backup создан: poker.db.$DATE" ``` ```bash # Делаем скрипт исполняемым chmod +x /opt/poker-backup.sh # Добавляем в cron (каждый день в 3:00) crontab -e # Добавьте строку: 0 3 * * * /opt/poker-backup.sh >> /var/log/poker-backup.log 2>&1 ``` --- ## 🔧 Troubleshooting ### Проблемы с портами ```bash # Проверка, не занят ли порт 3336 sudo netstat -tlnp | grep 3336 # Если порт занят, найти процесс sudo lsof -i :3336 # Убить процесс sudo kill -9 ``` ### Проблемы с WebSocket ```bash # Проверка модулей Apache apache2ctl -M | grep proxy # Должны быть включены: # - proxy_module # - proxy_http_module # - proxy_wstunnel_module ``` ### Проблемы с правами доступа ```bash # Установка правильных прав на директорию data sudo chown -R www-data:www-data data/ sudo chmod 755 data/ # Для Docker sudo chown -R 1000:1000 data/ ``` ### Просмотр логов контейнера ```bash # Все логи docker logs texas-holdem-poker # Последние 100 строк docker logs --tail 100 texas-holdem-poker # В реальном времени docker logs -f texas-holdem-poker ``` --- ## 🔐 Безопасность ### Рекомендации 1. **Используйте HTTPS** - настройте SSL сертификаты (Let's Encrypt) 2. **Firewall** - ограничьте доступ к порту 3336 только с localhost 3. **Регулярные обновления** - обновляйте зависимости и Docker образы 4. **Backup** - настройте автоматическое резервное копирование 5. **Мониторинг** - отслеживайте логи и производительность ### Настройка Let's Encrypt (опционально) ```bash # Установка certbot sudo apt-get install certbot python3-certbot-apache # Получение сертификата sudo certbot --apache -d poker.yourdomain.com # Автоматическое обновление sudo certbot renew --dry-run ``` --- ## 📞 Поддержка Если возникли проблемы: 1. Проверьте логи: `docker-compose logs -f` 2. Проверьте статус: `docker-compose ps` 3. Проверьте Apache: `sudo systemctl status apache2` 4. Проверьте логи Apache: `sudo tail -f /var/log/apache2/poker_error.log` --- ## 📝 Лицензия Этот проект предназначен для личного использования. --- **Версия:** 1.0.0 **Дата обновления:** 2026-02-01