Docker Update

This commit is contained in:
2026-01-26 14:06:31 +03:00
parent 243ef9e235
commit 934cb46128
6 changed files with 294 additions and 0 deletions

49
.dockerignore Normal file
View File

@ -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

112
DOCKER.md Normal file
View File

@ -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
```

40
Dockerfile Normal file
View File

@ -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"]

26
docker-compose.yml Normal file
View File

@ -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

33
docker-run.bat Normal file
View File

@ -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

34
docker-run.sh Normal file
View File

@ -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