Skip to content

プロジェクト設定ドキュメント

1. プロジェクト概要

1.1 プロジェクト構造

このプロジェクトはマイクロサービスアーキテクチャを採用しており、管理システムと API システムの 2 つの部分に分かれています:

  • 管理システム:システム設定、ユーザー管理、データモニタリング、権限制御などのバックエンド管理機能を提供します。
  • API システム:外部インターフェースサービスを提供し、クライアントリクエストを処理し、ビジネスロジックを実装します。

1.2 技術スタック

  • バックエンド言語: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     # 最大リクエストボディサイズ(バイト)、ここでは 1GB

2.2 実行環境設定

yaml
Mode: dev                # 実行モード:dev(開発)、test(テスト)、prod(本番)
EnvMode: dev             # 環境モード、Mode に似ていますが、異なる環境の設定を区別するために使用

2.3 ファイルストレージ設定

ファイルストレージは S3 プロトコルのオブジェクトストレージサービスをサポートします。設定後、バックエンドシステム(クラウドファイル管理 -> アップロード)でファイルアップロードをテストすることができます。

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 または size

2.7 権限制御設定

Casbin を使用して RBAC(役割ベースのアクセス制御)権限管理を実装:

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 データベース設定

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         # Redis パスワード

3. 設定管理のベストプラクティス

3.1 環境分離

  • 開発環境:ローカルデータベースと Redis を使用し、詳細なログを有効にする
  • テスト環境:テストデータベースを使用し、本番環境設定をシミュレートする
  • 本番環境:公式データベースを使用し、デバッグログを無効にし、セキュリティ設定を強化する

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

toolsetlink@163.com