Skip to content

Commit 9a852e7

Browse files
author
Stefan Neuhaus
committed
Implementing Cassandra DB & PHP Extension
1 parent a2e997a commit 9a852e7

6 files changed

Lines changed: 152 additions & 0 deletions

File tree

cassandra/Dockerfile

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

docker-compose.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ volumes:
4545
driver: ${VOLUMES_DRIVER}
4646
sonarqube:
4747
driver: ${VOLUMES_DRIVER}
48+
cassandra:
49+
driver: ${VOLUMES_DRIVER}
4850

4951
services:
5052

@@ -67,6 +69,7 @@ services:
6769
- INSTALL_IMAP=${WORKSPACE_INSTALL_IMAP}
6870
- INSTALL_MONGO=${WORKSPACE_INSTALL_MONGO}
6971
- INSTALL_AMQP=${WORKSPACE_INSTALL_AMQP}
72+
- INSTALL_CASSANDRA=${WORKSPACE_INSTALL_CASSANDRA}
7073
- INSTALL_PHPREDIS=${WORKSPACE_INSTALL_PHPREDIS}
7174
- INSTALL_MSSQL=${WORKSPACE_INSTALL_MSSQL}
7275
- INSTALL_NODE=${WORKSPACE_INSTALL_NODE}
@@ -153,6 +156,7 @@ services:
153156
- INSTALL_IMAP=${PHP_FPM_INSTALL_IMAP}
154157
- INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}
155158
- INSTALL_AMQP=${PHP_FPM_INSTALL_AMQP}
159+
- INSTALL_CASSANDRA=${PHP_FPM_INSTALL_CASSANDRA}
156160
- INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
157161
- INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
158162
- INSTALL_GMP=${PHP_FPM_INSTALL_GMP}
@@ -220,6 +224,7 @@ services:
220224
- INSTALL_ZIP_ARCHIVE=${PHP_WORKER_INSTALL_ZIP_ARCHIVE}
221225
- INSTALL_MYSQL_CLIENT=${PHP_WORKER_INSTALL_MYSQL_CLIENT}
222226
- INSTALL_AMQP=${PHP_WORKER_INSTALL_AMQP}
227+
- INSTALL_CASSANDRA=${PHP_WORKER_INSTALL_CASSANDRA}
223228
- INSTALL_GHOSTSCRIPT=${PHP_WORKER_INSTALL_GHOSTSCRIPT}
224229
- INSTALL_SWOOLE=${PHP_WORKER_INSTALL_SWOOLE}
225230
- INSTALL_TAINT=${PHP_WORKER_INSTALL_TAINT}
@@ -246,6 +251,7 @@ services:
246251
- INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
247252
- INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED}
248253
- INSTALL_AMQP=${PHP_FPM_INSTALL_AMQP}
254+
- INSTALL_CASSANDRA=${PHP_FPM_INSTALL_CASSANDRA}
249255
volumes:
250256
- ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
251257
- ./laravel-horizon/supervisord.d:/etc/supervisord.d
@@ -584,6 +590,38 @@ services:
584590
networks:
585591
- backend
586592

593+
### Cassandra ############################################
594+
cassandra:
595+
build: ./cassandra
596+
ports:
597+
- "${CASSANDRA_TRANSPORT_PORT_NUMBER}:7000"
598+
- "${CASSANDRA_JMX_PORT_NUMBER}:7199"
599+
- "${CASSANDRA_CQL_PORT_NUMBER}:9042"
600+
privileged: true
601+
environment:
602+
- CASSANDRA_VERSION=${CASSANDRA_VERSION}
603+
- CASSANDRA_TRANSPORT_PORT_NUMBER=${CASSANDRA_TRANSPORT_PORT_NUMBER}
604+
- CASSANDRA_JMX_PORT_NUMBER=${CASSANDRA_JMX_PORT_NUMBER}
605+
- CASSANDRA_CQL_PORT_NUMBER=${CASSANDRA_CQL_PORT_NUMBER}
606+
- CASSANDRA_USER=${CASSANDRA_USER}
607+
- CASSANDRA_PASSWORD_SEEDER=${CASSANDRA_PASSWORD_SEEDER}
608+
- CASSANDRA_PASSWORD=${CASSANDRA_PASSWORD}
609+
- CASSANDRA_NUM_TOKENS=${CASSANDRA_NUM_TOKENS}
610+
- CASSANDRA_HOST=${CASSANDRA_HOST}
611+
- CASSANDRA_CLUSTER_NAME=${CASSANDRA_CLUSTER_NAME}
612+
- CASSANDRA_SEEDS=${CASSANDRA_SEEDS}
613+
- CASSANDRA_ENDPOINT_SNITCH=${CASSANDRA_ENDPOINT_SNITCH}
614+
- CASSANDRA_ENABLE_RPC=${CASSANDRA_ENABLE_RPC}
615+
- CASSANDRA_DATACENTER=${CASSANDRA_DATACENTER}
616+
- CASSANDRA_RACK=${CASSANDRA_RACK}
617+
hostname: laradock-cassandra
618+
volumes:
619+
- ${DATA_PATH_HOST}/cassandra:/var/lib/cassandra
620+
depends_on:
621+
- php-fpm
622+
networks:
623+
- backend
624+
587625
### Beanstalkd Console ###################################
588626
beanstalkd-console:
589627
build: ./beanstalkd-console

