Unify env var names on Ansible installs with their Docker counterparts.
This commit is contained in:
parent
5285024018
commit
64423a7097
7 changed files with 186 additions and 133 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -16,7 +16,6 @@ tmp/cache/*---*
|
|||
/env.ini
|
||||
/app/env.ini
|
||||
/app/.env
|
||||
/env.ini
|
||||
/azuracast.env
|
||||
/util/fixtures/*
|
||||
/util/fixtures/**/*
|
||||
|
|
|
@ -62,12 +62,9 @@ return [
|
|||
App\Doctrine\Event\SetExplicitChangeTracking $eventChangeTracking,
|
||||
App\EventDispatcher $dispatcher
|
||||
) {
|
||||
$connectionOptions = [
|
||||
'host' => $_ENV['MYSQL_HOST'] ?? 'mariadb',
|
||||
'port' => $_ENV['MYSQL_PORT'] ?? 3306,
|
||||
'dbname' => $_ENV['MYSQL_DATABASE'],
|
||||
'user' => $_ENV['MYSQL_USER'],
|
||||
'password' => $_ENV['MYSQL_PASSWORD'],
|
||||
$connectionOptions = array_merge(
|
||||
$environment->getDatabaseSettings(),
|
||||
[
|
||||
'driver' => 'pdo_mysql',
|
||||
'charset' => 'utf8mb4',
|
||||
'defaultTableOptions' => [
|
||||
|
@ -79,15 +76,8 @@ return [
|
|||
1002 => 'SET NAMES utf8mb4 COLLATE utf8mb4_general_ci',
|
||||
],
|
||||
'platform' => new Doctrine\DBAL\Platforms\MariaDb1027Platform(),
|
||||
];
|
||||
|
||||
if (!$environment->isDocker()) {
|
||||
$connectionOptions['host'] = $_ENV['db_host'] ?? 'localhost';
|
||||
$connectionOptions['port'] = $_ENV['db_port'] ?? '3306';
|
||||
$connectionOptions['dbname'] = $_ENV['db_name'] ?? 'azuracast';
|
||||
$connectionOptions['user'] = $_ENV['db_username'] ?? 'azuracast';
|
||||
$connectionOptions['password'] = $_ENV['db_password'];
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
try {
|
||||
// Fetch and store entity manager.
|
||||
|
@ -146,13 +136,11 @@ return [
|
|||
|
||||
// Redis cache
|
||||
Redis::class => function (Environment $environment) {
|
||||
$redisHost = $_ENV['REDIS_HOST'] ?? ($environment->isDocker() ? 'redis' : 'localhost');
|
||||
$redisPort = (int)($_ENV['REDIS_PORT'] ?? 6379);
|
||||
$redisDb = (int)($_ENV['REDIS_DB'] ?? 1);
|
||||
$settings = $environment->getRedisSettings();
|
||||
|
||||
$redis = new Redis();
|
||||
$redis->connect($redisHost, $redisPort, 15);
|
||||
$redis->select($redisDb);
|
||||
$redis->connect($settings['host'], $settings['port'], 15);
|
||||
$redis->select($settings['db']);
|
||||
|
||||
return $redis;
|
||||
},
|
||||
|
|
|
@ -11,40 +11,64 @@ class MigrateConfigCommand extends CommandAbstract
|
|||
SymfonyStyle $io,
|
||||
Environment $environment
|
||||
): int {
|
||||
$env_path = $environment->getBaseDirectory() . '/env.ini';
|
||||
$iniSettings = [];
|
||||
$envSettings = [];
|
||||
|
||||
if (file_exists($env_path)) {
|
||||
$iniSettings = parse_ini_file($env_path);
|
||||
$iniPath = $environment->getBaseDirectory() . '/env.ini';
|
||||
if (file_exists($iniPath)) {
|
||||
$envSettings = (array)parse_ini_file($iniPath);
|
||||
}
|
||||
|
||||
if (!empty($iniSettings['db_password'])) {
|
||||
$io->writeln(__('Configuration already set up.'));
|
||||
return 0;
|
||||
// Migrate from existing legacy config files.
|
||||
$legacyIniPath = $environment->getBaseDirectory() . '/app/env.ini';
|
||||
if (file_exists($legacyIniPath)) {
|
||||
$iniSettings = parse_ini_file($legacyIniPath);
|
||||
$envSettings = array_merge($envSettings, (array)$iniSettings);
|
||||
}
|
||||
|
||||
$legacyAppEnvFile = $environment->getBaseDirectory() . '/app/.env';
|
||||
if (file_exists($legacyAppEnvFile)) {
|
||||
$envSettings[Environment::APP_ENV] ??= file_get_contents($legacyAppEnvFile);
|
||||
}
|
||||
|
||||
$legacyDbConfFile = $environment->getBaseDirectory() . '/app/config/db.conf.php';
|
||||
if (file_exists($legacyDbConfFile)) {
|
||||
$dbConf = include($legacyDbConfFile);
|
||||
|
||||
$envSettings[Environment::DB_PASSWORD] ??= $dbConf['password'];
|
||||
if (isset($dbConf['user']) && 'root' === $dbConf['user']) {
|
||||
$envSettings[Environment::DB_USER] = 'root';
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($iniSettings['application_env']) && file_exists($environment->getBaseDirectory() . '/app/.env')) {
|
||||
$iniSettings['application_env'] = @file_get_contents($environment->getBaseDirectory() . '/app/.env');
|
||||
// Migrate from older environment variable names to new ones.
|
||||
$settingsToMigrate = [
|
||||
'application_env' => Environment::APP_ENV,
|
||||
'db_host' => Environment::DB_HOST,
|
||||
'db_port' => Environment::DB_PORT,
|
||||
'db_name' => Environment::DB_NAME,
|
||||
'db_username' => Environment::DB_USER,
|
||||
'db_password' => Environment::DB_PASSWORD,
|
||||
];
|
||||
|
||||
foreach ($settingsToMigrate as $oldSetting => $newSetting) {
|
||||
// In the future, if the env vars change, disregard this migration.
|
||||
if ($oldSetting === $newSetting) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($iniSettings['db_password'])) {
|
||||
$legacy_path = $environment->getBaseDirectory() . '/app/env.ini';
|
||||
if (file_exists($legacy_path)) {
|
||||
$old_settings = parse_ini_file($legacy_path);
|
||||
$iniSettings = array_merge($iniSettings, $old_settings);
|
||||
}
|
||||
|
||||
if (file_exists($environment->getBaseDirectory() . '/app/config/db.conf.php')) {
|
||||
$db_conf = include($environment->getBaseDirectory() . '/app/config/db.conf.php');
|
||||
$iniSettings['db_password'] = $db_conf['password'];
|
||||
|
||||
if ($db_conf['user'] === 'root') {
|
||||
$iniSettings['db_username'] = 'root';
|
||||
}
|
||||
if (!empty($envSettings[$oldSetting])) {
|
||||
$envSettings[$newSetting] ??= $envSettings[$oldSetting];
|
||||
unset($envSettings[$oldSetting]);
|
||||
}
|
||||
}
|
||||
|
||||
$ini_data = [
|
||||
// Set sensible defaults for variables that may not be set.
|
||||
$envSettings[Environment::DB_HOST] ??= 'localhost';
|
||||
$envSettings[Environment::DB_PORT] ??= '3306';
|
||||
$envSettings[Environment::DB_NAME] ??= 'azuracast';
|
||||
$envSettings[Environment::DB_USER] ??= 'azuracast';
|
||||
|
||||
$iniData = [
|
||||
';',
|
||||
'; AzuraCast Environment Settings',
|
||||
';',
|
||||
|
@ -52,12 +76,16 @@ class MigrateConfigCommand extends CommandAbstract
|
|||
';',
|
||||
'[configuration]',
|
||||
];
|
||||
|
||||
foreach ($iniSettings as $setting_key => $setting_val) {
|
||||
$ini_data[] = $setting_key . '="' . $setting_val . '"';
|
||||
foreach ($envSettings as $settingKey => $settingVal) {
|
||||
$iniData[] = $settingKey . '="' . $settingVal . '"';
|
||||
}
|
||||
|
||||
file_put_contents($env_path, implode("\n", $ini_data));
|
||||
file_put_contents($iniPath, implode("\n", $iniData));
|
||||
|
||||
// Remove legacy files.
|
||||
@unlink($legacyIniPath);
|
||||
@unlink($legacyAppEnvFile);
|
||||
@unlink($legacyDbConfFile);
|
||||
|
||||
$io->writeln(__('Configuration successfully written.'));
|
||||
return 0;
|
||||
|
|
|
@ -36,12 +36,6 @@ class SetupCommand extends CommandAbstract
|
|||
|
||||
if ($update) {
|
||||
$io->note(__('Running in update mode.'));
|
||||
|
||||
if (!$environment->isDocker()) {
|
||||
$io->section(__('Migrating Legacy Configuration'));
|
||||
$this->runCommand($output, 'azuracast:config:migrate');
|
||||
$io->newLine();
|
||||
}
|
||||
}
|
||||
|
||||
$em = $di->get(EntityManagerInterface::class);
|
||||
|
|
|
@ -50,6 +50,17 @@ class Environment
|
|||
|
||||
public const LOG_LEVEL = 'LOG_LEVEL';
|
||||
|
||||
// Database and Cache Configuration Variables
|
||||
public const DB_HOST = 'MYSQL_HOST';
|
||||
public const DB_PORT = 'MYSQL_PORT';
|
||||
public const DB_NAME = 'MYSQL_DATABASE';
|
||||
public const DB_USER = 'MYSQL_USER';
|
||||
public const DB_PASSWORD = 'MYSQL_PASSWORD';
|
||||
|
||||
public const REDIS_HOST = 'REDIS_HOST';
|
||||
public const REDIS_PORT = 'REDIS_PORT';
|
||||
public const REDIS_DB = 'REDIS_DB';
|
||||
|
||||
// Default settings
|
||||
protected array $defaults = [
|
||||
self::APP_NAME => 'AzuraCast',
|
||||
|
@ -264,4 +275,28 @@ class Environment
|
|||
? LogLevel::NOTICE
|
||||
: LogLevel::DEBUG;
|
||||
}
|
||||
|
||||
public function getDatabaseSettings(): array
|
||||
{
|
||||
if (!isset($this->data[self::DB_NAME], $this->data[self::DB_USER], $this->data[self::DB_PASSWORD])) {
|
||||
throw new \InvalidArgumentException('Database connection parameters not provided.');
|
||||
}
|
||||
|
||||
return [
|
||||
'host' => $this->data[self::DB_HOST] ?? ($this->isDocker() ? 'mariadb' : 'localhost'),
|
||||
'port' => (int)($this->data[self::DB_PORT] ?? 3306),
|
||||
'dbname' => $this->data[self::DB_NAME],
|
||||
'user' => $this->data[self::DB_USER],
|
||||
'password' => $this->data[self::DB_PASSWORD],
|
||||
];
|
||||
}
|
||||
|
||||
public function getRedisSettings(): array
|
||||
{
|
||||
return [
|
||||
'host' => $this->data[self::REDIS_HOST] ?? ($this->isDocker() ? 'redis' : 'localhost'),
|
||||
'port' => (int)($this->data[self::REDIS_PORT] ?? 6379),
|
||||
'db' => (int)($this->data[self::REDIS_DB] ?? 1),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,64 +1,67 @@
|
|||
---
|
||||
- name: (Prod) Generate MariaDB User Password
|
||||
command: pwgen 8 -sn 1
|
||||
register: prod_mysql_user_password
|
||||
when: app_env == "production"
|
||||
- name : (Prod) Generate MariaDB User Password
|
||||
command : pwgen 8 -sn 1
|
||||
register : prod_mysql_user_password
|
||||
when : app_env == "production"
|
||||
|
||||
- name: Assign User Password
|
||||
set_fact:
|
||||
mysql_user_password: "{{ prod_mysql_user_password.stdout if app_env == 'production' else dev_mysql_user_password }}"
|
||||
- name : Assign User Password
|
||||
set_fact :
|
||||
mysql_user_password : "{{ prod_mysql_user_password.stdout if app_env == 'production' else dev_mysql_user_password }}"
|
||||
|
||||
- name: Add configuration
|
||||
template: src=my.cnf.j2 dest=/etc/mysql/conf.d/my.cnf owner=root group=root mode=0644
|
||||
- name : Add configuration
|
||||
template : src=my.cnf.j2 dest=/etc/mysql/conf.d/my.cnf owner=root group=root mode=0644
|
||||
|
||||
- name: Add empty root .my.cnf (if none exists)
|
||||
template: src=root_empty_my.cnf.j2 dest=/root/.my.cnf owner=root group=root mode=0600 force=no
|
||||
- name : Add empty root .my.cnf (if none exists)
|
||||
template : src=root_empty_my.cnf.j2 dest=/root/.my.cnf owner=root group=root mode=0600 force=no
|
||||
|
||||
- name: MariaDB Cleanup
|
||||
command: 'mysql --defaults-extra-file=/root/.my.cnf -ne "{{ item }}"'
|
||||
with_items:
|
||||
- name : MariaDB Cleanup
|
||||
command : 'mysql --defaults-extra-file=/root/.my.cnf -ne "{{ item }}"'
|
||||
with_items :
|
||||
- "DELETE FROM mysql.user WHERE User=''"
|
||||
- "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
|
||||
- "DROP DATABASE test"
|
||||
- "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
|
||||
changed_when: False
|
||||
ignore_errors: True
|
||||
changed_when : False
|
||||
ignore_errors : True
|
||||
|
||||
# MySQL Secure Installation
|
||||
- name: Set up AzuraCast database user
|
||||
mysql_user:
|
||||
name: azuracast
|
||||
host: "localhost"
|
||||
password: "{{ mysql_user_password }}"
|
||||
priv: "azuracast.*:ALL,GRANT"
|
||||
state: present
|
||||
notify: send mysql notification
|
||||
# MySQL Secure Installation
|
||||
- name : Set up AzuraCast database user
|
||||
mysql_user :
|
||||
name : azuracast
|
||||
host : "localhost"
|
||||
password : "{{ mysql_user_password }}"
|
||||
priv : "azuracast.*:ALL,GRANT"
|
||||
state : present
|
||||
notify : send mysql notification
|
||||
|
||||
- name: Add .my.cnf
|
||||
template: src=user_my.cnf.j2 dest="{{ app_base }}/.my.cnf" owner=azuracast group=www-data mode=0644 force=yes
|
||||
- name : Add .my.cnf
|
||||
template : src=user_my.cnf.j2 dest="{{ app_base }}/.my.cnf" owner=azuracast group=www-data mode=0644 force=yes
|
||||
|
||||
- name: Reload privilege tables
|
||||
command: 'mysql --defaults-extra-file=/root/.my.cnf -ne "{{ item }}"'
|
||||
with_items:
|
||||
- name : Reload privilege tables
|
||||
command : 'mysql --defaults-extra-file=/root/.my.cnf -ne "{{ item }}"'
|
||||
with_items :
|
||||
- "FLUSH PRIVILEGES"
|
||||
changed_when: False
|
||||
changed_when : False
|
||||
|
||||
# Create Database
|
||||
- name: Create MySQL Database
|
||||
mysql_db:
|
||||
config_file: "/root/.my.cnf"
|
||||
name: azuracast
|
||||
state: present
|
||||
collation: utf8mb4_unicode_ci
|
||||
encoding: utf8mb4
|
||||
register: azuracast_db_created
|
||||
# Create Database
|
||||
- name : Create MySQL Database
|
||||
mysql_db :
|
||||
config_file : "/root/.my.cnf"
|
||||
name : azuracast
|
||||
state : present
|
||||
collation : utf8mb4_unicode_ci
|
||||
encoding : utf8mb4
|
||||
register : azuracast_db_created
|
||||
|
||||
- name: Set up environment file
|
||||
ini_file:
|
||||
dest: "{{ www_base }}/env.ini"
|
||||
section: "configuration"
|
||||
option: "{{ item.option }}"
|
||||
value: "{{ item.value }}"
|
||||
with_items:
|
||||
- { option: 'db_username', value: 'azuracast' }
|
||||
- { option: 'db_password', value: "{{ mysql_user_password }}" }
|
||||
- name : Set up environment file
|
||||
ini_file :
|
||||
dest : "{{ www_base }}/env.ini"
|
||||
section : "configuration"
|
||||
option : "{{ item.option }}"
|
||||
value : "{{ item.value }}"
|
||||
with_items :
|
||||
- { option : 'MYSQL_HOST', value : 'azuracast' }
|
||||
- { option : 'MYSQL_PORT', value : '3306' }
|
||||
- { option : 'MYSQL_USER', value : 'azuracast' }
|
||||
- { option : 'MYSQL_DB', value : 'azuracast' }
|
||||
- { option : 'MYSQL_PASSWORD', value : "{{ mysql_user_password }}" }
|
||||
|
|
|
@ -1,18 +1,24 @@
|
|||
---
|
||||
- name: Ensure update script continues to be executable
|
||||
file: path="{{ item }}" state=touch mode="a+x"
|
||||
with_items:
|
||||
- name : Ensure update script continues to be executable
|
||||
file : path="{{ item }}" state=touch mode="a+x"
|
||||
with_items :
|
||||
- "{{ www_base }}/update.sh"
|
||||
- "{{ www_base }}/bin/console"
|
||||
|
||||
- name: Run AzuraCast Setup (Install Mode)
|
||||
become: true
|
||||
become_user: azuracast
|
||||
shell: php {{ www_base }}/bin/console azuracast:setup
|
||||
when: update_mode|bool == false
|
||||
- name : Run AzuraCast Setup (Install Mode)
|
||||
become : true
|
||||
become_user : azuracast
|
||||
shell : php {{ www_base }}/bin/console azuracast:setup
|
||||
when : update_mode|bool == false
|
||||
|
||||
- name: Run AzuraCast Setup (Update Mode)
|
||||
become: true
|
||||
become_user: azuracast
|
||||
shell: php {{ www_base }}/bin/console azuracast:setup --update
|
||||
when: update_mode|bool == true
|
||||
- name : Migrate Legacy Configuration (Update Mode)
|
||||
become : true
|
||||
become_user : azuracast
|
||||
shell : php {{ www_base }}/bin/console azuracast:config:migrate
|
||||
when : update_mode|bool == true
|
||||
|
||||
- name : Run AzuraCast Setup (Update Mode)
|
||||
become : true
|
||||
become_user : azuracast
|
||||
shell : php {{ www_base }}/bin/console azuracast:setup --update
|
||||
when : update_mode|bool == true
|
||||
|
|
Loading…
Reference in a new issue