From ab95e3d28626d604287ca0b61159e8614bab103f Mon Sep 17 00:00:00 2001 From: clfreville2 Date: Wed, 5 Jun 2024 10:17:54 +0200 Subject: [PATCH] Create a Docker image and deploy it --- .dockerignore | 36 ++++++++++++++++++++ .drone.yml | 37 +++++++++++++++++++++ Dockerfile | 32 ++++++++++++++++++ composer.json | 1 + composer.lock | 54 +++++++++++++++++++++++++++++- frankenphp/Caddyfile | 55 +++++++++++++++++++++++++++++++ frankenphp/conf.d/app.ini | 13 ++++++++ frankenphp/conf.d/app.prod.ini | 2 ++ frankenphp/start.sh | 4 +++ frankenphp/worker.Caddyfile | 4 +++ src/Controller/PostController.php | 20 +++++++++++ templates/base.html.twig | 2 +- templates/post/index.html.twig | 11 +++++++ 13 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 frankenphp/Caddyfile create mode 100644 frankenphp/conf.d/app.ini create mode 100644 frankenphp/conf.d/app.prod.ini create mode 100755 frankenphp/start.sh create mode 100644 frankenphp/worker.Caddyfile create mode 100644 src/Controller/PostController.php create mode 100644 templates/post/index.html.twig diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..787832b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,36 @@ +**/*.log +**/*.md +**/*.php~ +**/*.dist.php +**/*.dist +**/*.cache +**/._* +**/.dockerignore +**/.DS_Store +**/.git/ +**/.gitattributes +**/.gitignore +**/.gitmodules +**/compose.*.yaml +**/compose.*.yml +**/compose.yaml +**/compose.yml +**/docker-compose.*.yaml +**/docker-compose.*.yml +**/docker-compose.yaml +**/docker-compose.yml +**/Dockerfile +**/Thumbs.db +.drone.yml +.github/ +.gitea/ +docs/ +public/bundles/ +tests/ +var/ +vendor/ +.editorconfig +.env.*.local +.env.local +.env.local.php +.env.test diff --git a/.drone.yml b/.drone.yml index c099272..1acafc2 100644 --- a/.drone.yml +++ b/.drone.yml @@ -28,3 +28,40 @@ steps: - php bin/phpunit depends_on: - install + + - name: docker-image + image: plugins/docker + settings: + registry: hub.codefirst.iut.uca.fr + repo: hub.codefirst.iut.uca.fr/clement.freville2/herbarium + username: + from_secret: REGISTRY_USER + password: + from_secret: REGISTRY_PASSWORD + cache_from: + - hub.codefirst.iut.uca.fr/clement.freville2/herbarium:latest + depends_on: + - lint + - test + when: + branch: + - main + - ci/* + + - name: deploy + image: hub.codefirst.iut.uca.fr/clement.freville2/codefirst-dockerproxy-clientdrone:latest + settings: + image: hub.codefirst.iut.uca.fr/clement.freville2/herbarium:latest + container: herbarium + command: create + overwrite: true + admins: clementfreville2 + environment: + # Disable HTTPS redirection as it served by a reverse proxy + CODEFIRST_CLIENTDRONE_ENV_SERVER_NAME: http://codefirst.iut.uca.fr + depends_on: + - docker-image + when: + branch: + - main + - ci/* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a5e8f9d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM docker.io/dunglas/frankenphp:1-php8.3 + +RUN install-php-extensions \ + @composer \ + apcu \ + intl \ + opcache \ + zip \ + ; + +ENV APP_ENV=prod +ENV FRANKENPHP_CONFIG="import worker.Caddyfile" +ENV COMPOSER_ALLOW_SUPERUSER=1 + +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" + +COPY frankenphp/conf.d/app.ini frankenphp/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/ +COPY frankenphp/Caddyfile /etc/caddy/Caddyfile +COPY frankenphp/worker.Caddyfile /etc/caddy/worker.Caddyfile +COPY frankenphp/start.sh . + +COPY composer.json composer.lock symfony.lock ./ +RUN composer install --no-cache --no-dev --no-autoloader --no-scripts --no-progress + +COPY . . +RUN composer dump-autoload --classmap-authoritative --no-dev \ + && composer dump-env prod \ + && composer run-script --no-dev post-install-cmd \ + ; +RUN rm -Rf frankenphp/ + +ENTRYPOINT [ "/app/start.sh" ] diff --git a/composer.json b/composer.json index 9b95112..a1821b9 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "doctrine/orm": "^3.1", "phpdocumentor/reflection-docblock": "^5.4", "phpstan/phpdoc-parser": "^1.29", + "runtime/frankenphp-symfony": "^0.2.0", "symfony/asset": "7.0.*", "symfony/asset-mapper": "7.0.*", "symfony/console": "7.0.*", diff --git a/composer.lock b/composer.lock index 8dc6152..d3f48ce 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "963e7a72ac289ff9f4ad3c719ed70956", + "content-hash": "888e1953f86d0f1fe9b271b85aab0ed0", "packages": [ { "name": "composer/semver", @@ -2006,6 +2006,58 @@ }, "time": "2021-07-14T16:46:02+00:00" }, + { + "name": "runtime/frankenphp-symfony", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-runtime/frankenphp-symfony.git", + "reference": "56822c3631d9522a3136a4c33082d006bdfe4bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-runtime/frankenphp-symfony/zipball/56822c3631d9522a3136a4c33082d006bdfe4bad", + "reference": "56822c3631d9522a3136a4c33082d006bdfe4bad", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/runtime": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Runtime\\FrankenPhpSymfony\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "kevin@dunglas.dev" + } + ], + "description": "FrankenPHP runtime for Symfony", + "support": { + "issues": "https://github.com/php-runtime/frankenphp-symfony/issues", + "source": "https://github.com/php-runtime/frankenphp-symfony/tree/0.2.0" + }, + "funding": [ + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2023-12-12T12:06:11+00:00" + }, { "name": "symfony/asset", "version": "v7.0.7", diff --git a/frankenphp/Caddyfile b/frankenphp/Caddyfile new file mode 100644 index 0000000..400d8cb --- /dev/null +++ b/frankenphp/Caddyfile @@ -0,0 +1,55 @@ +{ + {$CADDY_GLOBAL_OPTIONS} + + frankenphp { + #worker /path/to/your/worker.php + {$FRANKENPHP_CONFIG} + } + + # https://caddyserver.com/docs/caddyfile/directives#sorting-algorithm + order mercure after encode + order vulcain after reverse_proxy + order php_server before file_server + order php before file_server +} + +{$CADDY_EXTRA_CONFIG} + +{$SERVER_NAME:localhost} { + log { + # # Redact the authorization query parameter that can be set by Mercure + # format filter { + # wrap console + # fields { + # uri query { + # replace authorization REDACTED + # } + # } + # } + output stdout + } + + root * public/ + encode zstd br gzip + + # Uncomment the following lines to enable Mercure and Vulcain modules + #mercure { + # # Transport to use (default to Bolt) + # transport_url {$MERCURE_TRANSPORT_URL:bolt:///data/mercure.db} + # # Publisher JWT key + # publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG} + # # Subscriber JWT key + # subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG} + # # Allow anonymous subscribers (double-check that it's what you want) + # anonymous + # # Enable the subscription API (double-check that it's what you want) + # subscriptions + # # Extra directives + # {$MERCURE_EXTRA_DIRECTIVES} + #} + #vulcain + + {$CADDY_SERVER_EXTRA_DIRECTIVES} + + php_server +} diff --git a/frankenphp/conf.d/app.ini b/frankenphp/conf.d/app.ini new file mode 100644 index 0000000..79a17dd --- /dev/null +++ b/frankenphp/conf.d/app.ini @@ -0,0 +1,13 @@ +expose_php = 0 +date.timezone = UTC +apc.enable_cli = 1 +session.use_strict_mode = 1 +zend.detect_unicode = 0 + +; https://symfony.com/doc/current/performance.html +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +opcache.enable_file_override = 1 diff --git a/frankenphp/conf.d/app.prod.ini b/frankenphp/conf.d/app.prod.ini new file mode 100644 index 0000000..3bcaa71 --- /dev/null +++ b/frankenphp/conf.d/app.prod.ini @@ -0,0 +1,2 @@ +opcache.preload_user = root +opcache.preload = /app/config/preload.php diff --git a/frankenphp/start.sh b/frankenphp/start.sh new file mode 100755 index 0000000..b648810 --- /dev/null +++ b/frankenphp/start.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +php bin/console doctrine:migrations:migrate --no-interaction +exec frankenphp run --config /etc/caddy/Caddyfile diff --git a/frankenphp/worker.Caddyfile b/frankenphp/worker.Caddyfile new file mode 100644 index 0000000..d384ae4 --- /dev/null +++ b/frankenphp/worker.Caddyfile @@ -0,0 +1,4 @@ +worker { + file ./public/index.php + env APP_RUNTIME Runtime\FrankenPhpSymfony\Runtime +} diff --git a/src/Controller/PostController.php b/src/Controller/PostController.php new file mode 100644 index 0000000..0df3016 --- /dev/null +++ b/src/Controller/PostController.php @@ -0,0 +1,20 @@ +findAll(); + return $this->render('post/index.html.twig', [ + 'posts' => $posts, + ]); + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 233148c..bbf16f1 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -8,7 +8,7 @@ {% endblock %} {% block javascripts %} - {% block importmap %}{{ importmap('app') }}{% endblock %} + {% block importmap %}{% endblock %} {% endblock %} diff --git a/templates/post/index.html.twig b/templates/post/index.html.twig new file mode 100644 index 0000000..94f3756 --- /dev/null +++ b/templates/post/index.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block title %}Posts!{% endblock %} + +{% block body %} +{% for post in posts %} +
+ #{{ post.id }} trouvé le {{ post.foundDate | date("d/m/Y \\à H \\h") }} +
+{% endfor %} +{% endblock %}