Documento de Configuración del Proyecto
1. Descripción General del Proyecto
1.1 Estructura del Proyecto
Este proyecto adopta una arquitectura de microservicios y se divide en dos partes: el sistema de administración y el sistema de API:
- Sistema de Administración: Proporciona funciones de administración backend, incluyendo configuración del sistema, gestión de usuarios, monitoreo de datos, control de permisos, etc.
- Sistema de API: Proporciona servicios de interfaz externos, maneja solicitudes de clientes e implementa lógica de negocio.
1.2 Stack Tecnológico
- Lenguaje Backend: Lenguaje Go
- Framework Web: Framework de código abierto go-zero
- Base de Datos: MySQL
- Caché: Redis
- Almacenamiento de Archivos: Almacenamiento de objetos compatible con protocolo S3
- Autenticación: JWT (JSON Web Token)
- Control de Permisos: Casbin
2. Elementos de Configuración Core
2.1 Configuración Básica del Servicio
# Información básica del servicio
Name: upgradelink-admin # Nombre del servicio, utilizado para identificar diferentes instancias de servicio
Host: 0.0.0.0 # Dirección de escucha del servicio, 0.0.0.0 significa escuchar en todas las interfaces de red
Port: 9110 # Puerto de escucha del servicio
# Configuración de rendimiento del servicio
Timeout: 300000 # Tiempo de espera de solicitud (milisegundos)
MaxBytes: 1073741824 # Tamaño máximo del cuerpo de la solicitud (bytes), aquí 1GB2.2 Configuración del Entorno de Ejecución
Mode: dev # Modo de ejecución: dev (desarrollo), test (pruebas), prod (producción)
EnvMode: dev # Modo de entorno, similar a Mode, utilizado para distinguir configuraciones para diferentes entornos2.3 Configuración de Almacenamiento de Archivos
El almacenamiento de archivos admite servicios de almacenamiento de objetos con protocolo S3. Después de la configuración, puedes probar la carga de archivos en el sistema backend (Gestión de Archivos en la Nube -> Cargar).
UploadConf:
Bucket: # Nombre del bucket de almacenamiento
SecretID: # ID de clave de acceso del bucket de almacenamiento
SecretKey: # Clave de acceso del bucket de almacenamiento
Endpoint: # Endpoint del bucket de almacenamiento
Folder: # Carpeta del bucket de almacenamiento
Region: # Región del bucket de almacenamiento
CdnUrl: # Dominio CDN, reemplazará el prefijo de URL de almacenamiento de objetos después de la configuraciónNota: Después de configurar
CdnUrl, el sistema automáticamente reemplazará el prefijo de URL de almacenamiento de objetos con el dominio CDN y almacenará la URL reemplazada en la base de datos, utilizando así CDN para acelerar el acceso a archivos.
2.4 Configuración de Autenticación
Auth:
AccessSecret: jS6VKDtsJf3z1n2VKDtsJf3z # Secreto de acceso JWT, utilizado para firmar y verificar tokens
AccessExpire: 259200 # Tiempo de expiración del token JWT (segundos), aquí 3 días2.5 Configuración de CORS
CROSConf:
Address: '*' # Orígenes de dominio cruzado permitidos, * significa permitir todos los orígenes2.6 Configuración de Registro
Log:
ServiceName: UpgradeLink-admin # Nombre del servicio de registro
Mode: file # Modo de salida de registro: consola o archivo
Encoding: json # Formato de codificación de registro: json o consola
TimeFormat: "2006-01-02 15:04:05.000" # Formato de tiempo del registro
Path: "./logs" # Ruta de almacenamiento de archivos de registro
Level: debug # Nivel de registro: debug, info, warn, error
KeepDays: 3 # Días de retención de archivos de registro
Rotation: daily # Método de rotación de registro: diario o por tamaño2.7 Configuración de Control de Permisos
Utilizando Casbin para implementar gestión de permisos RBAC (Control de Acceso Basado en Roles):
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 Configuración de Base de Datos
DatabaseConf:
Type: mysql # Tipo de base de datos
Host: 127.0.0.1 # Dirección del host de la base de datos
Port: 3306 # Puerto de la base de datos
DBName: upgrade # Nombre de la base de datos
Username: root # Nombre de usuario de la base de datos
Password: Rootroot123! # Contraseña de la base de datos
MaxOpenConn: 100 # Número máximo de conexiones abiertas
SSLMode: disable # Modo SSL: disable o require
CacheTime: 5 # Tiempo de caché (segundos)
MysqlConfig: "&loc=Asia%2FShanghai" # Configuración adicional de MySQL, estableciendo zona horaria en Shanghai aquí2.9 Configuración de Redis
RedisConf:
Host: 127.0.0.1:6379 # Dirección del host de Redis y puerto
Db: 0 # Número de base de datos de Redis
Pass: a123456 # Contraseña de Redis3. Mejores Prácticas de Gestión de Configuración
3.1 Separación de Entornos
- Entorno de Desarrollo: Utilizar base de datos y Redis locales, habilitar registros detallados
- Entorno de Pruebas: Utilizar base de datos de prueba, simular configuración de entorno de producción
- Entorno de Producción: Utilizar base de datos oficial, deshabilitar registros de debug, mejorar configuración de seguridad
3.2 Consideraciones de Seguridad
- La información sensible (como contraseñas, claves) no debe estar codificada en archivos de configuración, se recomienda utilizar variables de entorno o centro de configuración
- El entorno de producción debe utilizar protocolo HTTPS
- Actualizar regularmente claves y contraseñas
- Limitar el alcance de acceso a base de datos y Redis
3.3 Optimización de Rendimiento
- Ajustar el parámetro
MaxOpenConnsegún la carga del servicio - Establecer tiempo de caché razonable para reducir el acceso a la base de datos
- Optimizar nivel de registro, evitar usar nivel debug en entorno de producción
- Limpiar regularmente archivos de registro para evitar espacio insuficiente en disco
4. Ejemplo de Archivo de Configuración
El ejemplo completo de archivo de configuración es el siguiente:
# Configuración básica del servicio
Name: upgradelink-admin
Host: 0.0.0.0
Port: 9110
Timeout: 300000
MaxBytes: 1073741824
# Configuración del entorno de ejecución
Mode: dev
EnvMode: dev
# Configuración de autenticación
Auth:
AccessSecret: jS6VKDtsJf3z1n2VKDtsJf3z
AccessExpire: 259200
# Configuración de CORS
CROSConf:
Address: '*'
# Configuración de registro
Log:
ServiceName: UpgradeLink-admin
Mode: file
Encoding: json
TimeFormat: "2006-01-02 15:04:05.000"
Path: "./logs"
Level: debug
KeepDays: 3
Rotation: daily
# Configuración de almacenamiento de archivos
UploadConf:
Bucket:
SecretID:
SecretKey:
Endpoint:
Folder:
Region:
CdnUrl:
# Configuración de control de permisos
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
# Configuración de base de datos
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"
# Configuración de Redis
RedisConf:
Host: 127.0.0.1:6379
Db: 0
Pass: a123456