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
# 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 aqui2.2 Configuração do Ambiente de Execução
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 ambientes2.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).
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çãoNota: 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
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 aqui2.5 Configuração CORS
CROSConf:
Address: '*' # Fontes de domínio cruzado permitidas, * significa permitir todas as fontes2.6 Configuração de Log
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 size2.7 Configuração de Controle de Permissões
Usando Casbin para implementar gerenciamento de permissões RBAC (Controle de Acesso Baseado em Função):
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 Configuração do Banco de Dados
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 aqui2.9 Configuração do Redis
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 Redis3. 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
MaxOpenConnde 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:
# 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