mirror of
https://github.com/sct/overseerr.git
synced 2025-12-26 16:27:17 +01:00
* chore(release): 1.4.0 * chore(release): 1.4.1 * chore(release): 1.5.0 * chore(release): 1.6.0 * chore(release): 1.7.0 * feat: support for postgresql * test(pgsql): disable root certificate verification * test(ci): temporarily change CI for local repo * fix: don't use SQLite idiom when using PgSQL * feat(db): add flag to toggle TLS for Postgres * feat(postgres and migrations): added migrations for postgres & imporved ssl for postgres config #186 * fix: restored workflow actions * fix: access order * fix: added pushover sound migration tto initial migration * fix: added option to log queries * fix: issue with session migration * chore: relocate pushover sound migration * feat: added logging option to other datasources * chore: small tweaks for the datasource. Added docs for db setup * chore: cleanup logs * fix: added default dates to postgres migration * fix: removed psql specific relation checks * chore: added some debug sanity checks * chore: added some more debug sanity checks * chore: added some more additional debug sanity checks * chore: added some more+ additional debug sanity checks * chore: mild log cleanup * chore: more log cleanup * chore: finish log cleanup * fix: added not null to migration so typeorm doesn't delete ids * chore: cleanup extra psql code * fix: remove eager load * docs: added documentation for migration to postgres * docs: added database option to bug template * feat: created docker-compose postgres file * fix: updated ts schema to align with change to migration * fix: switch timestamp to include timezone * fix: fixed indentation in psql docker-compose * fix: changed version to 0.1.0 to remove ui notification * style: fixed prettier in docker-compose.pastgres.yaml * chore: restored CHANGELOG.md * chore: revverted ts commit * fix: update pnpm lock with pg package * chore(pnpm-lock.yaml): updated pnpm-lock * docs: update docs to add psql set up info * refactor: clean up code from cr comments * feat: migrate blacklist * fix: fix issue with cypress tests * docs: update psql docs * fix: fix psql issue in user page; fix tiny psql error when selecting by empty list * fix: incorrect current date function * fix: null contraint with mediaAddedAt; fix psql col type * refactor: removed unnecessary import * feat: add postgres migration for streaming region --------- Co-authored-by: Fallenbagel <98979876+Fallenbagel@users.noreply.github.com> Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> Co-authored-by: zackhow <zackhow@gmail.com> Co-authored-by: Ryan Algar <me@ralgar.dev> Co-authored-by: Ryan Algar <59636191+ralgar@users.noreply.github.com>
120 lines
3.4 KiB
TypeScript
120 lines
3.4 KiB
TypeScript
import fs from 'fs';
|
|
import type { TlsOptions } from 'tls';
|
|
import type { DataSourceOptions, EntityTarget, Repository } from 'typeorm';
|
|
import { DataSource } from 'typeorm';
|
|
|
|
const DB_SSL_PREFIX = 'DB_SSL_';
|
|
|
|
function boolFromEnv(envVar: string, defaultVal = false) {
|
|
if (process.env[envVar]) {
|
|
return process.env[envVar]?.toLowerCase() === 'true';
|
|
}
|
|
return defaultVal;
|
|
}
|
|
|
|
function stringOrReadFileFromEnv(envVar: string): Buffer | string | undefined {
|
|
if (process.env[envVar]) {
|
|
return process.env[envVar];
|
|
}
|
|
const filePath = process.env[`${envVar}_FILE`];
|
|
if (filePath) {
|
|
return fs.readFileSync(filePath);
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
function buildSslConfig(): TlsOptions | undefined {
|
|
if (process.env.DB_USE_SSL?.toLowerCase() !== 'true') {
|
|
return undefined;
|
|
}
|
|
return {
|
|
rejectUnauthorized: boolFromEnv(
|
|
`${DB_SSL_PREFIX}REJECT_UNAUTHORIZED`,
|
|
true
|
|
),
|
|
ca: stringOrReadFileFromEnv(`${DB_SSL_PREFIX}CA`),
|
|
key: stringOrReadFileFromEnv(`${DB_SSL_PREFIX}KEY`),
|
|
cert: stringOrReadFileFromEnv(`${DB_SSL_PREFIX}CERT`),
|
|
};
|
|
}
|
|
|
|
const devConfig: DataSourceOptions = {
|
|
type: 'sqlite',
|
|
database: process.env.CONFIG_DIRECTORY
|
|
? `${process.env.CONFIG_DIRECTORY}/db/db.sqlite3`
|
|
: 'config/db/db.sqlite3',
|
|
synchronize: true,
|
|
migrationsRun: false,
|
|
logging: boolFromEnv('DB_LOG_QUERIES'),
|
|
enableWAL: true,
|
|
entities: ['server/entity/**/*.ts'],
|
|
migrations: ['server/migration/sqlite/**/*.ts'],
|
|
subscribers: ['server/subscriber/**/*.ts'],
|
|
};
|
|
|
|
const prodConfig: DataSourceOptions = {
|
|
type: 'sqlite',
|
|
database: process.env.CONFIG_DIRECTORY
|
|
? `${process.env.CONFIG_DIRECTORY}/db/db.sqlite3`
|
|
: 'config/db/db.sqlite3',
|
|
synchronize: false,
|
|
migrationsRun: false,
|
|
logging: boolFromEnv('DB_LOG_QUERIES'),
|
|
enableWAL: true,
|
|
entities: ['dist/entity/**/*.js'],
|
|
migrations: ['dist/migration/sqlite/**/*.js'],
|
|
subscribers: ['dist/subscriber/**/*.js'],
|
|
};
|
|
|
|
const postgresDevConfig: DataSourceOptions = {
|
|
type: 'postgres',
|
|
host: process.env.DB_HOST,
|
|
port: parseInt(process.env.DB_PORT ?? '5432'),
|
|
username: process.env.DB_USER,
|
|
password: process.env.DB_PASS,
|
|
database: process.env.DB_NAME ?? 'jellyseerr',
|
|
ssl: buildSslConfig(),
|
|
synchronize: false,
|
|
migrationsRun: true,
|
|
logging: boolFromEnv('DB_LOG_QUERIES'),
|
|
entities: ['server/entity/**/*.ts'],
|
|
migrations: ['server/migration/postgres/**/*.ts'],
|
|
subscribers: ['server/subscriber/**/*.ts'],
|
|
};
|
|
|
|
const postgresProdConfig: DataSourceOptions = {
|
|
type: 'postgres',
|
|
host: process.env.DB_HOST,
|
|
port: parseInt(process.env.DB_PORT ?? '5432'),
|
|
username: process.env.DB_USER,
|
|
password: process.env.DB_PASS,
|
|
database: process.env.DB_NAME ?? 'jellyseerr',
|
|
ssl: buildSslConfig(),
|
|
synchronize: false,
|
|
migrationsRun: false,
|
|
logging: boolFromEnv('DB_LOG_QUERIES'),
|
|
entities: ['dist/entity/**/*.js'],
|
|
migrations: ['dist/migration/postgres/**/*.js'],
|
|
subscribers: ['dist/subscriber/**/*.js'],
|
|
};
|
|
|
|
export const isPgsql = process.env.DB_TYPE === 'postgres';
|
|
|
|
function getDataSource(): DataSourceOptions {
|
|
if (process.env.NODE_ENV === 'production') {
|
|
return isPgsql ? postgresProdConfig : prodConfig;
|
|
} else {
|
|
return isPgsql ? postgresDevConfig : devConfig;
|
|
}
|
|
}
|
|
|
|
const dataSource = new DataSource(getDataSource());
|
|
|
|
export const getRepository = <Entity extends object>(
|
|
target: EntityTarget<Entity>
|
|
): Repository<Entity> => {
|
|
return dataSource.getRepository(target);
|
|
};
|
|
|
|
export default dataSource;
|