-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathinit.sh
120 lines (95 loc) · 3.55 KB
/
init.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
#####################################
# Environment #
#####################################
# Project dir
PROJECT_DIR="/phpmongo/"
### PHP version
PHP_VERSION=$(php -r "echo phpversion();");
# Existence of this dir points that container initialised
SHARE_DIR=/share/${PHP_VERSION:0:3}
# Remove share dir.
rm -rf ${SHARE_DIR}
# Mongo extension
MONGO_EXT=$1
if [[ -z $MONGO_EXT ]];
then
echo "Mongo extension name not specified (use 'mongo' or 'mongodb')"
exit
fi;
# Mongo extension version
MONGO_EXT_VERSION=$2
if [[ -z $MONGO_EXT_VERSION ]];
then
echo "Mongo extension version not specified"
exit
fi;
# mongo version notification
echo "Creating environment for MongoDB PHP extension '${MONGO_EXT}' ver. ${MONGO_EXT_VERSION} and PHP ${PHP_VERSION}"
#####################################
# PHP extensions #
#####################################
if [[ -z $(dpkg -l | grep libssl-dev) ]];
then
# add library requirements
apt-get update -q
apt-get install --no-install-recommends -y libssl-dev iproute2 rsync
# install ext-zip
apt-get install --no-install-recommends -y zlib1g-dev libzip-dev
docker-php-ext-install zip
# update pecl
pecl channel-update pecl.php.net
# install pecl mongo extension
yes '' | pecl -q install -f ${MONGO_EXT}-${MONGO_EXT_VERSION}
docker-php-ext-enable ${MONGO_EXT}.so
# Docker host for XDEBUG
DOCKERHOST_IP="$(/sbin/ip route | awk '/default/ { print $3 }')";
echo "$DOCKERHOST_IP dockerhost" >> /etc/hosts
# last version of xdebug with support PHP < 7.0 is 2.5.5
if [[ ${PHP_VERSION:0:2} == "5." ]];
then
pecl install xdebug-2.5.5;
echo "mongo.native_long=0" >> /usr/local/etc/php/conf.d/mongo.ini
echo "mongo.long_as_object=1" >> /usr/local/etc/php/conf.d/mongo.ini
else
pecl install xdebug;
fi
docker-php-ext-enable xdebug.so
echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.remote_mode=req" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.remote_host=dockerhost" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/xdebug.ini
echo "xdebug.extended_info=1" >> /usr/local/etc/php/conf.d/xdebug.ini
fi
#####################################
# prepare project #
#####################################
# Copy files to prevent file modification
echo 'Copying files to container ... '
rsync -r /phpmongo-source/ ${PROJECT_DIR}
echo 'done.'
#####################################
# Composer #
#####################################
if [[ -z $(which composer) ]];
then
# go to project dir
cd $PROJECT_DIR
# download composer
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
composer update --no-interaction -o
# add mongodb compatibility layer
if [[ $MONGO_EXT == "mongodb" ]];
then
echo "Installing compatibility layer for new MongoDB extension"
composer require "alcaeus/mongo-php-adapter" --ignore-platform-reqs --no-interaction -o
fi;
fi
# this dir used as marker of container initialisation
mkdir ${SHARE_DIR}
# start process to prevent stop of container
echo "Container for PHP ${PHP_VERSION} initialised."
php -S 127.0.0.1:9876 .