env-example

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ WORKSPACE_INSTALL_XSL=false
106106
WORKSPACE_INSTALL_IMAP=false
107107
WORKSPACE_INSTALL_MONGO=false
108108
WORKSPACE_INSTALL_AMQP=false
109+
WORKSPACE_INSTALL_CASSANDRA=false
109110
WORKSPACE_INSTALL_MSSQL=false
110111
WORKSPACE_INSTALL_DRUSH=false
111112
WORKSPACE_DRUSH_VERSION=8.1.17
@@ -161,6 +162,7 @@ PHP_FPM_INSTALL_PHPDBG=false
161162
PHP_FPM_INSTALL_IMAP=false
162163
PHP_FPM_INSTALL_MONGO=false
163164
PHP_FPM_INSTALL_AMQP=false
165+
PHP_FPM_INSTALL_CASSANDRA=false
164166
PHP_FPM_INSTALL_MSSQL=false
165167
PHP_FPM_INSTALL_SSH2=false
166168
PHP_FPM_INSTALL_SOAP=false
@@ -205,6 +207,7 @@ PHP_WORKER_INSTALL_SWOOLE=false
205207
PHP_WORKER_INSTALL_TAINT=false
206208
PHP_WORKER_INSTALL_FFMPEG=false
207209
PHP_WORKER_INSTALL_GMP=false
210+
PHP_WORKER_INSTALL_CASSANDRA=false
208211

209212
PHP_WORKER_PUID=1000
210213
PHP_WORKER_PGID=1000
@@ -731,3 +734,36 @@ SONARQUBE_POSTGRES_HOST=postgres
731734
SONARQUBE_POSTGRES_DB=sonar
732735
SONARQUBE_POSTGRES_USER=sonar
733736
SONARQUBE_POSTGRES_PASSWORD=sonarPass
737+
738+
### CASSANDRA ################################################
739+
740+
# Cassandra Version, supported tags can be found at https://hub.docker.com/r/bitnami/cassandra/
741+
CASSANDRA_VERSION=latest
742+
# Inter-node cluster communication port. Default: 7000
743+
CASSANDRA_TRANSPORT_PORT_NUMBER=7000
744+
# JMX connections port. Default: 7199
745+
CASSANDRA_JMX_PORT_NUMBER=7199
746+
# Client port. Default: 9042.
747+
CASSANDRA_CQL_PORT_NUMBER=9042
748+
# Cassandra user name. Defaults: cassandra
749+
CASSANDRA_USER=cassandra
750+
# Password seeder will change the Cassandra default credentials at initialization. In clusters, only one node should be marked as password seeder. Default: no
751+
CASSANDRA_PASSWORD_SEEDER=no
752+
# Cassandra user password. Default: cassandra
753+
CASSANDRA_PASSWORD=cassandra
754+
# Number of tokens for the node. Default: 256.
755+
CASSANDRA_NUM_TOKENS=256
756+
# Hostname used to configure Cassandra. It can be either an IP or a domain. If left empty, it will be resolved to the machine IP.
757+
CASSANDRA_HOST=
758+
# Cluster name to configure Cassandra.. Defaults: My Cluster
759+
CASSANDRA_CLUSTER_NAME="My Cluster"
760+
# : Hosts that will act as Cassandra seeds. No defaults.
761+
CASSANDRA_SEEDS=
762+
# Snitch name (which determines which data centers and racks nodes belong to). Default SimpleSnitch
763+
CASSANDRA_ENDPOINT_SNITCH=SimpleSnitch
764+
# Enable the thrift RPC endpoint. Default :true
765+
CASSANDRA_ENABLE_RPC=true
766+
# Datacenter name for the cluster. Ignored in SimpleSnitch endpoint snitch. Default: dc1.
767+
CASSANDRA_DATACENTER=dc1
768+
# Rack name for the cluster. Ignored in SimpleSnitch endpoint snitch. Default: rack1.
769+
CASSANDRA_RACK=rack1

