<?php
-return [
+/**
+ * Database configuration options.
+ *
+ * Changes to these config files are not supported by BookStack and may break upon updates.
+ * Configuration should be altered via the `.env` file or environment variables.
+ * Do not edit this file unless you're happy to maintain any changes yourself.
+ */
+
+// REDIS
+// Split out configuration into an array
+if (env('REDIS_SERVERS', false)) {
+
+ $redisDefaults = ['host' => '127.0.0.1', 'port' => '6379', 'database' => '0', 'password' => null];
+ $redisServers = explode(',', trim(env('REDIS_SERVERS', '127.0.0.1:6379:0'), ','));
+ $redisConfig = [];
+ $cluster = count($redisServers) > 1;
+
+ if ($cluster) {
+ $redisConfig['clusters'] = ['default' => []];
+ }
+
+ foreach ($redisServers as $index => $redisServer) {
+ $redisServerDetails = explode(':', $redisServer);
+
+ $serverConfig = [];
+ $configIndex = 0;
+ foreach ($redisDefaults as $configKey => $configDefault) {
+ $serverConfig[$configKey] = ($redisServerDetails[$configIndex] ?? $configDefault);
+ $configIndex++;
+ }
+
+ if ($cluster) {
+ $redisConfig['clusters']['default'][] = $serverConfig;
+ } else {
+ $redisConfig['default'] = $serverConfig;
+ }
+ }
+}
+
+// MYSQL
+// Split out port from host if set
+$mysql_host = env('DB_HOST', 'localhost');
+$mysql_host_exploded = explode(':', $mysql_host);
+$mysql_port = env('DB_PORT', 3306);
+if (count($mysql_host_exploded) > 1) {
+ $mysql_host = $mysql_host_exploded[0];
+ $mysql_port = intval($mysql_host_exploded[1]);
+}
- /*
- |--------------------------------------------------------------------------
- | PDO Fetch Style
- |--------------------------------------------------------------------------
- |
- | By default, database results will be returned as instances of the PHP
- | stdClass object; however, you may desire to retrieve records in an
- | array format for simplicity. Here you can tweak the fetch style.
- |
- */
-
- 'fetch' => PDO::FETCH_CLASS,
-
- /*
- |--------------------------------------------------------------------------
- | Default Database Connection Name
- |--------------------------------------------------------------------------
- |
- | Here you may specify which of the database connections below you wish
- | to use as your default connection for all database work. Of course
- | you may use many connections at once using the Database library.
- |
- */
+return [
+ // Default database connection name.
+ // Options: mysql, mysql_testing
'default' => env('DB_CONNECTION', 'mysql'),
- /*
- |--------------------------------------------------------------------------
- | Database Connections
- |--------------------------------------------------------------------------
- |
- | Here are each of the database connections setup for your application.
- | Of course, examples of configuring each database platform that is
- | supported by Laravel is shown below to make development simple.
- |
- |
- | All database work in Laravel is done through the PHP PDO facilities
- | so make sure you have the driver for your particular database of
- | choice installed on your machine before you begin development.
- |
- */
-
+ // Available database connections
+ // Many of those shown here are unsupported by BookStack.
'connections' => [
'sqlite' => [
'mysql' => [
'driver' => 'mysql',
- 'host' => env('DB_HOST', 'localhost'),
+ 'host' => $mysql_host,
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
- 'charset' => 'utf8',
- 'collation' => 'utf8_unicode_ci',
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'port' => $mysql_port,
+ 'charset' => 'utf8mb4',
+ 'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
+ 'engine' => null,
],
'mysql_testing' => [
'driver' => 'mysql',
- 'host' => 'localhost',
+ 'host' => '127.0.0.1',
'database' => 'bookstack-test',
- 'username' => 'bookstack-test',
- 'password' => 'bookstack-test',
+ 'username' => env('MYSQL_USER', 'bookstack-test'),
+ 'password' => env('MYSQL_PASSWORD', 'bookstack-test'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
- /*
- |--------------------------------------------------------------------------
- | Migration Repository Table
- |--------------------------------------------------------------------------
- |
- | This table keeps track of all the migrations that have already run for
- | your application. Using this information, we can determine which of
- | the migrations on disk haven't actually been run in the database.
- |
- */
-
+ // Migration Repository Table
+ // This table keeps track of all the migrations that have already run for
+ // your application. Using this information, we can determine which of
+ // the migrations on disk haven't actually been run in the database.
'migrations' => 'migrations',
- /*
- |--------------------------------------------------------------------------
- | Redis Databases
- |--------------------------------------------------------------------------
- |
- | Redis is an open source, fast, and advanced key-value store that also
- | provides a richer set of commands than a typical key-value systems
- | such as APC or Memcached. Laravel makes it easy to dig right in.
- |
- */
-
- 'redis' => [
-
- 'cluster' => false,
-
- 'default' => [
- 'host' => '127.0.0.1',
- 'port' => 6379,
- 'database' => 0,
- ],
-
- ],
+ // Redis configuration to use if set
+ 'redis' => env('REDIS_SERVERS', false) ? $redisConfig : [],
];