Skip to content

Commit 044261b

Browse files
author
Stefan Neuhaus
committed
Implement Gearman Message broker & PHP Extension
1 parent 196f145 commit 044261b

8 files changed

Lines changed: 135 additions & 2 deletions

File tree

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ env:
3131
- PHP_VERSION=NA BUILD_SERVICE="mssql rethinkdb aerospike"
3232
- PHP_VERSION=NA BUILD_SERVICE="blackfire minio percona nginx caddy apache2 mysql mariadb postgres postgres-postgis neo4j mongo redis cassandra"
3333
- PHP_VERSION=NA BUILD_SERVICE="adminer phpmyadmin pgadmin"
34-
- PHP_VERSION=NA BUILD_SERVICE="memcached beanstalkd beanstalkd-console rabbitmq elasticsearch certbot mailhog maildev selenium jenkins proxy proxy2 haproxy"
34+
- PHP_VERSION=NA BUILD_SERVICE="memcached beanstalkd beanstalkd-console rabbitmq elasticsearch certbot mailhog maildev selenium jenkins proxy proxy2 haproxy gearman"
3535
- PHP_VERSION=NA BUILD_SERVICE="kibana grafana laravel-echo-server"
3636
- PHP_VERSION=NA BUILD_SERVICE="ipython-controller manticore"
3737
# - PHP_VERSION=NA BUILD_SERVICE="aws"

DOCUMENTATION/content/introduction/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ That's it! enjoy :)
149149
- Eclipse Mosquitto
150150
- PHP Worker
151151
- Laravel Horizon
152+
- Gearman
152153

153154
- **Mail Servers:**
154155
- Mailu

docker-compose.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ services:
7070
- INSTALL_MONGO=${WORKSPACE_INSTALL_MONGO}
7171
- INSTALL_AMQP=${WORKSPACE_INSTALL_AMQP}
7272
- INSTALL_CASSANDRA=${WORKSPACE_INSTALL_CASSANDRA}
73+
- INSTALL_GEARMAN=${WORKSPACE_INSTALL_GEARMAN}
7374
- INSTALL_PHPREDIS=${WORKSPACE_INSTALL_PHPREDIS}
7475
- INSTALL_MSSQL=${WORKSPACE_INSTALL_MSSQL}
7576
- INSTALL_NODE=${WORKSPACE_INSTALL_NODE}
@@ -157,6 +158,7 @@ services:
157158
- INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}
158159
- INSTALL_AMQP=${PHP_FPM_INSTALL_AMQP}
159160
- INSTALL_CASSANDRA=${PHP_FPM_INSTALL_CASSANDRA}
161+
- INSTALL_GEARMAN=${PHP_FPM_INSTALL_GEARMAN}
160162
- INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
161163
- INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
162164
- INSTALL_GMP=${PHP_FPM_INSTALL_GMP}
@@ -225,6 +227,7 @@ services:
225227
- INSTALL_MYSQL_CLIENT=${PHP_WORKER_INSTALL_MYSQL_CLIENT}
226228
- INSTALL_AMQP=${PHP_WORKER_INSTALL_AMQP}
227229
- INSTALL_CASSANDRA=${PHP_WORKER_INSTALL_CASSANDRA}
230+
- INSTALL_GEARMAN=${PHP_WORKER_INSTALL_GEARMAN}
228231
- INSTALL_GHOSTSCRIPT=${PHP_WORKER_INSTALL_GHOSTSCRIPT}
229232
- INSTALL_SWOOLE=${PHP_WORKER_INSTALL_SWOOLE}
230233
- INSTALL_TAINT=${PHP_WORKER_INSTALL_TAINT}
@@ -622,6 +625,39 @@ services:
622625
networks:
623626
- backend
624627