laravel-horizon/Dockerfile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,28 @@ RUN if [ ${INSTALL_PGSQL} = true ]; then \
4545
&& docker-php-ext-install pdo_pgsql \
4646
;fi
4747

48+
# Install Cassandra drivers:
49+
ARG INSTALL_CASSANDRA=false
50+
RUN if [ ${INSTALL_CASSANDRA} = true ]; then \
51+
apk --update add cassandra-cpp-driver \
52+
;fi
53+
54+
WORKDIR /usr/src
55+
RUN if [ ${INSTALL_CASSANDRA} = true ]; then \
56+
git clone https://github.com/datastax/php-driver.git \
57+
&& cd php-driver/ext \
58+
&& phpize \
59+
&& mkdir -p /usr/src/php-driver/build \
60+
&& cd /usr/src/php-driver/build \
61+
&& ../ext/configure > /dev/null \
62+
&& make clean >/dev/null \
63+
&& make >/dev/null 2>&1 \
64+
&& make install \
65+
&& docker-php-ext-enable cassandra \
66+
;fi
67+
68+
69+
4870
###########################################################################
4971
# PHP Memcached:
5072
###########################################################################

php-worker/Dockerfile

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

88+
# Install Cassandra drivers:
89+
ARG INSTALL_CASSANDRA=false
90+
RUN if [ ${INSTALL_CASSANDRA} = true ]; then \
91+
apk --update add cassandra-cpp-driver \
92+
;fi
93+
94+
WORKDIR /usr/src
95+
RUN if [ ${INSTALL_CASSANDRA} = true ]; then \
96+
git clone https://github.com/datastax/php-driver.git \
97+
&& cd php-driver/ext \
98+
&& phpize \
99+
&& mkdir -p /usr/src/php-driver/build \
100+
&& cd /usr/src/php-driver/build \
101+
&& ../ext/configure --with-php-config=/usr/bin/php-config7.1 > /dev/null \
102+
&& make clean >/dev/null \
103+
&& make >/dev/null 2>&1 \
104+
&& make install \
105+
&& docker-php-ext-enable cassandra \
106+
;fi
107+
88108
# Install Phalcon ext
89109
ARG INSTALL_PHALCON=false
90110
ARG PHALCON_VERSION

workspace/Dockerfile

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,37 @@ RUN if [ ${INSTALL_AMQP} = true ]; then \
406406
ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/amqp.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-amqp.ini \
407407
;fi
408408

409+
###########################################################################
410+
# CASSANDRA:
411+
###########################################################################
412+
413+
ARG INSTALL_CASSANDRA=false
414+
415+
RUN if [ ${INSTALL_CASSANDRA} = true ]; then \
416+
apt-get install libgmp-dev -y && \
417+
curl https://downloads.datastax.com/cpp-driver/ubuntu/18.04/dependencies/libuv/v1.28.0/libuv1-dev_1.28.0-1_amd64.deb -o libuv1-dev.deb && \
418+
curl https://downloads.datastax.com/cpp-driver/ubuntu/18.04/dependencies/libuv/v1.28.0/libuv1_1.28.0-1_amd64.deb -o libuv1.deb && \
419+
curl https://downloads.datastax.com/cpp-driver/ubuntu/18.04/cassandra/v2.12.0/cassandra-cpp-driver-dev_2.12.0-1_amd64.deb -o cassandra-cpp-driver-dev.deb && \
420+
curl https://downloads.datastax.com/cpp-driver/ubuntu/18.04/cassandra/v2.12.0/cassandra-cpp-driver_2.12.0-1_amd64.deb -o cassandra-cpp-driver.deb && \
421+
dpkg -i libuv1.deb && \
422+
dpkg -i libuv1-dev.deb && \
423+
dpkg -i cassandra-cpp-driver.deb && \
424+
dpkg -i cassandra-cpp-driver-dev.deb && \
425+
rm libuv1.deb libuv1-dev.deb cassandra-cpp-driver-dev.deb cassandra-cpp-driver.deb && \
426+
cd /usr/src && \
427+
git clone https://github.com/datastax/php-driver.git && \
428+
cd /usr/src/php-driver/ext && \
429+
phpize && \
430+
mkdir /usr/src/php-driver/build && \
431+
cd /usr/src/php-driver/build && \
432+
../ext/configure > /dev/null && \
433+
make clean >/dev/null && \
434+
make >/dev/null 2>&1 && \
435+
make install && \
436+
echo "extension=cassandra.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/cassandra.ini && \
437+
ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/cassandra.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-cassandra.ini \
438+
;fi
439+
409440
###########################################################################
410441
# PHP REDIS EXTENSION
411442
###########################################################################

0 commit comments

Comments
 (0)