Files
Avtex/server/DEPLOY.md
T
Alexyz f1e0f6b5ef feat: Add Nanaxe server with Docker, GitHub Actions CI/CD, and auto-deployment
- Add complete server infrastructure with Gitea, API, PostgreSQL
- Implement Obsidian-compatible markdown mindmap converter
- Add Flutter service for server synchronization
- Configure GitHub Actions for automated build and deploy
- Add production docker-compose with health checks
- Include VPS setup and deployment scripts
- Add comprehensive deployment documentation
2026-04-19 22:18:25 +05:00

7.8 KiB
Raw Blame History

🚀 Развёртывание Nanaxe Server на Proxmox VPS

📋 Содержание

  1. Подготовка VPS
  2. Установка Docker
  3. Настройка сервера
  4. Запуск
  5. Настройка домена и SSL
  6. Подключение Flutter-приложения

Подготовка VPS

1. Создание LXC контейнера в Proxmox

# На хосте Proxmox создайте контейнер
pct create 100 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
  --hostname nanaxe-server \
  --memory 2048 \
  --cores 2 \
  --rootfs local-lvm:10 \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp

# Запустите контейнер
pct start 100

# Войдите в контейнер
pct enter 100

2. Обновление системы

apt update && apt upgrade -y
apt install -y curl wget git nano htop

Установка Docker

# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Добавление пользователя в группу docker
usermod -aG docker $USER

# Установка Docker Compose
apt install -y docker-compose-plugin

# Проверка
docker --version
docker compose version

Настройка сервера

1. Клонирование репозитория

cd /opt
git clone <your-repo-url> nanaxe-server
cd nanaxe-server/server

2. Настройка переменных окружения

cp .env.example .env
nano .env

Заполните файл:

# Domain configuration
GITEA_DOMAIN=your-domain.com

# Gitea Configuration
GITEA_TOKEN=your_gitea_api_token_here

# Security (сгенерируйте случайный ключ)
JWT_SECRET=$(openssl rand -base64 32)

# WebDAV (optional)
WEBDAV_USER=admin
WEBDAV_PASSWORD=your_secure_password

# Database (обязательно измените!)
POSTGRES_PASSWORD=$(openssl rand -base64 24)

3. Создание директорий

mkdir -p api/logs
mkdir -p nginx/html

Запуск

1. Первый запуск

docker compose up -d

2. Проверка статуса

docker compose ps
docker compose logs -f

3. Инициализация Gitea

Откройте http://your-server-ip:3000 и выполните первоначальную настройку:

  1. Установите базу данных (уже настроена PostgreSQL)
  2. Создайте администратора
  3. Создайте API токен в Settings → Applications
  4. Добавьте токен в .env файл
# Перезапустите сервисы
docker compose restart

Настройка домена и SSL

1. Настройка DNS

Укажите A-записи:

  • your-domain.com → IP сервера
  • git.your-domain.com → IP сервера
  • api.your-domain.com → IP сервера

2. Установка Certbot

apt install -y certbot

# Получение сертификатов
certbot certonly --standalone -d your-domain.com -d git.your-domain.com -d api.your-domain.com

3. Настройка Nginx

Отредактируйте nginx/nginx.conf:

# Раскомментируйте HTTPS server section
server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
    # ... rest of config
}

4. Обновление docker-compose.yml

Добавьте volume для SSL сертификатов:

nginx:
  volumes:
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    - ./nginx/html:/usr/share/nginx/html:ro
    - /etc/letsencrypt:/etc/letsencrypt:ro  # Добавьте это

5. Перезапуск

docker compose down
docker compose up -d

Подключение Flutter-приложения

1. Настройка сервера в приложении

import 'package:nanaxe_crm/core/nanaxe_server_service.dart';

final serverService = NanaxeServerService();

// При инициализации
await serverService.initialize();

// Если не настроен - настройте
if (!serverService.isConfigured) {
  await serverService.configure(
    'https://api.your-domain.com',
  );
}

// Проверка соединения
final isConnected = await serverService.checkConnection();

2. Авторизация

// Регистрация
await serverService.register(
  'user@example.com',
  'password',
  'username',
);

// Или вход
await serverService.login(
  'user@example.com',
  'password',
);

3. Работа с mindmaps

// Получение списка
final mindmaps = await serverService.getMindMaps();

// Создание
final newMap = await serverService.createMindMap(
  title: 'My Project',
  description: 'Project planning',
  nodes: [
    {'id': '1', 'title': 'Root', 'level': 0, 'parentId': null},
    {'id': '2', 'title': 'Task 1', 'level': 1, 'parentId': '1'},
  ],
);

// Синхронизация с Gitea
await serverService.pushToGitea(commitMessage: 'Updated project plan');

🔧 Обслуживание

Обновление

cd /opt/nanaxe-server/server
git pull
docker compose pull
docker compose up -d

Бэкап

# Бэкап данных
tar -czf backup-$(date +%Y%m%d).tar.gz /opt/nanaxe-server/server

# Или бэкап volumes
docker run --rm -v nanaxe-server_mindmap-data:/data -v $(pwd):/backup alpine tar czf /backup/mindmaps-backup.tar.gz -C /data .

Мониторинг

# Логи
docker compose logs -f

# Статистика
docker stats

# Дисковое пространство
df -h
docker system df

🌐 Доступ к сервисам

После развёртывания:

Сервис URL Описание
Web UI http://your-domain.com Главная страница
Gitea http://your-domain.com:3000 Git репозиторий
API http://your-domain.com:8080 REST API
WebDAV http://your-domain.com:8081 Прямой доступ к файлам

📱 Obsidian Интеграция

1. Git Sync плагин

Установите плагин Obsidian Git и настройте:

# В настройках плагина
Remote URL: http://your-domain.com:3000/username/mindmaps.git

2. Прямой доступ через WebDAV

Установите плагин Remote Save и настройте WebDAV:

URL: http://your-domain.com:8081
Username: admin
Password: your_secure_password

🆘 Устранение неполадок

Проблема: Порты заняты

# Проверка занятых портов
netstat -tlnp | grep -E '3000|8080|80'

# Измените порты в docker-compose.yml

Проблема: Permission denied

# Проверьте права
ls -la /opt/nanaxe-server/server

# Исправьте
chown -R $USER:$USER /opt/nanaxe-server/server

Проблема: Контейнеры не запускаются

# Проверьте логи
docker compose logs

# Пересоберите
docker compose down
docker compose build --no-cache
docker compose up -d

📚 Дополнительно