Розгортання Docker

Цей посібник охоплює розгортання нод TALER з використанням Docker і Docker Compose.

Передумови

Перед початком переконайтеся, що у вас є:

  • Docker: Версія 20.10 або вище (Встановити Docker)
  • Docker Compose: Версія 2.0 або вище (включений у Docker Desktop)
  • Місце на диску: Мінімум 20GB для повної ноди
  • RAM: Мінімум 2GB доступної пам’яті (рекомендується 4GB+)

Перевірте встановлення:

docker --version
docker compose version

Швидкий старт

Використання Docker Compose

Репозиторій TALER включає готовий для продакшну файл docker-compose.yml.

docker-compose.yml:

services:
  taler:
    image: ghcr.io/abkvme/taler:latest
    container_name: taler-node
    restart: unless-stopped

    ports:
      - "23153:23153"  # P2P network port
      - "23333:23333"  # RPC port

    volumes:
      - taler-data:/data  # Or use host path: ./data:/data
      # - ./taler.conf:/taler.conf:ro  # Uncomment to use custom config file
      # - ./wallet:/wallet  # Uncomment to enable wallet (also set TALER_WALLETDIR=/wallet in .env)

    # Healthcheck disabled by default (requires RPC to be enabled via custom taler.conf)
    # healthcheck:
    #   test: ["CMD", "taler-cli", "getblockchaininfo"]
    #   interval: 60s
    #   timeout: 30s
    #   retries: 5
    #   start_period: 1800s

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

volumes:
  taler-data:
    driver: local

Запуск ноди

# Запуск у фоновому режимі
docker compose up -d

# Перегляд логів
docker compose logs -f

# Перевірка статусу
docker compose ps

# Зупинка ноди
docker compose down

Конфігурація

Поведінка за замовчуванням

За замовчуванням контейнер Docker TALER:

  • Працює без увімкненого RPC сервера (безпека)
  • Вимикає функціональність гаманця
  • Зберігає дані блокчейну в томі /data
  • Відкриває P2P порт 23153 і RPC порт 23333

Використання користувацького файлу конфігурації

Щоб увімкнути RPC або налаштувати поведінку ноди, створіть файл taler.conf:

taler.conf:

# Налаштування мережі
listen=1
maxconnections=128

# Налаштування RPC
server=1
rpcuser=yourusername
rpcpassword=your_strong_password_here
rpcport=23333
rpcallowip=0.0.0.0/0
rpcbind=0.0.0.0

# Продуктивність
dbcache=1024
maxmempool=300

# Логування
printtoconsole=1

Розкоментуйте монтування конфігурації в docker-compose.yml:

volumes:
  - taler-data:/data
  - ./taler.conf:/taler.conf:ro  # Uncomment this line

Перезапустіть контейнер:

docker compose down
docker compose up -d

Увімкнення гаманця

Щоб увімкнути функціональність гаманця:

  1. Створіть каталог для гаманця:

    mkdir wallet
    
  2. Розкоментуйте том гаманця в docker-compose.yml:

    volumes:
      - taler-data:/data
      - ./wallet:/wallet  # Uncomment this line
    
  3. Встановіть змінну оточення каталогу гаманця:

    environment:
      - TALER_WALLETDIR=/wallet
    
  4. Перезапустіть:

    docker compose down
    docker compose up -d
    

Змінні оточення

Скрипт entrypoint підтримує ці змінні оточення:

ЗміннаОписЗа замовчуванням
TALER_DATAКаталог даних блокчейну/data
TALER_CONFШлях до файлу конфігурації/taler.conf
TALER_WALLETDIRКаталог гаманця (вмикає гаманець, якщо встановлено)не встановлено (гаманець вимкнено)

Використання Docker Run

Замість Docker Compose можна запустити безпосередньо з docker run:

docker run -d \
  --name taler-node \
  -p 23153:23153 \
  -p 23333:23333 \
  -v taler-data:/data \
  ghcr.io/abkvme/taler:latest

З користувацькою конфігурацією

docker run -d \
  --name taler-node \
  -p 23153:23153 \
  -p 23333:23333 \
  -v taler-data:/data \
  -v $(pwd)/taler.conf:/taler.conf:ro \
  ghcr.io/abkvme/taler:latest

З увімкненим гаманцем

docker run -d \
  --name taler-node \
  -p 23153:23153 \
  -p 23333:23333 \
  -v taler-data:/data \
  -v $(pwd)/wallet:/wallet \
  -e TALER_WALLETDIR=/wallet \
  ghcr.io/abkvme/taler:latest

Моніторинг та управління

Перегляд логів

