更新数据目录配置

This commit is contained in:
2026-03-21 22:13:31 +08:00
parent 78c3644b2c
commit d09a0487ae
6 changed files with 58 additions and 8 deletions

View File

@@ -53,11 +53,13 @@ COPY --from=backend-build /app/web/build /app/web/build
# Create data and cache directories
RUN mkdir -p /app/data /app/cache
# Set environment variables (can be overridden at runtime)
ENV PORT=8080 \
DATA_DIR=/app/data \
CACHE_DIR=/app/cache
# Expose port
EXPOSE 8080
# Set environment variables
ENV PORT=8080
# Start server
CMD ["/app/bin/server"]

View File

@@ -0,0 +1,37 @@
import 'dart:io';
/// 应用配置管理
///
/// 支持通过环境变量配置数据目录和缓存目录:
/// - `DATA_DIR`: 数据目录路径,默认为 `data`
/// - `CACHE_DIR`: 缓存目录路径,默认为 `cache`
class AppConfig {
/// 数据目录路径
final String dataDir;
/// 缓存目录路径
final String cacheDir;
/// 单例实例
static final AppConfig _instance = AppConfig._fromEnvironment();
/// 获取配置实例
factory AppConfig() => _instance;
/// 从环境变量创建配置
AppConfig._fromEnvironment()
: dataDir = Platform.environment['DATA_DIR'] ?? 'data',
cacheDir = Platform.environment['CACHE_DIR'] ?? 'cache';
/// 获取相册预览缓存目录
String get previewCacheDir => '$cacheDir/preview';
/// 确保所有必需的目录都存在
Future<void> ensureDirectoriesExist() async {
await Directory(dataDir).create(recursive: true);
await Directory(previewCacheDir).create(recursive: true);
}
@override
String toString() => 'AppConfig(dataDir: $dataDir, cacheDir: $cacheDir)';
}

View File

@@ -5,13 +5,15 @@ import 'dart:async';
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'config/app_config.dart';
import 'util/vips.dart';
import 'domain/repositories/photo_repository.dart';
import 'domain/repositories/album_repository.dart';
final vips = Vips();
final albumRepository = AlbumRepository(basePath: 'data');
final photoRepository = PhotoRepository('data');
final _config = AppConfig();
final vips = Vips(cacheDir: _config.cacheDir);
final albumRepository = AlbumRepository(basePath: _config.dataDir);
final photoRepository = PhotoRepository(_config.dataDir);
Response jsonResponse(dynamic data) {
return Response.ok(

View File

@@ -3,10 +3,16 @@ import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';
import 'config/app_config.dart';
import 'router.dart';
import 'middleware/exception_handler.dart';
void main(List<String> args) async {
// Initialize configuration and ensure directories exist
final config = AppConfig();
print('Configuration: $config');
await config.ensureDirectoriesExist();
// Use any available host or container IP (usually `0.0.0.0`).
final ip = InternetAddress.anyIPv4;

View File

@@ -4,8 +4,9 @@ import 'package:path/path.dart';
class Vips {
String? vipsExecuteFile;
final String cacheDir;
Vips({this.vipsExecuteFile});
Vips({this.vipsExecuteFile, required this.cacheDir});
/// 生成图片预览WebP 格式)
///
@@ -22,7 +23,7 @@ class Vips {
// 生成缓存文件名:包含原图 hash 和尺寸信息
final baseName = basename(imgPath).hashCode.toString();
final sizeSuffix = _buildSizeSuffix(w, h);
final imgOut = "cache/preview/${baseName}${sizeSuffix}.webp";
final imgOut = "$cacheDir/preview/$baseName$sizeSuffix.webp";
final outFile = File(imgOut);
// 缓存命中:直接返回已存在的预览图

View File

@@ -12,6 +12,8 @@ services:
- ./cache:/app/cache
environment:
- PORT=8080
- DATA_DIR=/app/data
- CACHE_DIR=/app/cache
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/v1/"]