Skip to content

Документ конфигурации проекта

1. Обзор проекта

1.1 Структура проекта

Данный проект использует архитектуру микросервисов и разделен на две части: систему управления и систему API:

  • Система управления: Предоставляет функции управления backend, включая системную конфигурацию, управление пользователями, мониторинг данных, контроль доступа и т.д.
  • Система API: Предоставляет внешние интерфейсные услуги, обрабатывает запросы клиентов и реализует бизнес-логику.

1.2 Стек технологий

  • Backend-язык: Go
  • Web-фреймворк: Открытый фреймворк go-zero
  • База данных: MySQL
  • Кэш: Redis
  • Хранилище файлов: Объектное хранилище, поддерживающее протокол S3
  • Аутентификация: JWT (JSON Web Token)
  • Контроль доступа: Casbin

2. Основные элементы конфигурации

2.1 Базовая конфигурация сервиса

yaml
# Основная информация о сервисе
Name: upgradelink-admin  # Название сервиса, используется для идентификации разных экземпляров сервиса
Host: 0.0.0.0            # Адрес прослушивания сервиса, 0.0.0.0 означает прослушивание на всех сетевых интерфейсах
Port: 9110               # Порт прослушивания сервиса

# Конфигурация производительности сервиса
Timeout: 300000          # Тайм-аут запроса (миллисекунды)
MaxBytes: 1073741824     # Максимальный размер тела запроса (байты), здесь 1ГБ

2.2 Конфигурация среды выполнения

yaml
Mode: dev                # Режим выполнения: dev (разработка), test (тестирование), prod (производство)
EnvMode: dev             # Режим среды, аналогичен Mode, используется для различения конфигураций для разных сред

2.3 Конфигурация хранилища файлов

Хранилище файлов поддерживает сервисы объектного хранения с протоколом S3. После конфигурации вы можете протестировать загрузку файлов в системе backend (Управление облачными файлами -> Загрузка).

yaml
UploadConf:
  Bucket:       # Название хранилища
  SecretID:     # ID ключа доступа к хранилищу
  SecretKey:    # Ключ доступа к хранилищу
  Endpoint:     # Эндпоинт хранилища
  Folder:       # Папка в хранилище
  Region:       # Регион хранилища
  CdnUrl:       # Доменное имя CDN, будет заменять префикс URL объекктного хранилища после конфигурации

Примечание: После настройки CdnUrl система автоматически заменит префикс URL объекктного хранилища доменным именем CDN и сохранит замененный URL в базе данных, таким образом используя CDN для ускорения доступа к файлам.

2.4 Конфигурация аутентификации

yaml
Auth:
  AccessSecret: jS6VKDtsJf3z1n2VKDtsJf3z  # Секретный ключ JWT, используется для подписания и проверки токенов
  AccessExpire: 259200                     # Время истечения токена JWT (секунды), здесь 3 дня

2.5 Конфигурация CORS

yaml
CROSConf:
  Address: '*'  # Разрешенные источники кросс-доменных запросов, * означает разрешение всех источников

2.6 Конфигурация логов

yaml
Log:
  ServiceName: UpgradeLink-admin  # Название сервиса логов
  Mode: file                      # Режим вывода логов: console или file
  Encoding: json                  # Формат кодировки логов: json или console
  TimeFormat: "2006-01-02 15:04:05.000"  # Формат времени логов
  Path: "./logs"                  # Путь хранения файлов логов
  Level: debug                    # Уровень логов: debug, info, warn, error
  KeepDays: 3                     # Срок хранения файлов логов (дни)
  Rotation: daily                 # Метод ротации логов: daily или size

2.7 Конфигурация контроля доступа

Использование Casbin для реализации управления доступом RBAC (Role-Based Access Control):

yaml
CasbinConf:
  ModelText: |
    [request_definition]
    r = sub, obj, act
    [policy_definition]
    p = sub, obj, act
    [role_definition]
    g = _, _
    [policy_effect]
    e = some(where (p.eft == allow))
    [matchers]
    m = r.sub == p.sub && keyMatch2(r.obj,p.obj) && r.act == p.act

