discord-media-server
Version:
Self-hosted Discord bot for scanning and serving information on local media files.
56 lines (44 loc) • 1.57 kB
JavaScript
import path from 'path';
import fs from 'fs';
import dotenv from 'dotenv';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Path to .env file in root of project
const envPath = path.resolve(__dirname, '../.env');
// Load .env only once
if (fs.existsSync(envPath)) {
dotenv.config({ path: envPath });
}
// Detect if we're inside Docker
const IS_DOCKER = process.env.IS_DOCKER === 'true' || fs.existsSync('/.dockerenv');
// Set config dir based on environment
const CONFIG_DIR = process.env.CONFIG_DIR || (IS_DOCKER ? '/config' : path.resolve(__dirname, '../'));
// Set data dir (inside config dir or fallback to project root)
const DATA_DIR = process.env.DATA_DIR || path.join(CONFIG_DIR, 'data');
//const MEDIA_DIR = path.resolve(process.env.MEDIA_DIR) || (IS_DOCKER ? '/media' : path.resolve(process.env.MEDIA_DIR));
let MEDIA_DIR = process.env.MEDIA_DIR;
if (!MEDIA_DIR) {
MEDIA_DIR = IS_DOCKER
? '/media'
: path.resolve(__dirname, '../media'); // default fallback
} else {
MEDIA_DIR = IS_DOCKER
? '/media'
: path.resolve(MEDIA_DIR);
}
// Ensure required folders exist
[CONFIG_DIR, DATA_DIR].forEach((dir) => {
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
});
const DB_FILE = process.env.DB_FILE || 'media.sqlite';
const DB_PATH = path.join(DATA_DIR, DB_FILE);
export {
CONFIG_DIR,
DATA_DIR,
DB_FILE,
DB_PATH,
MEDIA_DIR,
IS_DOCKER,
envPath as ENV_PATH,
};