628+
### Gearman ############################################
629+
gearman:
630+
build: ./gearman
631+
ports:
632+
- "${GEARMAN_PORT}:4730"
633+
privileged: true
634+
environment:
635+
- GEARMAN_VERSION=${GEARMAN_VERSION}
636+
- GEARMAN_VERBOSE=${GEARMAN_VERBOSE}
637+
- GEARMAN_QUEUE_TYPE=${GEARMAN_QUEUE_TYPE}
638+
- GEARMAN_THREADS=${GEARMAN_THREADS}
639+
- GEARMAN_BACKLOG=${GEARMAN_BACKLOG}
640+
- GEARMAN_FILE_DESCRIPTORS=${GEARMAN_FILE_DESCRIPTORS}
641+
- GEARMAN_JOB_RETRIES=${GEARMAN_JOB_RETRIES}
642+
- GEARMAN_ROUND_ROBIN=${GEARMAN_ROUND_ROBIN}
643+
- GEARMAN_WORKER_WAKEUP=${GEARMAN_WORKER_WAKEUP}
644+
- GEARMAN_KEEPALIVE=${GEARMAN_KEEPALIVE}
645+
- GEARMAN_KEEPALIVE_IDLE=${GEARMAN_KEEPALIVE_IDLE}
646+
- GEARMAN_KEEPALIVE_INTERVAL=${GEARMAN_KEEPALIVE_INTERVAL}
647+
- GEARMAN_KEEPALIVE_COUNT=${GEARMAN_KEEPALIVE_COUNT}
648+
- GEARMAN_MYSQL_HOST=${GEARMAN_MYSQL_HOST}
649+
- GEARMAN_MYSQL_PORT=${GEARMAN_MYSQL_PORT}
650+
- GEARMAN_MYSQL_USER=${GEARMAN_MYSQL_USER}
651+
- GEARMAN_MYSQL_PASSWORD=${GEARMAN_MYSQL_PASSWORD}
652+
- GEARMAN_MYSQL_PASSWORD_FILE=${GEARMAN_MYSQL_PASSWORD_FILE}
653+
- GEARMAN_MYSQL_DB=${GEARMAN_MYSQL_DB}
654+
- GEARMAN_MYSQL_TABLE=${GEARMAN_MYSQL_TABLE}
655+
hostname: laradock-gearman
656+
depends_on:
657+
- php-fpm
658+
networks:
659+
- backend
660+
625661
### Beanstalkd Console ###################################
626662
beanstalkd-console:
627663
build: ./beanstalkd-console

env-example

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ WORKSPACE_INSTALL_IMAP=false
107107
WORKSPACE_INSTALL_MONGO=false
108108
WORKSPACE_INSTALL_AMQP=false
109109
WORKSPACE_INSTALL_CASSANDRA=false
110+
WORKSPACE_INSTALL_GEARMAN=false
110111
WORKSPACE_INSTALL_MSSQL=false
111112
WORKSPACE_INSTALL_DRUSH=false
112113
WORKSPACE_DRUSH_VERSION=8.1.17
@@ -163,6 +164,7 @@ PHP_FPM_INSTALL_IMAP=false
163164
PHP_FPM_INSTALL_MONGO=false
164165
PHP_FPM_INSTALL_AMQP=false
165166
PHP_FPM_INSTALL_CASSANDRA=false
167+
PHP_FPM_INSTALL_GEARMAN=false
166168
PHP_FPM_INSTALL_MSSQL=false
167169
PHP_FPM_INSTALL_SSH2=false
168170
PHP_FPM_INSTALL_SOAP=false
@@ -208,6 +210,7 @@ PHP_WORKER_INSTALL_TAINT=false
208210
PHP_WORKER_INSTALL_FFMPEG=false
209211
PHP_WORKER_INSTALL_GMP=false
210212
PHP_WORKER_INSTALL_CASSANDRA=false
213+
PHP_WORKER_INSTALL_GEARMAN=false
211214

