プロジェクト設定ドキュメント
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 # 最大リクエストボディサイズ(バイト)、ここでは 1GB2.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 または size2.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.act2.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