c4node
ComBat Node — безпечний вузол керування з Web UI, MySQL та TLS
2.7K
Цей репозиторій містить повну, перевірену інструкцію запуску ComBat Node разом із MySQL через Docker Compose.
Інструкція орієнтована на нових користувачів і дозволяє запустити систему з нуля без інтерактивних питань у контейнері.
На хості має бути встановлено:
docker compose)Перевірка:
docker --version
docker compose version
c4node-stack/
├── docker-compose.yml
├── data/
│ ├── app/
│ │ ├── entrypoint.sh
│ │ └── credentials.env
│ └── mysql/
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 на відповідний.
Файл: 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.
Файл: 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
docker compose up -d
Перевірка статусу:
docker compose ps
curl http://localhost:8080/
curl -k https://localhost:4444/
Очікувана відповідь — HTML сторінка ComBat Node.
Під час першого запуску:
ComBat Node автоматично:
credentials.envЦей користувач стає:
docker compose restart c4node
docker compose down -v
rm -rf data/mysql/*
Причина:
credentials.enventrypoint.sh не подає stdinРішення:
credentials.envprintf | exec у entrypointПричина:
db.properties не знайдено у /c4nodeРішення:
cp /c4node-data/db.properties /c4node/db.properties
(вже зроблено в entrypoint)
Система працює:
Автор інструкції: перевірено на реальному деплої без ручного втручання 🚀
Content type
Image
Digest
sha256:e18f65a0d…
Size
178.8 MB
Last updated
9 days ago
docker pull combatvision/c4node