feat: add Docker deployment support

This commit is contained in:
Sam Chau
2026-01-19 20:23:10 +10:30
parent dd77d1af35
commit fd20cd84e8
10 changed files with 410 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
import { config } from '$config';
import { printBanner, getServerInfo } from '$logger/startup.ts';
import { printBanner, getServerInfo, logContainerConfig } from '$logger/startup.ts';
import { logSettings } from '$logger/settings.ts';
import { logger } from '$logger/logger.ts';
import { db } from '$db/db.ts';
@@ -20,6 +20,9 @@ await runMigrations();
// Load log settings from database (must be after migrations)
logSettings.load();
// Log container config (if running in Docker)
await logContainerConfig();
// Initialize PCD caches (must be after migrations and log settings)
await pcdManager.initialize();

View File

@@ -4,6 +4,7 @@
import { config } from '$config';
import { appInfoQueries } from '$db/queries/appInfo.ts';
import { logger } from './logger.ts';
const BANNER = String.raw`
_____.__.__
@@ -14,6 +15,42 @@ _____________ _____/ ____\__| | _____ ______________
|__| \/
`;
/**
* Check if running inside a Docker container
*/
function isDocker(): boolean {
try {
// Check for .dockerenv file (most reliable)
Deno.statSync('/.dockerenv');
return true;
} catch {
// Check for docker in cgroup (fallback)
try {
const cgroup = Deno.readTextFileSync('/proc/1/cgroup');
return cgroup.includes('docker');
} catch {
return false;
}
}
}
/**
* Log container configuration (only when running in Docker)
*/
export async function logContainerConfig(): Promise<void> {
if (!isDocker()) return;
await logger.info('Container initialized', {
source: 'Docker',
meta: {
puid: Deno.env.get('PUID') || '1000',
pgid: Deno.env.get('PGID') || '1000',
umask: Deno.env.get('UMASK') || '022',
tz: Deno.env.get('TZ') || 'UTC'
}
});
}
export function printBanner(): void {
const version = appInfoQueries.getVersion();
const url = config.serverUrl;