From 263b0c1b64e4b4f6f6d223bbb19cfa42b8f9732b Mon Sep 17 00:00:00 2001 From: AlexIves16 Date: Sun, 19 Apr 2026 23:00:08 +0500 Subject: [PATCH] fix: Update ports to avoid conflicts with existing Docker projects - Change Gitea port from 3000 to 3001 - Change API port from 8080 to 8082 - Change Nginx port from 80 to 8083 - Add docker-compose.override.yml for local development - Add deployment guide for existing servers --- DEPLOY_TO_EXISTING_SERVER.md | 194 +++++++++++++++++++++++++++++ server/docker-compose.override.yml | 31 +++++ server/docker-compose.yml | 21 ++-- server/ecosystem.config.js | 29 +++++ server/package.json | 38 ++++++ 5 files changed, 305 insertions(+), 8 deletions(-) create mode 100644 DEPLOY_TO_EXISTING_SERVER.md create mode 100644 server/docker-compose.override.yml create mode 100644 server/ecosystem.config.js create mode 100644 server/package.json diff --git a/DEPLOY_TO_EXISTING_SERVER.md b/DEPLOY_TO_EXISTING_SERVER.md new file mode 100644 index 0000000..da7926b --- /dev/null +++ b/DEPLOY_TO_EXISTING_SERVER.md @@ -0,0 +1,194 @@ +# 🚀 Деплой Nanaxe Server на существующий Docker сервер + +Если у вас уже работает другой проект на Docker, Nanaxe Server можно развернуть на других портах. + +## 📋 Маппинг портов + +| Сервис | Внутренний порт | Внешний порт | Описание | +|--------|----------------|--------------|----------| +| Gitea | 3000 | **3001** | Git сервер | +| Gitea SSH | 22 | **2221** | Git SSH | +| PostgreSQL | 5432 | **5433** | База данных | +| Nanaxe API | 8080 | **8082** | REST API | +| Nginx | 80 | **8083** | Web UI | +| Nginx HTTPS | 443 | **8444** | Web UI SSL | +| WebDAV | 80 | **8084** | Файловый доступ | + +## 🚀 Быстрый старт + +### 1. На сервере создайте директорию + +```bash +ssh root@YOUR_SERVER_IP + +mkdir -p /opt/nanaxe-server +cd /opt/nanaxe-server +``` + +### 2. Скопируйте файлы + +```bash +# Клонируйте репозиторий +git clone https://github.com/YOUR_USERNAME/NANAXE.git temp +cp -r temp/server/* . +rm -rf temp +``` + +### 3. Настройте окружение + +```bash +cp .env.example .env +nano .env +``` + +Заполните: +```env +GITEA_DOMAIN=your-domain.com +JWT_SECRET=your-secret-key +POSTGRES_PASSWORD=your-db-password +WEBDAV_USER=admin +WEBDAV_PASSWORD=your-password +``` + +### 4. Запустите + +```bash +docker compose up -d +``` + +### 5. Проверьте + +```bash +# Проверьте статус +docker compose ps + +# Проверьте логи +docker compose logs -f + +# Проверьте API +curl http://localhost:8082/health + +# Откройте Gitea +open http://YOUR_SERVER_IP:3001 +``` + +## 🔧 Настройка Nginx Reverse Proxy (опционально) + +Если у вас уже есть Nginx для другого проекта, добавьте: + +```nginx +# /etc/nginx/sites-available/nanaxe + +server { + listen 80; + server_name nanaxe.yourdomain.com; + + location / { + proxy_pass http://localhost:8083; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} + +server { + listen 80; + server_name git.yourdomain.com; + + location / { + proxy_pass http://localhost:3001; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} + +server { + listen 80; + server_name api.yourdomain.com; + + location / { + proxy_pass http://localhost:8082; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} +``` + +```bash +ln -s /etc/nginx/sites-available/nanaxe /etc/nginx/sites-enabled/ +nginx -t +systemctl reload nginx +``` + +## 🔄 GitHub Actions деплой + +### 1. Добавьте Secrets + +В GitHub репозитории: **Settings → Secrets → Actions** + +``` +NANAXE_SSH_KEY=-----BEGIN OPENSSH PRIVATE KEY----- + (приватный ключ) + -----END OPENSSH PRIVATE KEY----- +NANAXE_HOST=YOUR_SERVER_IP +NANAXE_USER=root +NANAXE_PATH=/opt/nanaxe-server +``` + +### 2. Workflow уже настроен + +При push в `master` ветку: +1. Собирается Docker образ +2. Публикуется в GitHub Container Registry +3. Деплоится на ваш сервер +4. Перезапускаются контейнеры + +## 🧪 Локальная разработка + +Для локального тестирования с стандартными портами: + +```bash +cd server +docker compose -f docker-compose.yml -f docker-compose.override.yml up -d +``` + +## 📱 Доступ к сервисам + +После деплоя: + +- **Gitea**: http://YOUR_SERVER_IP:3001 +- **API**: http://YOUR_SERVER_IP:8082 +- **Web UI**: http://YOUR_SERVER_IP:8083 +- **WebDAV**: http://YOUR_SERVER_IP:8084 + +## 🐛 Устранение неполадок + +### Порт уже занят + +```bash +# Найдите процесс +netstat -tlnp | grep 3001 + +# Или измените порт в docker-compose.yml +``` + +### Конфликт имён контейнеров + +```bash +# Проверьте запущенные контейнеры +docker ps + +# Если есть конфликт, измените имена в docker-compose.yml +``` + +### Проблемы с сетью + +```bash +# Пересоздайте сеть +docker compose down +docker network prune +docker compose up -d +``` + +## ✅ Готово! + +Nanaxe Server работает параллельно с вашим другим проектом! diff --git a/server/docker-compose.override.yml b/server/docker-compose.override.yml new file mode 100644 index 0000000..ac10227 --- /dev/null +++ b/server/docker-compose.override.yml @@ -0,0 +1,31 @@ +# Docker Compose Override for Development/Local Testing +# Usage: docker compose -f docker-compose.yml -f docker-compose.override.yml up + +services: + # Use standard ports for local development + gitea: + ports: + - "3000:3000" + - "222:22" + environment: + - GITEA__server__ROOT_URL=http://localhost:3000 + - GITEA__server__SSH_PORT=222 + + postgres: + ports: + - "5432:5432" + + nanaxe-api: + ports: + - "8080:8080" + environment: + - NODE_ENV=development + + nginx: + ports: + - "80:80" + - "443:443" + + webdav: + ports: + - "8081:80" diff --git a/server/docker-compose.yml b/server/docker-compose.yml index 21d88cd..b16c4d2 100644 --- a/server/docker-compose.yml +++ b/server/docker-compose.yml @@ -1,5 +1,8 @@ version: '3.8' +# Nanaxe Server - Mindmap Synchronization +# Run alongside other Docker projects by changing ports + services: # Gitea - Self-hosted Git server для хранения markdown-файлов gitea: @@ -14,9 +17,9 @@ services: - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea_password - GITEA__server__DOMAIN=${GITEA_DOMAIN:-localhost} - - GITEA__server__ROOT_URL=http://${GITEA_DOMAIN:-localhost}:3000 + - GITEA__server__ROOT_URL=http://${GITEA_DOMAIN:-localhost}:3001 - GITEA__server__SSH_DOMAIN=${GITEA_DOMAIN:-localhost} - - GITEA__server__SSH_PORT=222 + - GITEA__server__SSH_PORT=2221 - GITEA__server__SSH_LISTEN_PORT=22 - GITEA__security__INSTALL_LOCK=true - GITEA__service__DISABLE_REGISTRATION=false @@ -29,8 +32,8 @@ services: - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - - "3000:3000" - - "222:22" + - "3001:3000" # Changed from 3000 to avoid conflicts + - "2221:22" # Changed from 222 to avoid conflicts depends_on: - postgres @@ -38,6 +41,8 @@ services: postgres: image: postgres:16-alpine container_name: nanaxe-postgres + ports: + - "5433:5432" # Expose on different port environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea_password @@ -68,7 +73,7 @@ services: - mindmap-data:/app/mindmaps - ./api/logs:/app/logs ports: - - "8080:8080" + - "8082:8080" # Changed from 8080 to avoid conflicts depends_on: - gitea - postgres @@ -84,8 +89,8 @@ services: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/html:/usr/share/nginx/html:ro ports: - - "80:80" - - "443:443" + - "8083:80" # Changed from 80 to avoid conflicts + - "8444:443" # Changed from 443 to avoid conflicts depends_on: - gitea - nanaxe-api @@ -104,7 +109,7 @@ services: - USERNAME=${WEBDAV_USER:-admin} - PASSWORD=${WEBDAV_PASSWORD:-admin} ports: - - "8081:80" + - "8084:80" # Changed from 8081 to avoid conflicts networks: nanaxe-network: diff --git a/server/ecosystem.config.js b/server/ecosystem.config.js new file mode 100644 index 0000000..225f46f --- /dev/null +++ b/server/ecosystem.config.js @@ -0,0 +1,29 @@ +module.exports = { + apps: [{ + name: 'nanaxe-api', + script: './api/src/index.js', + instances: 1, + exec_mode: 'fork', + env: { + NODE_ENV: 'production', + PORT: 3001 + }, + error_file: './logs/err.log', + out_file: './logs/out.log', + log_file: './logs/combined.log', + time: true, + max_memory_restart: '256M', + restart_delay: 3000, + max_restarts: 5, + min_uptime: '10s', + watch: false, + ignore_watch: ['node_modules', 'logs', 'data'], + merge_logs: true, + log_type: 'json', + log_date_format: 'YYYY-MM-DD HH:mm:ss Z', + // Auto-restart on failure + autorestart: true, + // Don't restart if crashing too fast + exp_backoff_restart_delay: 100 + }] +}; diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..c2ffc3e --- /dev/null +++ b/server/package.json @@ -0,0 +1,38 @@ +{ + "name": "nanaxe-api-server", + "version": "1.0.0", + "description": "API server for Nanaxe CRM mindmap synchronization - FastPanel compatible", + "main": "api/src/index.js", + "scripts": { + "start": "node api/src/index.js", + "dev": "nodemon api/src/index.js", + "pm2:start": "pm2 start ecosystem.config.js", + "pm2:stop": "pm2 stop ecosystem.config.js", + "pm2:restart": "pm2 restart ecosystem.config.js", + "pm2:logs": "pm2 logs nanaxe-api", + "install:deps": "npm ci --production" + }, + "dependencies": { + "express": "^4.18.2", + "cors": "^2.8.5", + "helmet": "^7.1.0", + "morgan": "^1.10.0", + "jsonwebtoken": "^9.0.2", + "bcryptjs": "^2.4.3", + "axios": "^1.6.2", + "simple-git": "^3.21.0", + "fs-extra": "^11.2.0", + "uuid": "^9.0.1", + "dotenv": "^16.3.1", + "express-rate-limit": "^7.1.5", + "multer": "^1.4.5-lts.1", + "yaml": "^2.3.4", + "sqlite3": "^5.1.6" + }, + "devDependencies": { + "nodemon": "^3.0.2" + }, + "engines": { + "node": ">=18.0.0" + } +}