combatvision/c4node

By combatvision

Updated 9 days ago

ComBat Node — безпечний вузол керування з Web UI, MySQL та TLS

Buildkit cache
Image
Networking
Developer tools
Web servers
1

2.7K

combatvision/c4node repository overview

ComBat Node — Docker Installation Guide

Цей репозиторій містить повну, перевірену інструкцію запуску ComBat Node разом із MySQL через Docker Compose.

Інструкція орієнтована на нових користувачів і дозволяє запустити систему з нуля без інтерактивних питань у контейнері.


1. Передумови

На хості має бути встановлено:

  • Docker 20+
  • Docker Compose plugin (docker compose)

Перевірка:

docker --version
docker compose version

2. Структура каталогів

c4node-stack/
├── docker-compose.yml
├── data/
│   ├── app/
│   │   ├── entrypoint.sh
│   │   └── credentials.env
│   └── mysql/

3. docker-compose.yml

services:
  mysql:
    image: mysql:9.6.0
    container_name: c4node-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root_pass_change_me
      MYSQL_DATABASE: c4node
      MYSQL_USER: c4node
      MYSQL_PASSWORD: c4node_pass
      TZ: Europe/Kyiv
    volumes:
      - ./data/mysql:/var/lib/mysql
    healthcheck:
      test: ["CMD-SHELL", "mysql -h 127.0.0.1 -uc4node -pc4node_pass -e 'SELECT 1' >/dev/null 2>&1"]
      interval: 5s
      timeout: 5s
      retries: 40
      start_period: 20s
    restart: unless-stopped

  c4node:
    image: combatvision/c4node:latest
    container_name: c4node
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      MYSQL_URL: jdbc:mysql://mysql:3306/c4node?useSSL=false&allowPublicKeyRetrieval=true
      MYSQL_USER: c4node
      MYSQL_PASSWORD: c4node_pass
      C4NODE_FOLDER: /c4node-data
      HOME: /c4node-data
      TZ: Europe/Kyiv
    volumes:
      - ./data/app:/c4node-data
      - ./data/app/entrypoint.sh:/entrypoint.sh:ro
    entrypoint: ["sh", "/entrypoint.sh"]
    ports:
      - "8080:8080"
      - "4444:4444"
      - "5066:5066"
    restart: unless-stopped

Порт 5066 для c4node - це стандартний порт. Якщо у вас інший порт, то треба змінити 5066 на відповідний.


4. credentials.env (non-interactive запуск)

Файл: data/app/credentials.env

C4NODE_USERNAME=admin
C4NODE_PASSWORD=strong_password_here
C4NODE_CERT_NAME=CombatNode
C4NODE_UNIT=MainUnit
C4NODE_ORGANIZATION=YourOrganization
C4NODE_COUNTRY_CODE=UA

⚠️ Без цього файлу контейнер буде намагатись читати stdin і впаде з ReadAfterEOFException.


5. entrypoint.sh

Файл: data/app/entrypoint.sh

#!/bin/sh
set -eu

DATA_DIR="${C4NODE_FOLDER:-/c4node-data}"
APP_DIR="/c4node"

if [ -f "$DATA_DIR/credentials.env" ]; then
  echo "Loading credentials from $DATA_DIR/credentials.env"
  . "$DATA_DIR/credentials.env"
fi

echo "== c4node starting =="
echo "Data dir: $DATA_DIR"
echo "App dir:  $APP_DIR"

echo "Generating $DATA_DIR/db.properties ..."
cat <<EOF > "$DATA_DIR/db.properties"
url=${MYSQL_URL}
username=${MYSQL_USER}
password=${MYSQL_PASSWORD}
EOF

echo "Copying db.properties to app directory"
cp -f "$DATA_DIR/db.properties" "$APP_DIR/db.properties"

echo "Starting c4node-app in non-interactive mode"

printf "%s\n%s\n%s\n%s\n%s\n%s\n" \
  "$C4NODE_USERNAME" \
  "$C4NODE_PASSWORD" \
  "$C4NODE_CERT_NAME" \
  "$C4NODE_UNIT" \
  "$C4NODE_ORGANIZATION" \
  "$C4NODE_COUNTRY_CODE" \
| ( cat; tail -f /dev/null ) \
| exec /c4node/bin/c4node-app -f /c4node
chmod +x data/app/entrypoint.sh

6. Запуск

docker compose up -d

Перевірка статусу:

docker compose ps

7. Перевірка доступності

HTTP
curl http://localhost:8080/
HTTPS (self-signed)
curl -k https://localhost:4444/

Очікувана відповідь — HTML сторінка ComBat Node.


8. Перший логін і ролі користувачів

🔐 Перший користувач

Під час першого запуску:

  • якщо БД порожня
  • і сертифікат відсутній

ComBat Node автоматично:

  1. Створює першого користувача з credentials.env
  2. Генерує self-signed TLS-сертифікат
  3. Записує все в MySQL

Цей користувач стає:

  • ADMIN / SUPERUSER
  • має повний доступ до системи

9. Перезапуск / Reset

Перезапуск сервісів
docker compose restart c4node
Повний reset (⚠️ видаляє всі дані)
docker compose down -v
rm -rf data/mysql/*

10. Типові проблеми

❌ ReadAfterEOFException

Причина:

  • немає credentials.env
  • або entrypoint.sh не подає stdin

Рішення:

  • перевірити credentials.env
  • перевірити printf | exec у entrypoint

❌ Падає в SQLite

Причина:

  • db.properties не знайдено у /c4node

Рішення:

cp /c4node-data/db.properties /c4node/db.properties

(вже зроблено в entrypoint)


11. Готово 🎉

Система працює:

  • MySQL використовується
  • HTTPS активний
  • Контейнер не рестартується
  • UI доступний

Автор інструкції: перевірено на реальному деплої без ручного втручання 🚀

Tag summary

Content type

Image

Digest

sha256:e18f65a0d

Size

178.8 MB

Last updated

9 days ago

docker pull combatvision/c4node