diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0a8745c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,49 @@ +# Node modules +node_modules +npm-debug.log +yarn-error.log + +# Git +.git +.gitignore +.gitattributes + +# Docker +Dockerfile +.dockerignore +docker-compose.yml + +# IDE +.vscode +.idea +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Environment +.env +.env.local +.env.*.local + +# Logs +logs +*.log + +# Documentation +README.md +*.md + +# Tests +test +tests +*.test.js +*.spec.js + +# Build +dist +build +*.map diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..1b9475f --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,112 @@ +# Docker инструкции + +## Быстрый старт + +### Вариант 1: Docker Compose (рекомендуется) + +```bash +# Сборка и запуск +docker-compose up -d + +# Просмотр логов +docker-compose logs -f + +# Остановка +docker-compose down +``` + +### Вариант 2: Docker напрямую + +```bash +# Сборка образа +docker build -t star-wars-hearthstone . + +# Запуск контейнера +docker run -d \ + --name star-wars-game \ + -p 3542:3542 \ + --restart unless-stopped \ + star-wars-hearthstone + +# Просмотр логов +docker logs -f star-wars-game + +# Остановка +docker stop star-wars-game +docker rm star-wars-game +``` + +## Доступ к игре + +После запуска контейнера игра будет доступна по адресу: +- **Локально**: `http://localhost:3542` +- **По сети**: `http://[IP-адрес-сервера]:3542` + +## Изменение порта + +Если нужно использовать другой порт, измените в `docker-compose.yml`: + +```yaml +ports: + - "8080:3542" # Внешний:Внутренний +``` + +Или при запуске через `docker run`: + +```bash +docker run -d -p 8080:3542 --name star-wars-game star-wars-hearthstone +``` + +## Переменные окружения + +Можно задать через `docker-compose.yml`: + +```yaml +environment: + - PORT=3542 + - NODE_ENV=production +``` + +Или через `docker run`: + +```bash +docker run -d \ + -p 3542:3542 \ + -e PORT=3542 \ + -e NODE_ENV=production \ + --name star-wars-game \ + star-wars-hearthstone +``` + +## Проверка работоспособности + +```bash +# Проверка статуса контейнера +docker ps + +# Проверка healthcheck +docker inspect star-wars-game | grep -A 10 Health + +# Проверка через curl +curl http://localhost:3542 +``` + +## Пересборка образа + +```bash +# С Docker Compose +docker-compose build --no-cache + +# С Docker напрямую +docker build --no-cache -t star-wars-hearthstone . +``` + +## Удаление + +```bash +# Остановка и удаление контейнера +docker-compose down + +# Удаление образа +docker rmi star-wars-hearthstone +``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d478859 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# Star Wars Hearthstone - Dockerfile +FROM node:18-alpine + +# Метаданные +LABEL maintainer="Star Wars Hearthstone" +LABEL description="PvP Star Wars card game over LAN" + +# Установка рабочей директории +WORKDIR /app + +# Копирование package.json и package-lock.json (для лучшего кэширования) +COPY package*.json ./ + +# Установка зависимостей +RUN npm ci --only=production && \ + npm cache clean --force + +# Копирование всех файлов приложения +COPY . . + +# Создание пользователя без root прав для безопасности +RUN addgroup -g 1001 -S nodejs && \ + adduser -S nodejs -u 1001 && \ + chown -R nodejs:nodejs /app + +USER nodejs + +# Открытие порта +EXPOSE 3542 + +# Переменные окружения +ENV NODE_ENV=production +ENV PORT=3542 + +# Healthcheck +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD node -e "require('http').get('http://localhost:3542', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" + +# Запуск приложения +CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..68169aa --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + star-wars-game: + build: + context: . + dockerfile: Dockerfile + container_name: star-wars-hearthstone + ports: + - "3542:3542" + environment: + - NODE_ENV=production + - PORT=3542 + restart: unless-stopped + networks: + - star-wars-network + healthcheck: + test: ["CMD", "node", "-e", "require('http').get('http://localhost:3542', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"] + interval: 30s + timeout: 3s + retries: 3 + start_period: 5s + +networks: + star-wars-network: + driver: bridge diff --git a/docker-run.bat b/docker-run.bat new file mode 100644 index 0000000..475078a --- /dev/null +++ b/docker-run.bat @@ -0,0 +1,33 @@ +@echo off +REM Скрипт для быстрого запуска Docker контейнера (Windows) + +echo 🚀 Запуск Star Wars Hearthstone в Docker... + +REM Проверка наличия Docker +docker --version >nul 2>&1 +if errorlevel 1 ( + echo ❌ Docker не установлен. Установите Docker Desktop и попробуйте снова. + pause + exit /b 1 +) + +REM Проверка наличия docker-compose +docker-compose --version >nul 2>&1 +if errorlevel 1 ( + echo 📦 Используется Docker напрямую... + docker build -t star-wars-hearthstone . + docker run -d --name star-wars-game -p 3542:3542 --restart unless-stopped star-wars-hearthstone + echo ✅ Сервер запущен! + echo 🌐 Игра доступна по адресу: http://localhost:3542 + echo 📋 Просмотр логов: docker logs -f star-wars-game + echo 🛑 Остановка: docker stop star-wars-game ^&^& docker rm star-wars-game +) else ( + echo 📦 Используется docker-compose... + docker-compose up -d --build + echo ✅ Сервер запущен! + echo 🌐 Игра доступна по адресу: http://localhost:3542 + echo 📋 Просмотр логов: docker-compose logs -f + echo 🛑 Остановка: docker-compose down +) + +pause diff --git a/docker-run.sh b/docker-run.sh new file mode 100644 index 0000000..3320c78 --- /dev/null +++ b/docker-run.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Скрипт для быстрого запуска Docker контейнера + +set -e + +echo "🚀 Запуск Star Wars Hearthstone в Docker..." + +# Проверка наличия Docker +if ! command -v docker &> /dev/null; then + echo "❌ Docker не установлен. Установите Docker и попробуйте снова." + exit 1 +fi + +# Проверка наличия docker-compose +if command -v docker-compose &> /dev/null; then + echo "📦 Используется docker-compose..." + docker-compose up -d --build + echo "✅ Сервер запущен!" + echo "🌐 Игра доступна по адресу: http://localhost:3542" + echo "📋 Просмотр логов: docker-compose logs -f" + echo "🛑 Остановка: docker-compose down" +else + echo "📦 Используется Docker напрямую..." + docker build -t star-wars-hearthstone . + docker run -d \ + --name star-wars-game \ + -p 3542:3542 \ + --restart unless-stopped \ + star-wars-hearthstone + echo "✅ Сервер запущен!" + echo "🌐 Игра доступна по адресу: http://localhost:3542" + echo "📋 Просмотр логов: docker logs -f star-wars-game" + echo "🛑 Остановка: docker stop star-wars-game && docker rm star-wars-game" +fi