Skip to content

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

yaml
# 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í 1GB

2.2 Configuración del Entorno de Ejecución

yaml
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 entornos

2.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).

yaml
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ón

Nota: 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

yaml
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ías

2.5 Configuración de CORS

yaml
CROSConf:
  Address: '*'  # Orígenes de dominio cruzado permitidos, * significa permitir todos los orígenes

2.6 Configuración de Registro

yaml
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ño

2.7 Configuración de Control de Permisos

Utilizando Casbin para implementar gestión de permisos RBAC (Control de Acceso Basado en Roles):

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 Configuración de Base de Datos

yaml
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

yaml
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 Redis

3. 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 MaxOpenConn segú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:

yaml
# 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

toolsetlink@163.com