2.8 Конфигурация базы данных

yaml
DatabaseConf:
  Type: mysql                    # Тип базы данных
  Host: 127.0.0.1                # Адрес хоста базы данных
  Port: 3306                     # Порт базы данных
  DBName: upgrade                # Название базы данных
  Username: root                 # Имя пользователя базы данных
  Password: Rootroot123!         # Пароль базы данных
  MaxOpenConn: 100               # Максимальное количество открытых соединений
  SSLMode: disable               # Режим SSL: disable или require
  CacheTime: 5                   # Время кэширования (секунды)
  MysqlConfig: "&loc=Asia%2FShanghai"  # Дополнительная конфигурация MySQL, здесь установка часового пояса в Шанхай

2.9 Конфигурация Redis

yaml
RedisConf:
  Host: 127.0.0.1:6379  # Адрес хоста Redis и порт
  Db: 0                 # Номер базы данных Redis
  Pass: a123456         # Пароль Redis

3. Лучшие практики управления конфигурацией

3.1 Разделение сред

  • Разработочная среда: Использовать локальную базу данных и Redis, включить детальные логи
  • Тестовая среда: Использовать тестовую базу данных, имитировать конфигурацию производственной среды
  • Производственная среда: Использовать официальную базу данных, отключить логи debug, усилить конфигурацию безопасности

3.2 Вопросы безопасности

  • Чувствительная информация (например, пароли, ключи) не должна быть жестко закодирована в файлах конфигурации, рекомендуется использовать переменные окружения или центр конфигурации
  • В производственной среде следует использовать протокол HTTPS
  • Регулярно обновлять ключи и пароли
  • Ограничить область доступа к базе данных и Redis

3.3 Оптимизация производительности

  • Настраивать параметр MaxOpenConn в зависимости от нагрузки сервиса
  • Разумно задавать время кэширования для уменьшения доступа к базе данных
  • Оптимизировать уровень логов, избегать использования уровня debug в производственной среде
  • Регулярно очищать файлы логов, чтобы избежать нехватки дискового пространства

4. Пример файла конфигурации

Полный пример файла конфигурации выглядит следующим образом:

yaml
# Базовая конфигурация сервиса
Name: upgradelink-admin
Host: 0.0.0.0
Port: 9110
Timeout: 300000
MaxBytes: 1073741824

# Конфигурация среды выполнения
Mode: dev
EnvMode: dev

# Конфигурация аутентификации
Auth:
  AccessSecret: jS6VKDtsJf3z1n2VKDtsJf3z
  AccessExpire: 259200

# Конфигурация CORS
CROSConf:
  Address: '*'

# Конфигурация логов
Log:
  ServiceName: UpgradeLink-admin
  Mode: file
  Encoding: json
  TimeFormat: "2006-01-02 15:04:05.000"
  Path: "./logs"
  Level: debug
  KeepDays: 3
  Rotation: daily

# Конфигурация хранилища файлов
UploadConf:
  Bucket: 
  SecretID: 
  SecretKey: 
  Endpoint: 
  Folder: 
  Region: 
  CdnUrl: 

# Конфигурация контроля доступа
CasbinConf:
  ModelText: |
    [request_definition]
    r = sub, obj, act
    [policy_definition]
    p = sub, obj, act
    [role_definition]
    g = _, _
    [policy_effect]
    e = some(where (p.eft == allow))
    [matchers]
    m = r.sub == p.sub && keyMatch2(r.obj,p.obj) && r.act == p.act

# Конфигурация базы данных
DatabaseConf:
  Type: mysql
  Host: 127.0.0.1
  Port: 3306
  DBName: upgrade
  Username: root
  Password: Rootroot123!
  MaxOpenConn: 100
  SSLMode: disable
  CacheTime: 5
  MysqlConfig: "&loc=Asia%2FShanghai"

# Конфигурация Redis
RedisConf:
  Host: 127.0.0.1:6379
  Db: 0
  Pass: a123456

toolsetlink@163.com