diff --git a/.env.example b/.env.example index feb2e1d678d269c4df2c13ec22f327915546a60a..a657413fbab84166dc7b4b7f96af819494904f00 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,13 @@ APP_LOG_LEVEL=debug APP_KEY= APP_URL=http://localhost +DB_CONNECTION=mysql +DB_HOST=mgdb +DB_PORT=3306 +DB_DATABASE=metager +DB_USERNAME=metager +DB_PASSWORD="metager" + REDIS_RESULT_CONNECTION=default REDIS_RESULT_CACHE_DURATION=60 diff --git a/Dockerfile b/Dockerfile index 73ac6bec7b5074140235efb00de64fb3d489524e..4604cc1b2b65ee41c64db555d613d56b146f57eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,6 @@ EXPOSE 80 COPY config/nginx.conf /etc/nginx/nginx.conf COPY config/nginx-default.conf /etc/nginx/conf.d/default.conf COPY --chown=root:nginx . /html -RUN chmod -R g+w storage bootstrap/cache CMD chown -R root:nginx storage/logs/metager bootstrap/cache && \ chmod -R g+w storage/logs/metager bootstrap/cache && \ diff --git a/app/Console/Commands/WaitDB.php b/app/Console/Commands/WaitDB.php new file mode 100644 index 0000000000000000000000000000000000000000..7d1d59fdc0375d2b85c13770b458fdc8d4034ed3 --- /dev/null +++ b/app/Console/Commands/WaitDB.php @@ -0,0 +1,55 @@ +<?php + +namespace App\Console\Commands; + +use DB; +use Illuminate\Console\Command; + +class WaitDB extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'wait:db'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Waits until default DB connection is available. '; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $starttime = microtime(true); + + while (microtime(true) - $starttime < 60) { + try { + $connection = DB::connection('mysql')->getPdo(); + $this->line("Connection to database successfull"); + return 0; + } catch (\Exception $e) { + $this->error($e->getMessage()); + sleep(1); + } + } + return 1; + } +} diff --git a/docker-compose.yml b/docker-compose.yml index cf67b27735b17e5c6a2a832d6133830eff963091..12a424fca3b5ece1a22765225c94f933e73fd5b9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,17 +12,29 @@ services: working_dir: /usr/src/app command: bash -c "npm install && npm run watch" dependencies: - image: alpine:latest + depends_on: + - "mgdb" + image: php:7.3-cli volumes: - .:/data working_dir: /data command: /data/init.sh + mgdb: + restart: unless-stopped + image: mariadb:latest + command: --default-authentication-plugin=mysql_native_password + environment: + - MYSQL_RANDOM_ROOT_PASSWORD=yes + - MYSQL_USER=metager + - MYSQL_PASSWORD=metager + - MYSQL_DATABASE=metager web: depends_on: + - "mgdb" - "dependencies" - "phpdeps" - "assets" - restart: on-failure + restart: unless-stopped build: . working_dir: /html volumes: diff --git a/init.sh b/init.sh index 905683b982c2ad6da3559a8f27d7f5073127c876..d1b105df9bc1a594c533fc1328f7869fa68eac05 100755 --- a/init.sh +++ b/init.sh @@ -1,5 +1,9 @@ #!/bin/sh +# This commands will help initialize data for docker-compose setup +# Its supposed to run in a php docker image +docker-php-ext-install pdo pdo_mysql + if [ ! -f "/data/.env" ]; then cp /data/.env.example /data/.env fi @@ -7,6 +11,11 @@ fi if [ -f "/data/database/useragents.sqlite" ]; then rm /data/database/useragents.sqlite fi -cp /data/database/useragents.sqlite.example /data/database/useragents.sqlite -chmod -R go+w storage bootstrap/cache \ No newline at end of file +touch /data/database/useragents.sqlite + +chmod -R go+w storage bootstrap/cache + +php artisan wait:db +php artisan migrate +php artisan db:seed \ No newline at end of file