From 94812f7ee7cadeedc22f22c06a46432ad2683f71 Mon Sep 17 00:00:00 2001 From: Mortexa <47121888+smortexa@users.noreply.github.com> Date: Sun, 14 Jan 2024 01:31:37 +0330 Subject: [PATCH] Restructure (#51) --- .github/workflows/roadrunner-test.yml | 10 +- .github/workflows/swoole-test.yml | 10 +- Dockerfile.RoadRunner | 205 ++++++++++++++++++ Dockerfile => Dockerfile.Swoole | 64 ++---- README.md | 66 +++--- .../octane/{ => RoadRunner}/.rr.prod.yaml | 0 .../supervisord.roadrunner.conf} | 8 +- .../supervisord.swoole.conf} | 8 +- deployment/{octane => }/php.ini | 0 deployment/{octane => }/start-container | 15 +- .../{octane => }/supervisord.horizon.conf | 0 deployment/supervisord.scheduler.conf | 27 +++ deployment/{octane => }/utilities.sh | 0 13 files changed, 301 insertions(+), 112 deletions(-) create mode 100644 Dockerfile.RoadRunner rename Dockerfile => Dockerfile.Swoole (71%) rename deployment/octane/{ => RoadRunner}/.rr.prod.yaml (100%) rename deployment/octane/{supervisord.app.roadrunner.conf => RoadRunner/supervisord.roadrunner.conf} (83%) rename deployment/octane/{supervisord.app.conf => Swoole/supervisord.swoole.conf} (85%) rename deployment/{octane => }/php.ini (100%) rename deployment/{octane => }/start-container (73%) rename deployment/{octane => }/supervisord.horizon.conf (100%) create mode 100644 deployment/supervisord.scheduler.conf rename deployment/{octane => }/utilities.sh (100%) diff --git a/.github/workflows/roadrunner-test.yml b/.github/workflows/roadrunner-test.yml index b7e0178..49b8812 100644 --- a/.github/workflows/roadrunner-test.yml +++ b/.github/workflows/roadrunner-test.yml @@ -60,18 +60,18 @@ jobs: working-directory: /var/www/app - name: Copy required content to dockerize the app - run: sudo cp -R Dockerfile .dockerignore deployment/ /var/www/app/ + run: sudo cp -R Dockerfile.RoadRunner .dockerignore deployment/ /var/www/app/ - name: Build image - run: docker build --build-arg OCTANE_SERVER=roadrunner -t app:local -f Dockerfile . + run: docker build -t app:local -f Dockerfile.RoadRunner . working-directory: /var/www/app - - name: Run the Docker image - run: docker run -d --rm -p 9000:9000 app:local + - name: Run the Docker container + run: docker run -d --rm -p 80:80 app:local working-directory: /var/www/app - name: Wait for the container run: sleep 10s - name: Check application health - run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:9000 + run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost diff --git a/.github/workflows/swoole-test.yml b/.github/workflows/swoole-test.yml index 61a64c3..e18eb2e 100644 --- a/.github/workflows/swoole-test.yml +++ b/.github/workflows/swoole-test.yml @@ -60,18 +60,18 @@ jobs: working-directory: /var/www/app - name: Copy required content to dockerize the app - run: sudo cp -R Dockerfile .dockerignore deployment/ /var/www/app/ + run: sudo cp -R Dockerfile.Swoole .dockerignore deployment/ /var/www/app/ - name: Build image - run: docker build -t app:local -f Dockerfile . + run: docker build -t app:local -f Dockerfile.Swoole . working-directory: /var/www/app - - name: Run the Docker image - run: docker run -d --rm -p 9000:9000 app:local + - name: Run the Docker container + run: docker run -d --rm -p 80:80 app:local working-directory: /var/www/app - name: Wait for the container run: sleep 10s - name: Check application health - run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost:9000 + run: curl -f -s -o /dev/null -w "%{http_code}" http://localhost diff --git a/Dockerfile.RoadRunner b/Dockerfile.RoadRunner new file mode 100644 index 0000000..604c331 --- /dev/null +++ b/Dockerfile.RoadRunner @@ -0,0 +1,205 @@ +# Accepted values: 8.2 - 8.1 +ARG PHP_VERSION=8.2 + +ARG COMPOSER_VERSION=latest + +########################################### +# Build frontend assets with NPM +########################################### + +ARG NODE_VERSION=20-alpine + +FROM node:${NODE_VERSION} as build + +ENV ROOT=/var/www/html + +WORKDIR ${ROOT} + +RUN npm config set update-notifier false && npm set progress=false + +COPY package*.json ./ + +RUN if [ -f $ROOT/package-lock.json ]; \ + then \ + npm ci --no-optional --loglevel=error --no-audit; \ + else \ + npm install --no-optional --loglevel=error --no-audit; \ + fi + +COPY . . + +RUN npm run build + +########################################### + +FROM composer:${COMPOSER_VERSION} AS vendor + +FROM php:${PHP_VERSION}-cli-bookworm + +LABEL maintainer="Seyed Morteza Ebadi <seyed.me720@gmail.com>" + +ARG WWWUSER=1000 +ARG WWWGROUP=1000 +ARG TZ=UTC + +ENV DEBIAN_FRONTEND=noninteractive \ + TERM=xterm-color \ + WITH_HORIZON=false \ + WITH_SCHEDULER=false \ + OCTANE_SERVER=roadrunner \ + NON_ROOT_USER=octane \ + ROOT=/var/www/html + +WORKDIR ${ROOT} + +SHELL ["/bin/bash", "-eou", "pipefail", "-c"] + +RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \ + && echo ${TZ} > /etc/timezone + +RUN apt-get update; \ + apt-get upgrade -yqq; \ + pecl -q channel-update pecl.php.net; \ + apt-get install -yqq --no-install-recommends --show-progress \ + apt-utils \ + gnupg \ + git \ + curl \ + wget \ + nano \ + rsync \ + ncdu \ + sqlite3 \ + libcurl4-openssl-dev \ + ca-certificates \ + supervisor \ + libmemcached-dev \ + libz-dev \ + libbrotli-dev \ + libpq-dev \ + libjpeg-dev \ + libpng-dev \ + librsvg2-bin \ + libfreetype6-dev \ + libssl-dev \ + libwebp-dev \ + libmcrypt-dev \ + libldap2-dev \ + libonig-dev \ + libmagickwand-dev \ + libzip-dev zip unzip \ + libargon2-1 \ + libidn2-0 \ + libpcre2-8-0 \ + librdkafka-dev \ + libpcre3 \ + libxml2 \ + libxslt-dev \ + libzstd1 \ + libc-ares-dev \ + procps \ + postgresql-client \ + postgis \ + default-mysql-client \ + libbz2-dev \ + zlib1g-dev \ + libicu-dev \ + g++ \ + # Install PHP extensions + && docker-php-ext-install \ + bz2 \ + pcntl \ + mbstring \ + bcmath \ + sockets \ + pgsql \ + pdo_pgsql \ + opcache \ + exif \ + && docker-php-ext-configure pdo_mysql && docker-php-ext-install pdo_mysql \ + && docker-php-ext-configure zip && docker-php-ext-install zip \ + && docker-php-ext-configure intl && docker-php-ext-install intl \ + && docker-php-ext-configure gd \ + --prefix=/usr \ + --with-jpeg \ + --with-webp \ + --with-freetype && docker-php-ext-install gd \ + && pecl -q install -o -f redis && docker-php-ext-enable redis \ + && pecl -q install -o -f imagick && docker-php-ext-enable imagick \ + && pecl -q install -o -f rdkafka && docker-php-ext-enable rdkafka \ + && pecl -q install -o -f memcached && docker-php-ext-enable memcached \ + && pecl -q install -o -f igbinary && docker-php-ext-enable igbinary \ + && docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine) && docker-php-ext-install ldap \ + && apt-get -y autoremove \ + && apt-get clean \ + && docker-php-source delete \ + && pecl clear-cache \ + && rm -R /tmp/pear \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ + && rm /var/log/lastlog /var/log/faillog + +RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ + -O /usr/bin/supercronic \ + && chmod +x /usr/bin/supercronic \ + && mkdir -p /etc/supercronic \ + && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel + +RUN userdel --remove --force www-data \ + && groupadd --force -g ${WWWGROUP} ${NON_ROOT_USER} \ + && useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${NON_ROOT_USER} + +RUN chown -R ${NON_ROOT_USER}:${NON_ROOT_USER} ${ROOT} /var/{log,run} + +RUN chmod -R ug+rw /var/{log,run} + +USER ${NON_ROOT_USER} + +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=vendor /usr/bin/composer /usr/bin/composer +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} composer* ./ + +RUN composer install \ + --no-dev \ + --no-interaction \ + --no-autoloader \ + --no-ansi \ + --no-scripts \ + --audit + +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} . . +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=build ${ROOT}/public public + +RUN mkdir -p \ + storage/framework/{sessions,views,cache,testing} \ + storage/logs \ + bootstrap/cache + +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/RoadRunner/supervisord.roadrunner.conf /etc/supervisor/conf.d +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.scheduler.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.horizon.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/RoadRunner/.rr.prod.yaml ./.rr.yaml +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container + +RUN composer install \ + --classmap-authoritative \ + --no-interaction \ + --no-ansi \ + --no-dev \ + && composer clear-cache \ + && php artisan storage:link + +RUN if composer show | grep spiral/roadrunner-cli >/dev/null; then \ + ./vendor/bin/rr get-binary; else \ + echo "`spiral/roadrunner-cli` package is not installed. Exiting..."; exit 1; \ + fi + +RUN chmod +x rr /usr/local/bin/start-container + +RUN cat deployment/utilities.sh >> ~/.bashrc + +EXPOSE 80 +EXPOSE 6001 + +ENTRYPOINT ["start-container"] + +HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD php artisan octane:status || exit 1 diff --git a/Dockerfile b/Dockerfile.Swoole similarity index 71% rename from Dockerfile rename to Dockerfile.Swoole index b421336..d65ef1c 100644 --- a/Dockerfile +++ b/Dockerfile.Swoole @@ -42,24 +42,14 @@ ARG WWWUSER=1000 ARG WWWGROUP=1000 ARG TZ=UTC -# Accepted values: swoole - roadrunner -ARG OCTANE_SERVER="swoole" - -# Accepted values: app - horizon - scheduler -ARG CONTAINER_MODE=app - -ARG APP_WITH_HORIZON=false -ARG APP_WITH_SCHEDULER=false - ENV DEBIAN_FRONTEND=noninteractive \ TERM=xterm-color \ - CONTAINER_MODE=${CONTAINER_MODE} \ - APP_WITH_HORIZON=${APP_WITH_HORIZON} \ - APP_WITH_SCHEDULER=${APP_WITH_SCHEDULER} \ - OCTANE_SERVER=${OCTANE_SERVER} \ - NON_ROOT_USER=octane + WITH_HORIZON=false \ + WITH_SCHEDULER=false \ + OCTANE_SERVER=swoole \ + NON_ROOT_USER=octane \ + ROOT=/var/www/html -ENV ROOT=/var/www/html WORKDIR ${ROOT} SHELL ["/bin/bash", "-eou", "pipefail", "-c"] @@ -78,6 +68,7 @@ RUN apt-get update; \ wget \ nano \ rsync \ + ncdu \ sqlite3 \ libcurl4-openssl-dev \ ca-certificates \ @@ -138,11 +129,8 @@ RUN apt-get update; \ && pecl -q install -o -f rdkafka && docker-php-ext-enable rdkafka \ && pecl -q install -o -f memcached && docker-php-ext-enable memcached \ && pecl -q install -o -f igbinary && docker-php-ext-enable igbinary \ + && pecl -q install -o -f swoole && docker-php-ext-enable swoole \ && docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine) && docker-php-ext-install ldap \ - && if [ ${OCTANE_SERVER} = "swoole" ]; then \ - printf "\n" | pecl -q install -o -f -D 'enable-openssl="yes" enable-http2="yes" enable-swoole-curl="yes" enable-mysqlnd="yes" enable-cares="yes"' swoole \ - && docker-php-ext-enable swoole; \ - fi \ && apt-get -y autoremove \ && apt-get clean \ && docker-php-source delete \ @@ -151,20 +139,11 @@ RUN apt-get update; \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && rm /var/log/lastlog /var/log/faillog - -########################################### -# Laravel scheduler -########################################### - -RUN if [ ${CONTAINER_MODE} = 'scheduler' ] || [ ${APP_WITH_SCHEDULER} = true ]; then \ - wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.26/supercronic-linux-amd64" \ +RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/supercronic-linux-amd64" \ -O /usr/bin/supercronic \ && chmod +x /usr/bin/supercronic \ && mkdir -p /etc/supercronic \ - && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel; \ - fi - -########################################### + && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel RUN userdel --remove --force www-data \ && groupadd --force -g ${WWWGROUP} ${NON_ROOT_USER} \ @@ -195,10 +174,11 @@ RUN mkdir -p \ storage/logs \ bootstrap/cache -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/supervisord* /etc/supervisor/conf.d/ -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/php.ini /usr/local/etc/php/conf.d/99-octane.ini -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/.rr.prod.yaml ./.rr.yaml -COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/start-container /usr/local/bin/start-container +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/Swoole/supervisord.swoole.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.scheduler.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.horizon.conf /etc/supervisor/conf.d/ +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini +COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container RUN composer install \ --classmap-authoritative \ @@ -208,23 +188,11 @@ RUN composer install \ && composer clear-cache \ && php artisan storage:link -RUN if [ ${OCTANE_SERVER} = "roadrunner" ]; then \ - if composer show | grep spiral/roadrunner-cli >/dev/null; then \ - ./vendor/bin/rr get-binary; else \ - echo "spiral/roadrunner-cli package is not installed. exiting..."; exit 1; \ - fi \ - fi - -RUN if [ -f "rr" ]; then \ - chmod +x rr; \ - fi - RUN chmod +x /usr/local/bin/start-container -RUN cat deployment/octane/utilities.sh >> ~/.bashrc +RUN cat deployment/utilities.sh >> ~/.bashrc -EXPOSE 9000 -EXPOSE 6001 +EXPOSE 80 ENTRYPOINT ["start-container"] diff --git a/README.md b/README.md index 82b5d00..7d5a3f2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@ # Laravel Octane Dockerfile <a href="/LICENSE"><img alt="License" src="https://img.shields.io/github/license/exaco/laravel-octane-dockerfile"></a> <a href="https://github.com/exaco/laravel-octane-dockerfile/releases"><img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/exaco/laravel-octane-dockerfile"></a> -<a href="https://github.com/exaco/laravel-octane-dockerfile/pulls"><img alt="GitHub closed pull requests" src="https://img.shields.io/github/issues-pr-closed/exaco/laravel-octane-dockerfile"></a> <a href="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/tests.yml"><img alt="GitHub Workflow Status" src="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/roadrunner-test.yml/badge.svg"></a> <a href="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/tests.yml"><img alt="GitHub Workflow Status" src="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/swoole-test.yml/badge.svg"></a> +<a href="https://github.com/exaco/laravel-octane-dockerfile/pulls"><img alt="GitHub closed pull requests" src="https://img.shields.io/github/issues-pr-closed/exaco/laravel-octane-dockerfile"></a> +<a href="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/tests.yml"><img alt="GitHub Workflow Status" src="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/roadrunner-test.yml/badge.svg"></a> +<a href="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/tests.yml"><img alt="GitHub Workflow Status" src="https://github.com/exaco/laravel-octane-dockerfile/actions/workflows/swoole-test.yml/badge.svg"></a> + A pretty configurable, production-ready, and multi-stage Dockerfile for [Laravel Octane](https://github.com/laravel/octane) powered web services and microservices. @@ -13,20 +16,17 @@ The Docker configuration provides the following setup: ## Container modes -You can build the Docker image in different modes: - -| Mode | `CONTAINER_MODE` ARG | HTTP server | Exposed port | -|------------------|----------------------|------------| ------------| -| Octane (default) | `app` | Swoole / RoadRunner | 9000 | -| Horizon | `horizon` | - | - | -| Scheduler | `scheduler` | - | - | +You can run the Docker container in different modes: -> If you want to run Horizon in the Octane container, then you should set `APP_WITH_HORIZON` build argument `true`. - -> If you want to run Scheduler in the Octane container, then you should set `APP_WITH_SCHEDULER` build argument `true`. +| Mode | `CONTAINER_MODE` | HTTP server | +|------------------|----------------------|------------| +| Octane (default) | `http` | Swoole / RoadRunner | +| Horizon | `horizon` | - | +| Scheduler | `scheduler` | - | ## Usage +### Building Docker image 1. Clone this repository: ``` git clone --depth 1 git@github.com:exaco/laravel-octane-dockerfile.git @@ -34,42 +34,31 @@ git clone --depth 1 git@github.com:exaco/laravel-octane-dockerfile.git 2. Copy cloned directory content including `deployment` directory, `Dockerfile`, and `.dockerignore` into your Octane powered Laravel project 3. Change the directory to your Laravel project 4. Build your image: - -- Container `app` mode: -``` -docker build -t <image-name>:<tag> . -``` -- Container `horizon` mode: -``` -docker build -t <image-name>:<tag> --build-arg CONTAINER_MODE=horizon . -``` -- Container `scheduler` mode: ``` -docker build -t <image-name>:<tag> --build-arg CONTAINER_MODE=scheduler . -``` -5. Up the container: -``` -docker run -p <port>:9000 --rm <image-name>:<tag> +docker build -t <image-name>:<tag> -f Dockerfile.<your-octane-driver> . ``` +### Running the Docker container -## Configuration +```bash +# http mode +docker run -p <port>:9000 --rm <image-name>:<tag> -There is something that you maybe want to configure: +# horizon mode +docker run -e CONTAINER_MODE=horizon -p <port>:9000 --rm <image-name>:<tag> -- Swoole HTTP server config in `supervisord.app.conf` -- PHP configurations in `php.ini` -- `ENTRYPOINT` Bash script in `entrypoint.sh` -- Set `PHP_VERSION` using the `--build-arg` option along with the build command -- Set `TZ` (OS timezone) using the `--build-arg` option along with the build command +# scheduler mode +docker run -e CONTAINER_MODE=scheduler -p <port>:9000 --rm <image-name>:<tag> -## Using RoadRunner instead of Swoole +# http mode with horizon +docker run -e WITH_HORIZON=true -p <port>:9000 --rm <image-name>:<tag> -1. Ensure you have roadrunner as a dependency in your `composer.json` -2. Set `OCTANE_SERVER=roadrunner` using the `--build-arg` option along with the build command +# http mode with scheduler +docker run -e WITH_SCHEDULER=true -p <port>:9000 --rm <image-name>:<tag> +``` -> You can configure RoadRunner through `deployment/octane/.rr.prod.yaml`. +## Configuration -## Recommended Swoole options for `octane.php` +### Recommended `Swoole` options in `octane.php` ```php // config/octane.php @@ -99,6 +88,7 @@ Also, some useful Bash functions and aliases are added in `utilities.sh` that ma - Please be aware of `.dockerignore` content ## ToDo +- [ ] Add support for PHP 8.3 - [x] Add support for Horizon - [x] Add support for RoadRunner - [ ] Add support for FrankenPHP diff --git a/deployment/octane/.rr.prod.yaml b/deployment/octane/RoadRunner/.rr.prod.yaml similarity index 100% rename from deployment/octane/.rr.prod.yaml rename to deployment/octane/RoadRunner/.rr.prod.yaml diff --git a/deployment/octane/supervisord.app.roadrunner.conf b/deployment/octane/RoadRunner/supervisord.roadrunner.conf similarity index 83% rename from deployment/octane/supervisord.app.roadrunner.conf rename to deployment/octane/RoadRunner/supervisord.roadrunner.conf index 91fbf9f..8d9b6be 100644 --- a/deployment/octane/supervisord.app.roadrunner.conf +++ b/deployment/octane/RoadRunner/supervisord.roadrunner.conf @@ -6,7 +6,7 @@ pidfile=/var/run/supervisord.pid [program:octane] process_name=%(program_name)s_%(process_num)02d -command=php /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --port=9000 --rpc-port=6001 --workers=auto --max-requests=500 --rr-config=/var/www/html/.rr.yaml +command=php /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --port=80 --rpc-port=6001 --rr-config=/var/www/html/.rr.yaml user=%(ENV_NON_ROOT_USER)s autostart=true autorestart=true @@ -20,7 +20,7 @@ stderr_logfile_maxbytes=0 process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan horizon user=%(ENV_NON_ROOT_USER)s -autostart=%(ENV_APP_WITH_HORIZON)s +autostart=%(ENV_WITH_HORIZON)s autorestart=true stdout_logfile=/var/www/html/horizon.log stopwaitsecs=3600 @@ -29,7 +29,7 @@ stopwaitsecs=3600 process_name=%(program_name)s_%(process_num)02d command=supercronic -overlapping /etc/supercronic/laravel user=%(ENV_NON_ROOT_USER)s -autostart=%(ENV_APP_WITH_SCHEDULER)s +autostart=%(ENV_WITH_SCHEDULER)s autorestart=true stdout_logfile=/var/www/html/scheduler.log @@ -37,6 +37,6 @@ stdout_logfile=/var/www/html/scheduler.log process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan schedule:clear-cache user=%(ENV_NON_ROOT_USER)s -autostart=%(ENV_APP_WITH_SCHEDULER)s +autostart=%(ENV_WITH_SCHEDULER)s autorestart=false stdout_logfile=/var/www/html/scheduler.log \ No newline at end of file diff --git a/deployment/octane/supervisord.app.conf b/deployment/octane/Swoole/supervisord.swoole.conf similarity index 85% rename from deployment/octane/supervisord.app.conf rename to deployment/octane/Swoole/supervisord.swoole.conf index bfac954..a12c3d7 100644 --- a/deployment/octane/supervisord.app.conf +++ b/deployment/octane/Swoole/supervisord.swoole.conf @@ -6,7 +6,7 @@ pidfile=/var/run/supervisord.pid [program:octane] process_name=%(program_name)s_%(process_num)02d -command=php /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=9000 --workers=auto --task-workers=auto --max-requests=500 +command=php /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=80 user=%(ENV_NON_ROOT_USER)s autostart=true autorestart=true @@ -20,7 +20,7 @@ stderr_logfile_maxbytes=0 process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan horizon user=%(ENV_NON_ROOT_USER)s -autostart=%(ENV_APP_WITH_HORIZON)s +autostart=%(ENV_WITH_HORIZON)s autorestart=true stdout_logfile=/var/www/html/horizon.log stopwaitsecs=3600 @@ -29,7 +29,7 @@ stopwaitsecs=3600 process_name=%(program_name)s_%(process_num)02d command=supercronic -overlapping /etc/supercronic/laravel user=%(ENV_NON_ROOT_USER)s -autostart=%(ENV_APP_WITH_SCHEDULER)s +autostart=%(ENV_WITH_SCHEDULER)s autorestart=true stdout_logfile=/var/www/html/scheduler.log @@ -37,6 +37,6 @@ stdout_logfile=/var/www/html/scheduler.log process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan schedule:clear-cache user=%(ENV_NON_ROOT_USER)s -autostart=%(ENV_APP_WITH_SCHEDULER)s +autostart=%(ENV_WITH_SCHEDULER)s autorestart=false stdout_logfile=/var/www/html/scheduler.log \ No newline at end of file diff --git a/deployment/octane/php.ini b/deployment/php.ini similarity index 100% rename from deployment/octane/php.ini rename to deployment/php.ini diff --git a/deployment/octane/start-container b/deployment/start-container similarity index 73% rename from deployment/octane/start-container rename to deployment/start-container index 5180f4f..2f8b1a3 100644 --- a/deployment/octane/start-container +++ b/deployment/start-container @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -e -container_mode=${CONTAINER_MODE:-app} -octane_server=${OCTANE_SERVER:-swoole} +container_mode=${CONTAINER_MODE:-http} +octane_server=${OCTANE_SERVER} echo "Container mode: $container_mode" initialStuff() { @@ -14,13 +14,13 @@ initialStuff() { if [ "$1" != "" ]; then exec "$@" -elif [ ${container_mode} = "app" ]; then - echo "Octane server: $octane_server" +elif [ ${container_mode} = "http" ]; then + echo "Octane Server: $octane_server" initialStuff if [ ${octane_server} = "swoole" ]; then - exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.app.conf + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.swoole.conf elif [ ${octane_server} = "roadrunner" ]; then - exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.app.roadrunner.conf + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.roadrunner.conf else echo "Invalid Octane server supplied." exit 1 @@ -30,8 +30,7 @@ elif [ ${container_mode} = "horizon" ]; then exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.horizon.conf elif [ ${container_mode} = "scheduler" ]; then initialStuff - php artisan schedule:clear-cache - exec supercronic -overlapping /etc/supercronic/laravel + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.scheduler.conf else echo "Container mode mismatched." exit 1 diff --git a/deployment/octane/supervisord.horizon.conf b/deployment/supervisord.horizon.conf similarity index 100% rename from deployment/octane/supervisord.horizon.conf rename to deployment/supervisord.horizon.conf diff --git a/deployment/supervisord.scheduler.conf b/deployment/supervisord.scheduler.conf new file mode 100644 index 0000000..3836217 --- /dev/null +++ b/deployment/supervisord.scheduler.conf @@ -0,0 +1,27 @@ +[supervisord] +nodaemon=true +user=%(ENV_NON_ROOT_USER)s +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:scheduler] +process_name=%(program_name)s_%(process_num)02d +command=supercronic -overlapping /etc/supercronic/laravel +user=%(ENV_NON_ROOT_USER)s +autostart=%(ENV_WITH_SCHEDULER)s +autorestart=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[program:clear-scheduler-cache] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/html/artisan schedule:clear-cache +user=%(ENV_NON_ROOT_USER)s +autostart=%(ENV_WITH_SCHEDULER)s +autorestart=false +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 \ No newline at end of file diff --git a/deployment/octane/utilities.sh b/deployment/utilities.sh similarity index 100% rename from deployment/octane/utilities.sh rename to deployment/utilities.sh