212215
PHP_WORKER_PUID=1000
213216
PHP_WORKER_PGID=1000
@@ -766,4 +769,49 @@ CASSANDRA_ENABLE_RPC=true
766769
# Datacenter name for the cluster. Ignored in SimpleSnitch endpoint snitch. Default: dc1.
767770
CASSANDRA_DATACENTER=dc1
768771
# Rack name for the cluster. Ignored in SimpleSnitch endpoint snitch. Default: rack1.
769-
CASSANDRA_RACK=rack1
772+
CASSANDRA_RACK=rack1
773+
774+
### GEARMAN ##################################################
775+
776+
# Gearman version to use. See available tags at https://hub.docker.com/r/artefactual/gearmand
777+
GEARMAN_VERSION=latest
778+
# Port to use (Default: 6379)
779+
GEARMAN_PORT=6379
780+
# Logging Level (Default: INFO)
781+
GEARMAN_VERBOSE=INFO
782+
# Persistent queue type to use (Default: builtin)
783+
GEARMAN_QUEUE_TYPE=builtin
784+
# Number of I/O threads to use (Default: 4)
785+
GEARMAN_THREADS=4
786+
# Number of backlog connections for listen (Default: 32)
787+
GEARMAN_BACKLOG=32
788+
# Number of file descriptors to allow for the process (Default is max allowed for user)
789+
GEARMAN_FILE_DESCRIPTORS=
790+
# Number of attempts to run the job before the job server removes it. (Default: no limit = 0)
791+
GEARMAN_JOB_RETRIES=0
792+
# Assign work in round-robin order per worker connection (Default: 0)
793+
GEARMAN_ROUND_ROBIN=0
794+
# Number of workers to wakeup for each job received (Default: 0)
795+
GEARMAN_WORKER_WAKEUP=0
796+
# Enable keepalive on sockets (Default: 0)
797+
GEARMAN_KEEPALIVE=0
798+
# The duration between two keepalive transmissions in idle condition (Default: 30)
799+
GEARMAN_KEEPALIVE_IDLE=30
800+
# The duration between two successive keepalive retransmissions, if acknowledgement to the previous keepalive transmission is not received (Default: 10)
801+
GEARMAN_KEEPALIVE_INTERVAL=10
802+
# The number of retransmissions to be carried out before declaring that remote end is not available (Default: 5)
803+
GEARMAN_KEEPALIVE_COUNT=5
804+
# Mysql server host (Default: localhost)
805+
GEARMAN_MYSQL_HOST=localhost
806+
# Mysql server port (Default: 3306)
807+
GEARMAN_MYSQL_PORT=3306
808+
# Mysql server user (Default: root)
809+
GEARMAN_MYSQL_USER=root
810+
# Mysql password
811+
GEARMAN_MYSQL_PASSWORD=
812+
# Path to file with mysql password(Docker secrets)
813+
GEARMAN_MYSQL_PASSWORD_FILE=
814+
# Database to use by Gearman (Default: Gearmand)
815+
GEARMAN_MYSQL_DB=Gearmand
816+
# Table to use by Gearman (Default: gearman_queue)
817+
GEARMAN_MYSQL_TABLE=gearman_queue

gearman/Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
ARG GEARMAN_VERSION=latest
2+
FROM artefactual/gearmand:${GEARMAN_VERSION}
3+
4+
LABEL maintainer="Stefan Neuhaus <https://www.github.com/stefnats>"
5+

php-fpm/Dockerfile

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,30 @@ RUN if [ ${INSTALL_AMQP} = true ]; then \
306306
docker-php-ext-install sockets \
307307
;fi
308308

309+
###########################################################################
310+
# GEARMAN:
311+
###########################################################################
312+
313+
ARG INSTALL_GEARMAN=false
314+
315+
RUN if [ ${INSTALL_GEARMAN} = true ]; then \
316+
apt-get update && \
317+
apt-get -y install libgearman-dev && \
318+
cd /tmp && \
319+
curl -L https://github.com/wcgallego/pecl-gearman/archive/gearman-2.0.5.zip -O && \
320+
unzip gearman-2.0.5.zip && \
321+
mv pecl-gearman-gearman-2.0.5 pecl-gearman && \
322+
cd /tmp/pecl-gearman && \
323+
phpize && \
324+
./configure && \
325+
make -j$(nproc) && \
326+
make install && \
327+
cd / && \
328+
rm /tmp/gearman-2.0.5.zip && \
329+
rm -r /tmp/pecl-gearman && \
330+
docker-php-ext-enable gearman \
331+
;fi
332+
309333
###########################################################################
310334
# pcntl
311335
###########################################################################

php-worker/Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ RUN if [ ${INSTALL_AMQP} = true ]; then \
8585
docker-php-ext-install sockets \
8686
;fi
8787

88+
# Install Gearman:
89+
ARG INSTALL_GEARMAN=false
90+
91+
RUN if [ ${INSTALL_GEARMAN} = true ]; then \
92+
docker-php-ext-install gearman \
93+
;fi
94+
8895
# Install Cassandra drivers:
8996
ARG INSTALL_CASSANDRA=false
9097
RUN if [ ${INSTALL_CASSANDRA} = true ]; then \

workspace/Dockerfile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,18 @@ RUN if [ ${INSTALL_CASSANDRA} = true ]; then \
437437
ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/cassandra.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-cassandra.ini \
438438
;fi
439439

440+
###########################################################################
441+
# Gearman:
442+
###########################################################################
443+
444+
ARG INSTALL_GEARMAN=false
445+
446+
RUN if [ ${INSTALL_GEARMAN} = true ]; then \
447+
add-apt-repository -y ppa:ondrej/pkg-gearman && \
448+
apt-get update && \
449+
apt-get install php-gearman -y \
450+
;fi
451+
440452
###########################################################################
441453
# PHP REDIS EXTENSION
442454
###########################################################################

0 commit comments

Comments
 (0)