feat(legacy): add db config defaults and allow custom port (#1559)

* feat(legacy): allow custom port for database connection

- fix heredoc for php72

* update test config db section

* update sample config db section

* update api db config

* use defaults for database config section

* update documentation

* more documentation for migration
This commit is contained in:
Jonas L 2022-02-04 15:03:01 +01:00 committed by GitHub
parent 71b3e6aa9d
commit 3245216869
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 95 additions and 49 deletions

View File

@ -223,9 +223,10 @@ jobs:
api_key = test_key api_key = test_key
[database] [database]
host = postgres host = postgres
dbname = libretime port = 5432
dbuser = postgres name = libretime
dbpass = libretime user = postgres
password = libretime
EOF EOF
cat $LIBRETIME_CONFIG_FILEPATH cat $LIBRETIME_CONFIG_FILEPATH

View File

@ -80,11 +80,11 @@ WSGI_APPLICATION = "libretime_api.wsgi.application"
DATABASES = { DATABASES = {
"default": { "default": {
"ENGINE": "django.db.backends.postgresql", "ENGINE": "django.db.backends.postgresql",
"NAME": CONFIG.get("database", "dbname", fallback=""), "NAME": CONFIG.get("database", "name", fallback="libretime"),
"USER": CONFIG.get("database", "dbuser", fallback=""), "USER": CONFIG.get("database", "user", fallback="libretime"),
"PASSWORD": CONFIG.get("database", "dbpass", fallback=""), "PASSWORD": CONFIG.get("database", "password", fallback="libretime"),
"HOST": CONFIG.get("database", "host", fallback=""), "HOST": CONFIG.get("database", "host", fallback="localhost"),
"PORT": "5432", "PORT": CONFIG.get("database", "port", fallback="5432"),
} }
} }

View File

@ -16,9 +16,10 @@ You can also set options for RabbitMQ messaging and the LibreTime server in this
[database] [database]
host = localhost host = localhost
dbname = airtime port = 5432
dbuser = airtime name = libretime
dbpass = airtime user = libretime
password = libretime
[rabbitmq] [rabbitmq]
host = 127.0.0.1 host = 127.0.0.1

View File

@ -61,7 +61,9 @@ upgrading, please [file a bug](https://github.com/libretime/libretime/issues/new
[install](/install). [install](/install).
3. Before running the web-configuration, restore the Airtime database to the new 3. Before running the web-configuration, restore the Airtime database to the new
PostgreSQL server, media database and configuration file PostgreSQL server, media database and configuration file
4. Edit the configuration file to update any changed values 4. Update the configuration file to match the new configuration schema and update any
changed values. See the [host configuration](/docs/host-configuration) documentation
for more details.
5. Edit the Icecast password in `/etc/icecast2/icecast.xml` to reflect the 5. Edit the Icecast password in `/etc/icecast2/icecast.xml` to reflect the
password used in Airtime password used in Airtime
6. Restart the LibreTime services 6. Restart the LibreTime services

View File

@ -11,7 +11,8 @@
$CC_CONFIG = Config::getConfig(); $CC_CONFIG = Config::getConfig();
$dbhost = $CC_CONFIG['dsn']['hostspec']; $dbhost = $CC_CONFIG['dsn']['host'];
$dbport = $CC_CONFIG['dsn']['port'];
$dbname = $CC_CONFIG['dsn']['database']; $dbname = $CC_CONFIG['dsn']['database'];
$dbuser = $CC_CONFIG['dsn']['username']; $dbuser = $CC_CONFIG['dsn']['username'];
$dbpass = $CC_CONFIG['dsn']['password']; $dbpass = $CC_CONFIG['dsn']['password'];
@ -21,7 +22,7 @@ $conf = [
'airtime' => [ 'airtime' => [
'adapter' => 'pgsql', 'adapter' => 'pgsql',
'connection' => [ 'connection' => [
'dsn' => "pgsql:host={$dbhost};port=5432;dbname={$dbname};user={$dbuser};password={$dbpass}", 'dsn' => "pgsql:host={$dbhost};port={$dbport};dbname={$dbname};user={$dbuser};password={$dbpass}",
], ],
], ],
'default' => 'airtime', 'default' => 'airtime',

View File

@ -49,11 +49,12 @@ class Config
$CC_CONFIG['cache_ahead_hours'] = $values['general']['cache_ahead_hours']; $CC_CONFIG['cache_ahead_hours'] = $values['general']['cache_ahead_hours'];
// Database config // Database config
$CC_CONFIG['dsn']['username'] = $values['database']['dbuser'];
$CC_CONFIG['dsn']['password'] = $values['database']['dbpass'];
$CC_CONFIG['dsn']['hostspec'] = $values['database']['host'];
$CC_CONFIG['dsn']['phptype'] = 'pgsql'; $CC_CONFIG['dsn']['phptype'] = 'pgsql';
$CC_CONFIG['dsn']['database'] = $values['database']['dbname']; $CC_CONFIG['dsn']['host'] = $values['database']['host'] ?? 'localhost';
$CC_CONFIG['dsn']['port'] = $values['database']['port'] ?? 5432;
$CC_CONFIG['dsn']['database'] = $values['database']['name'] ?? 'libretime';
$CC_CONFIG['dsn']['username'] = $values['database']['user'] ?? 'libretime';
$CC_CONFIG['dsn']['password'] = $values['database']['password'] ?? 'libretime';
$CC_CONFIG['apiKey'] = [$values['general']['api_key']]; $CC_CONFIG['apiKey'] = [$values['general']['api_key']];

View File

@ -83,7 +83,8 @@ class Application_Model_Auth
// Database config // Database config
$db = Zend_Db::factory('PDO_' . $CC_CONFIG['dsn']['phptype'], [ $db = Zend_Db::factory('PDO_' . $CC_CONFIG['dsn']['phptype'], [
'host' => $CC_CONFIG['dsn']['hostspec'], 'host' => $CC_CONFIG['dsn']['host'],
'port' => $CC_CONFIG['dsn']['port'],
'username' => $CC_CONFIG['dsn']['username'], 'username' => $CC_CONFIG['dsn']['username'],
'password' => $CC_CONFIG['dsn']['password'], 'password' => $CC_CONFIG['dsn']['password'],
'dbname' => $CC_CONFIG['dsn']['database'], 'dbname' => $CC_CONFIG['dsn']['database'],

View File

@ -119,10 +119,11 @@ abstract class AirtimeUpgrader
{ {
protected $_dir; protected $_dir;
protected $host;
protected $port;
protected $database;
protected $username; protected $username;
protected $password; protected $password;
protected $host;
protected $database;
/** /**
* @param $dir string directory housing upgrade files * @param $dir string directory housing upgrade files
@ -241,22 +242,45 @@ abstract class AirtimeUpgrader
{ {
$config = Config::getConfig(); $config = Config::getConfig();
$this->host = $config['dsn']['host'];
$this->port = $config['dsn']['port'];
$this->username = $config['dsn']['username']; $this->username = $config['dsn']['username'];
$this->password = $config['dsn']['password']; $this->password = $config['dsn']['password'];
$this->host = $config['dsn']['hostspec'];
$this->database = $config['dsn']['database']; $this->database = $config['dsn']['database'];
} }
protected function _runPsql($args)
{
$command = <<<"END"
PGPASSWORD={$this->password} \\
/usr/bin/psql --quiet \\
--host={$this->host} \\
--port={$this->port} \\
--dbname={$this->database} \\
--username={$this->username} \\
{$args}
END;
passthru($command);
}
protected function _runUpgrade() protected function _runUpgrade()
{ {
passthru('export PGPASSWORD=' . $this->password . ' && /usr/bin/psql -h ' . $this->host . ' -U ' . $this->username . ' -q -f ' . $this->_dir . '/upgrade_sql/airtime_' $sqlFile = "{$this->_dir}/upgrade_sql/airtime_{$this->getNewVersion()}/upgrade.sql";
. $this->getNewVersion() . '/upgrade.sql ' . $this->database . ' 2>&1 | grep -v -E "will create implicit sequence|will create implicit index"'); $args = <<<"END"
--file={$sqlFile} 2>&1 \\
| grep -v -E "will create implicit sequence|will create implicit index"
END;
$this->_runPsql($args);
} }
protected function _runDowngrade() protected function _runDowngrade()
{ {
passthru('export PGPASSWORD=' . $this->password . ' && /usr/bin/psql -h ' . $this->host . ' -U ' . $this->username . ' -q -f ' . $this->_dir . '/downgrade_sql/airtime_' $sqlFile = "{$this->_dir}/downgrade_sql/airtime_{$this->getNewVersion()}/downgrade.sql";
. $this->getNewVersion() . '/downgrade.sql ' . $this->database . ' 2>&1 | grep -v -E "will create implicit sequence|will create implicit index"'); $args = <<<"END"
--file={$sqlFile} 2>&1 \\
| grep -v -E "will create implicit sequence|will create implicit index"
END;
$this->_runPsql($args);
} }
} }

View File

@ -78,23 +78,27 @@ auth = local
# #
# These settings are used to configure your database connection. # These settings are used to configure your database connection.
# #
# host: The hostname of the database server. # host: The hostname of the database server.
# On a default Airtime installation, set this to localhost. # On a default Airtime installation, set this to localhost.
# #
# dbname: The name of the Airtime database. # port: The port of the database server.
# The default is airtime. # On a default Airtime installation, set this to 5432.
# #
# dbuser: The username for the Airtime database user. # name: The name of the Airtime database.
# The default is airtime. # The default is airtime.
# #
# dbpass: The password for the Airtime database user. # user: The username for the Airtime database user.
# The default is airtime. # The default is airtime.
#
# password: The password for the Airtime database user.
# The default is airtime.
# #
[database] [database]
host = localhost host = localhost
dbname = airtime port = 5432
dbuser = airtime name = airtime
dbpass = airtime user = airtime
password = airtime
# #
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------

View File

@ -201,17 +201,18 @@ class AirtimeInstall
public static function CreateDatabase() public static function CreateDatabase()
{ {
$CC_CONFIG = Config::getConfig(); $CC_CONFIG = Config::getConfig();
$host = $CC_CONFIG['dsn']['host'];
$port = $CC_CONFIG['dsn']['port'];
$database = $CC_CONFIG['dsn']['database']; $database = $CC_CONFIG['dsn']['database'];
$username = $CC_CONFIG['dsn']['username']; $username = $CC_CONFIG['dsn']['username'];
$password = $CC_CONFIG['dsn']['password']; $password = $CC_CONFIG['dsn']['password'];
$hostspec = $CC_CONFIG['dsn']['hostspec'];
echo ' * Creating Airtime database: ' . $database . PHP_EOL; echo ' * Creating Airtime database: ' . $database . PHP_EOL;
$dbExists = false; $dbExists = false;
try { try {
$con = pg_connect('user=' . $username . ' password=' . $password . ' host=' . $hostspec); $con = pg_connect("host={$host} port={$port} user={$username} password={$password}");
pg_query($con, 'CREATE DATABASE ' . $database . ' WITH ENCODING \'UTF8\' TEMPLATE template0 OWNER ' . $username . ';'); pg_query($con, 'CREATE DATABASE ' . $database . ' WITH ENCODING \'UTF8\' TEMPLATE template0 OWNER ' . $username . ';');
} catch (Exception $e) { } catch (Exception $e) {
@ -245,7 +246,7 @@ class AirtimeInstall
} }
} }
public static function CreateDatabaseTables($p_dbuser, $p_dbpasswd, $p_dbname, $p_dbhost) public static function CreateDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost, $dbport)
{ {
echo ' * Creating database tables' . PHP_EOL; echo ' * Creating database tables' . PHP_EOL;
// Put Propel sql files in Database // Put Propel sql files in Database
@ -253,7 +254,15 @@ class AirtimeInstall
$dir = self::GetAirtimeSrcDir() . '/build/sql/'; $dir = self::GetAirtimeSrcDir() . '/build/sql/';
$files = ['schema.sql', 'sequences.sql', 'views.sql', 'triggers.sql', 'defaultdata.sql']; $files = ['schema.sql', 'sequences.sql', 'views.sql', 'triggers.sql', 'defaultdata.sql'];
foreach ($files as $f) { foreach ($files as $f) {
$command = "export PGPASSWORD={$p_dbpasswd} && /usr/bin/psql --username {$p_dbuser} --dbname {$p_dbname} --host {$p_dbhost} --file {$dir}{$f} 2>&1"; $command = <<<"END"
PGPASSWORD={$dbpasswd} \\
/usr/bin/psql \\
--host={$dbhost} \\
--port={$dbport} \\
--dbname={$dbname} \\
--username={$dbuser} \\
--file {$dir}{$f} 2>&1
END;
@exec($command, $output, $results); @exec($command, $output, $results);
} }
AirtimeInstall::$databaseTablesCreated = true; AirtimeInstall::$databaseTablesCreated = true;

View File

@ -28,7 +28,8 @@ class TestHelper
return new Zend_Config( return new Zend_Config(
[ [
'host' => $config['dsn']['hostspec'], 'host' => $config['dsn']['host'],
'port' => $config['dsn']['port'],
'dbname' => $config['dsn']['database'], 'dbname' => $config['dsn']['database'],
'username' => $config['dsn']['username'], 'username' => $config['dsn']['username'],
'password' => $config['dsn']['password'], 'password' => $config['dsn']['password'],
@ -42,10 +43,11 @@ class TestHelper
//is normally //is normally
$CC_CONFIG = Config::getConfig(); $CC_CONFIG = Config::getConfig();
$dbhost = $CC_CONFIG['dsn']['host'];
$dbport = $CC_CONFIG['dsn']['port'];
$dbname = $CC_CONFIG['dsn']['database'];
$dbuser = $CC_CONFIG['dsn']['username']; $dbuser = $CC_CONFIG['dsn']['username'];
$dbpasswd = $CC_CONFIG['dsn']['password']; $dbpasswd = $CC_CONFIG['dsn']['password'];
$dbname = $CC_CONFIG['dsn']['database'];
$dbhost = $CC_CONFIG['dsn']['hostspec'];
$databaseAlreadyExists = AirtimeInstall::createDatabase(); $databaseAlreadyExists = AirtimeInstall::createDatabase();
if ($databaseAlreadyExists) { if ($databaseAlreadyExists) {
@ -123,7 +125,7 @@ class TestHelper
$con->commit(); $con->commit();
} else { } else {
//Create all the database tables //Create all the database tables
AirtimeInstall::CreateDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost); AirtimeInstall::CreateDatabaseTables($dbuser, $dbpasswd, $dbname, $dbhost, $dbport);
AirtimeInstall::UpdateDatabaseTables(); AirtimeInstall::UpdateDatabaseTables();
} }
} }

View File

@ -1,9 +1,9 @@
[database] [database]
host = localhost host = localhost
dbname = libretime_test port = 5432
dbuser = libretime name = libretime_test
dbpass = libretime user = libretime
password = libretime
[rabbitmq] [rabbitmq]
host = 127.0.0.1 host = 127.0.0.1