From 17163c9b3d4f2b2a7384521355fc2f4506294361 Mon Sep 17 00:00:00 2001 From: a-sansara Date: Thu, 16 Feb 2017 14:30:26 +0100 Subject: [PATCH] add fpm-php7 --- .../install.d/50-fix-apache.sh | 2 +- .../alpine-apache-php7/install.d/10-apache.sh | 2 +- pluie/alpine-fpm-php7/Dockerfile | 20 ++++ pluie/alpine-fpm-php7/README.md | 96 ++++++++++++++++++ pluie/alpine-fpm-php7/build | 22 ++++ pluie/alpine-fpm-php7/files.tar | Bin 0 -> 10240 bytes pluie/alpine-fpm-php7/install.d/00-repo.sh | 8 ++ pluie/alpine-fpm-php7/install.d/10-apache.sh | 9 ++ .../install.d/50-fix-apache.sh | 60 +++++++++++ pluie/alpine-fpm-php7/main.sh | 8 ++ pluie/alpine-fpm-php7/pre-init.d/10-apache.sh | 11 ++ pluie/alpine-fpm-php7/pre-init.d/10-vhost.sh | 27 +++++ 12 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 pluie/alpine-fpm-php7/Dockerfile create mode 100644 pluie/alpine-fpm-php7/README.md create mode 100755 pluie/alpine-fpm-php7/build create mode 100644 pluie/alpine-fpm-php7/files.tar create mode 100644 pluie/alpine-fpm-php7/install.d/00-repo.sh create mode 100755 pluie/alpine-fpm-php7/install.d/10-apache.sh create mode 100755 pluie/alpine-fpm-php7/install.d/50-fix-apache.sh create mode 100755 pluie/alpine-fpm-php7/main.sh create mode 100755 pluie/alpine-fpm-php7/pre-init.d/10-apache.sh create mode 100755 pluie/alpine-fpm-php7/pre-init.d/10-vhost.sh diff --git a/pluie/alpine-apache-fpm/install.d/50-fix-apache.sh b/pluie/alpine-apache-fpm/install.d/50-fix-apache.sh index 3c7b970..97194bc 100755 --- a/pluie/alpine-apache-fpm/install.d/50-fix-apache.sh +++ b/pluie/alpine-apache-fpm/install.d/50-fix-apache.sh @@ -46,7 +46,7 @@ echo tmpsed="/etc/php5/php.ini" sed -ir 's/expose_php = On/expose_php = Off/' $tmpsed sed -i "s|;*date.timezone =.*|date.timezone = ${TZ}|i" $tmpsed -sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= 0|i" /etc/php5/php.ini +sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= 0|i" $tmpsed tmpsed="/etc/php5/php-fpm.conf" sed -i "s|;*daemonize\s*=\s*yes|daemonize = no|g" $tmpsed sed -i "s|;*listen\s*=\s*127.0.0.1:9000|listen = 9000|g" $tmpsed diff --git a/pluie/alpine-apache-php7/install.d/10-apache.sh b/pluie/alpine-apache-php7/install.d/10-apache.sh index cb0c278..6ad18ed 100755 --- a/pluie/alpine-apache-php7/install.d/10-apache.sh +++ b/pluie/alpine-apache-php7/install.d/10-apache.sh @@ -5,5 +5,5 @@ apk --update add apache2 apache2-proxy \ php7-apache2 php7-mbstring php7-session php7-phar php7-zlib php7-zip php7-ctype \ php7-mysqli php7-xml php7-pdo_mysql php7-opcache php7-pdo php7-json php7-curl \ -php7-gd php7-mcrypt php7-openssl php7-\dom \ +php7-gd php7-mcrypt php7-openssl php7-dom \ # php-pdo_odbc php-soap php-pgsql diff --git a/pluie/alpine-fpm-php7/Dockerfile b/pluie/alpine-fpm-php7/Dockerfile new file mode 100644 index 0000000..3a3a25c --- /dev/null +++ b/pluie/alpine-fpm-php7/Dockerfile @@ -0,0 +1,20 @@ +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + +FROM pluie/alpine + +MAINTAINER a-Sansara https://github.com/a-sansara + +ADD files.tar /scripts + +ENV SHENV_NAME=Php7 \ + SHENV_COLOR=67 \ + HTTP_SERVER_NAME=php7.docker \ + WWW_DIR=www \ + WWW_INDEX=index.php \ + FIX_OWNERSHIP=1 \ + TZ=Europe/Paris + +EXPOSE 80 + +RUN bash /scripts/install.sh diff --git a/pluie/alpine-fpm-php7/README.md b/pluie/alpine-fpm-php7/README.md new file mode 100644 index 0000000..bd8ad35 --- /dev/null +++ b/pluie/alpine-fpm-php7/README.md @@ -0,0 +1,96 @@ +# pluie/alpine-apache-php7 + +- [index][1] +- [pluie/alpine][2] ( < 10 MB ) Alpine/3.4 + - [pluie/alpine-apache][3] ( ~ 50 MB ) Apache/2.4.23 Php/5.6.24 + - [pluie/alpine-apache-fpm][7] ( ~ 50 MB ) Apache/2.4.23 Php/5.6.24 Fpm + - [pluie/alpine-symfony][6] ( ~ 82 MB ) Symfony2.8 or 3.1 + - [pluie/alpine-apache-php7][8] ( ~ 50 MB ) Apache/2.4.25 Php/7.0.15 + - [pluie/alpine-symfony-php7][9] ( ~ 82 MB ) Symfony2.8 or 3.2 Php/7.0.15 + - [pluie/alpine-mysql][4] ( ~172 MB ) Mysql/5.5.47 ( MariaDB ) +- [docker tips][5] + +Extend pluie/alpine with __apache 2.4.25__ and __php 7.0.15__ + +- error log are attached to stdout +- no need port redirection +- you can use env var at container creation : __HTTP_SERVER_NAME__ (default : site.docker ortherwise edit /app/vhost later) +- you can still use ever your local http & sql server while your container(s) are running + + +## Image Size + +- image ~ 50 MB + +## ENV variables + +``` + HTTP_SERVER_NAME=site.docker # apache ServerName + WWW_DIR=www # DocumentRoot relative to volume + WWW_INDEX=index.php # DirectoryIndex + FIX_OWNERSHIP=1 # +``` + +### Inherit ENV variables + +``` + SHENV_CTX=LOCAL # LOCAL|INT|PROD change context bg color + SHENV_NAME=Php7 # container name + SHENV_COLOR=67 # ANSI EXTENDED COLOR CODE + TZ=Europe/Paris # TIMEZONE +``` + +## Image Volumes + +__/app__ directory is a docker volume bind to your app project (silex/symfony etc) + +__/app/$WWW_DIR__ is the documentRoot. +put only your entry point and static files to the documentRoot directory, no your app sources +(__/app__ directory is design for this). + +__/app/vhost__ is your app vhost configuration file (with a serverName directive). +by default it use the apache rewrite module to redirect all uri to entry point $WWW_INDEX + +``` +/app/ # your application directory + | + |---- $WWW_DIR/ # documentRoot + | + |---- vhost # apache app vhost +``` + + +## Image Usage + +chdir to your project directory +``` +$ docker run --name php7 -it --link=mysql:db -v $(pwd):/app pluie/alpine-apache +``` +or +``` +$ docker run --name php7 -it --link=mysql:db -e HTTP_SERVER_NAME=yourServerName -v $(pwd):/app pluie/alpine-apache-php7 +``` + + +## Controling http server + +``` +# reload +$ docker exec -it php7 "httpd -k graceful" +# restart +$ docker exec -it php7 "httpd -k restart" +``` +for more commands : +``` +$ docker exec -it php7 "httpd -h" +``` + + [1]: https://github.com/pluie-org/docker-images + [2]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine + [3]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine-apache + [4]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine-mysql + [7]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine-apache-fpm + [5]: https://github.com/pluie-org/docker-images/blob/master/DOCKER.md + [6]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine-symfony + [8]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine-apache-php7 + [9]: https://github.com/pluie-org/docker-images/tree/master/pluie/alpine-symfony-php7 diff --git a/pluie/alpine-fpm-php7/build b/pluie/alpine-fpm-php7/build new file mode 100755 index 0000000..09b3da8 --- /dev/null +++ b/pluie/alpine-fpm-php7/build @@ -0,0 +1,22 @@ +#!/bin/bash +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + + Ctitle="\033[1;38;5;15;1;48;5;30m" + Citem="\033[1;38;5;36m" + Coff="\033[m" + DOCKDIR=$(dirname "$(readlink -f ${BASH_SOURCE[0]})") +DOCKBUILD=$(basename $DOCKDIR) + DOCKREPO=$(basename $(dirname $DOCKDIR)) + DOCKTAG=${1:-"latest"} + TMPPWD=$(pwd) + indent=" " +cd $DOCKDIR +echo -e "\n ${Ctitle} Preparing files : ${Coff}${Citem}\n" + +tar -cvf files.tar *.sh pre-init.d/ install.d/ | sed "s/^/${indent}↠ /" + +echo -e "\n ${Ctitle} Proceed Dockerfile build : ${Coff}\n +" +docker build --force-rm -t ${DOCKREPO}/${DOCKBUILD}:${DOCKTAG} . | sed "s/^/${indent}/" +cd $TMPPWD diff --git a/pluie/alpine-fpm-php7/files.tar b/pluie/alpine-fpm-php7/files.tar new file mode 100644 index 0000000000000000000000000000000000000000..7b493baab9056a111fc852184f841a359cc6ddc5 GIT binary patch literal 10240 zcmeGi{Zr$%lArxo>^XUtmOg*vi@ZmHDN{np%pGYH?yl3)%NScp^sp_TWdq^kfA31N z6Pv(sHzn8CHfF$y1XUz5(_snaXLWJaJ-xjo^%=Aq(^FrT0_tr2&79j>-$`jE2^k!>3vWzH_1o zh;LiggeImOWwLl;sqr3j&q-|1 zz?l%PX(m|QjcJr{%Vj~p#L3e%8q(y1CO!duh_Xm%IMG4hmvh2_Ll95b#4H{d2XNRQ zbblE1-y9!ke~lgf|K>7^i6I1Fde+Jq6*~Sg{YP-F|BbCiQ|N!EzO@1Em2p%c{14av zg8b{YaWQ2)d3Ja3g#7ERM*E)pTU#xAZT}0WbY-7t|5F}+K_5WJ@GHCk;~I1ey^ST0 zoDRQz3(1s(ns7d@lfceSw|@wGB_wU^+G;B=H4_kDY)(_2}f} z$I-Amc-tL}j`v@8GlZlYUi8Mt?0bh3c)u^b7`=89%EBt>Uzy*0t%Dr8|K{YVKj{6k zf70t8?^f$_{LUfu34iS*?i5bVXc|@3#Ddu&NsgS*^GOU*%&unJV|PN)9ik00ZTzWk z{}<1{B4aJ+C;~eNG$wAs;u*-zsJ?smZgkKaEXeQsKD+GW@?z={IA$S{q{Pev@*&0H z;P^gFVkb<9H;2vX_Ck+bfu!3zKIr~D$JptOUo$U7uNyFL6qC!CCd70XGm9zuk=P*) z#_QBi=vzuIIec@-1W&_R;M4G&&j~7)B$;kF!LR}PN}K{9o`IU^~6sw)I_2QQ5AL&OGx$M=OLz^^|I_y7Isw>k2Tm9Hh+RcpTdJ#EJ-9GX3hVS1tK zryfyDb9}Y&@)R~SJagKZ{*wZWvi(2f)jh=p6L>{Ra5}^&Dz=Wm8%998-1~f-!(Pp1Eyxn#<@yy|sj; zXvwV$C$@YxLCY)Bn}&r(mc=IaAcjMIFb+S0126v;W`c&8|N8za!+(+Qe`@^SY_(gyXB$ob60V2p&$nNN1BH}!3!R=X=e03s)uBBY5BizM#cY|GM+>9TNq zZve+4({8O+A`;8K(~9a{BqP63TcZ#5s#WSpF;Hk zsEO6Iq7VI04kGT9q1S8Z^BzvH)+n#FH9a1dC}=NKeHU?i58K!jDe7y(o1q zLTqipR$=apvWi0HK}!)qOM(cG#BPmO-XAbG4M>;_7)wAmH!I~1nMT&~JhG-&CN(WT zO;trkhey;WN5pB$X(!gj$-OQ_sMH=MRIKUl%jgQvnmEH)+XZ!wxvmwg0IHIn<)BOb zK@^P01ul6B!hMzmBpC5&umqbDEG1*X|@dsBw#2MU0b? z(8gWNtnanQW2*+4d~-4C{Px>T&%vxdp#ix@8N#l)d3&!1sy8RU+}%?B!QoiTFfl3^ z2{S>%F%txq`oJy@&(3OjImS2&p>31giRwPRCZ~LJ7k_7jBY#;Rt}|q}co*={ zx_rtL5@y57wU%22!{MUx@<{}&+lSGj0I7Jh&q7e&<>6N@bRBelR6C$q) zQ?%nVc?tMwV*mN88N zKkG6uyf(!BiU-0LiJ$^bHTjuSl8xYuC$R|NWQ!BdMbar7(G>sNLw;RjW|4i-NPW1; zEFw9@V8%cAQ~@w^Q6G`VMiQW!EOJHZa1K)+|Ks^=ZW{YJy-CJ&;Ks8k$;XqB^NhB~ o#A+%6Vu*Q|cjn3lXO3jhh$hI=-_{hZ{;;oSSnt4k2TD8eJN4DA!2kdN literal 0 HcmV?d00001 diff --git a/pluie/alpine-fpm-php7/install.d/00-repo.sh b/pluie/alpine-fpm-php7/install.d/00-repo.sh new file mode 100644 index 0000000..54e953b --- /dev/null +++ b/pluie/alpine-fpm-php7/install.d/00-repo.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# @app pluie/alpine-apache-php7 +# @author a-Sansara https://git.pluie.org/pluie/docker-images +# +echo "http://dl-cdn.alpinelinux.org/alpine/edge/community +http://dl-cdn.alpinelinux.org/alpine/edge/main +http://dl-cdn.alpinelinux.org/alpine/edge/testing +" > /etc/apk/repositories diff --git a/pluie/alpine-fpm-php7/install.d/10-apache.sh b/pluie/alpine-fpm-php7/install.d/10-apache.sh new file mode 100755 index 0000000..65cdb2e --- /dev/null +++ b/pluie/alpine-fpm-php7/install.d/10-apache.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + +apk --update add apache2 apache2-proxy apache2-proxy-html apache-mod-fcgid php7-fpm \ +php7-apache2 php7-mbstring php7-session php7-phar php7-zlib php7-zip php7-ctype \ +php7-mysqli php7-xml php7-pdo_mysql php7-opcache php7-pdo php7-json php7-curl \ +php7-gd php7-mcrypt php7-openssl php7-dom \ +# php-pdo_odbc php-soap php-pgsql diff --git a/pluie/alpine-fpm-php7/install.d/50-fix-apache.sh b/pluie/alpine-fpm-php7/install.d/50-fix-apache.sh new file mode 100755 index 0000000..36d4f7b --- /dev/null +++ b/pluie/alpine-fpm-php7/install.d/50-fix-apache.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + +function a2setModule(){ + local enable=${1:-''} + local path=${3:-'/etc/apache2/httpd.conf'} + local scom='' + local rcom='\#' + if [ ! -z $1 ] && [ ! -z "$2" ]; then + if [ "$enable" = 1 ]; then + scom='\#' + rcom='' + fi + echo "$2" + sed -i "s#${scom}LoadModule $2_module modules/mod_$2.so#${rcom}LoadModule $2_module modules/mod_$2.so#" "$path" + fi +} +if [ ! -f /usr/bin/php ]; then + ln -s /usr/bin/php7 /usr/bin/php +fi +if [ ! -f /usr/lib/libxml2.so ]; then + ln -s /usr/lib/libxml2.so.2 /usr/lib/libxml2.so +fi +if [ ! -d /app/$WWW_DIR ]; then + mkdir -p /app/$WWW_DIR +fi +if [ ! -d /run/apache2 ]; then + mkdir /run/apache2 +fi +chown -R 1000:apache /app/$WWW_DIR +chmod -R 755 /scripts/pre-init.d +mkdir -p /run/apache2 +chown apache:apache /run/apache2 + +tmpsed='s#^DocumentRoot ".*#DocumentRoot "/app/'$WWW_DIR'"#g' +sed -i "$tmpsed" /etc/apache2/httpd.conf +sed -i 's#AllowOverride none#AllowOverride All#' /etc/apache2/httpd.conf + +initTitle "Apache" "Loading Modules" +a2setModule 1 "rewrite" +a2setModule 1 "mpm_event" +a2setModule 1 "slotmem_shm" +a2setModule 1 "heartmonitor" +a2setModule 1 "watchdog" +initTitle "Apache" "Removing Modules" +a2setModule 0 "mpm_prefork" +a2setModule 0 "proxy_fdpass" /etc/apache2/conf.d/proxy.conf +echo +tmpsed="/etc/php7/php.ini" +sed -ir 's/expose_php = On/expose_php = Off/' $tmpsed +sed -i "s|;*date.timezone =.*|date.timezone = ${TZ}|i" $tmpsed +sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= 0|i" $tmpsed +tmpsed="/etc/php7/php-fpm.conf" +sed -i "s|;*daemonize\s*=\s*yes|daemonize = no|g" $tmpsed +sed -i "s|;*listen\s*=\s*127.0.0.1:9000|listen = 9000|g" $tmpsed +sed -i "s|;*listen\s*=\s*/||g" $tmpsed +sed -i "s|pm = dynamic|pm = ondemand|g" $tmpsed +echo -e "\nIncludeOptional /app/vhost" >> /etc/apache2/httpd.conf +unset tmpsed diff --git a/pluie/alpine-fpm-php7/main.sh b/pluie/alpine-fpm-php7/main.sh new file mode 100755 index 0000000..b8afa9a --- /dev/null +++ b/pluie/alpine-fpm-php7/main.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + +. /scripts/common.sh + +initTitle "Starting" "Apache Daemon" +httpd -D FOREGROUND diff --git a/pluie/alpine-fpm-php7/pre-init.d/10-apache.sh b/pluie/alpine-fpm-php7/pre-init.d/10-apache.sh new file mode 100755 index 0000000..aa532e8 --- /dev/null +++ b/pluie/alpine-fpm-php7/pre-init.d/10-apache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/bash +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + +if [ ! -z "$FIX_OWNERSHIP" ] && [ "$FIX_OWNERSHIP" -eq 1 ] && [ -d /app/$WWW_DIR ]; then + chown -R 1000:apache /app/$WWW_DIR +fi + +touch /var/log/apache2/error.log + +tail -F /var/log/apache2/error.log & diff --git a/pluie/alpine-fpm-php7/pre-init.d/10-vhost.sh b/pluie/alpine-fpm-php7/pre-init.d/10-vhost.sh new file mode 100755 index 0000000..b7184f9 --- /dev/null +++ b/pluie/alpine-fpm-php7/pre-init.d/10-vhost.sh @@ -0,0 +1,27 @@ +#!/usr/bin/bash +# @app pluie/alpine-apache +# @author a-Sansara https://git.pluie.org/pluie/docker-images + +if [ ! -z "/app/vhost" ]; then + cat < "/app/vhost" + + ServerName $HTTP_SERVER_NAME + SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 + + SetHandler proxy:fcgi://127.0.0.1:9000 + + + AllowOverride None + Require all granted + DirectoryIndex $WWW_INDEX + + Options -MultiViews +FollowSymlinks + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ $WWW_INDEX [QSA,L] + + + +# IncludeOptional /app/vhost2 +EOF +fi