diff --git a/docker-compose.yml b/docker-compose.yml index 60e9b26..5547092 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -193,6 +193,24 @@ services: - "dockerhost:${DOCKER_HOST_IP}" networks: - backend +### Laravel Horizon ############################################ + laravel-horizon: + build: + context: ./laravel-horizon + args: + - PHP_VERSION=${PHP_VERSION} + - INSTALL_PGSQL=${PHP_FPM_INSTALL_PGSQL} + - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH} + - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED} + volumes: + - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} + - ./laravel-horizon/supervisord.d:/etc/supervisord.d + depends_on: + - workspace + extra_hosts: + - "dockerhost:${DOCKER_HOST_IP}" + networks: + - backend ### NGINX Server ######################################### nginx: diff --git a/laravel-horizon/Dockerfile b/laravel-horizon/Dockerfile new file mode 100644 index 0000000..35a6955 --- /dev/null +++ b/laravel-horizon/Dockerfile @@ -0,0 +1,107 @@ +# +#-------------------------------------------------------------------------- +# Image Setup +#-------------------------------------------------------------------------- +# + +ARG PHP_VERSION=${PHP_VERSION} +FROM php:${PHP_VERSION}-alpine + +LABEL maintainer="Mahmoud Zalt " + +RUN apk --update add wget \ + curl \ + git \ + build-base \ + libmemcached-dev \ + libmcrypt-dev \ + libxml2-dev \ + zlib-dev \ + autoconf \ + cyrus-sasl-dev \ + libgsasl-dev \ + supervisor + +RUN docker-php-ext-install mysqli mbstring pdo pdo_mysql tokenizer xml pcntl +RUN pecl channel-update pecl.php.net && pecl install memcached mcrypt-1.0.1 && docker-php-ext-enable memcached + +#Install BCMath package: +ARG INSTALL_BCMATH=false +RUN if [ ${INSTALL_BCMATH} = true ]; then \ + docker-php-ext-install bcmath \ + ;fi + +# Install PostgreSQL drivers: +ARG INSTALL_PGSQL=false +RUN if [ ${INSTALL_PGSQL} = true ]; then \ + apk --update add postgresql-dev \ + && docker-php-ext-install pdo_pgsql \ + ;fi + +########################################################################### +# PHP Memcached: +########################################################################### + +ARG INSTALL_MEMCACHED=false + +RUN if [ ${INSTALL_MEMCACHED} = true ]; then \ + # Install the php memcached extension + if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ + curl -L -o /tmp/memcached.tar.gz "https://github.com/php-memcached-dev/php-memcached/archive/2.2.0.tar.gz"; \ + else \ + curl -L -o /tmp/memcached.tar.gz "https://github.com/php-memcached-dev/php-memcached/archive/php7.tar.gz"; \ + fi \ + && mkdir -p memcached \ + && tar -C memcached -zxvf /tmp/memcached.tar.gz --strip 1 \ + && ( \ + cd memcached \ + && phpize \ + && ./configure \ + && make -j$(nproc) \ + && make install \ + ) \ + && rm -r memcached \ + && rm /tmp/memcached.tar.gz \ + && docker-php-ext-enable memcached \ + ;fi + +RUN rm /var/cache/apk/* \ + && mkdir -p /var/www + +# +#-------------------------------------------------------------------------- +# Optional Supervisord Configuration +#-------------------------------------------------------------------------- +# +# Modify the ./supervisor.conf file to match your App's requirements. +# Make sure you rebuild your container with every change. +# + +COPY supervisord.conf /etc/supervisord.conf + +ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"] + +# +#-------------------------------------------------------------------------- +# Optional Software's Installation +#-------------------------------------------------------------------------- +# +# If you need to modify this image, feel free to do it right here. +# +# -- Your awesome modifications go here -- # + +# +#-------------------------------------------------------------------------- +# Check PHP version +#-------------------------------------------------------------------------- +# + +RUN php -v | head -n 1 | grep -q "PHP ${PHP_VERSION}." + +# +#-------------------------------------------------------------------------- +# Final Touch +#-------------------------------------------------------------------------- +# + +WORKDIR /etc/supervisor/conf.d/ diff --git a/laravel-horizon/supervisord.conf b/laravel-horizon/supervisord.conf new file mode 100644 index 0000000..203f014 --- /dev/null +++ b/laravel-horizon/supervisord.conf @@ -0,0 +1,10 @@ +[supervisord] +nodaemon=true +[supervisorctl] +[inet_http_server] +port = 127.0.0.1:9001 +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[include] +files = supervisord.d/*.conf \ No newline at end of file diff --git a/laravel-horizon/supervisord.d/.gitignore b/laravel-horizon/supervisord.d/.gitignore new file mode 100644 index 0000000..fee9217 --- /dev/null +++ b/laravel-horizon/supervisord.d/.gitignore @@ -0,0 +1 @@ +*.conf diff --git a/laravel-horizon/supervisord.d/laravel-horizon.conf.example b/laravel-horizon/supervisord.d/laravel-horizon.conf.example new file mode 100644 index 0000000..245dccd --- /dev/null +++ b/laravel-horizon/supervisord.d/laravel-horizon.conf.example @@ -0,0 +1,6 @@ +[program:laravel-horizon] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/artisan horizon +autostart=true +autorestart=true +redirect_stderr=true