Skip to content
Snippets Groups Projects
Commit 318f2a6b authored by CANALS Gerome's avatar CANALS Gerome
Browse files

Test compose files for 5.6 and 7.1

parent 774d356a
No related branches found
No related tags found
No related merge requests found
Showing with 659 additions and 9 deletions
...@@ -3,15 +3,35 @@ services: ...@@ -3,15 +3,35 @@ services:
web: web:
image: canals/php image: canals/php
container_name: web container_name: web
environment:
- VHOST_HOSTNAME=web.local
- VHOST_DOCROOT=/var/www/web
ports: ports:
- "5580:80" - "5080:80"
- "5543:443" - "5543:443"
volumes : volumes :
- ./web:/var/www/html - ./web:/var/www/web
- ./src:/var/www/src - ./src:/var/www/src
- ./html:/var/www/html
links : links :
- mysql:db - mysql:db
api:
image: canals/php
container_name: api
environment:
- VHOST_HOSTNAME=api.local
- VHOST_DOCROOT=/var/www/api
ports:
- "6080:80"
- "6443:443"
volumes :
- ./api:/var/www/api
- ./src:/var/www/src
- ./html:/var/www/html
links :
- mysql:db
mysql: mysql:
image: mysql:5.6 image: mysql:5.6
container_name: mysql container_name: mysql
......
# Use an official Python runtime as a base image
FROM php:5.6-apache
RUN apt-get update && \
apt-get install --yes --force-yes \
cron g++ gettext libicu-dev openssl \
libc-client-dev libkrb5-dev \
libxml2-dev libfreetype6-dev \
libgd-dev libmcrypt-dev bzip2 \
libbz2-dev libtidy-dev libcurl4-openssl-dev \
libz-dev libmemcached-dev libxslt-dev git-core
# PHP Configuration
RUN docker-php-ext-install bcmath &&\
docker-php-ext-install bz2 && \
docker-php-ext-install calendar && \
docker-php-ext-install dba && \
docker-php-ext-install exif &&\
docker-php-ext-configure gd --with-freetype-dir=/usr --with-jpeg-dir=/usr &&\
docker-php-ext-install gd &&\
docker-php-ext-install gettext &&\
docker-php-ext-configure imap --with-kerberos --with-imap-ssl &&\
docker-php-ext-install imap &&\
docker-php-ext-install intl &&\
docker-php-ext-install mcrypt &&\
docker-php-ext-install pdo pdo_mysql &&\
docker-php-ext-install soap &&\
docker-php-ext-install tidy &&\
docker-php-ext-install xmlrpc &&\
docker-php-ext-install mbstring &&\
docker-php-ext-install xsl &&\
docker-php-ext-install zip &&\
docker-php-ext-configure hash --with-mhash &&\
pecl install xdebug && docker-php-ext-enable xdebug &&\
pecl install mongodb && docker-php-ext-enable mongodb &&\
curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/bin/composer
# Apache Configuration
RUN a2enmod rewrite
# SSL
RUN mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf &&\
a2enmod ssl && \
a2ensite 000-default-ssl &&\
openssl req -subj '/CN=example.com/O=My Company Name LTD./C=US' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem
EXPOSE 443
# Imagemagick
RUN apt-get install --yes --force-yes libmagickwand-dev libmagickcore-dev
RUN yes '' | pecl install -f imagick &&\
docker-php-ext-enable imagick
COPY create_vhost start /usr/local/bin/
COPY php.ini /usr/local/etc/php/
CMD ["start"]
\ No newline at end of file
# canals/php
**a PHP docker image for pedagogical purposes**
```bash
$ docker run -d --name vhost-php -e "VHOST_HOSTNAME=vost.php.local" -e "VHOST_DOCROOT=/var/www/vost" -p 9080:80 -p 9443:443 -v /Users/canals/dev/docker-test/test-php/api:/var/www/vost -v /Users/canals/dev/docker-test/test-php/src:/var/www/src canals/php:v2
```
\ No newline at end of file
#!/usr/bin/env bash
function show_usage {
cat <<- _EOF_
Create a new vHost in Debian/Ubuntu Server
Assumes /etc/apache2/sites-available and /etc/apache2/sites-enabled setup used
-d DocumentRoot - i.e. /var/www/yoursite
-h Help - Show this menu.
-n ServerName - i.e. example.com or sub.example.com
-a ServerAlias - i.e. *.example.com or another domain altogether
-s ssl flag : if set to "yes", generate a key/certificate and enables ssl for the vhost
-c Certificate filename. "xip.io" becomes "xip.io.key" and "xip.io.crt".
if not set, the server name is used as a cert. name
Example Usage.
sudo create_vhost -d /var/www/api -n api.dev.local -s yes
_EOF_
exit 1
}
#
# Output vHost skeleton, fill with userinput
# To be outputted into new file
#
function create_vhost {
cat <<- _EOF_
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName $ServerName
$ServerAlias
DocumentRoot $DocumentRoot
<Directory $DocumentRoot>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
#<FilesMatch \.php$>
# Change this "proxy:unix:/path/to/fpm.socket"
# if using a Unix socket
# SetHandler "proxy:fcgi://127.0.0.1:9000"
#</FilesMatch>
</Directory>
ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined
</VirtualHost>
_EOF_
}
function create_ssl_vhost {
cat <<- _EOF_
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName $ServerName
$ServerAlias
DocumentRoot $DocumentRoot
<Directory $DocumentRoot>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
#<FilesMatch \.php$>
# Change this "proxy:unix:/path/to/fpm.socket"
# if using a Unix socket
# SetHandler "proxy:fcgi://127.0.0.1:9000"
#</FilesMatch>
</Directory>
ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined
SSLEngine on
SSLCertificateFile $CertPath/$CertName.pem
SSLCertificateKeyFile $KeyPath/$CertName.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \\
nokeepalive ssl-unclean-shutdown \\
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
_EOF_
}
#Sanity Check - are there two arguments with 2 values?
if [ "$#" -lt 4 ]; then
show_usage
fi
CertPath="/etc/ssl/certs"
KeyPath="/etc/ssl/private"
#WithSsl="no"
#Parse flags
while getopts "d:s:a:n:c:h" OPTION; do
case $OPTION in
h)
show_usage
;;
d)
DocumentRoot=$OPTARG
;;
n)
ServerName=$OPTARG
;;
a)
Alias=$OPTARG
;;
s)
WithSsl=$OPTARG
;;
c)
CertName=$OPTARG
;;
*)
show_usage
;;
esac
done
# If alias is set:
if [ "$Alias" != "" ]; then
ServerAlias="ServerAlias "$Alias
else
ServerAlias=""
fi
# If CertName doesn't get set, set it to ServerName
if [ "$CertName" == "" ]; then
CertName=$ServerName
fi
if [ ! -d $DocumentRoot ]; then
mkdir -p $DocumentRoot
#chown USER:USER $DocumentRoot #POSSIBLE IMPLEMENTATION, new flag -u ?
fi
if [ -z "$WithSsl" ]; then
if [ -f "/etc/apache2/sites-enabled/$ServerName.conf" ]; then
echo 'vHost already exists. Aborting'
show_usage
else
create_vhost > /etc/apache2/sites-available/${ServerName}.conf
cd /etc/apache2/sites-available/ && a2ensite ${ServerName}.conf
fi
else
if [ -f "/etc/apache2/sites-enabled/$ServerName-ssl.conf" ]; then
echo 'vHost already exists. Aborting'
show_usage
else
create_ssl_vhost >> /etc/apache2/sites-available/${ServerName}-ssl.conf
fi
# Enable Site
cd /etc/apache2/sites-available/ && a2ensite ${ServerName}-ssl.conf
#service apache2 reload
fi
\ No newline at end of file
[PHP]
memory_limit = 512M
max_execution_time = 60
error_reporting = -1
display_errors = On
display_startup_errors = On
track_errors = On
variables_order = "GPCS"
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On
upload_max_filesize = 8M
max_file_uploads = 25
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = Off
allow_url_include = Off
#!/usr/bin/env bash
if [ -z "$VHOST_HOSTNAME" -o -z "$VHOST_DOCROOT" ]; then
echo "dont create vhost : hostname or docroot empty"
#
#
else
# echo "create : create_vhost -d $VHOST_DOCROOT -n $VHOST_HOSTNAME"
/usr/local/bin/create_vhost -d $VHOST_DOCROOT -n $VHOST_HOSTNAME
# echo "create cert : openssl req -subj '/CN=$VHOST_HOSTNAME/O=dev. team/C=fr' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/$VHOST_HOSTNAME.key -out /etc/ssl/certs/$VHOST_HOSTNAME.pem"
openssl req -subj '/CN=$VHOST_HOSTNAME/O=dev. team/C=fr' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/$VHOST_HOSTNAME.key -out /etc/ssl/certs/$VHOST_HOSTNAME.pem
# echo "create ssl vhost : create_vhost -d $VHOST_DOCROOT -s $VHOST_HOSTNAME"
/usr/local/bin/create_vhost -d $VHOST_DOCROOT -n $VHOST_HOSTNAME -s yes
fi
echo "start apache foreground"
apache2-foreground
\ No newline at end of file
...@@ -33,23 +33,27 @@ RUN docker-php-ext-install bcmath &&\ ...@@ -33,23 +33,27 @@ RUN docker-php-ext-install bcmath &&\
docker-php-ext-install zip &&\ docker-php-ext-install zip &&\
docker-php-ext-configure hash --with-mhash &&\ docker-php-ext-configure hash --with-mhash &&\
pecl install xdebug && docker-php-ext-enable xdebug &&\ pecl install xdebug && docker-php-ext-enable xdebug &&\
pecl install mongodb && docker-php-ext-enable mongodb pecl install mongodb && docker-php-ext-enable mongodb &&\
curl -sS https://getcomposer.org/installer | php \
# composer && mv composer.phar /usr/bin/composer
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/bin/composer
# Apache Configuration # Apache Configuration
RUN a2enmod rewrite RUN a2enmod rewrite
# SSL # SSL
RUN a2enmod ssl && \ RUN mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf &&\
a2ensite default-ssl &&\ a2enmod ssl && \
a2ensite 000-default-ssl &&\
openssl req -subj '/CN=example.com/O=My Company Name LTD./C=US' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem openssl req -subj '/CN=example.com/O=My Company Name LTD./C=US' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem
expose 443 EXPOSE 443
# Imagemagick # Imagemagick
RUN apt-get install --yes --force-yes libmagickwand-dev libmagickcore-dev RUN apt-get install --yes --force-yes libmagickwand-dev libmagickcore-dev
RUN yes '' | pecl install -f imagick &&\ RUN yes '' | pecl install -f imagick &&\
docker-php-ext-enable imagick docker-php-ext-enable imagick
COPY create_vhost start /usr/local/bin/
COPY php.ini /usr/local/etc/php/
CMD ["start"]
\ No newline at end of file
# canals/php
**a PHP docker image for pedagogical purposes**
```bash
$ docker run -d --name vhost-php -e "VHOST_HOSTNAME=vost.php.local" -e "VHOST_DOCROOT=/var/www/vost" -p 9080:80 -p 9443:443 -v /Users/canals/dev/docker-test/test-php/api:/var/www/vost -v /Users/canals/dev/docker-test/test-php/src:/var/www/src canals/php:v2
```
\ No newline at end of file
#!/usr/bin/env bash
function show_usage {
cat <<- _EOF_
Create a new vHost in Debian/Ubuntu Server
Assumes /etc/apache2/sites-available and /etc/apache2/sites-enabled setup used
-d DocumentRoot - i.e. /var/www/yoursite
-h Help - Show this menu.
-n ServerName - i.e. example.com or sub.example.com
-a ServerAlias - i.e. *.example.com or another domain altogether
-s ssl flag : if set to "yes", generate a key/certificate and enables ssl for the vhost
-c Certificate filename. "xip.io" becomes "xip.io.key" and "xip.io.crt".
if not set, the server name is used as a cert. name
Example Usage.
sudo create_vhost -d /var/www/api -n api.dev.local -s yes
_EOF_
exit 1
}
#
# Output vHost skeleton, fill with userinput
# To be outputted into new file
#
function create_vhost {
cat <<- _EOF_
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName $ServerName
$ServerAlias
DocumentRoot $DocumentRoot
<Directory $DocumentRoot>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
#<FilesMatch \.php$>
# Change this "proxy:unix:/path/to/fpm.socket"
# if using a Unix socket
# SetHandler "proxy:fcgi://127.0.0.1:9000"
#</FilesMatch>
</Directory>
ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined
</VirtualHost>
_EOF_
}
function create_ssl_vhost {
cat <<- _EOF_
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName $ServerName
$ServerAlias
DocumentRoot $DocumentRoot
<Directory $DocumentRoot>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
#<FilesMatch \.php$>
# Change this "proxy:unix:/path/to/fpm.socket"
# if using a Unix socket
# SetHandler "proxy:fcgi://127.0.0.1:9000"
#</FilesMatch>
</Directory>
ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined
SSLEngine on
SSLCertificateFile $CertPath/$CertName.pem
SSLCertificateKeyFile $KeyPath/$CertName.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \\
nokeepalive ssl-unclean-shutdown \\
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
_EOF_
}
#Sanity Check - are there two arguments with 2 values?
if [ "$#" -lt 4 ]; then
show_usage
fi
CertPath="/etc/ssl/certs"
KeyPath="/etc/ssl/private"
#WithSsl="no"
#Parse flags
while getopts "d:s:a:n:c:h" OPTION; do
case $OPTION in
h)
show_usage
;;
d)
DocumentRoot=$OPTARG
;;
n)
ServerName=$OPTARG
;;
a)
Alias=$OPTARG
;;
s)
WithSsl=$OPTARG
;;
c)
CertName=$OPTARG
;;
*)
show_usage
;;
esac
done
# If alias is set:
if [ "$Alias" != "" ]; then
ServerAlias="ServerAlias "$Alias
else
ServerAlias=""
fi
# If CertName doesn't get set, set it to ServerName
if [ "$CertName" == "" ]; then
CertName=$ServerName
fi
if [ ! -d $DocumentRoot ]; then
mkdir -p $DocumentRoot
#chown USER:USER $DocumentRoot #POSSIBLE IMPLEMENTATION, new flag -u ?
fi
if [ -z "$WithSsl" ]; then
if [ -f "/etc/apache2/sites-enabled/$ServerName.conf" ]; then
echo 'vHost already exists. Aborting'
show_usage
else
create_vhost > /etc/apache2/sites-available/${ServerName}.conf
cd /etc/apache2/sites-available/ && a2ensite ${ServerName}.conf
fi
else
if [ -f "/etc/apache2/sites-enabled/$ServerName-ssl.conf" ]; then
echo 'vHost already exists. Aborting'
show_usage
else
create_ssl_vhost >> /etc/apache2/sites-available/${ServerName}-ssl.conf
fi
# Enable Site
cd /etc/apache2/sites-available/ && a2ensite ${ServerName}-ssl.conf
#service apache2 reload
fi
\ No newline at end of file
[PHP]
memory_limit = 512M
max_execution_time = 60
error_reporting = -1
display_errors = On
display_startup_errors = On
track_errors = On
variables_order = "GPCS"
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On
upload_max_filesize = 8M
max_file_uploads = 25
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = Off
allow_url_include = Off
#!/usr/bin/env bash
if [ -z "$VHOST_HOSTNAME" -o -z "$VHOST_DOCROOT" ]; then
echo "dont create vhost : hostname or docroot empty"
#
#
else
# echo "create : create_vhost -d $VHOST_DOCROOT -n $VHOST_HOSTNAME"
/usr/local/bin/create_vhost -d $VHOST_DOCROOT -n $VHOST_HOSTNAME
# echo "create cert : openssl req -subj '/CN=$VHOST_HOSTNAME/O=dev. team/C=fr' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/$VHOST_HOSTNAME.key -out /etc/ssl/certs/$VHOST_HOSTNAME.pem"
openssl req -subj '/CN=$VHOST_HOSTNAME/O=dev. team/C=fr' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/$VHOST_HOSTNAME.key -out /etc/ssl/certs/$VHOST_HOSTNAME.pem
# echo "create ssl vhost : create_vhost -d $VHOST_DOCROOT -s $VHOST_HOSTNAME"
/usr/local/bin/create_vhost -d $VHOST_DOCROOT -n $VHOST_HOSTNAME -s yes
fi
echo "start apache foreground"
apache2-foreground
\ No newline at end of file
###Tests for the 7.1 and 5.6 php/apache images
####php7.1 image :
```shell
$ docker-compose -f docker-compose.test.7.1.yml up
Creating web.test.canals.php.7.1
Attaching to web.test.canals.php.7.1
...
```
should lead to the creation and enaction of a container named _web.test.canals.php.7.1_ .
To verify that everything goes well, just point your preferred browser to the following urls:
* http://localhost:25080/
* http://localhost:25080/index.html
* http://localhost:25080/info.php
* https://localhost:25443/
* https://localhost:25443/index.html
* https://localhost:25443/info.php
####php5.6 image :
```shell
$ docker-compose -f docker-compose.test.5.6.yml up
Creating web.test.canals.php.5.6
Attaching to web.test.canals.php.5.6
...
```
should lead to the creation and enaction of a container named _web.test.canals.php.7.1_ .
To verify that everything goes well, just point your preferred browser to the following urls:
* http://localhost:26080/
* http://localhost:26080/index.html
* http://localhost:26080/info.php
* https://localhost:26443/
* https://localhost:26443/index.html
* https://localhost:26443/info.php
\ No newline at end of file
version: "3"
services:
web:
image: canals/php:5.6
container_name: web.test.canals.php.5.6
ports:
- "26080:80"
- "26443:443"
volumes :
- ./web:/var/www/html
- ./src:/var/www/src
version: "3"
services:
web:
image: canals/php
container_name: web.test.canals.php.7.1
ports:
- "25080:80"
- "25443:443"
volumes :
- ./web:/var/www/html
- ./src:/var/www/src
<?php
/**
* File: sample.php
* Creation Date: 23/06/2017
* description:
*
* @author: canals
*/
$sample ='hungry heart';
\ No newline at end of file
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>it works !</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<?php
/**
* File: index.php
* Creation Date: 23/06/2017
* description:
*
* @author: canals
*/
require_once __DIR__ . '/../src/sample.php';
echo <<<EOT
<!-- DOCTYPE html-->
<html>
<body> <h1> php is working ! </h1> <h2> sample : $sample</h2>
</html>
EOT;
<?php
/**
* File: info.php
* Creation Date: 23/06/2017
* description:
*
* @author: canals
*/
phpinfo();
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment