更新数据目录配置
This commit is contained in:
@@ -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"]
|
||||
37
bin/config/app_config.dart
Normal file
37
bin/config/app_config.dart
Normal 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)';
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
// 缓存命中:直接返回已存在的预览图
|
||||
|
||||
@@ -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/"]
|
||||
|
||||
Reference in New Issue
Block a user