Skip to content

Documento de Configuração do Projeto

1. Visão Geral do Projeto

1.1 Estrutura do Projeto

Este projeto adota uma arquitetura de microsserviços e está dividido em duas partes: o sistema de gerenciamento e o sistema de API:

  • Sistema de Gerenciamento: Fornece funções de gerenciamento backend, incluindo configuração do sistema, gerenciamento de usuários, monitoramento de dados, controle de permissões, etc.
  • Sistema de API: Fornece serviços de interface externa, processa solicitações de clientes e implementa lógica de negócio.

1.2 Pilha Tecnológica

  • Linguagem Backend: Linguagem Go
  • Framework Web: Framework open-source go-zero
  • Banco de Dados: MySQL
  • Cache: Redis
  • Armazenamento de Arquivos: Armazenamento de objetos compatível com protocolo S3
  • Autenticação: JWT (JSON Web Token)
  • Controle de Permissões: Casbin

2. Itens de Configuração Principais

2.1 Configuração Básica do Serviço

yaml
# Informações básicas do serviço
Name: upgradelink-admin  # Nome do serviço, usado para identificar diferentes instâncias de serviço
Host: 0.0.0.0            # Endereço de escuta do serviço, 0.0.0.0 significa escutar em todas as interfaces de rede
Port: 9110               # Porta de escuta do serviço

# Configuração de desempenho do serviço
Timeout: 300000          # Timeout da solicitação (milissegundos)
MaxBytes: 1073741824     # Tamanho máximo do corpo da solicitação (bytes), 1GB aqui

2.2 Configuração do Ambiente de Execução

yaml
Mode: dev                # Modo de execução: dev (desenvolvimento), test (teste), prod (produção)
EnvMode: dev             # Modo de ambiente, semelhante ao Mode, usado para distinguir configurações para diferentes ambientes

2.3 Configuração de Armazenamento de Arquivos

O armazenamento de arquivos suporta serviços de armazenamento de objetos com protocolo S3. Após a configuração, você pode testar o upload de arquivos no sistema backend (Gerenciamento de Arquivos em Nuvem -> Upload).

yaml
UploadConf:
  Bucket:       # Nome do bucket de armazenamento
  SecretID:     # ID da chave de acesso do bucket de armazenamento
  SecretKey:    # Chave de acesso do bucket de armazenamento
  Endpoint:     # Endpoint do bucket de armazenamento
  Folder:       # Pasta do bucket de armazenamento
  Region:       # Região do bucket de armazenamento
  CdnUrl:       # Nome de domínio CDN, substituirá o prefixo da URL de armazenamento de objetos após a configuração

Nota: Após configurar CdnUrl, o sistema automaticamente substituirá o prefixo da URL de armazenamento de objetos pelo nome de domínio CDN e armazenará a URL substituída no banco de dados, assim usando o CDN para acelerar o acesso aos arquivos.

2.4 Configuração de Autenticação

yaml
Auth:
  AccessSecret: jS6VKDtsJf3z1n2VKDtsJf3z  # Segredo de acesso JWT, usado para assinar e verificar tokens
  AccessExpire: 259200                     # Tempo de expiração do token JWT (segundos), 3 dias aqui

2.5 Configuração CORS

yaml
CROSConf:
  Address: '*'  # Fontes de domínio cruzado permitidas, * significa permitir todas as fontes

2.6 Configuração de Log

yaml
Log:
  ServiceName: UpgradeLink-admin  # Nome do serviço de log
  Mode: file                      # Modo de saída do log: console ou file
  Encoding: json                  # Formato de codificação do log: json ou console
  TimeFormat: "2006-01-02 15:04:05.000"  # Formato de hora do log
  Path: "./logs"                  # Caminho de armazenamento do arquivo de log
  Level: debug                    # Nível do log: debug, info, warn, error
  KeepDays: 3                     # Dias de retenção do arquivo de log
  Rotation: daily                 # Método de rotação do log: daily ou size

2.7 Configuração de Controle de Permissões

Usando Casbin para implementar gerenciamento de permissões RBAC (Controle de Acesso Baseado em Função):

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 Configuração do Banco de Dados

yaml
DatabaseConf:
  Type: mysql                    # Tipo de banco de dados
  Host: 127.0.0.1                # Endereço do host do banco de dados
  Port: 3306                     # Porta do banco de dados
  DBName: upgrade                # Nome do banco de dados
  Username: root                 # Nome de usuário do banco de dados
  Password: Rootroot123!         # Senha do banco de dados
  MaxOpenConn: 100               # Número máximo de conexões abertas
  SSLMode: disable               # Modo SSL: disable ou require
  CacheTime: 5                   # Tempo de cache (segundos)
  MysqlConfig: "&loc=Asia%2FShanghai"  # Configuração adicional do MySQL, definindo fuso horário para Xangai aqui

2.9 Configuração do Redis

yaml
RedisConf:
  Host: 127.0.0.1:6379  # Endereço e porta do host Redis
  Db: 0                 # Número do banco de dados Redis
  Pass: a123456         # Senha do Redis

3. Práticas Recomendadas de Gerenciamento de Configuração

3.1 Separação de Ambientes

  • Ambiente de Desenvolvimento: Usar banco de dados e Redis locais, habilitar logs detalhados
  • Ambiente de Teste: Usar banco de dados de teste, simular configuração do ambiente de produção
  • Ambiente de Produção: Usar banco de dados oficial, desabilitar logs de debug, aprimorar configuração de segurança

3.2 Considerações de Segurança

  • Informações sensíveis (como senhas, chaves) não devem ser codificadas em arquivos de configuração, recomenda-se usar variáveis de ambiente ou centro de configuração
  • Ambiente de produção deve usar protocolo HTTPS
  • Atualizar regularmente chaves e senhas
  • Limitar o escopo de acesso ao banco de dados e Redis

3.3 Otimização de Desempenho

  • Ajustar parâmetro MaxOpenConn de acordo com a carga do serviço
  • Definir tempo de cache razoavelmente para reduzir acesso ao banco de dados
  • Otimizar nível de log, evitar usar nível debug em ambiente de produção
  • Limpar regularmente arquivos de log para evitar espaço em disco insuficiente

4. Exemplo de Arquivo de Configuração

O exemplo completo do arquivo de configuração é o seguinte:

yaml
# Configuração básica do serviço
Name: upgradelink-admin
Host: 0.0.0.0
Port: 9110
Timeout: 300000
MaxBytes: 1073741824

# Configuração do ambiente de execução
Mode: dev
EnvMode: dev

# Configuração de autenticação
Auth:
  AccessSecret: jS6VKDtsJf3z1n2VKDtsJf3z
  AccessExpire: 259200

# Configuração CORS
CROSConf:
  Address: '*'

# Configuração de log
Log:
  ServiceName: UpgradeLink-admin
  Mode: file
  Encoding: json
  TimeFormat: "2006-01-02 15:04:05.000"
  Path: "./logs"
  Level: debug
  KeepDays: 3
  Rotation: daily

# Configuração de armazenamento de arquivos
UploadConf:
  Bucket: 
  SecretID: 
  SecretKey: 
  Endpoint: 
  Folder: 
  Region: 
  CdnUrl: 

# Configuração de controle de permissões
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

# Configuração do banco de dados
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"

# Configuração do Redis
RedisConf:
  Host: 127.0.0.1:6379
  Db: 0
  Pass: a123456

toolsetlink@163.com