Документ конфигурации проекта
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 или size2.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.act2.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 # Пароль Redis3. Лучшие практики управления конфигурацией
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