diff --git a/DOCUMENTATION/content/documentation/index.md b/DOCUMENTATION/content/documentation/index.md index 745cf237..b3e22943 100644 --- a/DOCUMENTATION/content/documentation/index.md +++ b/DOCUMENTATION/content/documentation/index.md @@ -323,7 +323,7 @@ PHP_FPM_INSTALL_PHPDBG=true ## Setup remote debugging for PhpStorm on Linux - - Make sure you have followed the steps above in the [Install Xdebug section](http://laradock.io/documentation/#install-xdebug). + - Make sure you have followed the steps above in the [Install Xdebug section](#install-xdebug). - Make sure Xdebug accepts connections and listens on port 9000. (Should be default configuration). @@ -353,6 +353,28 @@ Note: If `.php-fpm/xdebug` doesn't execute and gives `Permission Denied` error t +
+ +## Install ionCube Loader + +1 - First install `ionCube Loader` in the Workspace and the PHP-FPM Containers: +
+a) open the `.env` file +
+b) search for the `WORKSPACE_INSTALL_IONCUBE` argument under the Workspace Container +
+c) set it to `true` +
+d) search for the `PHP_FPM_INSTALL_IONCUBE` argument under the PHP-FPM Container +
+e) set it to `true` + +2 - Re-build the containers `docker-compose build workspace php-fpm` + +Always download the latest version of [Loaders for ionCube ](http://www.ioncube.com/loaders.php). + + +
@@ -407,7 +429,7 @@ To learn more about how Docker publishes ports, please read [this excellent post ## Setup Laravel and Docker on Digital Ocean -### [Full Guide Here](https://github.com/laradock/laradock/blob/master/_guides/digital_ocean.md) +### [Full Guide Here](/guides/#Digital-Ocean) @@ -522,6 +544,7 @@ b) add a new service container by simply copy-paste this section below PHP-FPM c context: ./php-worker args: - INSTALL_PGSQL=${PHP_WORKER_INSTALL_PGSQL} #Optionally install PGSQL PHP drivers + - INSTALL_BCMATH=${PHP_WORKER_INSTALL_BCMATH} #Optionally install BCMath php package volumes_from: - applications depends_on: @@ -554,6 +577,19 @@ docker-compose up -d netdata 2 - Open your browser and visit the localhost on port **19999**: `http://localhost:19999` +
+ +## Use Metabase + +1 - Run the Metabase Container (`metbase`) with the `docker-compose up` command. Example: + +```bash +docker-compose up -d metabase +``` + +2 - Open your browser and visit the localhost on port **3030**: `http://localhost:3030` + +3 - You can use environment to configure Metabase container. See docs in: [Running Metabase on Docker](https://www.metabase.com/docs/v0.12.0/operations-guide/running-metabase-on-docker.html) @@ -1485,17 +1521,40 @@ e) set it to `true` 3 - Set it to `true`
4 - Re-build the containers `docker-compose build php-fpm` +
+
+ +## Install libfaketime in the php-fpm container +Libfaketime allows you to control the date and time that is returned from the operating system. +It can be used by specifying a special string in the `PHP_FPM_FAKETIME` variable in the `.env` file. +For example: +`PHP_FPM_FAKETIME=-1d` +will set the clock back 1 day. See (https://github.com/wolfcw/libfaketime) for more information. + +1 - Open the `.env` file +
+2 - Search for the `PHP_FPM_INSTALL_FAKETIME` argument under the PHP-FPM container +
+3 - Set it to `true` +
+4 - Search for the `PHP_FPM_FAKETIME` argument under the PHP-FPM container +
+5 - Set it to the desired string +
+6 - Re-build the containers `docker-compose build php-fpm`
+ +
## PHPStorm Debugging Guide Remote debug Laravel web and phpunit tests. -[**Debugging Guide Here**](https://github.com/laradock/laradock/blob/master/_guides/phpstorm.md) +[**Debugging Guide Here**](/guides/#PHPStorm-Debugging) diff --git a/DOCUMENTATION/content/getting-started/index.md b/DOCUMENTATION/content/getting-started/index.md index bca083e6..a067fa30 100644 --- a/DOCUMENTATION/content/getting-started/index.md +++ b/DOCUMENTATION/content/getting-started/index.md @@ -81,10 +81,10 @@ We'll need to do step 1 of the [Usage](#Usage) section now to make this happen. cp env-example .env ``` -At the top, change the `APPLICATION` variable to your project path. +At the top, change the `APP_CODE_PATH_HOST` variable to your project path. ``` -APPLICATION=../project-z/ +APP_CODE_PATH_HOST=../project-z/ ``` Make sure to replace `project-z` with your project folder name. diff --git a/DOCUMENTATION/content/guides/index.md b/DOCUMENTATION/content/guides/index.md index 3cf1f38a..05c72a77 100644 --- a/DOCUMENTATION/content/guides/index.md +++ b/DOCUMENTATION/content/guides/index.md @@ -197,7 +197,7 @@ This is needed Prior to Creating Let's Encypt ## Run Your Caddy Container without the -d flag and Generate SSL with Let's Encrypt ``` -$root@server:~/laravel/laradock/caddy# docker-compose up caddy +$root@server:~/laravel/laradock# docker-compose up caddy ``` You'll be prompt here to enter your email... you may enter it or not @@ -218,8 +218,8 @@ After it finishes, press `Ctrl` + `C` to exit. ## Stop All Containers and ReRun Caddy and Other Containers on Background ``` -$root@server:~/laravel/laradock/caddy# docker-compose down -$root@server:~/laravel/laradock/caddy# docker-compose up -d mysql caddy +$root@server:~/laravel/laradock# docker-compose down +$root@server:~/laravel/laradock# docker-compose up -d mysql caddy ``` View your Site in the Browser Securely Using HTTPS (https://yourdomain.com) diff --git a/caddy/Dockerfile b/caddy/Dockerfile index 5603e3a1..06dc4901 100644 --- a/caddy/Dockerfile +++ b/caddy/Dockerfile @@ -6,12 +6,14 @@ ARG plugins="cors" ## ARG plugins="cors cgi cloudflare azure linode" - RUN caddyplug install ${plugins} - + +RUN apk add --no-cache inotify-tools \ + && echo -e "#!/bin/sh\nwhile inotifywait -e modify /etc/caddy; do\n\tpkill caddy\ndone " >> /start.sh \ + && chmod +x /start.sh EXPOSE 80 443 2015 WORKDIR /var/www/public -CMD ["/usr/bin/caddy", "-conf", "/etc/Caddyfile","-agree"] +CMD ["sh","-c","/start.sh & /usr/bin/caddy -conf /etc/caddy/Caddyfile -agree"] diff --git a/caddy/Caddyfile b/caddy/caddy/Caddyfile similarity index 93% rename from caddy/Caddyfile rename to caddy/caddy/Caddyfile index b563fb15..1848d346 100644 --- a/caddy/Caddyfile +++ b/caddy/caddy/Caddyfile @@ -44,3 +44,8 @@ laradock2.demo:80 { #proxy domain.com #cors } + +laradock3.demo:80 { + import authlist.conf + root /var/www/public +} \ No newline at end of file diff --git a/caddy/caddy/authlist.conf b/caddy/caddy/authlist.conf new file mode 100644 index 00000000..651bf55e --- /dev/null +++ b/caddy/caddy/authlist.conf @@ -0,0 +1 @@ +basicauth / laradock laradock diff --git a/docker-compose.yml b/docker-compose.yml index 8b2cbd13..154824a8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -47,11 +47,13 @@ services: build: context: ./workspace args: - - PHP_VERSION=${PHP_VERSION} + - LARADOCK_PHP_VERSION=${PHP_VERSION} - INSTALL_SUBVERSION=${WORKSPACE_INSTALL_SUBVERSION} - INSTALL_XDEBUG=${WORKSPACE_INSTALL_XDEBUG} - INSTALL_PHPDBG=${WORKSPACE_INSTALL_PHPDBG} - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE} + - INSTALL_SSH2=${WORKSPACE_INSTALL_SSH2} + - INSTALL_GMP=${WORKSPACE_INSTALL_GMP} - INSTALL_SOAP=${WORKSPACE_INSTALL_SOAP} - INSTALL_LDAP=${WORKSPACE_INSTALL_LDAP} - INSTALL_IMAP=${WORKSPACE_INSTALL_IMAP} @@ -89,6 +91,7 @@ services: - INSTALL_SWOOLE=${WORKSPACE_INSTALL_SWOOLE} - INSTALL_LIBPNG=${WORKSPACE_INSTALL_LIBPNG} - INSTALL_GRAPHVIZ=${WORKSPACE_INSTALL_GRAPHVIZ} + - INSTALL_IONCUBE=${WORKSPACE_INSTALL_IONCUBE} - PUID=${WORKSPACE_PUID} - PGID=${WORKSPACE_PGID} - CHROME_DRIVER_VERSION=${WORKSPACE_CHROME_DRIVER_VERSION} @@ -116,10 +119,11 @@ services: build: context: ./php-fpm args: - - PHP_VERSION=${PHP_VERSION} + - LARADOCK_PHP_VERSION=${PHP_VERSION} - INSTALL_XDEBUG=${PHP_FPM_INSTALL_XDEBUG} - INSTALL_PHPDBG=${PHP_FPM_INSTALL_PHPDBG} - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE} + - INSTALL_SSH2=${PHP_FPM_INSTALL_SSH2} - INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP} - INSTALL_IMAP=${PHP_FPM_INSTALL_IMAP} - INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO} @@ -145,6 +149,8 @@ services: - INSTALL_IMAGE_OPTIMIZERS=${PHP_FPM_INSTALL_IMAGE_OPTIMIZERS} - INSTALL_IMAGEMAGICK=${PHP_FPM_INSTALL_IMAGEMAGICK} - INSTALL_CALENDAR=${PHP_FPM_INSTALL_CALENDAR} + - INSTALL_FAKETIME=${PHP_FPM_INSTALL_FAKETIME} + - INSTALL_IONCUBE=${PHP_FPM_INSTALL_IONCUBE} volumes: - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} @@ -155,6 +161,7 @@ services: environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG} - DOCKER_HOST=tcp://docker-in-docker:2375 + - FAKETIME=${PHP_FPM_FAKETIME} depends_on: - workspace networks: @@ -169,6 +176,7 @@ services: args: - PHP_VERSION=${PHP_VERSION} - INSTALL_PGSQL=${PHP_WORKER_INSTALL_PGSQL} + - INSTALL_BCMATH=${PHP_WORKER_INSTALL_BCMATH} volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} - ./php-worker/supervisord.d:/etc/supervisord.d @@ -468,7 +476,7 @@ services: build: ./caddy volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} - - ${CADDY_CUSTOM_CADDYFILE}:/etc/Caddyfile + - ${CADDY_CONFIG_PATH}:/etc/caddy - ${CADDY_HOST_LOG_PATH}:/var/log/caddy - ${DATA_PATH_HOST}:/root/.caddy ports: @@ -876,3 +884,72 @@ services: - backend depends_on: - mongo + +### Metabase ################################################# + metabase: + image: metabase/metabase:latest + environment: + - MB_DB_FILE=/metabase-data/${METABASE_DB_FILE} + ports: + - ${METABASE_PORT}:3000 + volumes: + - ${DATA_PATH_HOST}/metabase-data:/metabase-data + networks: + - backend + +### IDE-THEIA ################################################ + ide-theia: + build: + context: ./ide-theia + volumes: + - ${APP_CODE_PATH_HOST}:/home/project + ports: + - "${IDE_THEIA_PORT}:3000" + networks: + - backend + +### IDE-WEBIDE ################################################ + ide-webide: + build: + context: ./ide-webide + volumes: + - ${DATA_PATH_HOST}/ide/webide/ide.db:/root/.coding-ide/ide.db + ports: + - "${IDE_WEBIDE_PORT}:8080" + networks: + - backend + +### IDE-CODIAD ################################################ + ide-codiad: + build: + context: ./ide-codiad + environment: + - APP_CODE_PATH_CONTAINER=${APP_CODE_PATH_CONTAINER} + - TZ=${WORKSPACE_TIMEZONE} + - PGID=1000 + - PUID=1000 + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} + - ${DATA_PATH_HOST}/ide/codiad:/config + ports: + - "${IDE_CODIAD_PORT}:80" + networks: + - backend + +### IDE-ICECODER ################################################ + ide-icecoder: + build: + context: ./ide-icecoder + environment: + - DOCUMENT_ROOT=${APP_CODE_PATH_CONTAINER} + - TZ=${WORKSPACE_TIMEZONE} + - PGID=1000 + - PUID=1000 + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_CODE_PATH_HOST}:/home/laradock/ICEcoder/dev + ports: + - "${IDE_ICECODER_PORT}:8080" + networks: + - backend diff --git a/env-example b/env-example index 5832e9b0..fdc06749 100644 --- a/env-example +++ b/env-example @@ -88,7 +88,9 @@ WORKSPACE_INSTALL_WORKSPACE_SSH=false WORKSPACE_INSTALL_SUBVERSION=false WORKSPACE_INSTALL_XDEBUG=false WORKSPACE_INSTALL_PHPDBG=false +WORKSPACE_INSTALL_SSH2=false WORKSPACE_INSTALL_LDAP=false +WORKSPACE_INSTALL_GMP=false WORKSPACE_INSTALL_SOAP=false WORKSPACE_INSTALL_IMAP=false WORKSPACE_INSTALL_MONGO=false @@ -115,6 +117,7 @@ WORKSPACE_INSTALL_PG_CLIENT=false WORKSPACE_INSTALL_SWOOLE=false WORKSPACE_INSTALL_LIBPNG=false WORKSPACE_INSTALL_GRAPHVIZ=false +WORKSPACE_INSTALL_IONCUBE=false WORKSPACE_PUID=1000 WORKSPACE_PGID=1000 WORKSPACE_CHROME_DRIVER_VERSION=2.32 @@ -139,6 +142,7 @@ PHP_FPM_INSTALL_IMAP=false PHP_FPM_INSTALL_MONGO=false PHP_FPM_INSTALL_AMQP=false PHP_FPM_INSTALL_MSSQL=false +PHP_FPM_INSTALL_SSH2=false PHP_FPM_INSTALL_SOAP=false PHP_FPM_INSTALL_GMP=false PHP_FPM_INSTALL_EXIF=false @@ -150,10 +154,14 @@ PHP_FPM_INSTALL_SWOOLE=false PHP_FPM_INSTALL_PG_CLIENT=false PHP_FPM_INSTALL_PCNTL=false PHP_FPM_INSTALL_CALENDAR=false +PHP_FPM_INSTALL_FAKETIME=false +PHP_FPM_INSTALL_IONCUBE=false +PHP_FPM_FAKETIME=-0 ### PHP_WORKER ############################################ PHP_WORKER_INSTALL_PGSQL=false +PHP_WORKER_INSTALL_BCMATH=false ### NGINX ################################################# @@ -336,6 +344,8 @@ AEROSPIKE_INFO_PORT=3003 # for all versions "https://github.com/aerospike/aerospike-client-php/archive/master.tar.gz" # for php 7.2 (using this branch until the support for 7.2 on master) "https://github.com/aerospike/aerospike-client-php/archive/7.2.0-release-candidate.tar.gz" AEROSPIKE_PHP_REPOSITORY=https://github.com/aerospike/aerospike-client-php/archive/7.2.0-release-candidate.tar.gz +# for php 5.6 +# AEROSPIKE_PHP_REPOSITORY=https://github.com/aerospike/aerospike-client-php5/archive/3.4.15.tar.gz ### RETHINKDB ############################################# @@ -350,7 +360,7 @@ MONGODB_PORT=27017 CADDY_HOST_HTTP_PORT=80 CADDY_HOST_HTTPS_PORT=443 CADDY_HOST_LOG_PATH=./logs/caddy -CADDY_CUSTOM_CADDYFILE=./caddy/Caddyfile +CADDY_CONFIG_PATH=./caddy/caddy ### LARAVEL ECHO SERVER ################################### @@ -402,3 +412,14 @@ MONGO_WEBUI_PORT=3000 MONGO_WEBUI_ROOT_URL=http://localhost MONGO_WEBUI_MONGO_URL=mongodb://mongo:27017/ MONGO_WEBUI_INSTALL_MONGO=false + +### METABASE ############################################### +METABASE_PORT=3030 +METABASE_DB_FILE=metabase.db +METABASE_JAVA_TIMEZONE=US/Pacific + +### IDE ############################################### +IDE_THEIA_PORT=987 +IDE_WEBIDE_PORT=984 +IDE_CODIAD_PORT=985 +IDE_ICECODER_PORT=986 diff --git a/ide-codiad/Dockerfile b/ide-codiad/Dockerfile new file mode 100644 index 00000000..583e75dc --- /dev/null +++ b/ide-codiad/Dockerfile @@ -0,0 +1,5 @@ +FROM linuxserver/codiad + +LABEL maintainer="ahkui " + +COPY config.php /defaults/config.php diff --git a/ide-codiad/config.php b/ide-codiad/config.php new file mode 100644 index 00000000..acd43941 --- /dev/null +++ b/ide-codiad/config.php @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/ide-icecoder/Dockerfile b/ide-icecoder/Dockerfile new file mode 100644 index 00000000..a58ec677 --- /dev/null +++ b/ide-icecoder/Dockerfile @@ -0,0 +1,21 @@ +FROM php:alpine + +LABEL maintainer="ahkui " + +ARG PUID=1000 +ENV PUID ${PUID} +ARG PGID=1000 +ENV PGID ${PGID} + +RUN apk add --no-cache git + +RUN addgroup -g $PGID -S laradock && \ + adduser -u $PUID -S laradock -G laradock + +USER laradock + +RUN cd /home/laradock && git clone https://github.com/mattpass/ICEcoder.git + +WORKDIR /home/laradock/ICEcoder + +CMD ["php","-S","0.0.0.0:8080"] diff --git a/ide-theia/Dockerfile b/ide-theia/Dockerfile new file mode 100644 index 00000000..39f2c1b6 --- /dev/null +++ b/ide-theia/Dockerfile @@ -0,0 +1,5 @@ +FROM theiaide/theia + +LABEL maintainer="ahkui " + +RUN echo 'fs.inotify.max_user_watches=524288' >> /etc/sysctl.conf \ No newline at end of file diff --git a/ide-webide/Dockerfile b/ide-webide/Dockerfile new file mode 100644 index 00000000..257b50a7 --- /dev/null +++ b/ide-webide/Dockerfile @@ -0,0 +1,3 @@ +FROM webide/webide + +LABEL maintainer="ahkui " diff --git a/php-fpm/Dockerfile b/php-fpm/Dockerfile index 8a76ab75..dd7f0d15 100644 --- a/php-fpm/Dockerfile +++ b/php-fpm/Dockerfile @@ -12,12 +12,14 @@ # Note: Base Image name format {image-tag}-{php-version} # -ARG PHP_VERSION=${PHP_VERSION} +ARG LARADOCK_PHP_VERSION -FROM laradock/php-fpm:2.2-${PHP_VERSION} +FROM laradock/php-fpm:2.2-${LARADOCK_PHP_VERSION} LABEL maintainer="Mahmoud Zalt " +ARG LARADOCK_PHP_VERSION + # Set Environment Variables ENV DEBIAN_FRONTEND noninteractive @@ -48,6 +50,23 @@ RUN apt-get update -yqq && \ # - INSTALL_ZIP_ARCHIVE=true # +########################################################################### +# SSH2: +########################################################################### + +ARG INSTALL_SSH2=false + +RUN if [ ${INSTALL_SSH2} = true ]; then \ + # Install the ssh2 extension + apt-get -y install libssh2-1-dev && \ + if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ + pecl install -a ssh2-0.13; \ + else \ + pecl install -a ssh2-1.1.2; \ + fi && \ + docker-php-ext-enable ssh2 \ +;fi + ########################################################################### # SOAP: ########################################################################### @@ -114,11 +133,10 @@ RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /usr/local/e ########################################################################### ARG INSTALL_PHPDBG=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_PHPDBG} = true ]; then \ # Load the xdebug extension only with phpunit commands - apt-get install -y --force-yes php${PHP_VERSION}-phpdbg \ + apt-get install -y --force-yes php${LARADOCK_PHP_VERSION}-phpdbg \ ;fi ########################################################################### @@ -324,6 +342,21 @@ RUN if [ ${INSTALL_AEROSPIKE} = true ]; then \ && docker-php-ext-enable aerospike \ ;fi +########################################################################### +# IonCube Loader: +########################################################################### + +ARG INSTALL_IONCUBE=false + +RUN if [ ${INSTALL_IONCUBE} = true ]; then \ + # Install the php ioncube loader + curl -L -o /tmp/ioncube_loaders_lin_x86-64.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \ + && tar zxpf /tmp/ioncube_loaders_lin_x86-64.tar.gz -C /tmp \ + && mv /tmp/ioncube/ioncube_loader_lin_${LARADOCK_PHP_VERSION}.so $(php -r "echo ini_get('extension_dir');")/ioncube_loader.so \ + && printf "zend_extension=ioncube_loader.so\n" > $PHP_INI_DIR/conf.d/0ioncube.ini \ + && rm -rf /tmp/ioncube* \ +;fi + ########################################################################### # Opcache: ########################################################################### @@ -416,14 +449,16 @@ RUN set -eux; if [ ${INSTALL_MSSQL} = true ]; then \ # Add Microsoft repo for Microsoft ODBC Driver 13 for Linux apt-get install -y apt-transport-https gnupg \ && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ - && curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list \ + && curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update -yqq \ # Install Dependencies - && ACCEPT_EULA=Y apt-get install -y unixodbc unixodbc-dev libgss3 odbcinst msodbcsql locales \ + && ACCEPT_EULA=Y apt-get install -y unixodbc unixodbc-dev libgss3 odbcinst msodbcsql17 locales \ && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ + # link local aliases + && ln -sfn /etc/locale.alias /usr/share/locale/locale.alias \ && locale-gen \ # Install pdo_sqlsrv and sqlsrv from PECL. Replace pdo_sqlsrv-4.1.8preview with preferred version. - && pecl install pdo_sqlsrv-4.1.8preview sqlsrv-4.1.8preview \ + && pecl install pdo_sqlsrv sqlsrv \ && docker-php-ext-enable pdo_sqlsrv sqlsrv \ && php -m | grep -q 'pdo_sqlsrv' \ && php -m | grep -q 'sqlsrv' \ @@ -482,13 +517,23 @@ RUN if [ ${INSTALL_CALENDAR} = true ]; then \ docker-php-ext-install calendar \ ;fi +########################################################################### +# libfaketime: +########################################################################### + +USER root + +ARG INSTALL_FAKETIME=false + +RUN if [ ${INSTALL_FAKETIME} = true ]; then \ + apt-get install -y libfaketime \ +;fi + ########################################################################### # Check PHP version: ########################################################################### -ARG PHP_VERSION=${PHP_VERSION} - -RUN php -v | head -n 1 | grep -q "PHP ${PHP_VERSION}." +RUN php -v | head -n 1 | grep -q "PHP ${LARADOCK_PHP_VERSION}." # #-------------------------------------------------------------------------- @@ -508,6 +553,12 @@ RUN apt-get clean && \ RUN usermod -u 1000 www-data +# Adding the faketime library to the preload file needs to be done last +# otherwise it will preload it for all commands that follow in this file +RUN if [ ${INSTALL_FAKETIME} = true ]; then \ + echo "/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1" > /etc/ld.so.preload \ +;fi + WORKDIR /var/www CMD ["php-fpm"] diff --git a/php-worker/Dockerfile b/php-worker/Dockerfile index 158a1664..d7c677d3 100644 --- a/php-worker/Dockerfile +++ b/php-worker/Dockerfile @@ -25,6 +25,12 @@ RUN apk --update add wget \ 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 \ diff --git a/php-worker/supervisord.d/.gitignore b/php-worker/supervisord.d/.gitignore new file mode 100644 index 00000000..fee92170 --- /dev/null +++ b/php-worker/supervisord.d/.gitignore @@ -0,0 +1 @@ +*.conf diff --git a/php-worker/supervisord.d/laravel-worker.conf b/php-worker/supervisord.d/laravel-worker.conf.example similarity index 89% rename from php-worker/supervisord.d/laravel-worker.conf rename to php-worker/supervisord.d/laravel-worker.conf.example index cce9e923..06156bc5 100644 --- a/php-worker/supervisord.d/laravel-worker.conf +++ b/php-worker/supervisord.d/laravel-worker.conf.example @@ -4,4 +4,4 @@ command=php /var/www/artisan queue:work --sleep=3 --tries=3 --daemon autostart=true autorestart=true numprocs=8 -redirect_stderr=true \ No newline at end of file +redirect_stderr=true diff --git a/travis-build.sh b/travis-build.sh index c72f51df..eeee67ba 100755 --- a/travis-build.sh +++ b/travis-build.sh @@ -14,6 +14,11 @@ if [ -n "${PHP_VERSION}" ]; then cp env-example .env sed -i -- "s/PHP_VERSION=.*/PHP_VERSION=${PHP_VERSION}/g" .env sed -i -- 's/=false/=true/g' .env + sed -i -- 's/PHPDBG=true/PHPDBG=false/g' .env + if [ "${PHP_VERSION}" == "5.6" ]; then + sed -i -- 's/^AEROSPIKE_PHP_REPOSITORY=/##AEROSPIKE_PHP_REPOSITORY=/g' .env + sed -i -- 's/^# AEROSPIKE_PHP_REPOSITORY=/AEROSPIKE_PHP_REPOSITORY=/g' .env + fi cat .env docker-compose build ${BUILD_SERVICE} docker images diff --git a/varnish/default.vcl b/varnish/default.vcl index 155a863a..73099c39 100644 --- a/varnish/default.vcl +++ b/varnish/default.vcl @@ -266,7 +266,7 @@ sub vcl_hit { return (deliver); } else { # No candidate for grace. Fetch a fresh object. - return(fetch); + return(miss); } } else { # backend is sick - use full grace @@ -275,12 +275,12 @@ sub vcl_hit { return (deliver); } else { # no graced object. - return (fetch); + return (miss); } } # fetch & deliver once we get the result - return (fetch); # Dead code, keep as a safeguard + return (miss); # Dead code, keep as a safeguard } sub vcl_miss { diff --git a/varnish/start.sh b/varnish/start.sh index e14511a9..7e7c28a5 100644 --- a/varnish/start.sh +++ b/varnish/start.sh @@ -11,7 +11,7 @@ exec bash -c \ "exec varnishd \ -a :$VARNISH_PORT \ -T localhost:6082 \ - -F -u varnish \ + -F \ -f $VARNISH_CONFIG \ -s malloc,$CACHE_SIZE \ - $VARNISHD_PARAMS" \ No newline at end of file + $VARNISHD_PARAMS" diff --git a/workspace/Dockerfile b/workspace/Dockerfile index 36e44375..0aa8f671 100644 --- a/workspace/Dockerfile +++ b/workspace/Dockerfile @@ -12,12 +12,14 @@ # Note: Base Image name format {image-tag}-{php-version} # -ARG PHP_VERSION=${PHP_VERSION} +ARG LARADOCK_PHP_VERSION -FROM laradock/workspace:2.2-${PHP_VERSION} +FROM laradock/workspace:2.2-${LARADOCK_PHP_VERSION} LABEL maintainer="Mahmoud Zalt " +ARG LARADOCK_PHP_VERSION + # Set Environment Variables ENV DEBIAN_FRONTEND noninteractive @@ -172,6 +174,33 @@ RUN if [ ${INSTALL_DRUSH} = true ]; then \ drush core-status \ ;fi +########################################################################### +# SSH2: +########################################################################### + +USER root + +ARG INSTALL_SSH2=false + +RUN if [ ${INSTALL_SSH2} = true ]; then \ + # Install the PHP SSH2 extension + apt-get -y install libssh2-1-dev php${LARADOCK_PHP_VERSION}-ssh2 \ +;fi + +########################################################################### +# SOAP: +########################################################################### + +USER root + +ARG INSTALL_GMP=false +ARG PHP_VERSION=${PHP_VERSION} + +RUN if [ ${INSTALL_GMP} = true ]; then \ + # Install the PHP SOAP extension + apt-get -y install php${PHP_VERSION}-gmp \ +;fi + ########################################################################### # SOAP: ########################################################################### @@ -179,11 +208,10 @@ RUN if [ ${INSTALL_DRUSH} = true ]; then \ USER root ARG INSTALL_SOAP=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_SOAP} = true ]; then \ # Install the PHP SOAP extension - apt-get -y install libxml2-dev php${PHP_VERSION}-soap \ + apt-get -y install libxml2-dev php${LARADOCK_PHP_VERSION}-soap \ ;fi ########################################################################### @@ -191,11 +219,10 @@ RUN if [ ${INSTALL_SOAP} = true ]; then \ ########################################################################### ARG INSTALL_LDAP=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_LDAP} = true ]; then \ apt-get install -y libldap2-dev && \ - apt-get install -y php${PHP_VERSION}-ldap \ + apt-get install -y php${LARADOCK_PHP_VERSION}-ldap \ ;fi ########################################################################### @@ -203,10 +230,9 @@ RUN if [ ${INSTALL_LDAP} = true ]; then \ ########################################################################### ARG INSTALL_IMAP=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_IMAP} = true ]; then \ - apt-get install -y php${PHP_VERSION}-imap \ + apt-get install -y php${LARADOCK_PHP_VERSION}-imap \ ;fi ########################################################################### @@ -229,21 +255,20 @@ RUN if [ ${INSTALL_SUBVERSION} = true ]; then \ USER root ARG INSTALL_XDEBUG=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_XDEBUG} = true ]; then \ # Load the xdebug extension only with phpunit commands - apt-get install -y php${PHP_VERSION}-xdebug && \ - sed -i 's/^;//g' /etc/php/${PHP_VERSION}/cli/conf.d/20-xdebug.ini && \ + apt-get install -y php${LARADOCK_PHP_VERSION}-xdebug && \ + sed -i 's/^;//g' /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-xdebug.ini && \ echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/vendor/bin/phpunit'" >> ~/.bashrc \ ;fi # ADD for REMOTE debugging -COPY ./xdebug.ini /etc/php/${PHP_VERSION}/cli/conf.d/xdebug.ini +COPY ./xdebug.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini -RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /etc/php/${PHP_VERSION}/cli/conf.d/xdebug.ini && \ - sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /etc/php/${PHP_VERSION}/cli/conf.d/xdebug.ini && \ - sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /etc/php/${PHP_VERSION}/cli/conf.d/xdebug.ini +RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini && \ + sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini && \ + sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini ########################################################################### # Phpdbg: @@ -252,11 +277,10 @@ RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /etc/php/${P USER root ARG INSTALL_PHPDBG=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_PHPDBG} = true ]; then \ # Load the xdebug extension only with phpunit commands - apt-get install -y --force-yes php${PHP_VERSION}-phpdbg \ + apt-get install -y --force-yes php${LARADOCK_PHP_VERSION}-phpdbg \ ;fi ########################################################################### @@ -302,18 +326,17 @@ RUN if [ ${INSTALL_WORKSPACE_SSH} = true ]; then \ ########################################################################### ARG INSTALL_MONGO=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_MONGO} = true ]; then \ # Install the mongodb extension if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ pecl install mongo && \ - echo "extension=mongo.so" >> /etc/php/${PHP_VERSION}/mods-available/mongo.ini && \ - ln -s /etc/php/${PHP_VERSION}/mods-available/mongo.ini /etc/php/${PHP_VERSION}/cli/conf.d/30-mongo.ini \ + echo "extension=mongo.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongo.ini && \ + ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongo.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-mongo.ini \ ;fi && \ pecl install mongodb && \ - echo "extension=mongodb.so" >> /etc/php/${PHP_VERSION}/mods-available/mongodb.ini && \ - ln -s /etc/php/${PHP_VERSION}/mods-available/mongodb.ini /etc/php/${PHP_VERSION}/cli/conf.d/30-mongodb.ini \ + echo "extension=mongodb.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongodb.ini && \ + ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongodb.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-mongodb.ini \ ;fi ########################################################################### @@ -321,13 +344,12 @@ RUN if [ ${INSTALL_MONGO} = true ]; then \ ########################################################################### ARG INSTALL_AMQP=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_AMQP} = true ]; then \ apt-get install librabbitmq-dev -y && \ pecl -q install amqp && \ - echo "extension=amqp.so" >> /etc/php/${PHP_VERSION}/mods-available/amqp.ini && \ - ln -s /etc/php/${PHP_VERSION}/mods-available/amqp.ini /etc/php/${PHP_VERSION}/cli/conf.d/30-amqp.ini \ + echo "extension=amqp.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/amqp.ini && \ + ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/amqp.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-amqp.ini \ ;fi ########################################################################### @@ -335,12 +357,11 @@ RUN if [ ${INSTALL_AMQP} = true ]; then \ ########################################################################### ARG INSTALL_PHPREDIS=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_PHPREDIS} = true ]; then \ # Install Php Redis extension printf "\n" | pecl -q install -o -f redis && \ - echo "extension=redis.so" >> /etc/php/${PHP_VERSION}/mods-available/redis.ini && \ + echo "extension=redis.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/redis.ini && \ phpenmod redis \ ;fi @@ -349,7 +370,6 @@ RUN if [ ${INSTALL_PHPREDIS} = true ]; then \ ########################################################################### ARG INSTALL_SWOOLE=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_SWOOLE} = true ]; then \ # Install Php Swoole Extension @@ -362,8 +382,8 @@ RUN if [ ${INSTALL_SWOOLE} = true ]; then \ pecl install swoole; \ fi \ fi && \ - echo "extension=swoole.so" >> /etc/php/${PHP_VERSION}/mods-available/swoole.ini && \ - ln -s /etc/php/${PHP_VERSION}/mods-available/swoole.ini /etc/php/${PHP_VERSION}/cli/conf.d/20-swoole.ini \ + echo "extension=swoole.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/swoole.ini && \ + ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/swoole.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-swoole.ini \ ;fi ########################################################################### @@ -378,6 +398,7 @@ RUN if [ ${INSTALL_LIBPNG} = true ]; then \ ;fi ########################################################################### + # GraphViz extension ########################################################################### @@ -388,6 +409,20 @@ RUN if [ ${INSTALL_GRAPHVIZ} = true ]; then \ apt-get install -y graphviz \ ;fi +# IonCube Loader +########################################################################### + +ARG INSTALL_IONCUBE=false + +RUN if [ ${INSTALL_IONCUBE} = true ]; then \ + # Install the php ioncube loader + curl -L -o /tmp/ioncube_loaders_lin_x86-64.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \ + && tar zxpf /tmp/ioncube_loaders_lin_x86-64.tar.gz -C /tmp \ + && mv /tmp/ioncube/ioncube_loader_lin_${LARADOCK_PHP_VERSION}.so $(php -r "echo ini_get('extension_dir');")/ioncube_loader.so \ + && echo "zend_extension=ioncube_loader.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/0ioncube.ini \ + && rm -rf /tmp/ioncube* \ +;fi + ########################################################################### # Drupal Console: ########################################################################### @@ -439,6 +474,7 @@ RUN if [ ${INSTALL_NODE} = true ]; then \ && if [ ${INSTALL_NPM_VUE_CLI} = true ]; then \ npm install -g @vue/cli \ ;fi \ + && ln -s `npm bin --global` /home/laradock/.node-bin \ ;fi # Wouldn't execute when added to the RUN statement in the above block @@ -459,7 +495,7 @@ RUN if [ ${INSTALL_NODE} = true ]; then \ ;fi # Add PATH for node -ENV PATH $PATH:$NVM_DIR/versions/node/v${NODE_VERSION}/bin +ENV PATH $PATH:/home/laradock/.node-bin RUN if [ ${NPM_REGISTRY} ]; then \ . ~/.bashrc && npm config set registry ${NPM_REGISTRY} \ @@ -495,6 +531,9 @@ RUN if [ ${INSTALL_YARN} = true ]; then \ echo 'export PATH="$YARN_DIR/bin:$PATH"' >> ~/.bashrc \ ;fi +# Add PATH for YARN +ENV PATH $PATH:/home/laradock/.yarn/bin + ########################################################################### # PHP Aerospike: ########################################################################### @@ -502,7 +541,6 @@ RUN if [ ${INSTALL_YARN} = true ]; then \ USER root ARG INSTALL_AEROSPIKE=false -ARG PHP_VERSION=${PHP_VERSION} ARG AEROSPIKE_PHP_REPOSITORY RUN if [ ${INSTALL_AEROSPIKE} = true ]; then \ @@ -512,16 +550,26 @@ RUN if [ ${INSTALL_AEROSPIKE} = true ]; then \ curl -L -o /tmp/aerospike-client-php.tar.gz ${AEROSPIKE_PHP_REPOSITORY} \ && mkdir -p aerospike-client-php \ && tar -C aerospike-client-php -zxvf /tmp/aerospike-client-php.tar.gz --strip 1 \ - && ( \ - cd aerospike-client-php/src \ - && phpize \ - && ./build.sh \ - && make install \ - ) \ + && \ + if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ + ( \ + cd aerospike-client-php/src/aerospike \ + && phpize \ + && ./build.sh \ + && make install \ + ) \ + else \ + ( \ + cd aerospike-client-php/src \ + && phpize \ + && ./build.sh \ + && make install \ + ) \ + fi \ && rm /tmp/aerospike-client-php.tar.gz \ - && echo 'extension=aerospike.so' >> /etc/php/${PHP_VERSION}/cli/conf.d/aerospike.ini \ - && echo 'aerospike.udf.lua_system_path=/usr/local/aerospike/lua' >> /etc/php/${PHP_VERSION}/cli/conf.d/aerospike.ini \ - && echo 'aerospike.udf.lua_user_path=/usr/local/aerospike/usr-lua' >> /etc/php/${PHP_VERSION}/cli/conf.d/aerospike.ini \ + && echo 'extension=aerospike.so' >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/aerospike.ini \ + && echo 'aerospike.udf.lua_system_path=/usr/local/aerospike/lua' >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/aerospike.ini \ + && echo 'aerospike.udf.lua_user_path=/usr/local/aerospike/usr-lua' >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/aerospike.ini \ ;fi ########################################################################### @@ -531,15 +579,14 @@ RUN if [ ${INSTALL_AEROSPIKE} = true ]; then \ USER root ARG INSTALL_V8JS=false -ARG PHP_VERSION=${PHP_VERSION} RUN if [ ${INSTALL_V8JS} = true ]; then \ # Install the php V8JS extension add-apt-repository -y ppa:pinepain/libv8-archived \ && apt-get update -yqq \ - && apt-get install -y php${PHP_VERSION}-xml php${PHP_VERSION}-dev php-pear libv8-5.4 \ + && apt-get install -y php${LARADOCK_PHP_VERSION}-xml php${LARADOCK_PHP_VERSION}-dev php-pear libv8-5.4 \ && pecl install v8js \ - && echo "extension=v8js.so" >> /etc/php/${PHP_VERSION}/cli/php.ini \ + && echo "extension=v8js.so" >> /etc/php/${LARADOCK_PHP_VERSION}/cli/php.ini \ ;fi ########################################################################### @@ -637,7 +684,6 @@ RUN if [ ${INSTALL_LINUXBREW} = true ]; then \ ########################################################################### ARG INSTALL_MSSQL=false -ARG PHP_VERSION=${PHP_VERSION} RUN set -eux; if [ ${INSTALL_MSSQL} = true ]; then \ if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ @@ -652,25 +698,14 @@ RUN set -eux; if [ ${INSTALL_MSSQL} = true ]; then \ curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list && \ apt-get update -yqq && \ - ACCEPT_EULA=Y apt-get install -yqq msodbcsql=13.0.1.0-1 mssql-tools=14.0.2.0-1 && \ - apt-get install -yqq unixodbc-dev-utf16 && \ - ln -sfn /opt/mssql-tools/bin/sqlcmd-13.0.1.0 /usr/bin/sqlcmd && \ - ln -sfn /opt/mssql-tools/bin/bcp-13.0.1.0 /usr/bin/bcp && \ - ACCEPT_EULA=Y apt-get install -yqq \ - unixodbc \ - unixodbc-dev \ - libgss3 \ - odbcinst \ - msodbcsql \ - locales && \ + ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools unixodbc unixodbc-dev libgss3 odbcinst locales && \ + ln -sfn /opt/mssql-tools/bin/sqlcmd /usr/bin/sqlcmd && \ + ln -sfn /opt/mssql-tools/bin/bcp /usr/bin/bcp && \ echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ locale-gen && \ - pecl install sqlsrv-4.3.0 pdo_sqlsrv-4.3.0 && \ - apt-get install -y locales && \ - echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ - locale-gen && \ - echo "extension=sqlsrv.so" > /etc/php/${PHP_VERSION}/cli/conf.d/20-sqlsrv.ini && \ - echo "extension=pdo_sqlsrv.so" > /etc/php/${PHP_VERSION}/cli/conf.d/20-pdo_sqlsrv.ini \ + pecl install sqlsrv pdo_sqlsrv && \ + echo "extension=sqlsrv.so" > /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-sqlsrv.ini && \ + echo "extension=pdo_sqlsrv.so" > /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-pdo_sqlsrv.ini \ && php -m | grep -q 'sqlsrv' \ && php -m | grep -q 'pdo_sqlsrv' \ ;fi \ @@ -777,7 +812,11 @@ ARG INSTALL_PG_CLIENT=false RUN if [ ${INSTALL_PG_CLIENT} = true ]; then \ # Install the pgsql client - apt-get -y install postgresql-client \ + apt-get install wget \ + && add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" \ + && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \ + && apt-get update \ + && apt-get -y install postgresql-client-10 \ ;fi ########################################################################### @@ -819,9 +858,7 @@ RUN if [ ${INSTALL_DUSK_DEPS} = true ]; then \ # Check PHP version: ########################################################################### -ARG PHP_VERSION=${PHP_VERSION} - -RUN php -v | head -n 1 | grep -q "PHP ${PHP_VERSION}." +RUN php -v | head -n 1 | grep -q "PHP ${LARADOCK_PHP_VERSION}." # #--------------------------------------------------------------------------