shlink_in_docker.local.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. declare(strict_types=1);
  3. namespace Shlinkio\Shlink;
  4. use Monolog\Handler\StreamHandler;
  5. use Monolog\Logger;
  6. use function explode;
  7. use function Functional\contains;
  8. use function Shlinkio\Shlink\Common\env;
  9. $helper = new class {
  10. private const DB_DRIVERS_MAP = [
  11. 'mysql' => 'pdo_mysql',
  12. 'maria' => 'pdo_mysql',
  13. 'postgres' => 'pdo_pgsql',
  14. ];
  15. private const DB_PORTS_MAP = [
  16. 'mysql' => '3306',
  17. 'maria' => '3306',
  18. 'postgres' => '5432',
  19. ];
  20. public function getDbConfig(): array
  21. {
  22. $driver = env('DB_DRIVER');
  23. if ($driver === null || $driver === 'sqlite') {
  24. return [
  25. 'driver' => 'pdo_sqlite',
  26. 'path' => 'data/database.sqlite',
  27. ];
  28. }
  29. $driverOptions = ! contains(['maria', 'mysql'], $driver) ? [] : [
  30. // 1002 -> PDO::MYSQL_ATTR_INIT_COMMAND
  31. 1002 => 'SET NAMES utf8',
  32. ];
  33. return [
  34. 'driver' => self::DB_DRIVERS_MAP[$driver],
  35. 'dbname' => env('DB_NAME', 'shlink'),
  36. 'user' => env('DB_USER'),
  37. 'password' => env('DB_PASSWORD'),
  38. 'host' => env('DB_HOST'),
  39. 'port' => env('DB_PORT', self::DB_PORTS_MAP[$driver]),
  40. 'driverOptions' => $driverOptions,
  41. ];
  42. }
  43. public function getNotFoundRedirectsConfig(): array
  44. {
  45. return [
  46. 'invalid_short_url' => env('INVALID_SHORT_URL_REDIRECT_TO'),
  47. 'regular_404' => env('REGULAR_404_REDIRECT_TO'),
  48. 'base_url' => env('BASE_URL_REDIRECT_TO'),
  49. ];
  50. }
  51. public function getVisitsWebhooks(): array
  52. {
  53. $webhooks = env('VISITS_WEBHOOKS');
  54. return $webhooks === null ? [] : explode(',', $webhooks);
  55. }
  56. };
  57. return [
  58. 'config_cache_enabled' => false,
  59. 'app_options' => [
  60. 'disable_track_param' => env('DISABLE_TRACK_PARAM'),
  61. ],
  62. 'delete_short_urls' => [
  63. 'check_visits_threshold' => true,
  64. 'visits_threshold' => (int) env('DELETE_SHORT_URL_THRESHOLD', 15),
  65. ],
  66. 'entity_manager' => [
  67. 'connection' => $helper->getDbConfig(),
  68. ],
  69. 'url_shortener' => [
  70. 'domain' => [
  71. 'schema' => env('SHORT_DOMAIN_SCHEMA', 'http'),
  72. 'hostname' => env('SHORT_DOMAIN_HOST', ''),
  73. ],
  74. 'validate_url' => (bool) env('VALIDATE_URLS', false),
  75. 'visits_webhooks' => $helper->getVisitsWebhooks(),
  76. ],
  77. 'not_found_redirects' => $helper->getNotFoundRedirectsConfig(),
  78. 'logger' => [
  79. 'Shlink' => [
  80. 'handlers' => [
  81. 'shlink_handler' => [
  82. 'name' => StreamHandler::class,
  83. 'params' => [
  84. 'level' => Logger::INFO,
  85. 'stream' => 'php://stdout',
  86. ],
  87. ],
  88. ],
  89. ],
  90. ],
  91. 'dependencies' => [
  92. 'aliases' => env('REDIS_SERVERS') === null ? [] : [
  93. 'lock_store' => 'redis_lock_store',
  94. ],
  95. ],
  96. 'redis' => [
  97. 'servers' => env('REDIS_SERVERS'),
  98. ],
  99. 'router' => [
  100. 'base_path' => env('BASE_PATH', ''),
  101. ],
  102. 'mezzio-swoole' => [
  103. 'swoole-http-server' => [
  104. 'options' => [
  105. 'worker_num' => (int) env('WEB_WORKER_NUM', 16),
  106. 'task_worker_num' => (int) env('TASK_WORKER_NUM', 16),
  107. ],
  108. ],
  109. ],
  110. ];