# ТЗ: Установка Plane на mva154

**Дата:** 2026-04-26  
**Хост:** mva154, `slin@82.22.50.71:22` (прямой SSH, пароль из env `MVA154_PASSWORD`)  
**Доступ:** `~/.openclaw/skills/installer/scripts/ssh_exec.sh --host mva154 --cmd "..."`  
**Использовать:** installer skill (session + backup + change + verify)

---

## Задача

Установить **Plane Community Edition** в Docker Compose на хост mva154.  
Plane — self-hosted трекер задач и проектов (аналог Jira/Linear).

---

## Состояние хоста (проверено 2026-04-26)

- OS: Ubuntu, Linux 5.15.0, x86_64
- CPU: 4 ядра
- RAM: 7.7 GB (4.4 GB свободно)
- Диск: 54 GB, **17 GB свободно** (69%) — очищено заранее
- Docker: 29.3.0
- Docker Compose: v5.1.0
- Уже запущены сервисы через nginx на портах 5555, 5556, 5557

---

## Шаги установки

### 1. Создать директорию

```bash
mkdir -p /home/slin/plane-selfhost
cd /home/slin/plane-selfhost
```

### 2. Скачать и запустить setup.sh (Community Edition)

```bash
curl -fsSL -o setup.sh https://github.com/makeplane/plane/releases/latest/download/setup.sh
chmod +x setup.sh
./setup.sh
```

При запросе выбрать: **1 (Install)** для архитектуры x86/AMD64.  
После установки выбрать: **8 (Exit)**.

Это создаст папку `plane-app/` с `docker-compose.yaml` и `plane.env`.

### 3. Настроить plane.env

Отредактировать файл `/home/slin/plane-selfhost/plane-app/plane.env`:

```bash
# Порт
LISTEN_HTTP_PORT=8091

# URL (IP mva154)
WEB_URL=http://82.22.50.71:8091
CORS_ALLOWED_ORIGINS=http://82.22.50.71:8091

# Лимит файлов
FILE_SIZE_LIMIT=20

# Secret key — сгенерировать случайный 50-символьный
SECRET_KEY=$(openssl rand -hex 25)
```

Остальные параметры оставить по умолчанию (встроенный Postgres, Redis, MinIO).

### 4. Запустить Plane

```bash
cd /home/slin/plane-selfhost
./setup.sh
# выбрать 2 (Start)
```

Дождаться запуска всех контейнеров (~2-5 минут, скачает образы).

### 5. Проверить что работает

```bash
# Все контейнеры должны быть Up
docker ps | grep plane

# Проверить HTTP
curl -s -o /dev/null -w "%{http_code}" http://localhost:8091/
# Должно быть 200 или 302
```

### 6. Добавить в nginx (если есть конфиг)

Проверить есть ли nginx на mva154:
```bash
nginx -v 2>/dev/null || echo "no nginx"
ls /etc/nginx/sites-enabled/ 2>/dev/null
```

Если nginx есть — добавить location `/plane/` или отдельный server block для порта 8091.  
Если нет — Plane доступен напрямую по `http://82.22.50.71:8091`.

---

## Ожидаемые контейнеры после установки

```
plane-proxy      — nginx reverse proxy (слушает 8091)
plane-web        — Next.js фронтенд
plane-api        — Django REST API
plane-worker     — Celery worker
plane-beat-worker — Celery Beat (планировщик)
plane-migrator   — миграции БД (завершится и остановится)
plane-db         — PostgreSQL 15
plane-redis      — Redis 7
plane-minio      — MinIO (S3 хранилище файлов)
```

---

## Финальная проверка

1. `docker ps` — все контейнеры `Up` (кроме plane-migrator который `Exited 0`)
2. `curl -I http://localhost:8091/` — HTTP 200 или 302
3. Открыть в браузере `http://82.22.50.71:8091` — должна появиться страница регистрации Plane

---

## Что НЕ делать

- Не использовать `prime-cli` / `prime.plane.so` — это Commercial Edition
- Не менять порт PostgreSQL/Redis (используем встроенные)
- Не трогать другие сервисы на mva154 (noisemap 5555, snowbike 5556/5557)
- Не открывать порт 8091 в firewall без команды Славы

---

## Результат — отчёт

По завершении написать отчёт:
- Версия Plane установлена
- URL доступа
- Список запущенных контейнеров с `docker ps`
- Результат `curl -I http://localhost:8091/`
- Путь к plane.env: `/home/slin/plane-selfhost/plane-app/plane.env`
