mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-10-31 22:18:59 +00:00
allow specifying db uri in config file (#2956)
* allow specifying db uri in config file * succumb to a bug in doku See <https://github.com/anixe/doku/issues/33>.
This commit is contained in:
parent
8cb5939f50
commit
14c18dbdae
3 changed files with 90 additions and 23 deletions
|
@ -1,16 +1,39 @@
|
||||||
{
|
{
|
||||||
# settings related to the postgresql database
|
# settings related to the postgresql database
|
||||||
database: {
|
database: {
|
||||||
|
|
||||||
|
# Configure the database by specifying a URI
|
||||||
|
#
|
||||||
|
# This is the preferred method to specify database connection details since
|
||||||
|
# it is the most flexible.
|
||||||
|
# Connection URI pointing to a postgres instance
|
||||||
|
#
|
||||||
|
# This example uses peer authentication to obviate the need for creating,
|
||||||
|
# configuring, and managing passwords.
|
||||||
|
#
|
||||||
|
# For an explanation of how to use connection URIs, see [here][0] in
|
||||||
|
# PostgreSQL's documentation.
|
||||||
|
#
|
||||||
|
# [0]: https://www.postgresql.org/docs/current/libpq-connect.html#id-1.7.3.8.3.6
|
||||||
|
uri: "postgresql:///lemmy?user=lemmy&host=/var/run/postgresql"
|
||||||
|
// or
|
||||||
|
# Configure the database by specifying parts of a URI
|
||||||
|
#
|
||||||
|
# Note that specifying the `uri` field should be preferred since it provides
|
||||||
|
# greater control over how the connection is made. This merely exists for
|
||||||
|
# backwards-compatibility.
|
||||||
|
{
|
||||||
# Username to connect to postgres
|
# Username to connect to postgres
|
||||||
user: "lemmy"
|
user: "string"
|
||||||
# Password to connect to postgres
|
# Password to connect to postgres
|
||||||
password: "password"
|
password: "string"
|
||||||
# Host where postgres is running
|
# Host where postgres is running
|
||||||
host: "localhost"
|
host: "string"
|
||||||
# Port where postgres can be accessed
|
# Port where postgres can be accessed
|
||||||
port: 5432
|
port: 123
|
||||||
# Name of the postgres database for lemmy
|
# Name of the postgres database for lemmy
|
||||||
database: "lemmy"
|
database: "string"
|
||||||
|
}
|
||||||
# Maximum number of active sql connections
|
# Maximum number of active sql connections
|
||||||
pool_size: 5
|
pool_size: 5
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@ use std::{env, fs, io::Error};
|
||||||
|
|
||||||
pub mod structs;
|
pub mod structs;
|
||||||
|
|
||||||
|
use structs::DatabaseConnection;
|
||||||
|
|
||||||
static DEFAULT_CONFIG_FILE: &str = "config/config.hjson";
|
static DEFAULT_CONFIG_FILE: &str = "config/config.hjson";
|
||||||
|
|
||||||
pub static SETTINGS: Lazy<Settings> = Lazy::new(|| {
|
pub static SETTINGS: Lazy<Settings> = Lazy::new(|| {
|
||||||
|
@ -43,16 +45,20 @@ impl Settings {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_database_url(&self) -> String {
|
pub fn get_database_url(&self) -> String {
|
||||||
let conf = &self.database;
|
match &self.database.connection {
|
||||||
|
DatabaseConnection::Uri { uri } => uri.clone(),
|
||||||
|
DatabaseConnection::Parts(parts) => {
|
||||||
format!(
|
format!(
|
||||||
"postgres://{}:{}@{}:{}/{}",
|
"postgres://{}:{}@{}:{}/{}",
|
||||||
utf8_percent_encode(&conf.user, NON_ALPHANUMERIC),
|
utf8_percent_encode(&parts.user, NON_ALPHANUMERIC),
|
||||||
utf8_percent_encode(&conf.password, NON_ALPHANUMERIC),
|
utf8_percent_encode(&parts.password, NON_ALPHANUMERIC),
|
||||||
conf.host,
|
parts.host,
|
||||||
conf.port,
|
parts.port,
|
||||||
utf8_percent_encode(&conf.database, NON_ALPHANUMERIC),
|
utf8_percent_encode(&parts.database, NON_ALPHANUMERIC),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn get_config_location() -> String {
|
fn get_config_location() -> String {
|
||||||
env::var("LEMMY_CONFIG_LOCATION").unwrap_or_else(|_| DEFAULT_CONFIG_FILE.to_string())
|
env::var("LEMMY_CONFIG_LOCATION").unwrap_or_else(|_| DEFAULT_CONFIG_FILE.to_string())
|
||||||
|
|
|
@ -55,8 +55,49 @@ pub struct PictrsConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
|
#[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
|
||||||
#[serde(default, deny_unknown_fields)]
|
#[serde(default)]
|
||||||
pub struct DatabaseConfig {
|
pub struct DatabaseConfig {
|
||||||
|
#[serde(flatten, default)]
|
||||||
|
pub connection: DatabaseConnection,
|
||||||
|
|
||||||
|
/// Maximum number of active sql connections
|
||||||
|
#[default(5)]
|
||||||
|
pub pool_size: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
pub enum DatabaseConnection {
|
||||||
|
/// Configure the database by specifying a URI
|
||||||
|
///
|
||||||
|
/// This is the preferred method to specify database connection details since
|
||||||
|
/// it is the most flexible.
|
||||||
|
Uri {
|
||||||
|
/// Connection URI pointing to a postgres instance
|
||||||
|
///
|
||||||
|
/// This example uses peer authentication to obviate the need for creating,
|
||||||
|
/// configuring, and managing passwords.
|
||||||
|
///
|
||||||
|
/// For an explanation of how to use connection URIs, see [here][0] in
|
||||||
|
/// PostgreSQL's documentation.
|
||||||
|
///
|
||||||
|
/// [0]: https://www.postgresql.org/docs/current/libpq-connect.html#id-1.7.3.8.3.6
|
||||||
|
#[doku(example = "postgresql:///lemmy?user=lemmy&host=/var/run/postgresql")]
|
||||||
|
uri: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Configure the database by specifying parts of a URI
|
||||||
|
///
|
||||||
|
/// Note that specifying the `uri` field should be preferred since it provides
|
||||||
|
/// greater control over how the connection is made. This merely exists for
|
||||||
|
/// backwards-compatibility.
|
||||||
|
#[default]
|
||||||
|
Parts(DatabaseConnectionParts),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
|
||||||
|
#[serde(default)]
|
||||||
|
pub struct DatabaseConnectionParts {
|
||||||
/// Username to connect to postgres
|
/// Username to connect to postgres
|
||||||
#[default("lemmy")]
|
#[default("lemmy")]
|
||||||
pub(super) user: String,
|
pub(super) user: String,
|
||||||
|
@ -72,9 +113,6 @@ pub struct DatabaseConfig {
|
||||||
/// Name of the postgres database for lemmy
|
/// Name of the postgres database for lemmy
|
||||||
#[default("lemmy")]
|
#[default("lemmy")]
|
||||||
pub(super) database: String,
|
pub(super) database: String,
|
||||||
/// Maximum number of active sql connections
|
|
||||||
#[default(5)]
|
|
||||||
pub pool_size: usize,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, Document, SmartDefault)]
|
#[derive(Debug, Deserialize, Serialize, Clone, Document, SmartDefault)]
|
||||||
|
|
Loading…
Reference in a new issue