From 35a6ca5f409407d40e99349a5d3a18ced92769fc Mon Sep 17 00:00:00 2001 From: mortexa Date: Sat, 7 Sep 2024 23:07:39 +0330 Subject: [PATCH] Support healthcheck for all container modes --- FrankenPHP.Alpine.Dockerfile | 7 ++++--- FrankenPHP.Dockerfile | 7 ++++--- RoadRunner.Alpine.Dockerfile | 7 ++++--- RoadRunner.Dockerfile | 7 ++++--- Swoole.Alpine.Dockerfile | 7 ++++--- Swoole.Dockerfile | 7 ++++--- deployment/healthcheck | 18 ++++++++++++++++++ .../FrankenPHP/supervisord.frankenphp.conf | 8 ++++---- .../RoadRunner/supervisord.roadrunner.conf | 8 ++++---- .../octane/Swoole/supervisord.swoole.conf | 8 ++++---- deployment/start-container | 16 ++++++++-------- deployment/supervisord.horizon.conf | 2 +- deployment/supervisord.scheduler.conf | 4 ++-- deployment/supervisord.worker.conf | 2 +- 14 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 deployment/healthcheck diff --git a/FrankenPHP.Alpine.Dockerfile b/FrankenPHP.Alpine.Dockerfile index 49e9dcc..77da134 100644 --- a/FrankenPHP.Alpine.Dockerfile +++ b/FrankenPHP.Alpine.Dockerfile @@ -73,7 +73,7 @@ RUN apk update; \ curl \ wget \ nano \ - git \ + git \ ncdu \ procps \ ca-certificates \ @@ -154,6 +154,7 @@ COPY --link --chown=${USER}:${USER} deployment/supervisord.conf /etc/supervisor/ COPY --link --chown=${USER}:${USER} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/ COPY --link --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --link --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --link --chown=${USER}:${USER} deployment/healthcheck /usr/local/bin/healthcheck COPY --link --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini # FrankenPHP embedded PHP configuration @@ -166,7 +167,7 @@ RUN composer install \ --no-dev \ && composer clear-cache -RUN chmod +x /usr/local/bin/start-container +RUN chmod +x /usr/local/bin/start-container /usr/local/bin/healthcheck RUN cat deployment/utilities.sh >> ~/.bashrc @@ -177,4 +178,4 @@ EXPOSE 2019 ENTRYPOINT ["start-container"] -HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1 diff --git a/FrankenPHP.Dockerfile b/FrankenPHP.Dockerfile index 9e0497b..c1f4b01 100644 --- a/FrankenPHP.Dockerfile +++ b/FrankenPHP.Dockerfile @@ -75,7 +75,7 @@ RUN apt-get update; \ curl \ wget \ nano \ - git \ + git \ ncdu \ procps \ ca-certificates \ @@ -155,6 +155,7 @@ COPY --link --chown=${USER}:${USER} deployment/supervisord.conf /etc/supervisor/ COPY --link --chown=${USER}:${USER} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/ COPY --link --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --link --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --link --chown=${USER}:${USER} deployment/healthcheck /usr/local/bin/healthcheck COPY --link --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini # FrankenPHP embedded PHP configuration @@ -167,7 +168,7 @@ RUN composer install \ --no-dev \ && composer clear-cache -RUN chmod +x /usr/local/bin/start-container +RUN chmod +x /usr/local/bin/start-container /usr/local/bin/healthcheck RUN cat deployment/utilities.sh >> ~/.bashrc @@ -178,4 +179,4 @@ EXPOSE 2019 ENTRYPOINT ["start-container"] -HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1 diff --git a/RoadRunner.Alpine.Dockerfile b/RoadRunner.Alpine.Dockerfile index d254c3d..a1801ac 100644 --- a/RoadRunner.Alpine.Dockerfile +++ b/RoadRunner.Alpine.Dockerfile @@ -70,7 +70,7 @@ RUN apk update; \ curl \ wget \ nano \ - git \ + git \ ncdu \ procps \ ca-certificates \ @@ -152,6 +152,7 @@ COPY --link --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/superviso COPY --link --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini COPY --link --chown=${USER}:${USER} deployment/octane/RoadRunner/.rr.prod.yaml ./.rr.yaml COPY --link --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --link --chown=${USER}:${USER} deployment/healthcheck /usr/local/bin/healthcheck RUN composer install \ --classmap-authoritative \ @@ -165,7 +166,7 @@ RUN if composer show | grep spiral/roadrunner-cli >/dev/null; then \ echo "`spiral/roadrunner-cli` package is not installed. Exiting..."; exit 1; \ fi -RUN chmod +x rr /usr/local/bin/start-container +RUN chmod +x rr /usr/local/bin/start-container /usr/local/bin/healthcheck RUN cat deployment/utilities.sh >> ~/.bashrc @@ -174,4 +175,4 @@ EXPOSE 6001 ENTRYPOINT ["start-container"] -HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1 diff --git a/RoadRunner.Dockerfile b/RoadRunner.Dockerfile index bf47ad1..a492dd0 100644 --- a/RoadRunner.Dockerfile +++ b/RoadRunner.Dockerfile @@ -72,7 +72,7 @@ RUN apt-get update; \ curl \ wget \ nano \ - git \ + git \ ncdu \ procps \ ca-certificates \ @@ -154,6 +154,7 @@ COPY --link --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/superviso COPY --link --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini COPY --link --chown=${USER}:${USER} deployment/octane/RoadRunner/.rr.prod.yaml ./.rr.yaml COPY --link --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --link --chown=${USER}:${USER} deployment/healthcheck /usr/local/bin/healthcheck RUN composer install \ --classmap-authoritative \ @@ -167,7 +168,7 @@ RUN if composer show | grep spiral/roadrunner-cli >/dev/null; then \ echo "`spiral/roadrunner-cli` package is not installed. Exiting..."; exit 1; \ fi -RUN chmod +x rr /usr/local/bin/start-container +RUN chmod +x rr /usr/local/bin/start-container /usr/local/bin/healthcheck RUN cat deployment/utilities.sh >> ~/.bashrc @@ -176,4 +177,4 @@ EXPOSE 6001 ENTRYPOINT ["start-container"] -HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1 diff --git a/Swoole.Alpine.Dockerfile b/Swoole.Alpine.Dockerfile index 60c8c04..9ff15f1 100644 --- a/Swoole.Alpine.Dockerfile +++ b/Swoole.Alpine.Dockerfile @@ -70,7 +70,7 @@ RUN apk update; \ curl \ wget \ nano \ - git \ + git \ ncdu \ procps \ ca-certificates \ @@ -152,6 +152,7 @@ COPY --link --chown=${USER}:${USER} deployment/octane/Swoole/supervisord.swoole. COPY --link --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --link --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini COPY --link --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --link --chown=${USER}:${USER} deployment/healthcheck /usr/local/bin/healthcheck RUN composer install \ --classmap-authoritative \ @@ -160,7 +161,7 @@ RUN composer install \ --no-dev \ && composer clear-cache -RUN chmod +x /usr/local/bin/start-container +RUN chmod +x /usr/local/bin/start-container /usr/local/bin/healthcheck RUN cat deployment/utilities.sh >> ~/.bashrc @@ -168,4 +169,4 @@ EXPOSE 8000 ENTRYPOINT ["start-container"] -HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1 diff --git a/Swoole.Dockerfile b/Swoole.Dockerfile index 57d1ee7..0534acb 100644 --- a/Swoole.Dockerfile +++ b/Swoole.Dockerfile @@ -72,7 +72,7 @@ RUN apt-get update; \ curl \ wget \ nano \ - git \ + git \ ncdu \ procps \ ca-certificates \ @@ -154,6 +154,7 @@ COPY --link --chown=${USER}:${USER} deployment/octane/Swoole/supervisord.swoole. COPY --link --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/ COPY --link --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini COPY --link --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container +COPY --link --chown=${USER}:${USER} deployment/healthcheck /usr/local/bin/healthcheck RUN composer install \ --classmap-authoritative \ @@ -162,7 +163,7 @@ RUN composer install \ --no-dev \ && composer clear-cache -RUN chmod +x /usr/local/bin/start-container +RUN chmod +x /usr/local/bin/start-container /usr/local/bin/healthcheck RUN cat deployment/utilities.sh >> ~/.bashrc @@ -170,4 +171,4 @@ EXPOSE 8000 ENTRYPOINT ["start-container"] -HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1 diff --git a/deployment/healthcheck b/deployment/healthcheck new file mode 100644 index 0000000..4cfac52 --- /dev/null +++ b/deployment/healthcheck @@ -0,0 +1,18 @@ +#!/usr/bin/env sh + +set -e + +container_mode=${CONTAINER_MODE:-"http"} + +if [ "${container_mode}" = "http" ]; then + php artisan octane:status +elif [ "${container_mode}" = "horizon" ]; then + php artisan horizon:status +elif [ "${container_mode}" = "scheduler" ]; then + supervisorctl status scheduler:scheduler_00 +elif [ "${container_mode}" = "worker" ]; then + supervisorctl status worker:worker_00 +else + echo "Container mode mismatched." + exit 1 +fi \ No newline at end of file diff --git a/deployment/octane/FrankenPHP/supervisord.frankenphp.conf b/deployment/octane/FrankenPHP/supervisord.frankenphp.conf index fb71df9..d9417c8 100644 --- a/deployment/octane/FrankenPHP/supervisord.frankenphp.conf +++ b/deployment/octane/FrankenPHP/supervisord.frankenphp.conf @@ -1,5 +1,5 @@ [program:octane] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan octane:start --server=frankenphp --host=0.0.0.0 --port=8000 --admin-port=2019 ; command=php %(ENV_ROOT)s/artisan octane:start --server=frankenphp --host=localhost --port=443 --admin-port=2019 --https --http-redirect user=%(ENV_USER)s @@ -12,7 +12,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:horizon] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan horizon user=%(ENV_USER)s autostart=%(ENV_WITH_HORIZON)s @@ -24,7 +24,7 @@ stderr_logfile_maxbytes=200MB stopwaitsecs=3600 [program:scheduler] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=supercronic -overlapping /etc/supercronic/laravel user=%(ENV_USER)s autostart=%(ENV_WITH_SCHEDULER)s @@ -35,7 +35,7 @@ stderr_logfile=%(ENV_ROOT)s/storage/logs/scheduler.log stderr_logfile_maxbytes=200MB [program:clear-scheduler-cache] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan schedule:clear-cache user=%(ENV_USER)s autostart=%(ENV_WITH_SCHEDULER)s diff --git a/deployment/octane/RoadRunner/supervisord.roadrunner.conf b/deployment/octane/RoadRunner/supervisord.roadrunner.conf index 8ffd957..649c13b 100644 --- a/deployment/octane/RoadRunner/supervisord.roadrunner.conf +++ b/deployment/octane/RoadRunner/supervisord.roadrunner.conf @@ -1,5 +1,5 @@ [program:octane] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan octane:start --server=roadrunner --host=0.0.0.0 --port=8000 --rpc-port=6001 --rr-config=%(ENV_ROOT)s/.rr.yaml user=%(ENV_USER)s autostart=true @@ -11,7 +11,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:horizon] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan horizon user=%(ENV_USER)s autostart=%(ENV_WITH_HORIZON)s @@ -23,7 +23,7 @@ stderr_logfile_maxbytes=200MB stopwaitsecs=3600 [program:scheduler] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=supercronic -overlapping /etc/supercronic/laravel user=%(ENV_USER)s autostart=%(ENV_WITH_SCHEDULER)s @@ -34,7 +34,7 @@ stderr_logfile=%(ENV_ROOT)s/storage/logs/scheduler.log stderr_logfile_maxbytes=200MB [program:clear-scheduler-cache] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan schedule:clear-cache user=%(ENV_USER)s autostart=%(ENV_WITH_SCHEDULER)s diff --git a/deployment/octane/Swoole/supervisord.swoole.conf b/deployment/octane/Swoole/supervisord.swoole.conf index 58abdc4..be01aec 100644 --- a/deployment/octane/Swoole/supervisord.swoole.conf +++ b/deployment/octane/Swoole/supervisord.swoole.conf @@ -1,5 +1,5 @@ [program:octane] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan octane:start --server=swoole --host=0.0.0.0 --port=8000 user=%(ENV_USER)s autostart=true @@ -11,7 +11,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:horizon] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan horizon user=%(ENV_USER)s autostart=%(ENV_WITH_HORIZON)s @@ -23,7 +23,7 @@ stderr_logfile_maxbytes=200MB stopwaitsecs=3600 [program:scheduler] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=supercronic -overlapping /etc/supercronic/laravel user=%(ENV_USER)s autostart=%(ENV_WITH_SCHEDULER)s @@ -34,7 +34,7 @@ stderr_logfile=%(ENV_ROOT)s/storage/logs/scheduler.log stderr_logfile_maxbytes=200MB [program:clear-scheduler-cache] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan schedule:clear-cache user=%(ENV_USER)s autostart=%(ENV_WITH_SCHEDULER)s diff --git a/deployment/start-container b/deployment/start-container index 8816674..02bfd44 100644 --- a/deployment/start-container +++ b/deployment/start-container @@ -14,7 +14,7 @@ initialStuff() { php artisan config:cache; \ php artisan route:cache; - if [ ${running_migrations_and_seeders} = "true" ]; then + if [ "${running_migrations_and_seeders}" = "true" ]; then echo "Running migrations and seeding database ..." php artisan migrate --isolated --seed --force; fi @@ -22,26 +22,26 @@ initialStuff() { if [ "$1" != "" ]; then exec "$@" -elif [ ${container_mode} = "http" ]; then +elif [ "${container_mode}" = "http" ]; then echo "Octane Server: $octane_server" initialStuff - if [ ${octane_server} = "frankenphp" ]; then + if [ "${octane_server}" = "frankenphp" ]; then exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.frankenphp.conf - elif [ ${octane_server} = "swoole" ]; then + elif [ "${octane_server}" = "swoole" ]; then exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.swoole.conf - elif [ ${octane_server} = "roadrunner" ]; then + elif [ "${octane_server}" = "roadrunner" ]; then exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.roadrunner.conf else echo "Invalid Octane server supplied." exit 1 fi -elif [ ${container_mode} = "horizon" ]; then +elif [ "${container_mode}" = "horizon" ]; then initialStuff exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.horizon.conf -elif [ ${container_mode} = "scheduler" ]; then +elif [ "${container_mode}" = "scheduler" ]; then initialStuff exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.scheduler.conf -elif [ ${container_mode} = "worker" ]; then +elif [ "${container_mode}" = "worker" ]; then initialStuff exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.worker.conf else diff --git a/deployment/supervisord.horizon.conf b/deployment/supervisord.horizon.conf index 1ed21de..1cb499e 100644 --- a/deployment/supervisord.horizon.conf +++ b/deployment/supervisord.horizon.conf @@ -1,5 +1,5 @@ [program:horizon] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan horizon user=%(ENV_USER)s autostart=true diff --git a/deployment/supervisord.scheduler.conf b/deployment/supervisord.scheduler.conf index a2e6825..b5e306f 100644 --- a/deployment/supervisord.scheduler.conf +++ b/deployment/supervisord.scheduler.conf @@ -1,5 +1,5 @@ [program:scheduler] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=supercronic -overlapping /etc/supercronic/laravel user=%(ENV_USER)s autostart=true @@ -10,7 +10,7 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:clear-scheduler-cache] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=php %(ENV_ROOT)s/artisan schedule:clear-cache user=%(ENV_USER)s autostart=true diff --git a/deployment/supervisord.worker.conf b/deployment/supervisord.worker.conf index ed420aa..5286aeb 100644 --- a/deployment/supervisord.worker.conf +++ b/deployment/supervisord.worker.conf @@ -1,5 +1,5 @@ [program:worker] -process_name=%(program_name)s_%(process_num)02d +process_name=%(program_name)s_%(process_num)s command=%(ENV_WORKER_COMMAND)s user=%(ENV_USER)s autostart=true