# Развертывание Документ описывает поддерживаемый путь запуска Crank на сервере. Crank запускается как три контейнера за reverse proxy: - `ui` - `admin-api` - `mcp-server` Можно использовать внешний PostgreSQL или локальный PostgreSQL из compose-профиля `local-db`. ## Схема ```text reverse proxy / -> ui:3000 /api/admin/ -> admin-api:3001 /mcp/ -> mcp-server:3002 admin-api -> PostgreSQL mcp-server -> PostgreSQL admin-api -> Valkey/Redis, опционально mcp-server -> Valkey/Redis, опционально ``` ## Файлы запуска - `deploy/community/docker-compose.yml` - `deploy/community/.env.example` - `deploy/community/docker-compose.images.yml` - `deploy/community/.env.images.example` ## Порты Порты по умолчанию: - `ui`: `3000` - `admin-api`: `3001` - `mcp-server`: `3002` - optional `valkey`: `6379`, только loopback `CRANK_PUBLISH_BIND` управляет публикацией портов: - `127.0.0.1`, если reverse proxy работает на том же host; - `0.0.0.0`, если reverse proxy работает на другом host. ## Reverse proxy Пример `nginx`: ```nginx server { listen 80; server_name crank.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name crank.example.com; ssl_certificate /etc/letsencrypt/live/crank.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/crank.example.com/privkey.pem; client_max_body_size 25m; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; location / { proxy_pass http://192.168.1.106:3000; } location /api/admin/ { proxy_pass http://192.168.1.106:3001/; } location /mcp/ { proxy_pass http://192.168.1.106:3002/; proxy_buffering off; proxy_request_buffering off; proxy_read_timeout 300s; proxy_send_timeout 300s; } } ``` Замените `192.168.1.106` на адрес deployment host. ## Запуск из исходников Проверка compose-файла: ```bash docker compose \ -f deploy/community/docker-compose.yml \ --env-file deploy/community/.env.example \ config -q ``` Запуск с внешним PostgreSQL: ```bash docker compose \ -f deploy/community/docker-compose.yml \ --env-file deploy/community/.env.example \ up -d ``` Запуск со встроенным Valkey: ```bash docker compose \ -f deploy/community/docker-compose.yml \ --env-file deploy/community/.env.example \ --profile cache \ up -d ``` Для встроенного Valkey: ```text CRANK_CACHE_BACKEND=valkey CRANK_CACHE_URL=redis://valkey:6379/0 CRANK_CACHE_DEFAULT_TTL_MS=60000 ``` ## Запуск готовых образов ```bash mkdir -p crank cd crank curl -fsSLo docker-compose.yml https://git.itexp.me/bsodfather/crank/raw/branch/main/deploy/community/docker-compose.images.yml curl -fsSLo .env.example https://git.itexp.me/bsodfather/crank/raw/branch/main/deploy/community/.env.images.example cp .env.example .env docker compose --profile local-db up -d ``` Если используется внешний PostgreSQL, заполните `POSTGRES_HOST`, `POSTGRES_PORT`, `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD` и запустите: ```bash docker compose up -d ``` ## Проверка состояния ```bash curl http://127.0.0.1:3001/health curl http://127.0.0.1:3002/health ``` Ожидаемые ответы: ```json {"service":"admin-api","status":"ok"} {"service":"mcp-server","status":"ok"} ``` UI должен возвращать `200 OK`: ```bash curl -I http://127.0.0.1:3000/ ``` ## Эксплуатация - Делайте регулярные бэкапы PostgreSQL. - Не храните реальные секреты в Git. - Для rollback используйте конкретные image tags, а не только `main`. - `CRANK_PUBLISH_BIND=0.0.0.0` нужен только если reverse proxy работает на другом host.