# Стежити за логами
docker compose logs -f

# Останні 100 рядків
docker compose logs --tail 100

# Логи для конкретного сервісу
docker logs taler-node

Виконання команд

# Отримати інформацію про ноду (потрібен увімкнений RPC)
docker exec taler-node taler-cli getinfo

# Отримати інформацію про блокчейн
docker exec taler-node taler-cli getblockchaininfo

# Отримати кількість з'єднань
docker exec taler-node taler-cli getconnectioncount

Доступ до оболонки контейнера

docker exec -it taler-node /bin/bash

Статистика контейнера

# Статистика в реальному часі
docker stats taler-node

# Одноразовий знімок
docker stats --no-stream taler-node

Управління томами

Перевірка тома

docker volume inspect taler-data

Резервне копіювання даних блокчейну

# Створити резервну копію
docker run --rm \
  -v taler-data:/data \
  -v $(pwd):/backup \
  ubuntu tar czf /backup/taler-backup-$(date +%Y%m%d).tar.gz /data

Відновлення резервної копії

docker run --rm \
  -v taler-data:/data \
  -v $(pwd):/backup \
  ubuntu tar xzf /backup/taler-backup-YYYYMMDD.tar.gz -C /

Використання каталогу хоста

Замість тома Docker використовуйте каталог хоста:

volumes:
  - ./data:/data  # Host directory

Це зберігає дані блокчейну в ./data на вашій хост-системі.


Створення користувацького образу

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

Локальна збірка

# Клонувати репозиторій
git clone https://github.com/abkvme/taler.git
cd taler

# Зібрати образ
docker build -t taler:local .

# Запустити локальну збірку
docker run -d \
  --name taler-node \
  -p 23153:23153 \
  -v taler-data:/data \
  taler:local

Мультиархітектурна збірка

Dockerfile підтримує linux/amd64 і linux/arm64:

# Зібрати для кількох платформ
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t taler:custom \
  .

Конфігурація Healthcheck

Щоб увімкнути моніторинг здоров’я, переконайтеся, що RPC увімкнено у вашому taler.conf, потім розкоментуйте секцію healthcheck в docker-compose.yml:

healthcheck:
  test: ["CMD", "taler-cli", "getblockchaininfo"]
  interval: 60s
  timeout: 30s
  retries: 5
  start_period: 1800s  # 30 minutes for initial sync

Перевірте статус здоров’я:

docker inspect --format='{{.State.Health.Status}}' taler-node

Кращі практики безпеки

Прив’язка RPC порту

Для безпеки прив’язуйте RPC порт тільки до localhost, коли це можливо:

ports:
  - "23153:23153"
  - "127.0.0.1:23333:23333"  # Localhost only

Сильні облікові дані RPC

Генеруйте сильні паролі:

openssl rand -base64 32

Права доступу до файлів

Захистіть свій файл конфігурації:

chmod 600 taler.conf

Підтримуйте образи в актуальному стані

Регулярно оновлюйте до останнього образу:

docker compose pull
docker compose up -d

Усунення неполадок

Контейнер не запускається

# Перевірте логи на помилки
docker compose logs

# Перевірте статус контейнера
docker compose ps -a

# Видаліть і перестворіть
docker compose down
docker compose up -d

Проблеми з підключенням RPC

Якщо команди taler-cli не працюють:

  1. Переконайтеся, що RPC увімкнено в taler.conf з server=1
  2. Перевірте, що файл конфігурації змонтовано: docker exec taler-node ls -la /taler.conf
  3. Перевірте, що облікові дані RPC правильні

Проблеми синхронізації блокчейну

# Перевірте прогрес синхронізації
docker exec taler-node taler-cli getblockchaininfo

# Перегляньте відладковий вивід у логах
docker compose logs -f

Скидання даних блокчейну

# Зупиніть контейнер
docker compose down

# Видаліть том (УВАГА: видаляє всі дані блокчейну)
docker volume rm taler-data

# Перезапустіть
docker compose up -d

Продакшн розгортання

Запуск як системного сервісу

Створіть /etc/systemd/system/taler-docker.service:

[Unit]
Description=TALER Docker Node
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/taler
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

Увімкніть та запустіть:

sudo systemctl enable taler-docker
sudo systemctl start taler-docker

Автоматичні оновлення

Використовуйте Watchtower для автооновлення контейнерів:

services:
  taler:
    # ... existing config ...

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 86400  # Check daily

Наступні кроки

Потрібна додаткова допомога?

Не можете знайти те, що шукаєте? Перевірте наш розділ FAQ або зверніться до спільноти за допомогою.