ddd948ab72
- Добавлена переменная DOCKER_NETWORKS в env.example - Создан скрипт scripts/generate-compose.py для генерации docker-compose.yml - Добавлена команда make generate для обновления конфигурации - Обновлен docker-compose.yml с поддержкой внешних сетей - Добавлена документация по настройке сетей в README.md - Поддержка гибкой настройки сетей для разных проектов - Пример: DOCKER_NETWORKS=iaas,infrastructure_iaas - Автор: Сергей Антропов (https://devops.org.ru)
112 lines
4.9 KiB
Python
112 lines
4.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Скрипт для генерации docker-compose.yml с динамическими сетями
|
|
Автор: Сергей Антропов
|
|
Сайт: https://devops.org.ru
|
|
"""
|
|
|
|
import os
|
|
import yaml
|
|
from typing import List
|
|
|
|
def load_env_vars():
|
|
"""Загружает переменные из .env файла"""
|
|
env_vars = {}
|
|
if os.path.exists('.env'):
|
|
with open('.env', 'r', encoding='utf-8') as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if line and not line.startswith('#') and '=' in line:
|
|
key, value = line.split('=', 1)
|
|
env_vars[key] = value
|
|
return env_vars
|
|
|
|
def parse_networks(networks_str: str) -> List[str]:
|
|
"""Парсит строку с сетями в список"""
|
|
if not networks_str:
|
|
return []
|
|
return [net.strip() for net in networks_str.split(',') if net.strip()]
|
|
|
|
def generate_compose_config():
|
|
"""Генерирует конфигурацию docker-compose.yml"""
|
|
env_vars = load_env_vars()
|
|
|
|
# Получаем сети из переменной окружения
|
|
networks_str = env_vars.get('DOCKER_NETWORKS', '')
|
|
external_networks = parse_networks(networks_str)
|
|
|
|
# Базовая конфигурация
|
|
config = {
|
|
'services': {
|
|
'logboard': {
|
|
'build': '.',
|
|
'container_name': 'logboard',
|
|
'environment': {
|
|
'LOGBOARD_PORT': env_vars.get('LOGBOARD_PORT', '9001'),
|
|
'LOGBOARD_TAIL': env_vars.get('LOGBOARD_TAIL', '500'),
|
|
'LOGBOARD_USER': env_vars.get('LOGBOARD_USER', 'admin'),
|
|
'LOGBOARD_PASS': env_vars.get('LOGBOARD_PASS', 's3cret-change-me'),
|
|
'COMPOSE_PROJECT_NAME': env_vars.get('COMPOSE_PROJECT_NAME', ''),
|
|
'LOGBOARD_SNAPSHOT_DIR': env_vars.get('LOGBOARD_SNAPSHOT_DIR', '/app/snapshots'),
|
|
'LOGBOARD_INDEX_HTML': env_vars.get('LOGBOARD_INDEX_HTML', './templates/index.html'),
|
|
'TZ_TS': env_vars.get('TZ_TS', ''),
|
|
'SECRET_KEY': env_vars.get('SECRET_KEY', 'your-secret-key-here'),
|
|
'ENCRYPTION_KEY': env_vars.get('ENCRYPTION_KEY', 'your-encryption-key-here'),
|
|
'LOG_LEVEL': env_vars.get('LOG_LEVEL', 'INFO'),
|
|
'LOG_FORMAT': env_vars.get('LOG_FORMAT', 'json'),
|
|
'WEB_TITLE': env_vars.get('WEB_TITLE', 'LogBoard+'),
|
|
'WEB_DESCRIPTION': env_vars.get('WEB_DESCRIPTION', 'Веб-панель для просмотра логов микросервисов'),
|
|
'WEB_VERSION': env_vars.get('WEB_VERSION', '1.0.0'),
|
|
'MAX_CONNECTIONS': env_vars.get('MAX_CONNECTIONS', '100'),
|
|
'CONNECTION_TIMEOUT': env_vars.get('CONNECTION_TIMEOUT', '30'),
|
|
'READ_TIMEOUT': env_vars.get('READ_TIMEOUT', '60'),
|
|
'AUTH_ENABLED': env_vars.get('AUTH_ENABLED', 'true'),
|
|
'AUTH_METHOD': env_vars.get('AUTH_METHOD', 'basic'),
|
|
'SESSION_TIMEOUT': env_vars.get('SESSION_TIMEOUT', '3600'),
|
|
'NOTIFICATIONS_ENABLED': env_vars.get('NOTIFICATIONS_ENABLED', 'false'),
|
|
'SMTP_HOST': env_vars.get('SMTP_HOST', ''),
|
|
'SMTP_PORT': env_vars.get('SMTP_PORT', '587'),
|
|
'SMTP_USER': env_vars.get('SMTP_USER', ''),
|
|
'SMTP_PASS': env_vars.get('SMTP_PASS', ''),
|
|
'SMTP_FROM': env_vars.get('SMTP_FROM', ''),
|
|
},
|
|
'ports': [
|
|
f"{env_vars.get('LOGBOARD_PORT', '9001')}:{env_vars.get('LOGBOARD_PORT', '9001')}"
|
|
],
|
|
'volumes': [
|
|
'/var/run/docker.sock:/var/run/docker.sock:ro',
|
|
f"./snapshots:{env_vars.get('LOGBOARD_SNAPSHOT_DIR', '/app/snapshots')}"
|
|
],
|
|
'restart': 'unless-stopped',
|
|
'user': '0:0',
|
|
'networks': ['default'] + external_networks
|
|
}
|
|
},
|
|
'networks': {
|
|
'default': {}
|
|
}
|
|
}
|
|
|
|
# Добавляем внешние сети
|
|
for network in external_networks:
|
|
config['networks'][network] = {'external': True}
|
|
|
|
return config
|
|
|
|
def main():
|
|
"""Основная функция"""
|
|
print("Генерация docker-compose.yml с динамическими сетями...")
|
|
|
|
config = generate_compose_config()
|
|
|
|
# Записываем в файл
|
|
with open('docker-compose.yml', 'w', encoding='utf-8') as f:
|
|
yaml.dump(config, f, default_flow_style=False, allow_unicode=True, sort_keys=False)
|
|
|
|
print("docker-compose.yml сгенерирован успешно!")
|
|
print(f"Подключенные сети: {list(config['networks'].keys())}")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|