build: add service healthchecks
This commit is contained in:
parent
3b322c9ee0
commit
645d8af22d
2 changed files with 59 additions and 1 deletions
15
compose.yaml
15
compose.yaml
|
|
@ -13,6 +13,12 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- app-data:/app/var/data
|
- app-data:/app/var/data
|
||||||
- app-cache:/app/var/bootstrap-cache
|
- app-cache:/app/var/bootstrap-cache
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "php -r 'exit(@fsockopen(\"127.0.0.1\", 9000) ? 0 : 1);'"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 3
|
||||||
|
start_period: 20s
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
build:
|
build:
|
||||||
|
|
@ -20,9 +26,16 @@ services:
|
||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
target: web
|
target: web
|
||||||
depends_on:
|
depends_on:
|
||||||
- app
|
app:
|
||||||
|
condition: service_healthy
|
||||||
ports:
|
ports:
|
||||||
- "${HTTP_PORT:-8080}:80"
|
- "${HTTP_PORT:-8080}:80"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1/ || exit 1"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 3
|
||||||
|
start_period: 20s
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
app-data:
|
app-data:
|
||||||
|
|
|
||||||
45
tests/Docker/ComposeHealthcheckTest.php
Normal file
45
tests/Docker/ComposeHealthcheckTest.php
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Tests\Docker;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
|
final class ComposeHealthcheckTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testServicesDeclareHealthchecks(): void
|
||||||
|
{
|
||||||
|
$compose = Yaml::parseFile(__DIR__.'/../../compose.yaml');
|
||||||
|
|
||||||
|
self::assertSame(
|
||||||
|
[
|
||||||
|
'CMD-SHELL',
|
||||||
|
'php -r \'exit(@fsockopen("127.0.0.1", 9000) ? 0 : 1);\'',
|
||||||
|
],
|
||||||
|
$compose['services']['app']['healthcheck']['test'] ?? null
|
||||||
|
);
|
||||||
|
self::assertSame('10s', $compose['services']['app']['healthcheck']['interval'] ?? null);
|
||||||
|
self::assertSame('3s', $compose['services']['app']['healthcheck']['timeout'] ?? null);
|
||||||
|
self::assertSame(3, $compose['services']['app']['healthcheck']['retries'] ?? null);
|
||||||
|
self::assertSame('20s', $compose['services']['app']['healthcheck']['start_period'] ?? null);
|
||||||
|
|
||||||
|
self::assertSame(
|
||||||
|
['CMD-SHELL', 'wget -q --spider http://127.0.0.1/ || exit 1'],
|
||||||
|
$compose['services']['nginx']['healthcheck']['test'] ?? null
|
||||||
|
);
|
||||||
|
self::assertSame('10s', $compose['services']['nginx']['healthcheck']['interval'] ?? null);
|
||||||
|
self::assertSame('3s', $compose['services']['nginx']['healthcheck']['timeout'] ?? null);
|
||||||
|
self::assertSame(3, $compose['services']['nginx']['healthcheck']['retries'] ?? null);
|
||||||
|
self::assertSame('20s', $compose['services']['nginx']['healthcheck']['start_period'] ?? null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNginxWaitsForHealthyApp(): void
|
||||||
|
{
|
||||||
|
$compose = Yaml::parseFile(__DIR__.'/../../compose.yaml');
|
||||||
|
|
||||||
|
self::assertSame(
|
||||||
|
['app' => ['condition' => 'service_healthy']],
|
||||||
|
$compose['services']['nginx']['depends_on'] ?? null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue