diff --git a/.dockerignore b/.dockerignore index a6acafdf..6087a800 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ -log/ -mysql/ +logs/ +data/ www/ -conf/conf.d/certs/ +services/nginx/ssl/ diff --git a/.gitattributes b/.gitattributes index 6ff0716d..e0cacfeb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,6 @@ *.png binary *.jpg binary -*.tgz binary \ No newline at end of file +*.tgz binary +*.zip binary +*.gz binary \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index fc3de705..00000000 --- a/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -ARG PHP_VERSION -FROM php:${PHP_VERSION}-fpm-alpine - -ARG TZ -ARG PHP_EXTENSIONS -ARG MORE_EXTENSION_INSTALLER -ARG ALPINE_REPOSITORIES - -RUN if [ "${ALPINE_REPOSITORIES}" != "" ]; then \ - sed -i "s/dl-cdn.alpinelinux.org/${ALPINE_REPOSITORIES}/g" /etc/apk/repositories; \ - fi - - -RUN apk --no-cache add tzdata \ - && cp "/usr/share/zoneinfo/$TZ" /etc/localtime \ - && echo "$TZ" > /etc/timezone - - -COPY ./extensions /tmp/extensions -WORKDIR /tmp/extensions - -ENV EXTENSIONS=",${PHP_EXTENSIONS}," -ENV MC="-j$(nproc)" - -RUN export MC="-j$(nproc)" \ - && chmod +x install.sh \ - && chmod +x "${MORE_EXTENSION_INSTALLER}" \ - && sh install.sh \ - && sh "${MORE_EXTENSION_INSTALLER}" \ - && rm -rf /tmp/extensions - -ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php - -WORKDIR /var/www/html diff --git a/README-en.md b/README-en.md index ce17e4d2..bced6dda 100644 --- a/README-en.md +++ b/README-en.md @@ -2,11 +2,10 @@ Docker deploying Nginx MySQL PHP7/PHP5.6/PHP5.4 in one key, support full feature **[[中文说明]](README.md)** -![Demo Image](./dnmp.png) ## 1. Feature 1. Completely open source. -2. Support Multiple PHP version(~~PHP5.4,~~ PHP5.6, PHP7.2) switch. +2. Support Multiple PHP version(PHP5.4, PHP5.6, PHP7.0, PHP7.1, PHP7.2, PHP7.3) switch. 3. Support Multiple domains. 4. Support HTTPS and HTTP/2. 5. PHP source located in host. @@ -43,17 +42,17 @@ The index file is located at `./www/localhost/index.php`. ## 3.Multiple php version -Default, we create 3 php container, they are PHP7.2, PHP5.6 and PHP5.4, +Default, we create 3 php container, they are PHP7, PHP5.6 and PHP5.4, We can change easy by modify Nginx configuration `fastcgi_pass`. -For example, [http://localhost](http://localhost) use PHP5.4, Nginx `fastcgi_pass` is: +For example, [http://localhost](http://localhost) use PHP7, Nginx `fastcgi_pass` is: ``` - fastcgi_pass php54:9000; + fastcgi_pass php:9000; ``` -To use PHP7.2, change it: +To use PHP7, change it: ``` - fastcgi_pass php72:9000; + fastcgi_pass php54:9000; ``` Then reload nginx: ```bash diff --git a/README.md b/README.md index f450a9f0..961ec5c0 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,28 @@ DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的**LNMP一键安装程序**。 -**QQ群:** 572041090 (请备注dnmp交流) +> 使用前最好提前阅读一遍[目录](#目录),以便快速上手,遇到问题也能及时排除。交流QQ群:**572041090**。 -**[[ENGLISH]](README-en.md)** +**[[ENGLISH]](README-en.md)** - +[**[GitHub地址]**](https://github.com/yeszao/dnmp) - +[**[Gitee地址]**](https://gitee.com/yeszao/dnmp) DNMP项目特点: 1. `100%`开源 2. `100%`遵循Docker标准 -3. 支持**多版本PHP**共存,可任意切换(~~PHP5.4、~~PHP5.6、PHP7.2) +3. 支持**多版本PHP**共存,可任意切换(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3) 4. 支持绑定**任意多个域名** 5. 支持**HTTPS和HTTP/2** 6. **PHP源代码、MySQL数据、配置文件、日志文件**都可在Host中直接修改查看 7. 内置**完整PHP扩展安装**命令 -8. 默认支持`pdo_mysql`、`redis`、`xdebug`、`swoole`等常用热门扩展,根据环境灵活配置 -9. 带有phpmyadmin和phpredisadmin数据库在线管理程序 +8. 默认支持`pdo_mysql`、`mysqli`、`mbstring`、`gd`、`curl`、`opcache`等常用热门扩展,根据环境灵活配置 +9. 可一键选配常用服务: + - 多PHP版本:PHP5.4、PHP5.6、PHP7.1-7.3 + - Web服务:Nginx、Openresty + - 数据库:MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch + - 消息队列:RabbitMQ + - 辅助工具:Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo 10. 实际项目中应用,确保`100%`可用 +11. 所有镜像源于[Docker官方仓库](https://hub.docker.com),安全可靠 11. 一次配置,**Windows、Linux、MacOs**皆可用 # 目录 @@ -24,47 +32,52 @@ DNMP项目特点: - [3.1 切换Nginx使用的PHP版本](#31-切换Nginx使用的PHP版本) - [3.2 安装PHP扩展](#32-安装PHP扩展) - [3.3 Host中使用php命令行(php-cli)](#33-host中使用php命令行php-cli) + - [3.4 使用composer](#34-使用composer) - [4.添加快捷命令](#4添加快捷命令) - [5.使用Log](#5使用log) - [5.1 Nginx日志](#51-nginx日志) - [5.2 PHP-FPM日志](#52-php-fpm日志) - [5.3 MySQL日志](#53-mysql日志) -- [6.使用composer](#6使用composer) -- [7.数据库管理](#7数据库管理) - - [7.1 phpMyAdmin](#71-phpmyadmin) - - [7.2 phpRedisAdmin](#72-phpredisadmin) -- [8.在正式环境中安全使用](#8在正式环境中安全使用) -- [9.常见问题](#9常见问题) - - [9.1 如何在PHP代码中使用curl?](#91-如何在php代码中使用curl) - - [9.2 Docker使用cron定时任务](#92-Docker使用cron定时任务) - - [9.3 Docker容器时间](#93-Docker容器时间) +- [6.数据库管理](#6数据库管理) + - [6.1 phpMyAdmin](#61-phpmyadmin) + - [6.2 phpRedisAdmin](#62-phpredisadmin) +- [7.在正式环境中安全使用](#7在正式环境中安全使用) +- [8.常见问题](#8常见问题) + - [8.1 如何在PHP代码中使用curl?](#81-如何在php代码中使用curl) + - [8.2 Docker使用cron定时任务](#82-Docker使用cron定时任务) + - [8.3 Docker容器时间](#83-Docker容器时间) + - [8.4 如何连接MySQL和Redis服务器](#84-如何连接MySQL和Redis服务器) ## 1.目录结构 ``` / -├── conf 配置文件目录 -│   ├── conf.d Nginx用户站点配置目录 -│   ├── nginx.conf Nginx默认配置文件 -│   ├── mysql.cnf MySQL用户配置文件 -│   ├── php-fpm.conf PHP-FPM配置文件(部分会覆盖php.ini配置) -│   └── php.ini PHP默认配置文件 -├── Dockerfile PHP镜像构建文件 -├── extensions PHP扩展源码包 -├── log 日志目录 -├── mysql MySQL数据目录 -├── docker-compose-sample.yml Docker 服务配置示例文件 +├── data 数据库数据目录 +│   ├── esdata ElasticSearch 数据目录 +│   ├── mongo MongoDB 数据目录 +│   ├── mysql MySQL8 数据目录 +│   └── mysql5 MySQL5 数据目录 +├── services 服务构建文件和配置文件目录 +│   ├── elasticsearch ElasticSearch 配置文件目录 +│   ├── mysql MySQL8 配置文件目录 +│   ├── mysql5 MySQL5 配置文件目录 +│   ├── nginx Nginx 配置文件目录 +│   ├── php PHP5.6 - PHP7.3 配置目录 +│   ├── php54 PHP5.4 配置目录 +│   └── redis Redis 配置目录 +├── logs 日志目录 +├── docker-compose-simple.yml 简单版本的 Docker 服务配置示例文件 +├── docker-compose-full.yml 完整版本的 Docker 服务配置示例文件 ├── env.smaple 环境配置示例文件 -└── www PHP代码目录 +└── www PHP 代码目录 ``` -结构示意图: - -![Demo Image](./dnmp.png) - ## 2.快速使用 -1. 本地安装`git`、`docker`和`docker-compose`(**需要1.7.0及以上版本**)。 +1. 本地安装 + - `git` + - `Docker`(系统需为Linux,Windows 10 Build 15063+,或MacOS 10.12+,且必须要`64`位) + - `docker-compose 1.7.0+` 2. `clone`项目: ``` $ git clone https://github.com/yeszao/dnmp.git @@ -80,14 +93,12 @@ DNMP项目特点: $ cp docker-compose-simple.yml docker-compose.yml $ docker-compose up ``` - > 这里我们使用 docker-compose-simple.yml 文件内的服务,是简单版本,只包含Nginx、PHP7.2和MySQL8 `3`个服务。如需更多服务,比如Redis、PHP5.6、MongoDB,ElasticSearch等,请参考 docker-compose-full.yml 文件内的服务列表,把需要的拷贝到 docker-compose.yml 文件在`up`即可。 + > 这里我们使用 docker-compose-simple.yml 文件内的服务,是简单版本,只包含Nginx、PHP7.2和MySQL8 `3`个服务。如需更多服务,比如Redis、PHP5.4、MongoDB,ElasticSearch等,请参考 docker-compose-full.yml 文件内的服务列表,把需要的拷贝到 docker-compose.yml 文件再`up`即可。 > 注意:Windows安装360安全卫士的同学,请先将其退出,不然安装过程中可能Docker创建账号过程可能被拦截,导致启动时文件共享失败。 - -5. 访问在浏览器中访问:`http://localhost`,PHP代码:`./www/localhost/index.php`文件。 - - -6. 如需管理服务,请在命令后面加上服务器名称,dnmp支持的服务名有:`nginx`、`php72`、`php56`、`mysql`、`mongo`、`redis`、`phpmyadmin`、`phpredisadmin`、`elasticsearch`、`adminmongo`、`rabbitmq`、`kibana` +5. 在浏览器中访问:`http://localhost`或`https://localhost`(自签名HTTPS演示)就能看到效果。 + > 演示PHP代码在文件`./www/localhost/index.php`,里面包含了连接mysql服务器和redis服务器的代码,实际使用时可参考此代码。 +6. 如需管理服务,请在命令后面加上服务器名称,dnmp支持的服务名有:`nginx`、`php`、`php54`、`mysql`、`mongo`、`redis`、`phpmyadmin`、`phpredisadmin`、`elasticsearch`、`adminmongo`、`rabbitmq`、`kibana` ```bash $ docker-compose up # 创建并且启动所有容器 $ docker-compose up 服务1 服务2 ... # 创建并且启动指定的多个容器 @@ -107,17 +118,17 @@ $ docker-compose down 服务1 服务2 ... # 停止并删除容器,网络 ## 3.PHP和扩展 ### 3.1 切换Nginx使用的PHP版本 -默认情况下,我们同时创建 **PHP5.6和PHP7.2** 2个PHP版本的容器, +在使用 `docker-compose-simple.yml` 的情况下,我们只构建建 **PHP7** 版本的容器, -切换PHP仅需修改相应站点 Nginx 配置的`fastcgi_pass`选项, +要使用其他版本,请参考`docker-compose-full.yml`添加服务,如**PHP5.4**,构建完成后修改Nginx 配置的`fastcgi_pass`选项。 例如,示例的 [http://localhost](http://localhost) 用的是PHP7.2,Nginx 配置: ``` - fastcgi_pass php72:9000; + fastcgi_pass php:9000; ``` -要改用PHP5.6,修改为: +要改用PHP5.4,修改为: ``` - fastcgi_pass php56:9000; + fastcgi_pass php54:9000; ``` 再 **重启 Nginx** 生效。 ```bash @@ -129,12 +140,12 @@ PHP的很多功能都是通过扩展实现,而安装扩展是一个略费时 如果要安装更多扩展,请打开你的`.env`文件修改如下的PHP配置, 增加需要的PHP扩展: ```bash -PHP72_EXTENSIONS=pdo_mysql,opcache,redis # PHP 7.2要安装的扩展列表,英文逗号隔开 -PHP56_EXTENSIONS=opcache,redis # PHP 5.6要安装的扩展列表,英文逗号隔开 +PHP_EXTENSIONS=pdo_mysql,opcache,redis # PHP 要安装的扩展列表,英文逗号隔开 +PHP54_EXTENSIONS=opcache,redis # PHP 5.4要安装的扩展列表,英文逗号隔开 ``` 然后重新build PHP镜像。 ```bash - docker-compose build php72 + docker-compose build php docker-compose up -d ``` 可用的扩展请看同文件的`PHP extensions`注释块说明。 @@ -149,9 +160,9 @@ php () { $tty \ --interactive \ --rm \ - --volume $PWD:/var/www/html:rw \ - --workdir /var/www/html \ - dnmp_php72 php "$@" + --volume $PWD:/www:rw \ + --workdir /www \ + dnmp_php php "$@" } ``` 2. 让文件起效: @@ -167,6 +178,53 @@ Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans ``` +### 3.4 使用composer +**我们建议在主机HOST中使用composer,避免PHP容器变得庞大**。 +1. 在主机创建一个目录,用以保存composer的配置和缓存文件: + ``` + mkdir ~/dnmp/composer + ``` +2. 打开主机的 `~/.bashrc` 或者 `~/.zshrc` 文件,加上: + ``` + composer () { + tty= + tty -s && tty=--tty + docker run \ + $tty \ + --interactive \ + --rm \ + --user $(id -u):$(id -g) \ + --volume ~/dnmp/composer:/tmp \ + --volume /etc/passwd:/etc/passwd:ro \ + --volume /etc/group:/etc/group:ro \ + --volume $(pwd):/app \ + composer "$@" + } + + ``` +3. 让文件起效: + ``` + source ~/.bashrc + ``` +4. 在主机的任何目录下就能用composer了: + ``` + cd ~/dnmp/www/ + composer create-project yeszao/fastphp project --no-dev + ``` +5. (可选)如果提示需要依赖,用`--ignore-platform-reqs --no-scripts`关闭依赖检测。 +6. (可选)第一次使用 composer 会在 ~/dnmp/composer 目录下生成一个config.json文件,可以在这个文件中指定国内仓库,例如: + ``` + { + "config": {}, + "repositories": { + "packagist": { + "type": "composer", + "url": "https://packagist.laravel-china.org" + } + } + } + + ``` ## 4.添加快捷命令 在开发的时候,我们可能经常使用`docker exec -it`切换到容器中,把常用的做成命令别名是个省事的方法。 @@ -174,8 +232,8 @@ Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies 打开~/.bashrc,加上: ```bash alias dnginx='docker exec -it dnmp_nginx_1 /bin/sh' -alias dphp72='docker exec -it dnmp_php72_1 /bin/sh' -alias dphp56='docker exec -it dnmp_php56_1 /bin/sh' +alias dphp72='docker exec -it dnmp_php_1 /bin/sh' +alias dphp54='docker exec -it dnmp_php54_1 /bin/sh' alias dmysql='docker exec -it dnmp_mysql_1 /bin/bash' alias dredis='docker exec -it dnmp_redis_1 /bin/sh' ``` @@ -227,58 +285,12 @@ log-error = /var/lib/mysql/mysql.error.log ``` 以上是mysql.conf中的日志文件的配置。 -## 6.使用composer -**我们建议在主机HOST中使用composer,避免PHP容器变得庞大**。 -1. 在主机创建一个目录,用以保存composer的配置和缓存文件: - ``` - mkdir ~/dnmp/composer - ``` -2. 打开主机的 `~/.bashrc` 或者 `~/.zshrc` 文件,加上: - ``` - composer () { - tty= - tty -s && tty=--tty - docker run \ - $tty \ - --interactive \ - --rm \ - --user $(id -u):$(id -g) \ - --volume ~/dnmp/composer:/tmp \ - --volume /etc/passwd:/etc/passwd:ro \ - --volume /etc/group:/etc/group:ro \ - --volume $(pwd):/app \ - composer "$@" - } - ``` -3. 让文件起效: - ``` - source ~/.bashrc - ``` -4. 在主机的任何目录下就能用composer了: - ``` - cd ~/dnmp/www/ - composer create-project yeszao/fastphp project --no-dev - ``` -5. (可选)如果提示需要依赖,用`--ignore-platform-reqs --no-scripts`关闭依赖检测。 -6. (可选)第一次使用 composer 会在 ~/dnmp/composer 目录下生成一个config.json文件,可以在这个文件中指定国内仓库,例如: - ``` - { - "config": {}, - "repositories": { - "packagist": { - "type": "composer", - "url": "https://packagist.laravel-china.org" - } - } - } - ``` - -## 7.数据库管理 +## 6.数据库管理 本项目默认在`docker-compose.yml`中开启了用于MySQL在线管理的*phpMyAdmin*,以及用于redis在线管理的*phpRedisAdmin*,可以根据需要修改或删除。 -### 7.1 phpMyAdmin +### 6.1 phpMyAdmin phpMyAdmin容器映射到主机的端口地址是:`8080`,所以主机上访问phpMyAdmin的地址是: ``` http://localhost:8080 @@ -290,7 +302,7 @@ MySQL连接信息: - username:(手动在phpmyadmin界面输入) - password:(手动在phpmyadmin界面输入) -### 7.2 phpRedisAdmin +### 6.2 phpRedisAdmin phpRedisAdmin容器映射到主机的端口地址是:`8081`,所以主机上访问phpMyAdmin的地址是: ``` http://localhost:8081 @@ -301,34 +313,46 @@ Redis连接信息如下: - port: `6379` -## 8.在正式环境中安全使用 +## 7.在正式环境中安全使用 要在正式环境中使用,请: 1. 在php.ini中关闭XDebug调试 2. 增强MySQL数据库访问的安全策略 3. 增强redis访问的安全策略 -## 9.常见问题 -### 9.1 如何在PHP代码中使用curl? +## 8 常见问题 +### 8.1 如何在PHP代码中使用curl? 参考这个issue:[https://github.com/yeszao/dnmp/issues/91](https://github.com/yeszao/dnmp/issues/91) -### 9.2 Docker使用cron定时任务 +### 8.2 Docker使用cron定时任务 [Docker使用cron定时任务](https://www.awaimai.com/2615.html) -### 9.3 Docker容器时间 +### 8.3 Docker容器时间 容器时间在.env文件中配置`TZ`变量,所有支持的时区请看[时区列表·维基百科](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)或者[PHP所支持的时区列表·PHP官网](https://www.php.net/manual/zh/timezones.php)。 -### 9.4 Mysql5.7版本与mysql8.0版本切换问题 -mysql8.0采用了default_authentication_plugin=mysql_native_password加密方式,8.0以前版本是用caching_sha2_password,所以如果用5.7版本的,切换到conf目录, -修改mysql.conf配置文件 -```sh -[mysqld] -default_authentication_plugin=mysql_native_password +### 8.4 如何连接MySQL和Redis服务器 +这要分两种情况, + +第一种情况,在**PHP代码中**。 +```php +// 连接MySQL +$dbh = new PDO('mysql:host=mysql;dbname=mysql', 'root', '123456'); + +// 连接Redis +$redis = new Redis(); +$redis->connect('redis', 6379); ``` -然后在 mysql 下执行以下命令来修改密码: +因为容器与容器是`expose`端口联通的,而且在同一个`networks`下,所以连接的`host`参数直接用容器名称,`port`参数就是容器内部的端口。更多请参考[《docker-compose ports和expose的区别》](https://www.awaimai.com/2138.html)。 + +第二种情况,**在主机中**通过**命令行**或者**Navicat**等工具连接。主机要连接mysql和redis的话,要求容器必须经过`ports`把端口映射到主机了。以 mysql 为例,`docker-compose.yml`文件中有这样的`ports`配置:`3306:3306`,就是主机的3306和容器的3306端口形成了映射,所以我们可以这样连接: ```bash -ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; +$ mysql -h127.0.0.1 -uroot -p123456 -P3306 +$ redis-cli -h127.0.0.1 ``` +这里`host`参数不能用localhost是因为它默认是通过sock文件与mysql通信,而容器与主机文件系统已经隔离,所以需要通过TCP方式连接,所以需要指定IP。 + + + ## License MIT diff --git a/conf/conf.d/certs/localhost/gencert.sh b/conf/conf.d/certs/localhost/gencert.sh deleted file mode 100755 index 32af31a2..00000000 --- a/conf/conf.d/certs/localhost/gencert.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -# create self-signed server certificate: - -read -p "Enter your domain [www.example.com]: " DOMAIN - -echo "Create server key..." - -openssl genrsa -des3 -out $DOMAIN.key 1024 - -echo "Create server certificate signing request..." - -SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN" - -openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr - -echo "Remove password..." - -mv $DOMAIN.key $DOMAIN.origin.key -openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key - -echo "Sign SSL certificate..." - -openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt - -echo "Done!" diff --git a/conf/conf.d/certs/localhost/localhost.csr b/conf/conf.d/certs/localhost/localhost.csr deleted file mode 100644 index c9e72fb6..00000000 --- a/conf/conf.d/certs/localhost/localhost.csr +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBrzCCARgCAQAwbzELMAkGA1UEBhMCVVMxDTALBgNVBAgMBE1hcnMxEzARBgNV -BAcMCmlUcmFuc3dhcnAxEzARBgNVBAoMCmlUcmFuc3dhcnAxEzARBgNVBAsMCmlU -cmFuc3dhcnAxEjAQBgNVBAMMCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEAvF1hXtpa26dj8qKq4rQ8DYHC36UcghZp7JF8Q9M1ga4+R+M37Tt7 -rbkVSCbPfBYN0lGJ12CqQUye8wfJ/skrol7KJcyfj5Z/z3IZSLegCOkJfxF5vNKz -Arbb+R2+ek2WdKuTGfOdbj07y1Q52HsSiOcrl7kUzmkYvxMEA2bqkPsCAwEAAaAA -MA0GCSqGSIb3DQEBCwUAA4GBAIzL+tQaKTt5CY6+jAH2DpOFAHBnuZY1K3wVC2jv -WAfhP91rP6IyLomaWDR7wEtRNKRjU44Bp1W3IidKDQ8kHAHMuOtWcFqf6ZguHD9s -XWJh3Mr+uEZneLDzofuq4Dfg9DEOlN3SRL0s8XdmlI9e8uiywmsDI1LS4t1FILBI -8jsV ------END CERTIFICATE REQUEST----- diff --git a/conf/conf.d/certs/localhost/localhost.origin.key b/conf/conf.d/certs/localhost/localhost.origin.key deleted file mode 100644 index 152923ac..00000000 --- a/conf/conf.d/certs/localhost/localhost.origin.key +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,5000546EC66294E5 - -Vz1dfuev0GrvcWFkUA3YIeNXKRiDqoiyCwzDHGRAAMifNJOTrktPO3+qVTvRiNYs -Uy9OnddqsXaVc+BxTSjezth3rhuzlhW3H4UB+WqVfiu+Kcf43KyPG4GUoz51UEHu -c13o6FJC5z6FMNBQO++JtOei4Ws0nj2WnN9llVFnmhJiUJmYiJcljfTQZk4YwKDD -d/xOys6Mxgp60mjcjyvWjnHv6nT4JPaTHKaq9i+BYLT9aChh/5GR06TOFfwlYqSA -ipikOIG5rGWO60NmNUinyeUY6R6yAoPdV38XH7Umkqf81/yh1tu2HsjetU/TlTU8 -6Rl2jBzEf3RmC1zoiqIgZ9kohiI+TLC2yBs8sCQz4ubuyjvYO3xBMi72z02k86p+ -fz36lS+ziQlrv4NiulUBLGGUbrslOfk1bQi0UG/pOi1Fl/rB2Ki55ZCQNRgs43eK -VSPp9yLGc6Onite6gxYGm75rXZWe6cAQslqUoXEEf9QCPaX9NBOlKXjecoZ/9Mmy -m/30k53Z8McIR9UEjsRO3yZKJzfCCaLZThqtskeXSRL2g/VMR9pSW+BYLLPbQPrC -akSuFcdmWCcm3ONcD1VOPHLKPLD+QZuHzt3LMOec+aa4bT3CG1W6IQCebrTPKvAH -5Mh2OeD3WlXVAWDkzyNxZt9q0uwiTz8aWAjP7IJhpMmaoRZWua2TUgZbqYb0fGJK -fh4B1r9DsIJONd9e67oGNcAdLVdxrSbZFWeLZ+1KT93U+QyEReReAVbCf+QgewDa -FAWUQHHuCnJjMwKRMRF2NiSN8bt0Uvu7G6b/4YioYIftgHNxngvXBQ== ------END RSA PRIVATE KEY----- diff --git a/conf/conf.d/localhost.conf b/conf/conf.d/localhost.conf deleted file mode 100644 index b8fa9248..00000000 --- a/conf/conf.d/localhost.conf +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen 80; - server_name localhost; - root /var/www/html/localhost; - index index.php index.html index.htm; - #charset koi8-r; - - access_log /dev/null; - #access_log /var/log/nginx/nginx.localhost.access.log main; - error_log /var/log/nginx/nginx.localhost.error.log warn; - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root /usr/share/nginx/html; - } - - # proxy the PHP scripts to Apache listening on 127.0.0.1:80 - # - #location ~ \.php$ { - # proxy_pass http://127.0.0.1; - #} - - # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 - # - location ~ \.php$ { - fastcgi_pass php72:9000; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - } - - # deny access to .htaccess files, if Apache's document root - # concurs with nginx's one - # - #location ~ /\.ht { - # deny all; - #} -} - diff --git a/esdata/.gitignore b/data/esdata/.gitignore similarity index 100% rename from esdata/.gitignore rename to data/esdata/.gitignore diff --git a/mongo/.gitignore b/data/mongo/.gitignore similarity index 100% rename from mongo/.gitignore rename to data/mongo/.gitignore diff --git a/mysql/.gitignore b/data/mysql/.gitignore similarity index 100% rename from mysql/.gitignore rename to data/mysql/.gitignore diff --git a/data/mysql5/.gitignore b/data/mysql5/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/data/mysql5/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/dnmp.png b/dnmp.png deleted file mode 100644 index 2a736528..00000000 Binary files a/dnmp.png and /dev/null differ diff --git a/docker-compose-full.yml b/docker-compose-full.yml index 074d7d1a..b816d9a0 100644 --- a/docker-compose-full.yml +++ b/docker-compose-full.yml @@ -1,12 +1,18 @@ version: "3" services: nginx: - image: nginx:${NGINX_VERSION} + build: + context: ./services/nginx + args: + NGINX_VERSION: ${NGINX_VERSION} + CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} + NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS} ports: - "${NGINX_HTTP_HOST_PORT}:80" - "${NGINX_HTTPS_HOST_PORT}:443" volumes: - - ${SOURCE_DIR}:/var/www/html/:rw + - ${SOURCE_DIR}:/www/:rw + - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl:rw - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro - ${NGINX_LOG_DIR}:/var/log/nginx/:rw @@ -24,7 +30,7 @@ services: - "${OPENRESTY_HTTP_HOST_PORT}:80" - "${OPENRESTY_HTTPS_HOST_PORT}:443" volumes: - - ${SOURCE_DIR}:/var/www/html/:rw + - ${SOURCE_DIR}:/www/:rw - ${OPENRESTY_CONFD_DIR}:/etc/nginx/conf.d/:ro - ${OPENRESTY_CONF_FILE}:/usr/local/openresty/nginx/conf/nginx.conf:ro - ${OPENRESTY_CONF_FASTCGIPARAMS_FILE}:/usr/local/openresty/nginx/conf/fastcgi_params:ro @@ -34,20 +40,19 @@ services: networks: - default - php72: + php: build: - context: . + context: ./services/php args: - PHP_VERSION: ${PHP72_VERSION} - ALPINE_REPOSITORIES: ${ALPINE_REPOSITORIES} - PHP_EXTENSIONS: ${PHP72_EXTENSIONS} - MORE_EXTENSION_INSTALLER: php72.sh + PHP_VERSION: php:${PHP_VERSION}-fpm-alpine + CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} + PHP_EXTENSIONS: ${PHP_EXTENSIONS} TZ: "$TZ" volumes: - - ${SOURCE_DIR}:/var/www/html/:rw - - ${PHP72_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro - - ${PHP72_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw - - ${PHP72_LOG_DIR}:/var/log/php + - ${SOURCE_DIR}:/www/:rw + - ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro + - ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw + - ${PHP_LOG_DIR}:/var/log/php restart: always cap_add: - SYS_PTRACE @@ -56,15 +61,14 @@ services: php56: build: - context: . + context: ./services/php args: - PHP_VERSION: ${PHP56_VERSION} - ALPINE_REPOSITORIES: ${ALPINE_REPOSITORIES} + PHP_VERSION: php:${PHP56_VERSION}-fpm-alpine + CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} PHP_EXTENSIONS: ${PHP56_EXTENSIONS} - MORE_EXTENSION_INSTALLER: php56.sh TZ: "$TZ" volumes: - - ${SOURCE_DIR}:/var/www/html/:rw + - ${SOURCE_DIR}:/www/:rw - ${PHP56_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro - ${PHP56_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw - ${PHP56_LOG_DIR}:/var/log/php @@ -74,6 +78,39 @@ services: networks: - default + php54: + build: + context: ./services/php54 + args: + PHP_VERSION: php:${PHP54_VERSION}-fpm + CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} + PHP_EXTENSIONS: ${PHP54_EXTENSIONS} + TZ: "$TZ" + volumes: + - ${SOURCE_DIR}:/www/:rw + - ${PHP54_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro + - ${PHP54_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw + - ${PHP54_LOG_DIR}:/var/log/php + restart: always + cap_add: + - SYS_PTRACE + networks: + - default + + mysql5: + image: mysql:${MYSQL5_VERSION} + ports: + - "${MYSQL5_HOST_PORT}:3306" + volumes: + - ${MYSQL5_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro + - ${MYSQL5_DATA_DIR}:/var/lib/mysql/:rw + restart: always + networks: + - default + environment: + MYSQL_ROOT_PASSWORD: "${MYSQL5_ROOT_PASSWORD}" + TZ: "$TZ" + mysql: image: mysql:${MYSQL_VERSION} ports: @@ -173,13 +210,18 @@ services: - default elasticsearch: - image: elasticsearch:${ELASTICSEARCH_VERSION} + build: + context: ./services/elasticsearch + args: + ELASTICSEARCH_VERSION: ${ELASTICSEARCH_VERSION} + ELASTICSEARCH_PLUGINS: ${ELASTICSEARCH_PLUGINS} environment: - TZ=$TZ - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - ${ELASTICSEARCH_DATA_DIR}:/usr/share/elasticsearch/data + - ${ELASTICSEARCH_CONF_FILE}:/usr/share/elasticsearch/elasticsearch.yml hostname: elasticsearch restart: always ports: diff --git a/docker-compose-simple.yml b/docker-compose-simple.yml index 371e6ae8..56760840 100644 --- a/docker-compose-simple.yml +++ b/docker-compose-simple.yml @@ -1,12 +1,18 @@ version: "3" services: nginx: - image: nginx:${NGINX_VERSION} + build: + context: ./services/nginx + args: + NGINX_VERSION: ${NGINX_VERSION} + CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} + NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS} ports: - "${NGINX_HTTP_HOST_PORT}:80" - "${NGINX_HTTPS_HOST_PORT}:443" volumes: - - ${SOURCE_DIR}:/var/www/html/:rw + - ${SOURCE_DIR}:/www/:rw + - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl:rw - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro - ${NGINX_LOG_DIR}:/var/log/nginx/:rw @@ -16,20 +22,19 @@ services: networks: - default - php72: + php: build: - context: . + context: ./services/php args: - PHP_VERSION: ${PHP72_VERSION} - ALPINE_REPOSITORIES: ${ALPINE_REPOSITORIES} - PHP_EXTENSIONS: ${PHP72_EXTENSIONS} - MORE_EXTENSION_INSTALLER: php72.sh + PHP_VERSION: php:${PHP_VERSION}-fpm-alpine + CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} + PHP_EXTENSIONS: ${PHP_EXTENSIONS} TZ: "$TZ" volumes: - - ${SOURCE_DIR}:/var/www/html/:rw - - ${PHP72_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro - - ${PHP72_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw - - ${PHP72_LOG_DIR}:/var/log/php + - ${SOURCE_DIR}:/www/:rw + - ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro + - ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw + - ${PHP_LOG_DIR}:/var/log/php restart: always cap_add: - SYS_PTRACE diff --git a/env.sample b/env.sample index 7b5d3e3e..15f745dc 100644 --- a/env.sample +++ b/env.sample @@ -1,35 +1,51 @@ -################################################ -### environment config file ### -################################################ +# +# PHP source directory +# SOURCE_DIR=./www -############# Timezone for the containers ############ +# +# Container Timezone +# TZ=Asia/Shanghai +# +# Container package fetch url +# +# Can be empty, followings or others: +# mirrors.163.com +# mirrors.aliyun.com +# mirrors.ustc.edu.cn +# +CONTAINER_PACKAGE_URL=mirrors.aliyun.com -############# PHP Alpine Repositories ############ -ALPINE_REPOSITORIES=mirrors.aliyun.com - - -#################### Nginx ##################### +# +# Nginx +# NGINX_VERSION=1.15.7-alpine NGINX_HTTP_HOST_PORT=80 NGINX_HTTPS_HOST_PORT=443 -NGINX_CONFD_DIR=./conf/conf.d -NGINX_CONF_FILE=./conf/nginx.conf -NGINX_LOG_DIR=./log/nginx +NGINX_CONFD_DIR=./services/nginx/conf.d +NGINX_CONF_FILE=./services/nginx/nginx.conf +NGINX_SSL_CERTIFICATE_DIR=./services/nginx/ssl +NGINX_LOG_DIR=./logs/nginx +# Available apps: certbot +NGINX_INSTALL_APPS= -#################### Openresty ##################### +# +# Openresty +# OPENRESTY_VERSION=alpine OPENRESTY_HTTP_HOST_PORT=80 OPENRESTY_HTTPS_HOST_PORT=443 -OPENRESTY_CONFD_DIR=./conf/conf.d -OPENRESTY_CONF_FILE=./conf/openresty.conf -OPENRESTY_CONF_FASTCGIPARAMS_FILE=./conf/fastcgi_params -OPENRESTY_LOG_DIR=./log/nginx +OPENRESTY_CONFD_DIR=./services/openresty/conf.d +OPENRESTY_CONF_FILE=./services/openresty/openresty.conf +OPENRESTY_CONF_FASTCGIPARAMS_FILE=./services/openresty/fastcgi_params +OPENRESTY_LOG_DIR=./logs/nginx -############ PHP extensions ################# -# Available extensions: +# +# PHP7 +# +# Available PHP_EXTENSIONS: # # pdo_mysql,zip,pcntl,mysqli,mbstring,exif,bcmath,calendar, # sockets,gettext,shmop,sysvmsg,sysvsem,sysvshm,pdo_rebird, @@ -40,92 +56,134 @@ OPENRESTY_LOG_DIR=./log/nginx # amqp,mongodb,event,rar,ast,yac,yaconf,msgpack,igbinary, # seaslog,varnish # -# Please seperate theme with comma(,) if you use more than -# one. +# You can let it empty to avoid installing any extensions, +# or install multi plugins as: +# PHP_EXTENSIONS=pdo_mysql,mysqli,gd,curl,opcache # -# For other extensions not list here, you also can install -# via pecl or source, which show in script install.sh and -# php72.sh in extensions. -#################### end #################### - - -#################### PHP7.2 #################### -PHP72_VERSION=7.2.19 -PHP72_PHP_CONF_FILE=./conf/php.ini -PHP72_FPM_CONF_FILE=./conf/php-fpm.conf -PHP72_LOG_DIR=./log/php -PHP72_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache - +PHP_VERSION=7.2.19 +PHP_PHP_CONF_FILE=./services/php/php.ini +PHP_FPM_CONF_FILE=./services/php/php-fpm.conf +PHP_LOG_DIR=./logs/php +PHP_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache -#################### PHP5.6 #################### +# +# PHP5.6 +# PHP56_VERSION=5.6.40 -PHP56_PHP_CONF_FILE=./conf/php.ini -PHP56_FPM_CONF_FILE=./conf/php-fpm.conf -PHP56_LOG_DIR=./log/php +PHP56_PHP_CONF_FILE=./services/php/php.ini +PHP56_FPM_CONF_FILE=./services/php/php-fpm.conf +PHP56_LOG_DIR=./logs/php PHP56_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache -#################### RABBITMQ ##################### +# +# PHP5.4 +# +PHP54_VERSION=5.4.45 +PHP54_PHP_CONF_FILE=./services/php54/php.ini +PHP54_FPM_CONF_FILE=./services/php54/php-fpm.conf +PHP54_LOG_DIR=./logs/php +PHP54_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache + +# +# RABBITMQ +# RABBITMQ_VERSION=management RABBITMQ_HOST_PORT_C=5672 RABBITMQ_HOST_PORT_S=15672 RABBITMQ_DEFAULT_USER=myuser RABBITMQ_DEFAULT_PASS=mypass -#################### MONGODB ##################### +# +# MONGODB +# MONGODB_VERSION=4.1 -MONGODB_DATA_DIR=./mongo +MONGODB_DATA_DIR=./data/mongo MONGODB_HOST_PORT=27017 MONGODB_INITDB_ROOT_USERNAME=root MONGODB_INITDB_ROOT_PASSWORD=123456 -#################### ELASTICSEARCH ##################### +# +# ELASTICSEARCH +# +# Available ELASTICSEARCH_PLUGINS: +# +# amazon-ec2,analysis-icu,analysis-kuromoji,analysis-nori, +# analysis-phonetic,analysis-smartcn,analysis-stempel, +# analysis-ukrainian,discovery-azure-classic,discovery-ec2, +# discovery-file,discovery-gce,google-cloud-storage, +# ingest-attachment,ingest-geoip,ingest-user-agent,mapper-murmur3, +# mapper-size,microsoft-azure-storage,qa,repository-azure, +# repository-gcs,repository-hdfs,repository-s3,store-smb, +# analysis-ik,analysis-pinyin +# +# You can let it empty to avoid installing any plugins, +# or install multi plugins as: +# ELASTICSEARCH_PLUGINS=analysis-ik,analysis-pinyin +# ELASTICSEARCH_VERSION=7.1.1 -ELASTICSEARCH_HOSTNAME=kibana -ELASTICSEARCH_DATA_DIR=./esdata +ELASTICSEARCH_DATA_DIR=./data/esdata +ELASTICSEARCH_CONF_FILE=./services/elasticsearch/elasticsearch.yml ELASTICSEARCH_HOST_PORT_C=9200 ELASTICSEARCH_HOST_PORT_S=9300 +ELASTICSEARCH_PLUGINS=analysis-ik -#################### KIBANA ##################### +# +# KIBANA +# KIBANA_VERSION=7.1.1 KIBANA_HOST=5601 -#################### LOGSTASH ##################### +# +# LOGSTASH +# LOGSTASH_VERSION=7.1.1 LOGSTASH_HOST=5601 LOGSTASH_HOST_PORT_C=9600 LOGSTASH_HOST_PORT_S=5044 -#################### MySQL ##################### +# +# MySQL8 +# MYSQL_VERSION=8.0.13 MYSQL_HOST_PORT=3306 MYSQL_ROOT_PASSWORD=123456 -MYSQL_DATA_DIR=./mysql -MYSQL_CONF_FILE=./conf/mysql.cnf +MYSQL_DATA_DIR=./data/mysql +MYSQL_CONF_FILE=./services/mysql/mysql.cnf +# +# MySQL5 +# +MYSQL5_VERSION=5.7.29 +MYSQL5_HOST_PORT=3305 +MYSQL5_ROOT_PASSWORD=123456 +MYSQL5_DATA_DIR=./data/mysql5 +MYSQL5_CONF_FILE=./services/mysql5/mysql.cnf -#################### Redis ##################### +# +# Redis +# REDIS_VERSION=5.0.3-alpine REDIS_HOST_PORT=6379 -REDIS_CONF_FILE=./conf/redis.conf +REDIS_CONF_FILE=./services/redis/redis.conf -#################### Memcached ##################### +# +# Memcached +# MEMCACHED_VERSION=alpine MEMCACHED_HOST_PORT=11211 MEMCACHED_CACHE_SIZE=128 - -################## phpMyAdmin ################## +# +# phpMyAdmin +# PHPMYADMIN_HOST_PORT=8080 - -################# redisMyAdmin ################# +# +# redisMyAdmin +# REDISMYADMIN_HOST_PORT=8081 -################# AdminMongo ################# +# +# AdminMongo +# ADMINMONGO_HOST_PORT=1234 - -#################### LOCALTIME ##################### -LOCALTIME_DIR=./conf/localtime - -#################### TIMEZONE ##################### -TIMEZONE_DIR=./conf/timezone diff --git a/extensions/install.sh b/extensions/install.sh deleted file mode 100644 index d2f5d4b4..00000000 --- a/extensions/install.sh +++ /dev/null @@ -1,307 +0,0 @@ -#!/bin/sh - -echo -echo "============================================" -echo "Install extensions from : install.sh" -echo "PHP version : ${PHP_VERSION}" -echo "Extra Extensions : ${PHP_EXTENSIONS}" -echo "Multicore Compilation : ${MC}" -echo "Work directory : ${PWD}" -echo "============================================" -echo - - -if [ "${PHP_EXTENSIONS}" != "" ]; then - echo "---------- Install general dependencies ----------" - apk add --no-cache autoconf g++ libtool make curl-dev libxml2-dev libevent-dev linux-headers --repository http://dl-3.alpinelinux.org/alpine/edge/testing gnu-libiconv -fi - -if [ -z "${EXTENSIONS##*,pdo_mysql,*}" ]; then - echo "---------- Install pdo_mysql ----------" - docker-php-ext-install ${MC} pdo_mysql -fi - -if [ -z "${EXTENSIONS##*,zip,*}" ]; then - echo "---------- Install zip ----------" - docker-php-ext-install ${MC} zip -fi - -if [ -z "${EXTENSIONS##*,pcntl,*}" ]; then - echo "---------- Install pcntl ----------" - docker-php-ext-install ${MC} pcntl -fi - -if [ -z "${EXTENSIONS##*,mysqli,*}" ]; then - echo "---------- Install mysqli ----------" - docker-php-ext-install ${MC} mysqli -fi - -if [ -z "${EXTENSIONS##*,mbstring,*}" ]; then - echo "---------- Install mbstring ----------" - docker-php-ext-install ${MC} mbstring -fi - -if [ -z "${EXTENSIONS##*,exif,*}" ]; then - echo "---------- Install exif ----------" - docker-php-ext-install ${MC} exif -fi - -if [ -z "${EXTENSIONS##*,bcmath,*}" ]; then - echo "---------- Install bcmath ----------" - docker-php-ext-install ${MC} bcmath -fi - -if [ -z "${EXTENSIONS##*,calendar,*}" ]; then - echo "---------- Install calendar ----------" - docker-php-ext-install ${MC} calendar -fi - -if [ -z "${EXTENSIONS##*,zend_test,*}" ]; then - echo "---------- Install zend_test ----------" - docker-php-ext-install ${MC} zend_test -fi - -if [ -z "${EXTENSIONS##*,opcache,*}" ]; then - echo "---------- Install opcache ----------" - docker-php-ext-install opcache -fi - -if [ -z "${EXTENSIONS##*,sockets,*}" ]; then - echo "---------- Install sockets ----------" - docker-php-ext-install ${MC} sockets -fi - -if [ -z "${EXTENSIONS##*,gettext,*}" ]; then - echo "---------- Install gettext ----------" - docker-php-ext-install ${MC} gettext -fi - -if [ -z "${EXTENSIONS##*,shmop,*}" ]; then - echo "---------- Install shmop ----------" - docker-php-ext-install ${MC} shmop -fi - -if [ -z "${EXTENSIONS##*,sysvmsg,*}" ]; then - echo "---------- Install sysvmsg ----------" - docker-php-ext-install ${MC} sysvmsg -fi - -if [ -z "${EXTENSIONS##*,sysvsem,*}" ]; then - echo "---------- Install sysvsem ----------" - docker-php-ext-install ${MC} sysvsem -fi - -if [ -z "${EXTENSIONS##*,sysvshm,*}" ]; then - echo "---------- Install sysvshm ----------" - docker-php-ext-install ${MC} sysvshm -fi - -if [ -z "${EXTENSIONS##*,pdo_firebird,*}" ]; then - echo "---------- Install pdo_firebird ----------" - docker-php-ext-install ${MC} pdo_firebird -fi - -if [ -z "${EXTENSIONS##*,pdo_dblib,*}" ]; then - echo "---------- Install pdo_dblib ----------" - docker-php-ext-install ${MC} pdo_dblib -fi - -if [ -z "${EXTENSIONS##*,pdo_oci,*}" ]; then - echo "---------- Install pdo_oci ----------" - docker-php-ext-install ${MC} pdo_oci -fi - -if [ -z "${EXTENSIONS##*,pdo_odbc,*}" ]; then - echo "---------- Install pdo_odbc ----------" - docker-php-ext-install ${MC} pdo_odbc -fi - -if [ -z "${EXTENSIONS##*,pdo_pgsql,*}" ]; then - echo "---------- Install pdo_pgsql ----------" - apk --no-cache add postgresql-dev \ - && docker-php-ext-install ${MC} pdo_pgsql -fi - -if [ -z "${EXTENSIONS##*,pgsql,*}" ]; then - echo "---------- Install pgsql ----------" - apk --no-cache add postgresql-dev \ - && docker-php-ext-install ${MC} pgsql -fi - -if [ -z "${EXTENSIONS##*,oci8,*}" ]; then - echo "---------- Install oci8 ----------" - docker-php-ext-install ${MC} oci8 -fi - -if [ -z "${EXTENSIONS##*,odbc,*}" ]; then - echo "---------- Install odbc ----------" - docker-php-ext-install ${MC} odbc -fi - -if [ -z "${EXTENSIONS##*,dba,*}" ]; then - echo "---------- Install dba ----------" - docker-php-ext-install ${MC} dba -fi - -if [ -z "${EXTENSIONS##*,interbase,*}" ]; then - echo "---------- Install interbase ----------" - echo "Alpine linux do not support interbase/firebird!!!" - #docker-php-ext-install ${MC} interbase -fi - -if [ -z "${EXTENSIONS##*,gd,*}" ]; then - echo "---------- Install gd ----------" - apk add --no-cache freetype-dev libjpeg-turbo-dev libpng-dev \ - && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ - && docker-php-ext-install ${MC} gd -fi - -if [ -z "${EXTENSIONS##*,intl,*}" ]; then - echo "---------- Install intl ----------" - apk add --no-cache icu-dev - docker-php-ext-install ${MC} intl -fi - -if [ -z "${EXTENSIONS##*,bz2,*}" ]; then - echo "---------- Install bz2 ----------" - apk add --no-cache bzip2-dev - docker-php-ext-install ${MC} bz2 -fi - -if [ -z "${EXTENSIONS##*,soap,*}" ]; then - echo "---------- Install soap ----------" - docker-php-ext-install ${MC} soap -fi - -if [ -z "${EXTENSIONS##*,xsl,*}" ]; then - echo "---------- Install xsl ----------" - apk add --no-cache libxslt-dev - docker-php-ext-install ${MC} xsl -fi - -if [ -z "${EXTENSIONS##*,xmlrpc,*}" ]; then - echo "---------- Install xmlrpc ----------" - apk add --no-cache libxslt-dev - docker-php-ext-install ${MC} xmlrpc -fi - -if [ -z "${EXTENSIONS##*,wddx,*}" ]; then - echo "---------- Install wddx ----------" - apk add --no-cache libxslt-dev - docker-php-ext-install ${MC} wddx -fi - -if [ -z "${EXTENSIONS##*,curl,*}" ]; then - echo "---------- Install curl ----------" - docker-php-ext-install ${MC} curl -fi - -if [ -z "${EXTENSIONS##*,readline,*}" ]; then - echo "---------- Install readline ----------" - apk add --no-cache readline-dev - apk add --no-cache libedit-dev - docker-php-ext-install ${MC} readline -fi - -if [ -z "${EXTENSIONS##*,snmp,*}" ]; then - echo "---------- Install snmp ----------" - apk add --no-cache net-snmp-dev - docker-php-ext-install ${MC} snmp -fi - -if [ -z "${EXTENSIONS##*,pspell,*}" ]; then - echo "---------- Install pspell ----------" - apk add --no-cache aspell-dev - apk add --no-cache aspell-en - docker-php-ext-install ${MC} pspell -fi - -if [ -z "${EXTENSIONS##*,recode,*}" ]; then - echo "---------- Install recode ----------" - apk add --no-cache recode-dev - docker-php-ext-install ${MC} recode -fi - -if [ -z "${EXTENSIONS##*,tidy,*}" ]; then - echo "---------- Install tidy ----------" - apk add --no-cache tidyhtml-dev=5.2.0-r1 --repository http://${ALPINE_REPOSITORIES}/alpine/v3.6/community - docker-php-ext-install ${MC} tidy -fi - -if [ -z "${EXTENSIONS##*,gmp,*}" ]; then - echo "---------- Install gmp ----------" - apk add --no-cache gmp-dev - docker-php-ext-install ${MC} gmp -fi - -if [ -z "${EXTENSIONS##*,imap,*}" ]; then - echo "---------- Install imap ----------" - apk add --no-cache imap-dev - docker-php-ext-configure imap --with-imap --with-imap-ssl - docker-php-ext-install ${MC} imap -fi - -if [ -z "${EXTENSIONS##*,ldap,*}" ]; then - echo "---------- Install ldap ----------" - apk add --no-cache ldb-dev - apk add --no-cache openldap-dev - docker-php-ext-install ${MC} ldap -fi - -if [ -z "${EXTENSIONS##*,imagick,*}" ]; then - echo "---------- Install imagick ----------" - apk add --no-cache file-dev - apk add --no-cache imagemagick-dev - printf "\n" | pecl install imagick-3.4.4 - docker-php-ext-enable imagick -fi - -if [ -z "${EXTENSIONS##*,rar,*}" ]; then - echo "---------- Install rar ----------" - printf "\n" | pecl install rar - docker-php-ext-enable rar -fi - -if [ -z "${EXTENSIONS##*,ast,*}" ]; then - echo "---------- Install ast ----------" - printf "\n" | pecl install ast - docker-php-ext-enable ast -fi - -if [ -z "${EXTENSIONS##*,msgpack,*}" ]; then - echo "---------- Install msgpack ----------" - printf "\n" | pecl install msgpack - docker-php-ext-enable msgpack -fi - -if [ -z "${EXTENSIONS##*,igbinary,*}" ]; then - echo "---------- Install igbinary ----------" - printf "\n" | pecl install igbinary - docker-php-ext-enable igbinary -fi - - -if [ -z "${EXTENSIONS##*,yac,*}" ]; then - echo "---------- Install yac ----------" - printf "\n" | pecl install yac-2.0.2 - docker-php-ext-enable yac -fi - -if [ -z "${EXTENSIONS##*,yaconf,*}" ]; then - echo "---------- Install yaconf ----------" - printf "\n" | pecl install yaconf - docker-php-ext-enable yaconf -fi - -if [ -z "${EXTENSIONS##*,seaslog,*}" ]; then - echo "---------- Install seaslog ----------" - printf "\n" | pecl install seaslog - docker-php-ext-enable seaslog -fi - -if [ -z "${EXTENSIONS##*,varnish,*}" ]; then - echo "---------- Install varnish ----------" - apk add --no-cache varnish - printf "\n" | pecl install varnish - docker-php-ext-enable varnish -fi diff --git a/extensions/php56.sh b/extensions/php56.sh deleted file mode 100644 index 7b149f0e..00000000 --- a/extensions/php56.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/sh - -echo -echo "============================================" -echo "Install extensions from : ${MORE_EXTENSION_INSTALLER}" -echo "PHP version : ${PHP_VERSION}" -echo "Extra Extensions : ${PHP_EXTENSIONS}" -echo "Multicore Compilation : ${MC}" -echo "Work directory : ${PWD}" -echo "============================================" -echo - - -if [ -z "${EXTENSIONS##*,mcrypt,*}" ]; then - echo "---------- Install mcrypt ----------" - apk add --no-cache libmcrypt-dev \ - && docker-php-ext-install ${MC} mcrypt -fi - - -if [ -z "${EXTENSIONS##*,mysql,*}" ]; then - echo "---------- Install mysql ----------" - docker-php-ext-install ${MC} mysql -fi - - -if [ -z "${EXTENSIONS##*,mongodb,*}" ]; then - echo "---------- Install mongodb ----------" - pecl install mongodb - docker-php-ext-enable mongodb -fi - -if [ -z "${EXTENSIONS##*,sodium,*}" ]; then - echo "---------- Install sodium ----------" - apk add --no-cache libsodium-dev - docker-php-ext-install ${MC} sodium -fi - -if [ -z "${EXTENSIONS##*,amqp,*}" ]; then - echo "---------- Install amqp ----------" - apk add --no-cache rabbitmq-c-dev - cd /tmp/extensions - pecl install amqp-1.9.4.tgz - docker-php-ext-enable amqp -fi - -if [ -z "${EXTENSIONS##*,redis,*}" ]; then - echo "---------- Install redis ----------" - mkdir redis \ - && tar -xf redis-4.1.1.tgz -C redis --strip-components=1 \ - && ( cd redis && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable redis -fi - - -if [ -z "${EXTENSIONS##*,memcached,*}" ]; then - echo "---------- Install memcached ----------" - apk add --no-cache libmemcached-dev zlib-dev - printf "\n" | pecl install memcached-2.2.0 - docker-php-ext-enable memcached -fi - - -if [ -z "${EXTENSIONS##*,xdebug,*}" ]; then - echo "---------- Install xdebug ----------" - mkdir xdebug \ - && tar -xf xdebug-2.5.5.tgz -C xdebug --strip-components=1 \ - && ( cd xdebug && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable xdebug -fi - - -if [ -z "${EXTENSIONS##*,swoole,*}" ]; then - echo "---------- Install swoole ----------" - mkdir swoole \ - && tar -xf swoole-2.0.11.tgz -C swoole --strip-components=1 \ - && ( cd swoole && phpize && ./configure --enable-openssl && make ${MC} && make install ) \ - && docker-php-ext-enable swoole -fi - -if [ -z "${EXTENSIONS##*,yaf,*}" ]; then - echo "---------- Install yaf ----------" - mkdir yaf \ - && tar -xf yaf-2.3.5.tgz -C yaf --strip-components=1 \ - && ( cd yaf && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable yaf -fi - -if [ -z "${EXTENSIONS##*,pdo_sqlsrv,*}" ]; then - echo "---------- Install pdo_sqlsrv ----------" - echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}" -fi - -if [ -z "${EXTENSIONS##*,sqlsrv,*}" ]; then - echo "---------- Install sqlsrv ----------" - echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}" -fi \ No newline at end of file diff --git a/extensions/php72.sh b/extensions/php72.sh deleted file mode 100644 index 0b02fc45..00000000 --- a/extensions/php72.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/sh - -echo -echo "============================================" -echo "Install extensions from : ${MORE_EXTENSION_INSTALLER}" -echo "PHP version : ${PHP_VERSION}" -echo "Extra Extensions : ${PHP_EXTENSIONS}" -echo "Multicore Compilation : ${MC}" -echo "Work directory : ${PWD}" -echo "============================================" -echo - - -if [ -z "${EXTENSIONS##*,mcrypt,*}" ]; then - echo "---------- mcrypt was REMOVED from PHP 7.2.0 ----------" -fi - - -if [ -z "${EXTENSIONS##*,mysql,*}" ]; then - echo "---------- mysql was REMOVED from PHP 7.0.0 ----------" -fi - -if [ -z "${EXTENSIONS##*,event,*}" ]; then - echo "---------- Install event ----------" - mkdir event \ - && tar -xf event-2.5.3.tgz -C event --strip-components=1 \ - && ( cd event && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable --ini-name event.ini event -fi - -if [ -z "${EXTENSIONS##*,sodium,*}" ]; then - echo "---------- Install sodium ----------" - echo "Sodium is bundled with PHP from PHP 7.2.0 " -fi - -if [ -z "${EXTENSIONS##*,mongodb,*}" ]; then - echo "---------- Install mongodb ----------" - mkdir mongodb \ - && tar -xf mongodb-1.5.5.tgz -C mongodb --strip-components=1 \ - && ( cd mongodb && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable mongodb -fi - -if [ -z "${EXTENSIONS##*,yaf,*}" ]; then - echo "---------- Install yaf ----------" - pecl install yaf - docker-php-ext-enable yaf -fi - -if [ -z "${EXTENSIONS##*,amqp,*}" ]; then - echo "---------- Install amqp ----------" - apk add --no-cache rabbitmq-c-dev - cd /tmp/extensions - pecl install amqp-1.9.4.tgz - docker-php-ext-enable amqp -fi - - -if [ -z "${EXTENSIONS##*,redis,*}" ]; then - echo "---------- Install redis ----------" - mkdir redis \ - && tar -xf redis-4.1.1.tgz -C redis --strip-components=1 \ - && ( cd redis && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable redis -fi - - -if [ -z "${EXTENSIONS##*,memcached,*}" ]; then - echo "---------- Install memcached ----------" - apk add --no-cache libmemcached-dev zlib-dev - printf "\n" | pecl install memcached-3.1.3 - docker-php-ext-enable memcached -fi - - -if [ -z "${EXTENSIONS##*,xdebug,*}" ]; then - echo "---------- Install xdebug ----------" - mkdir xdebug \ - && tar -xf xdebug-2.6.1.tgz -C xdebug --strip-components=1 \ - && ( cd xdebug && phpize && ./configure && make ${MC} && make install ) \ - && docker-php-ext-enable xdebug -fi - - -if [ -z "${EXTENSIONS##*,swoole,*}" ]; then - echo "---------- Install swoole ----------" - mkdir swoole \ - && tar -xf swoole-4.4.2.tgz -C swoole --strip-components=1 \ - && ( cd swoole && phpize && ./configure --enable-openssl && make ${MC} && make install ) \ - && docker-php-ext-enable swoole -fi - -if [ -z "${EXTENSIONS##*,pdo_sqlsrv,*}" ]; then - echo "---------- Install pdo_sqlsrv ----------" - apk add --no-cache unixodbc-dev - pecl install pdo_sqlsrv - docker-php-ext-enable pdo_sqlsrv -fi - -if [ -z "${EXTENSIONS##*,sqlsrv,*}" ]; then - echo "---------- Install sqlsrv ----------" - apk add --no-cache unixodbc-dev - printf "\n" | pecl install sqlsrv - docker-php-ext-enable sqlsrv -fi diff --git a/log/nginx/.gitignore b/logs/nginx/.gitignore similarity index 100% rename from log/nginx/.gitignore rename to logs/nginx/.gitignore diff --git a/log/php/.gitignore b/logs/php/.gitignore similarity index 100% rename from log/php/.gitignore rename to logs/php/.gitignore diff --git a/services/elasticsearch/Dockerfile b/services/elasticsearch/Dockerfile new file mode 100644 index 00000000..176f3eaa --- /dev/null +++ b/services/elasticsearch/Dockerfile @@ -0,0 +1,116 @@ +ARG ELASTICSEARCH_VERSION +FROM elasticsearch:${ELASTICSEARCH_VERSION} + +ARG ELASTICSEARCH_VERSION +ARG ELASTICSEARCH_PLUGINS + +ENV PLUGINS=",${ELASTICSEARCH_PLUGINS}," + +RUN if [[ -z "${PLUGINS##*,amazon-ec2,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install amazon-ec2; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-icu,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-icu; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-kuromoji,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-kuromoji; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-nori,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-nori; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-phonetic,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-phonetic; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-smartcn,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-smartcn; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-stempel,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-stempel; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-ukrainian,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install analysis-ukrainian; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,discovery-azure-classic,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install discovery-azure-classic; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,discovery-ec2,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install discovery-ec2; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,discovery-file,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install discovery-file; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,discovery-gce,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install discovery-gce; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,google-cloud-storage,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install google-cloud-storage; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,ingest-attachment,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install ingest-attachment; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,ingest-geoip,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install ingest-geoip; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,ingest-user-agent,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install ingest-user-agent; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,mapper-murmur3,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install mapper-murmur3; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,mapper-size,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install mapper-size; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,microsoft-azure-storage,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install microsoft-azure-storage; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,qa,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install qa; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,repository-azure,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install repository-azure; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,repository-gcs,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install repository-gcs; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,repository-hdfs,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install repository-hdfs; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,repository-s3,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install repository-s3; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,store-smb,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install store-smb; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-ik,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v${ELASTICSEARCH_VERSION}/elasticsearch-analysis-ik-${ELASTICSEARCH_VERSION}.zip; \ + fi \ + && \ + if [[ -z "${PLUGINS##*,analysis-pinyin,*}" ]]; then \ + printf "y\n" | elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v${ELASTICSEARCH_VERSION}/elasticsearch-analysis-pinyin-${ELASTICSEARCH_VERSION}.zip; \ + fi + diff --git a/services/elasticsearch/elasticsearch.yml b/services/elasticsearch/elasticsearch.yml new file mode 100644 index 00000000..ee4e1667 --- /dev/null +++ b/services/elasticsearch/elasticsearch.yml @@ -0,0 +1,9 @@ +cluster.name: "docker-cluster" +network.host: 0.0.0.0 + +# minimum_master_nodes need to be explicitly set when bound on a public IP +# set to 1 to allow single node clusters +# Details: https://github.com/elastic/elasticsearch/pull/17288 +discovery.zen.minimum_master_nodes: 1 + +index.analysis.analyzer.default.type: standard \ No newline at end of file diff --git a/services/mysql/mysql.cnf b/services/mysql/mysql.cnf new file mode 100644 index 00000000..3a7dda53 --- /dev/null +++ b/services/mysql/mysql.cnf @@ -0,0 +1,29 @@ +[client] +port = 3306 +default-character-set = utf8mb4 + + +[mysqld] +user = mysql +port = 3306 +sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES + +default-storage-engine = InnoDB +default-authentication-plugin = mysql_native_password +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci +init_connect = 'SET NAMES utf8mb4' + +disable-log-bin +skip-character-set-client-handshake +explicit_defaults_for_timestamp + +slow_query_log +long_query_time = 3 +slow-query-log-file = /var/lib/mysql/mysql.slow.log +log-error = /var/lib/mysql/mysql.error.log + +default-time-zone = '+8:00' + +[mysql] +default-character-set = utf8mb4 diff --git a/conf/mysql.cnf b/services/mysql5/mysql.cnf similarity index 100% rename from conf/mysql.cnf rename to services/mysql5/mysql.cnf diff --git a/services/nginx/Dockerfile b/services/nginx/Dockerfile new file mode 100644 index 00000000..53fbb681 --- /dev/null +++ b/services/nginx/Dockerfile @@ -0,0 +1,20 @@ +ARG NGINX_VERSION +FROM nginx:${NGINX_VERSION} + +ARG TZ +ARG NGINX_VERSION +ARG CONTAINER_PACKAGE_URL +ARG NGINX_INSTALL_APPS + +ENV INSTALL_APPS=",${NGINX_INSTALL_APPS}," + +RUN if [ "${CONTAINER_PACKAGE_URL}" != "" ]; then \ + sed -i "s/dl-cdn.alpinelinux.org/${CONTAINER_PACKAGE_URL}/g" /etc/apk/repositories; \ + fi + +RUN if [ -z "${INSTALL_APPS##*,certbot,*}" ]; then \ + echo "---------- Install certbot ----------"; \ + apk add --no-cache certbot; \ + fi + +WORKDIR /www diff --git a/conf/conf.d/.gitignore b/services/nginx/conf.d/.gitignore similarity index 100% rename from conf/conf.d/.gitignore rename to services/nginx/conf.d/.gitignore diff --git a/services/nginx/conf.d/localhost.conf b/services/nginx/conf.d/localhost.conf new file mode 100644 index 00000000..2466c74a --- /dev/null +++ b/services/nginx/conf.d/localhost.conf @@ -0,0 +1,91 @@ +server { + listen 80; + server_name localhost; + root /www/localhost; + index index.php index.html index.htm; + #charset koi8-r; + + access_log /dev/null; + #access_log /var/log/nginx/nginx.localhost.access.log main; + error_log /var/log/nginx/nginx.localhost.error.log warn; + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass php:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} + +server { + listen 443 ssl http2; + server_name localhost; + root /www/localhost; + index index.php index.html index.htm; + #charset koi8-r; + + access_log /dev/null; + #access_log /var/log/nginx/nginx.localhost.access.log main; + error_log /var/log/nginx/nginx.localhost.error.log warn; + + #error_page 404 /404.html; + + ssl_certificate /ssl/localhost/localhost.crt; + ssl_certificate_key /ssl/localhost/localhost.key; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + location ~ \.php$ { + fastcgi_pass php:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} + diff --git a/conf/nginx.conf b/services/nginx/nginx.conf similarity index 100% rename from conf/nginx.conf rename to services/nginx/nginx.conf diff --git a/conf/conf.d/certs/localhost/localhost.crt b/services/nginx/ssl/localhost/localhost.crt similarity index 100% rename from conf/conf.d/certs/localhost/localhost.crt rename to services/nginx/ssl/localhost/localhost.crt diff --git a/conf/conf.d/certs/localhost/localhost.key b/services/nginx/ssl/localhost/localhost.key similarity index 100% rename from conf/conf.d/certs/localhost/localhost.key rename to services/nginx/ssl/localhost/localhost.key diff --git a/conf/fastcgi_params b/services/openresty/fastcgi_params similarity index 100% rename from conf/fastcgi_params rename to services/openresty/fastcgi_params diff --git a/conf/openresty.conf b/services/openresty/openresty.conf similarity index 100% rename from conf/openresty.conf rename to services/openresty/openresty.conf diff --git a/services/php/Dockerfile b/services/php/Dockerfile new file mode 100644 index 00000000..4720f9a9 --- /dev/null +++ b/services/php/Dockerfile @@ -0,0 +1,36 @@ +ARG PHP_VERSION +FROM ${PHP_VERSION} + +ARG TZ +ARG PHP_EXTENSIONS +ARG CONTAINER_PACKAGE_URL + + +COPY ./extensions /tmp/extensions +WORKDIR /tmp/extensions + + +RUN if [ "${CONTAINER_PACKAGE_URL}" != "" ]; then \ + sed -i "s/dl-cdn.alpinelinux.org/${CONTAINER_PACKAGE_URL}/g" /etc/apk/repositories; \ + fi + + +RUN if [ "${PHP_EXTENSIONS}" != "" ]; then \ + apk add --no-cache autoconf g++ libtool make curl-dev linux-headers; \ + fi + + +RUN chmod +x install.sh && sh install.sh && rm -rf /tmp/extensions + + +RUN apk --no-cache add tzdata \ + && cp "/usr/share/zoneinfo/$TZ" /etc/localtime \ + && echo "$TZ" > /etc/timezone + + +# Fix: https://github.com/docker-library/php/issues/240 +RUN apk add gnu-libiconv --no-cache --repository http://${CONTAINER_PACKAGE_URL}/alpine/edge/community/ --allow-untrusted +ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php + + +WORKDIR /www diff --git a/extensions/amqp-1.9.4.tgz b/services/php/extensions/amqp-1.9.4.tgz similarity index 100% rename from extensions/amqp-1.9.4.tgz rename to services/php/extensions/amqp-1.9.4.tgz diff --git a/extensions/event-2.5.3.tgz b/services/php/extensions/event-2.5.3.tgz similarity index 100% rename from extensions/event-2.5.3.tgz rename to services/php/extensions/event-2.5.3.tgz diff --git a/services/php/extensions/install.sh b/services/php/extensions/install.sh new file mode 100644 index 00000000..a0d38af0 --- /dev/null +++ b/services/php/extensions/install.sh @@ -0,0 +1,505 @@ +#!/bin/sh + +export MC="-j$(nproc)" + +echo +echo "============================================" +echo "Install extensions from : install.sh" +echo "PHP version : ${PHP_VERSION}" +echo "Extra Extensions : ${PHP_EXTENSIONS}" +echo "Multicore Compilation : ${MC}" +echo "Container package url : ${CONTAINER_PACKAGE_URL}" +echo "Work directory : ${PWD}" +echo "============================================" +echo + + +export EXTENSIONS=",${PHP_EXTENSIONS}," + + +# +# Check if current php version is greater than or equal to +# specific version. +# +# For example, to check if current php is greater than or +# equal to PHP 7.0: +# +# isPhpVersionGreaterOrEqual 7 0 +# +# Param 1: Specific PHP Major version +# Param 2: Specific PHP Minor version +# Return : 1 if greater than or equal to, 0 if less than +# +isPhpVersionGreaterOrEqual() + { + local PHP_MAJOR_VERSION=$(php -r "echo PHP_MAJOR_VERSION;") + local PHP_MINOR_VERSION=$(php -r "echo PHP_MINOR_VERSION;") + + if [[ "$PHP_MAJOR_VERSION" -gt "$1" || "$PHP_MAJOR_VERSION" -eq "$1" && "$PHP_MINOR_VERSION" -ge "$2" ]]; then + return 1; + else + return 0; + fi +} + + +# +# Install extension from package file(.tgz), +# For example: +# +# installExtensionFromTgz redis-4.1.1 +# +# Param 1: Package name with version +# Param 2: enable options +# +installExtensionFromTgz() +{ + tgzName=$1 + extensionName="${tgzName%%-*}" + + mkdir ${extensionName} + tar -xf ${tgzName}.tgz -C ${extensionName} --strip-components=1 + ( cd ${extensionName} && phpize && ./configure && make ${MC} && make install ) + + docker-php-ext-enable ${extensionName} $2 +} + + +if [[ -z "${EXTENSIONS##*,pdo_mysql,*}" ]]; then + echo "---------- Install pdo_mysql ----------" + docker-php-ext-install ${MC} pdo_mysql +fi + +if [[ -z "${EXTENSIONS##*,pcntl,*}" ]]; then + echo "---------- Install pcntl ----------" + docker-php-ext-install ${MC} pcntl +fi + +if [[ -z "${EXTENSIONS##*,mysqli,*}" ]]; then + echo "---------- Install mysqli ----------" + docker-php-ext-install ${MC} mysqli +fi + +if [[ -z "${EXTENSIONS##*,mbstring,*}" ]]; then + echo "---------- mbstring is installed ----------" +fi + +if [[ -z "${EXTENSIONS##*,exif,*}" ]]; then + echo "---------- Install exif ----------" + docker-php-ext-install ${MC} exif +fi + +if [[ -z "${EXTENSIONS##*,bcmath,*}" ]]; then + echo "---------- Install bcmath ----------" + docker-php-ext-install ${MC} bcmath +fi + +if [[ -z "${EXTENSIONS##*,calendar,*}" ]]; then + echo "---------- Install calendar ----------" + docker-php-ext-install ${MC} calendar +fi + +if [[ -z "${EXTENSIONS##*,zend_test,*}" ]]; then + echo "---------- Install zend_test ----------" + docker-php-ext-install ${MC} zend_test +fi + +if [[ -z "${EXTENSIONS##*,opcache,*}" ]]; then + echo "---------- Install opcache ----------" + docker-php-ext-install opcache +fi + +if [[ -z "${EXTENSIONS##*,sockets,*}" ]]; then + echo "---------- Install sockets ----------" + docker-php-ext-install ${MC} sockets +fi + +if [[ -z "${EXTENSIONS##*,gettext,*}" ]]; then + echo "---------- Install gettext ----------" + docker-php-ext-install ${MC} gettext +fi + +if [[ -z "${EXTENSIONS##*,shmop,*}" ]]; then + echo "---------- Install shmop ----------" + docker-php-ext-install ${MC} shmop +fi + +if [[ -z "${EXTENSIONS##*,sysvmsg,*}" ]]; then + echo "---------- Install sysvmsg ----------" + docker-php-ext-install ${MC} sysvmsg +fi + +if [[ -z "${EXTENSIONS##*,sysvsem,*}" ]]; then + echo "---------- Install sysvsem ----------" + docker-php-ext-install ${MC} sysvsem +fi + +if [[ -z "${EXTENSIONS##*,sysvshm,*}" ]]; then + echo "---------- Install sysvshm ----------" + docker-php-ext-install ${MC} sysvshm +fi + +if [[ -z "${EXTENSIONS##*,pdo_firebird,*}" ]]; then + echo "---------- Install pdo_firebird ----------" + docker-php-ext-install ${MC} pdo_firebird +fi + +if [[ -z "${EXTENSIONS##*,pdo_dblib,*}" ]]; then + echo "---------- Install pdo_dblib ----------" + docker-php-ext-install ${MC} pdo_dblib +fi + +if [[ -z "${EXTENSIONS##*,pdo_oci,*}" ]]; then + echo "---------- Install pdo_oci ----------" + docker-php-ext-install ${MC} pdo_oci +fi + +if [[ -z "${EXTENSIONS##*,pdo_odbc,*}" ]]; then + echo "---------- Install pdo_odbc ----------" + docker-php-ext-install ${MC} pdo_odbc +fi + +if [[ -z "${EXTENSIONS##*,pdo_pgsql,*}" ]]; then + echo "---------- Install pdo_pgsql ----------" + apk --no-cache add postgresql-dev \ + && docker-php-ext-install ${MC} pdo_pgsql +fi + +if [[ -z "${EXTENSIONS##*,pgsql,*}" ]]; then + echo "---------- Install pgsql ----------" + apk --no-cache add postgresql-dev \ + && docker-php-ext-install ${MC} pgsql +fi + +if [[ -z "${EXTENSIONS##*,oci8,*}" ]]; then + echo "---------- Install oci8 ----------" + docker-php-ext-install ${MC} oci8 +fi + +if [[ -z "${EXTENSIONS##*,odbc,*}" ]]; then + echo "---------- Install odbc ----------" + docker-php-ext-install ${MC} odbc +fi + +if [[ -z "${EXTENSIONS##*,dba,*}" ]]; then + echo "---------- Install dba ----------" + docker-php-ext-install ${MC} dba +fi + +if [[ -z "${EXTENSIONS##*,interbase,*}" ]]; then + echo "---------- Install interbase ----------" + echo "Alpine linux do not support interbase/firebird!!!" + #docker-php-ext-install ${MC} interbase +fi + +if [[ -z "${EXTENSIONS##*,gd,*}" ]]; then + echo "---------- Install gd ----------" + apk add --no-cache freetype-dev libjpeg-turbo-dev libpng-dev \ + && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ + && docker-php-ext-install ${MC} gd +fi + +if [[ -z "${EXTENSIONS##*,intl,*}" ]]; then + echo "---------- Install intl ----------" + apk add --no-cache icu-dev + docker-php-ext-install ${MC} intl +fi + +if [[ -z "${EXTENSIONS##*,bz2,*}" ]]; then + echo "---------- Install bz2 ----------" + apk add --no-cache bzip2-dev + docker-php-ext-install ${MC} bz2 +fi + +if [[ -z "${EXTENSIONS##*,soap,*}" ]]; then + echo "---------- Install soap ----------" + apk add --no-cache libxml2-dev + docker-php-ext-install ${MC} soap +fi + +if [[ -z "${EXTENSIONS##*,xsl,*}" ]]; then + echo "---------- Install xsl ----------" + apk add --no-cache libxml2-dev libxslt-dev + docker-php-ext-install ${MC} xsl +fi + +if [[ -z "${EXTENSIONS##*,xmlrpc,*}" ]]; then + echo "---------- Install xmlrpc ----------" + apk add --no-cache libxml2-dev libxslt-dev + docker-php-ext-install ${MC} xmlrpc +fi + +if [[ -z "${EXTENSIONS##*,wddx,*}" ]]; then + echo "---------- Install wddx ----------" + apk add --no-cache libxml2-dev libxslt-dev + docker-php-ext-install ${MC} wddx +fi + +if [[ -z "${EXTENSIONS##*,curl,*}" ]]; then + echo "---------- curl is installed ----------" +fi + +if [[ -z "${EXTENSIONS##*,readline,*}" ]]; then + echo "---------- Install readline ----------" + apk add --no-cache readline-dev + apk add --no-cache libedit-dev + docker-php-ext-install ${MC} readline +fi + +if [[ -z "${EXTENSIONS##*,snmp,*}" ]]; then + echo "---------- Install snmp ----------" + apk add --no-cache net-snmp-dev + docker-php-ext-install ${MC} snmp +fi + +if [[ -z "${EXTENSIONS##*,pspell,*}" ]]; then + echo "---------- Install pspell ----------" + apk add --no-cache aspell-dev + apk add --no-cache aspell-en + docker-php-ext-install ${MC} pspell +fi + +if [[ -z "${EXTENSIONS##*,recode,*}" ]]; then + echo "---------- Install recode ----------" + apk add --no-cache recode-dev + docker-php-ext-install ${MC} recode +fi + +if [[ -z "${EXTENSIONS##*,tidy,*}" ]]; then + echo "---------- Install tidy ----------" + apk add --no-cache tidyhtml-dev + + # Fix: https://github.com/htacg/tidy-html5/issues/235 + ln -s /usr/include/tidybuffio.h /usr/include/buffio.h + + docker-php-ext-install ${MC} tidy +fi + +if [[ -z "${EXTENSIONS##*,gmp,*}" ]]; then + echo "---------- Install gmp ----------" + apk add --no-cache gmp-dev + docker-php-ext-install ${MC} gmp +fi + +if [[ -z "${EXTENSIONS##*,imap,*}" ]]; then + echo "---------- Install imap ----------" + apk add --no-cache imap-dev + docker-php-ext-configure imap --with-imap --with-imap-ssl + docker-php-ext-install ${MC} imap +fi + +if [[ -z "${EXTENSIONS##*,ldap,*}" ]]; then + echo "---------- Install ldap ----------" + apk add --no-cache ldb-dev + apk add --no-cache openldap-dev + docker-php-ext-install ${MC} ldap +fi + +if [[ -z "${EXTENSIONS##*,imagick,*}" ]]; then + echo "---------- Install imagick ----------" + apk add --no-cache file-dev + apk add --no-cache imagemagick-dev + printf "\n" | pecl install imagick-3.4.4 + docker-php-ext-enable imagick +fi + +if [[ -z "${EXTENSIONS##*,rar,*}" ]]; then + echo "---------- Install rar ----------" + printf "\n" | pecl install rar + docker-php-ext-enable rar +fi + +if [[ -z "${EXTENSIONS##*,ast,*}" ]]; then + echo "---------- Install ast ----------" + printf "\n" | pecl install ast + docker-php-ext-enable ast +fi + +if [[ -z "${EXTENSIONS##*,msgpack,*}" ]]; then + echo "---------- Install msgpack ----------" + printf "\n" | pecl install msgpack + docker-php-ext-enable msgpack +fi + +if [[ -z "${EXTENSIONS##*,igbinary,*}" ]]; then + echo "---------- Install igbinary ----------" + printf "\n" | pecl install igbinary + docker-php-ext-enable igbinary +fi + + +if [[ -z "${EXTENSIONS##*,yac,*}" ]]; then + echo "---------- Install yac ----------" + printf "\n" | pecl install yac-2.0.2 + docker-php-ext-enable yac +fi + +if [[ -z "${EXTENSIONS##*,yaconf,*}" ]]; then + echo "---------- Install yaconf ----------" + printf "\n" | pecl install yaconf + docker-php-ext-enable yaconf +fi + +if [[ -z "${EXTENSIONS##*,seaslog,*}" ]]; then + echo "---------- Install seaslog ----------" + printf "\n" | pecl install seaslog + docker-php-ext-enable seaslog +fi + +if [[ -z "${EXTENSIONS##*,varnish,*}" ]]; then + echo "---------- Install varnish ----------" + apk add --no-cache varnish + printf "\n" | pecl install varnish + docker-php-ext-enable varnish +fi + +if [[ -z "${EXTENSIONS##*,pdo_sqlsrv,*}" ]]; then + isPhpVersionGreaterOrEqual 7 1 + if [[ "$?" = "1" ]]; then + echo "---------- Install pdo_sqlsrv ----------" + apk add --no-cache unixodbc-dev + printf "\n" | pecl install pdo_sqlsrv + docker-php-ext-enable pdo_sqlsrv + else + echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}" + fi +fi + +if [[ -z "${EXTENSIONS##*,sqlsrv,*}" ]]; then + isPhpVersionGreaterOrEqual 7 1 + if [[ "$?" = "1" ]]; then + echo "---------- Install sqlsrv ----------" + apk add --no-cache unixodbc-dev + printf "\n" | pecl install sqlsrv + docker-php-ext-enable sqlsrv + else + echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}" + fi +fi + +if [[ -z "${EXTENSIONS##*,mcrypt,*}" ]]; then + isPhpVersionGreaterOrEqual 7 2 + if [[ "$?" = "1" ]]; then + echo "---------- mcrypt was REMOVED from PHP 7.2.0 ----------" + else + echo "---------- Install mcrypt ----------" + apk add --no-cache libmcrypt-dev \ + && docker-php-ext-install ${MC} mcrypt + fi +fi + +if [[ -z "${EXTENSIONS##*,mysql,*}" ]]; then + isPhpVersionGreaterOrEqual 7 0 + + if [[ "$?" = "1" ]]; then + echo "---------- mysql was REMOVED from PHP 7.0.0 ----------" + else + echo "---------- Install mysql ----------" + docker-php-ext-install ${MC} mysql + fi +fi + +if [[ -z "${EXTENSIONS##*,sodium,*}" ]]; then + isPhpVersionGreaterOrEqual 7 2 + if [[ "$?" = "1" ]]; then + echo + echo "Sodium is bundled with PHP from PHP 7.2.0" + echo + else + echo "---------- Install sodium ----------" + apk add --no-cache libsodium-dev + docker-php-ext-install ${MC} sodium + fi +fi + +if [[ -z "${EXTENSIONS##*,amqp,*}" ]]; then + echo "---------- Install amqp ----------" + apk add --no-cache rabbitmq-c-dev + installExtensionFromTgz amqp-1.9.4 +fi + +if [[ -z "${EXTENSIONS##*,redis,*}" ]]; then + echo "---------- Install redis ----------" + installExtensionFromTgz redis-4.1.1 +fi + +if [[ -z "${EXTENSIONS##*,memcached,*}" ]]; then + echo "---------- Install memcached ----------" + apk add --no-cache libmemcached-dev zlib-dev + isPhpVersionGreaterOrEqual 7 0 + + if [[ "$?" = "1" ]]; then + printf "\n" | pecl install memcached-3.1.3 + else + printf "\n" | pecl install memcached-2.2.0 + fi + + docker-php-ext-enable memcached +fi + +if [[ -z "${EXTENSIONS##*,xdebug,*}" ]]; then + echo "---------- Install xdebug ----------" + isPhpVersionGreaterOrEqual 7 0 + + if [[ "$?" = "1" ]]; then + installExtensionFromTgz xdebug-2.6.1 + else + installExtensionFromTgz xdebug-2.5.5 + fi +fi + +if [[ -z "${EXTENSIONS##*,event,*}" ]]; then + echo "---------- Install event ----------" + apk add --no-cache libevent-dev + export is_sockets_installed=$(php -r "echo extension_loaded('sockets');") + + if [[ "${is_sockets_installed}" = "" ]]; then + echo "---------- event is depend on sockets, install sockets first ----------" + docker-php-ext-install sockets + fi + + echo "---------- Install event again ----------" + installExtensionFromTgz event-2.5.3 "--ini-name event.ini" +fi + +if [[ -z "${EXTENSIONS##*,mongodb,*}" ]]; then + echo "---------- Install mongodb ----------" + installExtensionFromTgz mongodb-1.5.5 +fi + +if [[ -z "${EXTENSIONS##*,yaf,*}" ]]; then + echo "---------- Install yaf ----------" + isPhpVersionGreaterOrEqual 7 0 + + if [[ "$?" = "1" ]]; then + printf "\n" | pecl install yaf + docker-php-ext-enable yaf + else + installExtensionFromTgz yaf-2.3.5 + fi +fi + + +if [[ -z "${EXTENSIONS##*,swoole,*}" ]]; then + echo "---------- Install swoole ----------" + isPhpVersionGreaterOrEqual 7 0 + + if [[ "$?" = "1" ]]; then + installExtensionFromTgz swoole-4.4.2 + else + installExtensionFromTgz swoole-2.0.11 + fi +fi + +if [[ -z "${EXTENSIONS##*,zip,*}" ]]; then + echo "---------- Install zip ----------" + isPhpVersionGreaterOrEqual 7 3 + + # Fix: https://github.com/docker-library/php/issues/797 + if [[ "$?" = "1" ]]; then + apk add --no-cache libzip-dev + docker-php-ext-configure zip --with-libzip=/usr/include + fi + + docker-php-ext-install ${MC} zip +fi \ No newline at end of file diff --git a/extensions/mongodb-1.5.5.tgz b/services/php/extensions/mongodb-1.5.5.tgz similarity index 100% rename from extensions/mongodb-1.5.5.tgz rename to services/php/extensions/mongodb-1.5.5.tgz diff --git a/extensions/redis-4.1.1.tgz b/services/php/extensions/redis-4.1.1.tgz similarity index 100% rename from extensions/redis-4.1.1.tgz rename to services/php/extensions/redis-4.1.1.tgz diff --git a/extensions/swoole-2.0.11.tgz b/services/php/extensions/swoole-2.0.11.tgz similarity index 100% rename from extensions/swoole-2.0.11.tgz rename to services/php/extensions/swoole-2.0.11.tgz diff --git a/extensions/swoole-4.4.2.tgz b/services/php/extensions/swoole-4.4.2.tgz similarity index 100% rename from extensions/swoole-4.4.2.tgz rename to services/php/extensions/swoole-4.4.2.tgz diff --git a/extensions/xdebug-2.5.5.tgz b/services/php/extensions/xdebug-2.5.5.tgz similarity index 100% rename from extensions/xdebug-2.5.5.tgz rename to services/php/extensions/xdebug-2.5.5.tgz diff --git a/extensions/xdebug-2.6.1.tgz b/services/php/extensions/xdebug-2.6.1.tgz similarity index 100% rename from extensions/xdebug-2.6.1.tgz rename to services/php/extensions/xdebug-2.6.1.tgz diff --git a/extensions/yaf-2.3.5.tgz b/services/php/extensions/yaf-2.3.5.tgz similarity index 100% rename from extensions/yaf-2.3.5.tgz rename to services/php/extensions/yaf-2.3.5.tgz diff --git a/conf/php-fpm.conf b/services/php/php-fpm.conf similarity index 100% rename from conf/php-fpm.conf rename to services/php/php-fpm.conf diff --git a/conf/php.ini b/services/php/php.ini similarity index 99% rename from conf/php.ini rename to services/php/php.ini index 3e8ddcbb..c55e0ef9 100644 --- a/conf/php.ini +++ b/services/php/php.ini @@ -1918,11 +1918,13 @@ ldap.max_links = -1 ; End: [XDebug] -;xdebug.remote_enable = 1 -;xdebug.remote_handler = "dbgp" +xdebug.remote_enable = 1 +xdebug.remote_handler = "dbgp" ; Set to host.docker.internal on Mac and Windows, otherwise, set to host real ip -;xdebug.remote_host = host.docker.internal +xdebug.remote_host = host.docker.internal ;xdebug.remote_port = 9000 -;xdebug.remote_log = /var/log/php/xdebug.log +xdebug.remote_log = /var/log/php/xdebug.log -SERVER_ENV=develop \ No newline at end of file +SERVER_ENV=develop + +yaf.use_spl_autoload=1 diff --git a/services/php54/Dockerfile b/services/php54/Dockerfile new file mode 100644 index 00000000..fef84aed --- /dev/null +++ b/services/php54/Dockerfile @@ -0,0 +1,16 @@ +ARG PHP_VERSION +FROM ${PHP_VERSION} + +ARG TZ +ARG PHP_EXTENSIONS +ARG CONTAINER_PACKAGE_URL + + +COPY ./extensions /tmp/extensions +WORKDIR /tmp/extensions + +RUN chmod +x install.sh \ + && sh install.sh \ + && rm -rf /tmp/extensions + +WORKDIR /www diff --git a/services/php54/extensions/install.sh b/services/php54/extensions/install.sh new file mode 100644 index 00000000..f86adb50 --- /dev/null +++ b/services/php54/extensions/install.sh @@ -0,0 +1,285 @@ +#!/bin/bash + +echo +echo "============================================" +echo "Install extensions from : install.sh" +echo "PHP version : ${PHP_VERSION}" +echo "Install extensions : ${PHP_EXTENSIONS}" +echo "Multicore compilation : ${MC}" +echo "Container package url : ${CONTAINER_PACKAGE_URL}" +echo "Work directory : ${PWD}" +echo "============================================" +echo + + +if [ "${CONTAINER_PACKAGE_URL}" != "" ]; then + sed -i "s/httpredir.debian.org/${CONTAINER_PACKAGE_URL}/g" /etc/apt/sources.list + sed -i "s/security.debian.org/${CONTAINER_PACKAGE_URL}\/debian-security/g" /etc/apt/sources.list +fi + + +if [ "${PHP_EXTENSIONS}" != "" ]; then + echo "---------- Update source list ----------" + apt-get update +fi + + +export EXTENSIONS=",${PHP_EXTENSIONS}," + +if [ -z "${EXTENSIONS##*,gd,*}" ]; then + echo "---------- Install gd ----------" + apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ + && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ + && docker-php-ext-install gd +fi + +if [ -z "${EXTENSIONS##*,pdo_mysql,*}" ]; then + echo "---------- Install pdo_mysql ----------" + docker-php-ext-install pdo_mysql +fi + +if [ -z "${EXTENSIONS##*,intl,*}" ]; then + echo "---------- Install intl ----------" + apt-get install -y libicu-dev + docker-php-ext-install intl +fi + +if [ -z "${EXTENSIONS##*,bz2,*}" ]; then + echo "---------- Install bz2 ----------" + apt-get install -y libbz2-dev + docker-php-ext-install bz2 +fi + +if [ -z "${EXTENSIONS##*,zip,*}" ]; then + echo "---------- Install zip ----------" + docker-php-ext-install zip +fi + +if [ -z "${EXTENSIONS##*,pcntl,*}" ]; then + echo "---------- Install pcntl ----------" + docker-php-ext-install pcntl +fi + +if [ -z "${EXTENSIONS##*,mysqli,*}" ]; then + echo "---------- Install mysqli ----------" + docker-php-ext-install mysqli +fi + +if [ -z "${EXTENSIONS##*,mbstring,*}" ]; then + echo "---------- Install mbstring ----------" + docker-php-ext-install mbstring +fi + +if [ -z "${EXTENSIONS##*,exif,*}" ]; then + echo "---------- Install exif ----------" + docker-php-ext-install exif +fi + +if [ -z "${EXTENSIONS##*,bcmath,*}" ]; then + echo "---------- Install bcmath ----------" + docker-php-ext-install bcmath +fi + +if [ -z "${EXTENSIONS##*,calendar,*}" ]; then + echo "---------- Install calendar ----------" + docker-php-ext-install calendar +fi + +if [ -z "${EXTENSIONS##*,sockets,*}" ]; then + echo "---------- Install sockets ----------" + docker-php-ext-install sockets +fi + +if [ -z "${EXTENSIONS##*,gettext,*}" ]; then + echo "---------- Install gettext ----------" + docker-php-ext-install gettext +fi + +if [ -z "${EXTENSIONS##*,shmop,*}" ]; then + echo "---------- Install shmop ----------" + docker-php-ext-install shmop +fi + +if [ -z "${EXTENSIONS##*,sysvmsg,*}" ]; then + echo "---------- Install sysvmsg ----------" + docker-php-ext-install sysvmsg +fi + +if [ -z "${EXTENSIONS##*,sysvsem,*}" ]; then + echo "---------- Install sysvsem ----------" + docker-php-ext-install sysvsem +fi + +if [ -z "${EXTENSIONS##*,sysvshm,*}" ]; then + echo "---------- Install sysvshm ----------" + docker-php-ext-install sysvshm +fi + +if [ -z "${EXTENSIONS##*,pdo_firebird,*}" ]; then + echo "---------- Install pdo_firebird ----------" + docker-php-ext-install pdo_firebird +fi + +if [ -z "${EXTENSIONS##*,pdo_dblib,*}" ]; then + echo "---------- Install pdo_dblib ----------" + docker-php-ext-install pdo_dblib +fi + +if [ -z "${EXTENSIONS##*,pdo_oci,*}" ]; then + echo "---------- Install pdo_oci ----------" + docker-php-ext-install pdo_oci +fi + +if [ -z "${EXTENSIONS##*,pdo_odbc,*}" ]; then + echo "---------- Install pdo_odbc ----------" + docker-php-ext-install pdo_odbc +fi + +if [ -z "${EXTENSIONS##*,pdo_pgsql,*}" ]; then + echo "---------- Install pdo_pgsql ----------" + docker-php-ext-install pdo_pgsql +fi + +if [ -z "${EXTENSIONS##*,pgsql,*}" ]; then + echo "---------- Install pgsql ----------" + docker-php-ext-install pgsql +fi + +if [ -z "${EXTENSIONS##*,oci8,*}" ]; then + echo "---------- Install oci8 ----------" + docker-php-ext-install oci8 +fi + +if [ -z "${EXTENSIONS##*,odbc,*}" ]; then + echo "---------- Install odbc ----------" + docker-php-ext-install odbc +fi + +if [ -z "${EXTENSIONS##*,dba,*}" ]; then + echo "---------- Install dba ----------" + docker-php-ext-install dba +fi + +if [ -z "${EXTENSIONS##*,interbase,*}" ]; then + echo "---------- Install interbase ----------" + docker-php-ext-install interbase +fi + +if [ -z "${EXTENSIONS##*,soap,*}" ]; then + echo "---------- Install soap ----------" + apt-get install -y libxml2-dev + docker-php-ext-install soap +fi + + +if [ -z "${EXTENSIONS##*,xsl,*}" ]; then + echo "---------- Install xsl ----------" + apt-get install -y libxml2-dev + apt-get install -y libxslt-dev + docker-php-ext-install xsl +fi + +if [ -z "${EXTENSIONS##*,xmlrpc,*}" ]; then + echo "---------- Install xmlrpc ----------" + apt-get install -y libxml2-dev + apt-get install -y libxslt-dev + docker-php-ext-install xmlrpc +fi + +if [ -z "${EXTENSIONS##*,wddx,*}" ]; then + echo "---------- Install wddx ----------" + apt-get install -y libxml2-dev + apt-get install -y libxslt-dev + docker-php-ext-install wddx +fi + +if [ -z "${EXTENSIONS##*,curl,*}" ]; then + echo "---------- Install curl ----------" + apt-get install -y curl + apt-get install -y libcurl3 + apt-get install -y libcurl4-openssl-dev + docker-php-ext-install curl +fi + +if [ -z "${EXTENSIONS##*,readline,*}" ]; then + echo "---------- Install readline ----------" + apt-get install -y libreadline-dev + docker-php-ext-install readline +fi + +if [ -z "${EXTENSIONS##*,snmp,*}" ]; then + echo "---------- Install snmp ----------" + apt-get install -y libsnmp-dev + apt-get install -y snmp + docker-php-ext-install snmp +fi + +if [ -z "${EXTENSIONS##*,pspell,*}" ]; then + echo "---------- Install pspell ----------" + apt-get install -y libpspell-dev + apt-get install -y aspell-en + docker-php-ext-install pspell +fi + +if [ -z "${EXTENSIONS##*,recode,*}" ]; then + echo "---------- Install recode ----------" + apt-get install -y librecode0 + apt-get install -y librecode-dev + docker-php-ext-install recode +fi + +if [ -z "${EXTENSIONS##*,tidy,*}" ]; then + echo "---------- Install tidy ----------" + apt-get install -y libtidy-dev + docker-php-ext-install tidy +fi + +if [ -z "${EXTENSIONS##*,gmp,*}" ]; then + echo "---------- Install gmp ----------" + apt-get install -y libgmp-dev + ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h + docker-php-ext-install gmp +fi + +if [ -z "${EXTENSIONS##*,imap,*}" ]; then + echo "---------- Install imap ----------" + apt-get install -y libc-client-dev + docker-php-ext-configure imap --with-kerberos --with-imap-ssl + docker-php-ext-install imap +fi + +if [ -z "${EXTENSIONS##*,ldap,*}" ]; then + echo "---------- Install ldap ----------" + apt-get install -y libldb-dev + apt-get install -y libldap2-dev + docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu + docker-php-ext-install ldap +fi + +if [ -z "${EXTENSIONS##*,imagick,*}" ]; then + echo "---------- Install imagick ----------" + apt-get install -y libmagickwand-dev + pecl install imagick-3.4.3 + docker-php-ext-enable imagick +fi + +if [ -z "${EXTENSIONS##*,memcached,*}" ]; then + echo "---------- Install memcached ----------" + apt-get install -y libmemcached-dev zlib1g-dev + pecl install memcached-2.2.0 + docker-php-ext-enable memcached +fi + +if [ -z "${EXTENSIONS##*,sqlsrv,*}" ]; then + echo "---------- Install sqlsrv ----------" + apt-get install -y unixodbc-dev + pecl install sqlsrv + docker-php-ext-enable sqlsrv +fi + +if [ -z "${EXTENSIONS##*,pdo_sqlsrv,*}" ]; then + echo "---------- Install pdo_sqlsrv ----------" + apt-get install -y unixodbc-dev + pecl install pdo_sqlsrv + docker-php-ext-enable pdo_sqlsrv +fi diff --git a/services/php54/extensions/redis-4.1.1.tgz b/services/php54/extensions/redis-4.1.1.tgz new file mode 100644 index 00000000..95d3f743 Binary files /dev/null and b/services/php54/extensions/redis-4.1.1.tgz differ diff --git a/services/php54/extensions/xdebug-2.4.1.tgz b/services/php54/extensions/xdebug-2.4.1.tgz new file mode 100644 index 00000000..59afc8f9 Binary files /dev/null and b/services/php54/extensions/xdebug-2.4.1.tgz differ diff --git a/services/php54/extensions/zendopcache-7.0.5.tgz b/services/php54/extensions/zendopcache-7.0.5.tgz new file mode 100644 index 00000000..aee8761c Binary files /dev/null and b/services/php54/extensions/zendopcache-7.0.5.tgz differ diff --git a/services/php54/php-fpm.conf b/services/php54/php-fpm.conf new file mode 100644 index 00000000..13183589 --- /dev/null +++ b/services/php54/php-fpm.conf @@ -0,0 +1,423 @@ +; Start a new pool named 'www'. +; the variable $pool can be used in any directive and will be replaced by the +; pool name ('www' here) +[www] + +; Per pool prefix +; It only applies on the following directives: +; - 'access.log' +; - 'slowlog' +; - 'listen' (unixsocket) +; - 'chroot' +; - 'chdir' +; - 'php_values' +; - 'php_admin_values' +; When not set, the global prefix (or NONE) applies instead. +; Note: This directive can also be relative to the global prefix. +; Default Value: none +;prefix = /path/to/pools/$pool + +; Unix user/group of processes +; Note: The user is mandatory. If the group is not set, the default user's group +; will be used. +user = www-data +group = www-data + +; The address on which to accept FastCGI requests. +; Valid syntaxes are: +; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on +; a specific port; +; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on +; a specific port; +; 'port' - to listen on a TCP socket to all addresses +; (IPv6 and IPv4-mapped) on a specific port; +; '/path/to/unix/socket' - to listen on a unix socket. +; Note: This value is mandatory. +listen = 127.0.0.1:9000 + +; Set listen(2) backlog. +; Default Value: 511 (-1 on FreeBSD and OpenBSD) +;listen.backlog = 511 + +; Set permissions for unix socket, if one is used. In Linux, read/write +; permissions must be set in order to allow connections from a web server. Many +; BSD-derived systems allow connections regardless of permissions. +; Default Values: user and group are set as the running user +; mode is set to 0660 +;listen.owner = www-data +;listen.group = www-data +;listen.mode = 0660 +; When POSIX Access Control Lists are supported you can set them using +; these options, value is a comma separated list of user/group names. +; When set, listen.owner and listen.group are ignored +;listen.acl_users = +;listen.acl_groups = + +; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. +; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original +; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address +; must be separated by a comma. If this value is left blank, connections will be +; accepted from any ip address. +; Default Value: any +;listen.allowed_clients = 127.0.0.1 + +; Specify the nice(2) priority to apply to the pool processes (only if set) +; The value can vary from -19 (highest priority) to 20 (lower priority) +; Note: - It will only work if the FPM master process is launched as root +; - The pool processes will inherit the master process priority +; unless it specified otherwise +; Default Value: no set +; process.priority = -19 + +; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user +; or group is differrent than the master process user. It allows to create process +; core dump and ptrace the process for the pool user. +; Default Value: no +; process.dumpable = yes + +; Choose how the process manager will control the number of child processes. +; Possible Values: +; static - a fixed number (pm.max_children) of child processes; +; dynamic - the number of child processes are set dynamically based on the +; following directives. With this process management, there will be +; always at least 1 children. +; pm.max_children - the maximum number of children that can +; be alive at the same time. +; pm.start_servers - the number of children created on startup. +; pm.min_spare_servers - the minimum number of children in 'idle' +; state (waiting to process). If the number +; of 'idle' processes is less than this +; number then some children will be created. +; pm.max_spare_servers - the maximum number of children in 'idle' +; state (waiting to process). If the number +; of 'idle' processes is greater than this +; number then some children will be killed. +; ondemand - no children are created at startup. Children will be forked when +; new requests will connect. The following parameter are used: +; pm.max_children - the maximum number of children that +; can be alive at the same time. +; pm.process_idle_timeout - The number of seconds after which +; an idle process will be killed. +; Note: This value is mandatory. +pm = dynamic + +; The number of child processes to be created when pm is set to 'static' and the +; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. +; This value sets the limit on the number of simultaneous requests that will be +; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. +; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP +; CGI. The below defaults are based on a server without much resources. Don't +; forget to tweak pm.* to fit your needs. +; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' +; Note: This value is mandatory. +pm.max_children = 10 + +; The number of child processes created on startup. +; Note: Used only when pm is set to 'dynamic' +; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 +pm.start_servers = 2 + +; The desired minimum number of idle server processes. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +pm.min_spare_servers = 1 + +; The desired maximum number of idle server processes. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +pm.max_spare_servers = 3 + +; The number of seconds after which an idle process will be killed. +; Note: Used only when pm is set to 'ondemand' +; Default Value: 10s +;pm.process_idle_timeout = 10s; + +; The number of requests each child process should execute before respawning. +; This can be useful to work around memory leaks in 3rd party libraries. For +; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. +; Default Value: 0 +;pm.max_requests = 500 + +; The URI to view the FPM status page. If this value is not set, no URI will be +; recognized as a status page. It shows the following informations: +; pool - the name of the pool; +; process manager - static, dynamic or ondemand; +; start time - the date and time FPM has started; +; start since - number of seconds since FPM has started; +; accepted conn - the number of request accepted by the pool; +; listen queue - the number of request in the queue of pending +; connections (see backlog in listen(2)); +; max listen queue - the maximum number of requests in the queue +; of pending connections since FPM has started; +; listen queue len - the size of the socket queue of pending connections; +; idle processes - the number of idle processes; +; active processes - the number of active processes; +; total processes - the number of idle + active processes; +; max active processes - the maximum number of active processes since FPM +; has started; +; max children reached - number of times, the process limit has been reached, +; when pm tries to start more children (works only for +; pm 'dynamic' and 'ondemand'); +; Value are updated in real time. +; Example output: +; pool: www +; process manager: static +; start time: 01/Jul/2011:17:53:49 +0200 +; start since: 62636 +; accepted conn: 190460 +; listen queue: 0 +; max listen queue: 1 +; listen queue len: 42 +; idle processes: 4 +; active processes: 11 +; total processes: 15 +; max active processes: 12 +; max children reached: 0 +; +; By default the status page output is formatted as text/plain. Passing either +; 'html', 'xml' or 'json' in the query string will return the corresponding +; output syntax. Example: +; http://www.foo.bar/status +; http://www.foo.bar/status?json +; http://www.foo.bar/status?html +; http://www.foo.bar/status?xml +; +; By default the status page only outputs short status. Passing 'full' in the +; query string will also return status for each pool process. +; Example: +; http://www.foo.bar/status?full +; http://www.foo.bar/status?json&full +; http://www.foo.bar/status?html&full +; http://www.foo.bar/status?xml&full +; The Full status returns for each process: +; pid - the PID of the process; +; state - the state of the process (Idle, Running, ...); +; start time - the date and time the process has started; +; start since - the number of seconds since the process has started; +; requests - the number of requests the process has served; +; request duration - the duration in µs of the requests; +; request method - the request method (GET, POST, ...); +; request URI - the request URI with the query string; +; content length - the content length of the request (only with POST); +; user - the user (PHP_AUTH_USER) (or '-' if not set); +; script - the main script called (or '-' if not set); +; last request cpu - the %cpu the last request consumed +; it's always 0 if the process is not in Idle state +; because CPU calculation is done when the request +; processing has terminated; +; last request memory - the max amount of memory the last request consumed +; it's always 0 if the process is not in Idle state +; because memory calculation is done when the request +; processing has terminated; +; If the process is in Idle state, then informations are related to the +; last request the process has served. Otherwise informations are related to +; the current request being served. +; Example output: +; ************************ +; pid: 31330 +; state: Running +; start time: 01/Jul/2011:17:53:49 +0200 +; start since: 63087 +; requests: 12808 +; request duration: 1250261 +; request method: GET +; request URI: /test_mem.php?N=10000 +; content length: 0 +; user: - +; script: /home/fat/web/docs/php/test_mem.php +; last request cpu: 0.00 +; last request memory: 0 +; +; Note: There is a real-time FPM status monitoring sample web page available +; It's available in: /usr/local/share/php/fpm/status.html +; +; Note: The value must start with a leading slash (/). The value can be +; anything, but it may not be a good idea to use the .php extension or it +; may conflict with a real PHP file. +; Default Value: not set +;pm.status_path = /status + +; The ping URI to call the monitoring page of FPM. If this value is not set, no +; URI will be recognized as a ping page. This could be used to test from outside +; that FPM is alive and responding, or to +; - create a graph of FPM availability (rrd or such); +; - remove a server from a group if it is not responding (load balancing); +; - trigger alerts for the operating team (24/7). +; Note: The value must start with a leading slash (/). The value can be +; anything, but it may not be a good idea to use the .php extension or it +; may conflict with a real PHP file. +; Default Value: not set +;ping.path = /ping + +; This directive may be used to customize the response of a ping request. The +; response is formatted as text/plain with a 200 response code. +; Default Value: pong +;ping.response = pong + +; The access log file +; Default: not set +;access.log = log/$pool.access.log + +; The access log format. +; The following syntax is allowed +; %%: the '%' character +; %C: %CPU used by the request +; it can accept the following format: +; - %{user}C for user CPU only +; - %{system}C for system CPU only +; - %{total}C for user + system CPU (default) +; %d: time taken to serve the request +; it can accept the following format: +; - %{seconds}d (default) +; - %{miliseconds}d +; - %{mili}d +; - %{microseconds}d +; - %{micro}d +; %e: an environment variable (same as $_ENV or $_SERVER) +; it must be associated with embraces to specify the name of the env +; variable. Some exemples: +; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e +; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e +; %f: script filename +; %l: content-length of the request (for POST request only) +; %m: request method +; %M: peak of memory allocated by PHP +; it can accept the following format: +; - %{bytes}M (default) +; - %{kilobytes}M +; - %{kilo}M +; - %{megabytes}M +; - %{mega}M +; %n: pool name +; %o: output header +; it must be associated with embraces to specify the name of the header: +; - %{Content-Type}o +; - %{X-Powered-By}o +; - %{Transfert-Encoding}o +; - .... +; %p: PID of the child that serviced the request +; %P: PID of the parent of the child that serviced the request +; %q: the query string +; %Q: the '?' character if query string exists +; %r: the request URI (without the query string, see %q and %Q) +; %R: remote IP address +; %s: status (response code) +; %t: server time the request was received +; it can accept a strftime(3) format: +; %d/%b/%Y:%H:%M:%S %z (default) +; The strftime(3) format must be encapsuled in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t +; %T: time the log has been written (the request has finished) +; it can accept a strftime(3) format: +; %d/%b/%Y:%H:%M:%S %z (default) +; The strftime(3) format must be encapsuled in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t +; %u: remote user +; +; Default: "%R - %u %t \"%m %r\" %s" +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" + +; The log file for slow requests +; Default Value: not set +; Note: slowlog is mandatory if request_slowlog_timeout is set +slowlog = /var/log/php/fpm.slow.log + +; The timeout for serving a single request after which a PHP backtrace will be +; dumped to the 'slowlog' file. A value of '0s' means 'off'. +; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) +; Default Value: 0 +request_slowlog_timeout = 3 + +; Depth of slow log stack trace. +; Default Value: 20 +;request_slowlog_trace_depth = 20 + +; The timeout for serving a single request after which the worker process will +; be killed. This option should be used when the 'max_execution_time' ini option +; does not stop script execution for some reason. A value of '0' means 'off'. +; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) +; Default Value: 0 +;request_terminate_timeout = 0 + +; Set open file descriptor rlimit. +; Default Value: system defined value +;rlimit_files = 1024 + +; Set max core size rlimit. +; Possible Values: 'unlimited' or an integer greater or equal to 0 +; Default Value: system defined value +;rlimit_core = 0 + +; Chroot to this directory at the start. This value must be defined as an +; absolute path. When this value is not set, chroot is not used. +; Note: you can prefix with '$prefix' to chroot to the pool prefix or one +; of its subdirectories. If the pool prefix is not set, the global prefix +; will be used instead. +; Note: chrooting is a great security feature and should be used whenever +; possible. However, all PHP paths will be relative to the chroot +; (error_log, sessions.save_path, ...). +; Default Value: not set +;chroot = + +; Chdir to this directory at the start. +; Note: relative path can be used. +; Default Value: current directory or / when chroot +;chdir = /var/www + +; Redirect worker stdout and stderr into main error log. If not set, stdout and +; stderr will be redirected to /dev/null according to FastCGI specs. +; Note: on highloaded environement, this can cause some delay in the page +; process time (several ms). +; Default Value: no +catch_workers_output = yes + +; Clear environment in FPM workers +; Prevents arbitrary environment variables from reaching FPM worker processes +; by clearing the environment in workers before env vars specified in this +; pool configuration are added. +; Setting to "no" will make all environment variables available to PHP code +; via getenv(), $_ENV and $_SERVER. +; Default Value: yes +;clear_env = no + +; Limits the extensions of the main script FPM will allow to parse. This can +; prevent configuration mistakes on the web server side. You should only limit +; FPM to .php extensions to prevent malicious users to use other extensions to +; execute php code. +; Note: set an empty value to allow all extensions. +; Default Value: .php +;security.limit_extensions = .php .php3 .php4 .php5 .php7 + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +; Additional php.ini defines, specific to this pool of workers. These settings +; overwrite the values previously defined in the php.ini. The directives are the +; same as the PHP SAPI: +; php_value/php_flag - you can set classic ini defines which can +; be overwritten from PHP call 'ini_set'. +; php_admin_value/php_admin_flag - these directives won't be overwritten by +; PHP call 'ini_set' +; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. + +; Defining 'extension' will load the corresponding shared extension from +; extension_dir. Defining 'disable_functions' or 'disable_classes' will not +; overwrite previously defined php.ini values, but will append the new value +; instead. + +; Note: path INI options can be relative and will be expanded with the prefix +; (pool, global or /usr/local) + +; Default Value: nothing is defined by default except the values in php.ini and +; specified at startup with the -d argument +;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M diff --git a/services/php54/php.ini b/services/php54/php.ini new file mode 100644 index 00000000..c55e0ef9 --- /dev/null +++ b/services/php54/php.ini @@ -0,0 +1,1930 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; PHP's initialization file, generally called php.ini, is responsible for +; configuring many of the aspects of PHP's behavior. + +; PHP attempts to find and load this configuration from a number of locations. +; The following is a summary of its search order: +; 1. SAPI module specific location. +; 2. The PHPRC environment variable. (As of PHP 5.2.0) +; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) +; 4. Current working directory (except CLI) +; 5. The web server's directory (for SAPI modules), or directory of PHP +; (otherwise in Windows) +; 6. The directory from the --with-config-file-path compile time option, or the +; Windows directory (C:\windows or C:\winnt) +; See the PHP docs for more specific information. +; http://php.net/configuration.file + +; The syntax of the file is extremely simple. Whitespace and lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. + +; Directives following the section heading [PATH=/www/mysite] only +; apply to PHP files in the /www/mysite directory. Directives +; following the section heading [HOST=www.example.com] only apply to +; PHP files served from www.example.com. Directives set in these +; special sections cannot be overridden by user-defined INI files or +; at runtime. Currently, [PATH=] and [HOST=] sections only work under +; CGI/FastCGI. +; http://php.net/ini.sections + +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; Directives are variables used to configure PHP or PHP extensions. +; There is no name validation. If PHP can't find an expected +; directive because it is not set or is mistyped, a default value will be used. + +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a +; previously set variable or directive (e.g. ${foo}) + +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; ^ bitwise XOR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT + +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. + +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: + +; foo = ; sets foo to an empty string +; foo = None ; sets foo to an empty string +; foo = "None" ; sets foo to the string 'None' + +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. + +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; PHP comes packaged with two INI files. One that is recommended to be used +; in production environments and one that is recommended to be used in +; development environments. + +; php.ini-production contains settings which hold security, performance and +; best practices at its core. But please be aware, these settings may break +; compatibility with older or less security conscience applications. We +; recommending using the production ini in production and testing environments. + +; php.ini-development is very similar to its production variant, except it is +; much more verbose when it comes to errors. We recommend using the +; development version only in development environments, as errors shown to +; application users can inadvertently leak otherwise secure information. + +; This is php.ini-production INI file. + +;;;;;;;;;;;;;;;;;;; +; Quick Reference ; +;;;;;;;;;;;;;;;;;;; +; The following are all the settings which are different in either the production +; or development versions of the INIs with respect to PHP's default behavior. +; Please see the actual settings later in the document for more details as to why +; we recommend these changes in PHP's behavior. + +; display_errors +; Default Value: On +; Development Value: On +; Production Value: Off + +; display_startup_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT + +; html_errors +; Default Value: On +; Development Value: On +; Production value: On + +; log_errors +; Default Value: Off +; Development Value: On +; Production Value: On + +; max_input_time +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) + +; output_buffering +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 + +; register_argc_argv +; Default Value: On +; Development Value: Off +; Production Value: Off + +; request_order +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" + +; session.gc_divisor +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 + +; session.sid_bits_per_character +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; track_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +;;;;;;;;;;;;;;;;;;;; +; php.ini Options ; +;;;;;;;;;;;;;;;;;;;; +; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" +;user_ini.filename = ".user.ini" + +; To disable this feature set this option to empty value +;user_ini.filename = + +; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) +;user_ini.cache_ttl = 300 + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +; http://php.net/engine +engine = On + +; This directive determines whether or not PHP will recognize code between +; tags as PHP source which should be processed as such. It is +; generally recommended that should be used and that this feature +; should be disabled, as enabling it may result in issues when generating XML +; documents, however this remains supported for backward compatibility reasons. +; Note that this directive does not control the would work. +; http://php.net/syntax-highlighting +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long requests, which may end up +; being interrupted by the user or a browser timing out. PHP's default behavior +; is to disable this feature. +; http://php.net/ignore-user-abort +;ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; http://php.net/realpath-cache-size +;realpath_cache_size = 4096k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; http://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +; Enables or disables the circular reference collector. +; http://php.net/zend.enable-gc +zend.enable_gc = On + +; If enabled, scripts may be written in encodings that are incompatible with +; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such +; encodings. To use this feature, mbstring extension must be enabled. +; Default: Off +;zend.multibyte = Off + +; Allows to set the default encoding for the scripts. This value will be used +; unless "declare(encoding=...)" directive appears at the top of the script. +; Only affects if zend.multibyte is set. +; Default: "" +;zend.script_encoding = + +;;;;;;;;;;;;;;;;; +; Miscellaneous ; +;;;;;;;;;;;;;;;;; + +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +; http://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; http://php.net/max-execution-time +; Note: This directive is hardcoded to 0 for the CLI SAPI +max_execution_time = 30 + +; Maximum amount of time each script may spend parsing request data. It's a good +; idea to limit this time on productions servers in order to eliminate unexpectedly +; long running scripts. +; Note: This directive is hardcoded to -1 for the CLI SAPI +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) +; http://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; http://php.net/max-input-nesting-level +;max_input_nesting_level = 64 + +; How many GET/POST/COOKIE input variables may be accepted +; max_input_vars = 1000 + +; Maximum amount of memory a script may consume (128MB) +; http://php.net/memory-limit +memory_limit = 256M + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; This directive informs PHP of which errors, warnings and notices you would like +; it to take action for. The recommended way of setting values for this +; directive is through the use of the error level constants and bitwise +; operators. The error level constants are below here for convenience as well as +; some common settings and their meanings. +; By default, PHP is set to take action on all errors, notices and warnings EXCEPT +; those related to E_NOTICE and E_STRICT, which together cover best practices and +; recommended coding standards in PHP. For performance reasons, this is the +; recommend error reporting setting. Your production server shouldn't be wasting +; resources complaining about best practices and coding standards. That's what +; development servers and development settings are for. +; Note: The php.ini-development file has this setting as E_ALL. This +; means it pretty much reports everything which is exactly what you want during +; development and early testing. +; +; Error Level Constants: +; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) +; E_ERROR - fatal run-time errors +; E_RECOVERABLE_ERROR - almost fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it is automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; E_DEPRECATED - warn about code that will not work in future versions +; of PHP +; E_USER_DEPRECATED - user-generated deprecation warnings +; +; Common Values: +; E_ALL (Show all errors, warnings and notices including coding standards.) +; E_ALL & ~E_NOTICE (Show all errors, except for notices) +; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) +; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT +; http://php.net/error-reporting +error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT + +; This directive controls whether or not and where PHP will output errors, +; notices and warnings too. Error output is very useful during development, but +; it could be very dangerous in production environments. Depending on the code +; which is triggering the error, sensitive information could potentially leak +; out of your application such as database usernames and passwords or worse. +; For production environments, we recommend logging errors rather than +; sending them to STDOUT. +; Possible Values: +; Off = Do not display any errors +; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) +; On or stdout = Display errors to STDOUT +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/display-errors +display_errors = Off + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. PHP's default behavior is to suppress those +; errors from clients. Turning the display of startup errors on can be useful in +; debugging configuration problems. We strongly recommend you +; set this to 'off' for production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/display-startup-errors +display_startup_errors = Off + +; Besides displaying errors, PHP can also log errors to locations such as a +; server-specific log, STDERR, or a location specified by the error_log +; directive found below. While errors should not be displayed on productions +; servers they should still be monitored and logging is a great way to do that. +; Default Value: Off +; Development Value: On +; Production Value: On +; http://php.net/log-errors +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +; http://php.net/log-errors-max-len +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; http://php.net/ignore-repeated-errors +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; source lines. +; http://php.net/ignore-repeated-source +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This has only effect in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; http://php.net/report-memleaks +report_memleaks = On + +; This setting is on by default. +;report_zend_debug = 0 + +; Store the last error/warning message in $php_errormsg (boolean). Setting this value +; to On can assist in debugging and is appropriate for development servers. It should +; however be disabled on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/track-errors +track_errors = Off + +; Turn off normal error reporting and emit XML-RPC error XML +; http://php.net/xmlrpc-errors +;xmlrpc_errors = 0 + +; An XML-RPC faultCode +;xmlrpc_error_number = 0 + +; When PHP displays or logs an error, it has the capability of formatting the +; error message as HTML for easier reading. This directive controls whether +; the error message is formatted as HTML or not. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: On +; Development Value: On +; Production value: On +; http://php.net/html-errors +html_errors = On + +; If html_errors is set to On *and* docref_root is not empty, then PHP +; produces clickable error messages that direct to a page describing the error +; or function causing the error in detail. +; You can download a copy of the PHP manual from http://php.net/docs +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. PHP's default behavior is to leave these settings empty, in which +; case no links to documentation are generated. +; Note: Never use this feature for production boxes. +; http://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; http://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-prepend-string +; Example: +;error_prepend_string = "" + +; String to output after an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; http://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on Windows). +error_log = /var/log/php/php.error.log + +;windows.show_crt_warning +; Default value: 0 +; Development value: 0 +; Production value: 0 + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; + +; The separator used in PHP generated URLs to separate arguments. +; PHP's default setting is "&". +; http://php.net/arg-separator.output +; Example: +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; PHP's default setting is "&". +; NOTE: Every character in this directive is considered as separator! +; http://php.net/arg-separator.input +; Example: +;arg_separator.input = ";&" + +; This directive determines which super global arrays are registered when PHP +; starts up. G,P,C,E & S are abbreviations for the following respective super +; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty +; paid for the registration of these arrays and because ENV is not as commonly +; used as the others, ENV is not recommended on productions servers. You +; can still get access to the environment variables through getenv() should you +; need to. +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS"; +; http://php.net/variables-order +variables_order = "GPCS" + +; This directive determines which super global data (G,P & C) should be +; registered into the super global array REQUEST. If so, it also determines +; the order in which that data is registered. The values for this directive +; are specified in the same manner as the variables_order directive, +; EXCEPT one. Leaving this value empty will cause PHP to use the value set +; in the variables_order directive. It does not mean it will leave the super +; globals array REQUEST empty. +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" +; http://php.net/request-order +request_order = "GP" + +; This directive determines whether PHP registers $argv & $argc each time it +; runs. $argv contains an array of all the arguments passed to PHP when a script +; is invoked. $argc contains an integer representing the number of arguments +; that were passed when the script was invoked. These arrays are extremely +; useful when running scripts from the command line. When this directive is +; enabled, registering these variables consumes CPU cycles and memory each time +; a script is executed. For performance reasons, this feature should be disabled +; on production servers. +; Note: This directive is hardcoded to On for the CLI SAPI +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-argc-argv +register_argc_argv = Off + +; When enabled, the ENV, REQUEST and SERVER variables are created when they're +; first used (Just In Time) instead of when the script starts. If these +; variables are not used within a script, having this directive on will result +; in a performance gain. The PHP directive register_argc_argv must be disabled +; for this directive to have any affect. +; http://php.net/auto-globals-jit +auto_globals_jit = On + +; Whether PHP will read the POST data. +; This option is enabled by default. +; Most likely, you won't want to disable this option globally. It causes $_POST +; and $_FILES to always be empty; the only way you will be able to read the +; POST data will be through the php://input stream wrapper. This can be useful +; to proxy requests or to process the POST data in a memory efficient fashion. +; http://php.net/enable-post-data-reading +;enable_post_data_reading = Off + +; Maximum size of POST data that PHP will accept. +; Its value may be 0 to disable the limit. It is ignored if POST data reading +; is disabled through enable_post_data_reading. +; http://php.net/post-max-size +post_max_size = 100M + +; Automatically add files before PHP document. +; http://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; http://php.net/auto-append-file +auto_append_file = + +; By default, PHP will output a media type using the Content-Type header. To +; disable this, simply set it to be empty. +; +; PHP's built-in default media type is set to text/html. +; http://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to UTF-8. +; http://php.net/default-charset +default_charset = "UTF-8" + +; PHP internal character encoding is set to empty. +; If empty, default_charset is used. +; http://php.net/internal-encoding +;internal_encoding = + +; PHP input character encoding is set to empty. +; If empty, default_charset is used. +; http://php.net/input-encoding +;input_encoding = + +; PHP output character encoding is set to empty. +; If empty, default_charset is used. +; See also output_buffer. +; http://php.net/output-encoding +;output_encoding = + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/php/includes" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" +; +; PHP's default setting for include_path is ".;/path/to/php/pear" +; http://php.net/include-path + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +; http://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; http://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; http://php.net/extension-dir +; extension_dir = "./" +; On windows: +; extension_dir = "ext" + +; Directory where the temporary files should be placed. +; Defaults to the system default (see sys_get_temp_dir) +; sys_temp_dir = "/tmp" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +; http://php.net/enable-dl +enable_dl = Off + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; http://php.net/cgi.force-redirect +;cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. PHP's default behavior is to disable this feature. +;cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; http://php.net/cgi.redirect-status-env +;cgi.redirect_status_env = + +; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's +; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok +; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting +; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting +; of zero causes PHP to behave as before. Default is 1. You should fix your scripts +; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. +; http://php.net/cgi.fix-pathinfo +;cgi.fix_pathinfo=1 + +; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside +; of the web tree and people will not be able to circumvent .htaccess security. +; http://php.net/cgi.dicard-path +;cgi.discard_path=1 + +; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; http://php.net/fastcgi.impersonate +;fastcgi.impersonate = 1 + +; Disable logging through FastCGI connection. PHP's default behavior is to enable +; this feature. +;fastcgi.logging = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If set to 0, PHP sends Status: header that +; is supported by Apache. When this option is set to 1, PHP will send +; RFC2616 compliant header. +; Default is zero. +; http://php.net/cgi.rfc2616-headers +;cgi.rfc2616_headers = 0 + +; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #! +; (shebang) at the top of the running script. This line might be needed if the +; script support running both as stand-alone script and via PHP CGI<. PHP in CGI +; mode skips this line and ignores its content if this directive is turned on. +; http://php.net/cgi.check-shebang-line +;cgi.check_shebang_line=1 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; http://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; http://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; http://php.net/upload-max-filesize +upload_max_filesize = 50M + +; Maximum number of files that can be uploaded via a single request +max_file_uploads = 20 + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-include +allow_url_include = Off + +; Define the anonymous ftp password (your email address). PHP's default setting +; for this is empty. +; http://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; http://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; http://php.net/default-socket-timeout +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; http://php.net/auto-detect-line-endings +;auto_detect_line_endings = Off + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; + +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename.extension +; +; For example, on Windows: +; +; extension=mysqli.dll +; +; ... or under UNIX: +; +; extension=mysqli.so +; +; ... or with a path: +; +; extension=/path/to/extension/mysqli.so +; +; If you only provide the name of the extension, PHP will look for it in its +; default extension directory. +; +; Windows Extensions +; Note that ODBC support is built in, so no dll is needed for it. +; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5+) +; extension folders as well as the separate PECL DLL download (PHP 5+). +; Be sure to appropriately set the extension_dir directive. +; +;extension=php_bz2.dll +;extension=php_curl.dll +;extension=php_fileinfo.dll +;extension=php_ftp.dll +;extension=php_gd2.dll +;extension=php_gettext.dll +;extension=php_gmp.dll +;extension=php_intl.dll +;extension=php_imap.dll +;extension=php_interbase.dll +;extension=php_ldap.dll +;extension=php_mbstring.dll +;extension=php_exif.dll ; Must be after mbstring as it depends on it +;extension=php_mysqli.dll +;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client +;extension=php_openssl.dll +;extension=php_pdo_firebird.dll +;extension=php_pdo_mysql.dll +;extension=php_pdo_oci.dll +;extension=php_pdo_odbc.dll +;extension=php_pdo_pgsql.dll +;extension=php_pdo_sqlite.dll +;extension=php_pgsql.dll +;extension=php_shmop.dll + +; The MIBS data available in the PHP distribution must be installed. +; See http://www.php.net/manual/en/snmp.installation.php +;extension=php_snmp.dll + +;extension=php_soap.dll +;extension=php_sockets.dll +;extension=php_sqlite3.dll +;extension=php_tidy.dll +;extension=php_xmlrpc.dll +;extension=php_xsl.dll + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[CLI Server] +; Whether the CLI web server uses ANSI color coding in its terminal output. +cli_server.color = On + +[Date] +; Defines the default timezone used by the date functions +; http://php.net/date.timezone +date.timezone = Asia/Shanghai + +; http://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; http://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; http://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.583333 + +; http://php.net/date.sunset-zenith +;date.sunset_zenith = 90.583333 + +[filter] +; http://php.net/filter.default +;filter.default = unsafe_raw + +; http://php.net/filter.default-flags +;filter.default_flags = + +[iconv] +; Use of this INI entry is deprecated, use global input_encoding instead. +; If empty, default_charset or input_encoding or iconv.input_encoding is used. +; The precedence is: default_charset < intput_encoding < iconv.input_encoding +;iconv.input_encoding = + +; Use of this INI entry is deprecated, use global internal_encoding instead. +; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. +; The precedence is: default_charset < internal_encoding < iconv.internal_encoding +;iconv.internal_encoding = + +; Use of this INI entry is deprecated, use global output_encoding instead. +; If empty, default_charset or output_encoding or iconv.output_encoding is used. +; The precedence is: default_charset < output_encoding < iconv.output_encoding +; To use an output encoding conversion, iconv's output handler must be set +; otherwise output encoding conversion cannot be performed. +;iconv.output_encoding = + +[intl] +;intl.default_locale = +; This directive allows you to produce PHP errors when some error +; happens within intl functions. The value is the level of the error produced. +; Default is 0, which does not produce any errors. +;intl.error_level = E_WARNING +;intl.use_exceptions = 0 + +[sqlite3] +;sqlite3.extension_dir = + +[Pcre] +;PCRE library backtracking limit. +; http://php.net/pcre.backtrack-limit +;pcre.backtrack_limit=100000 + +;PCRE library recursion limit. +;Please note that if you set this value to a high number you may consume all +;the available process stack and eventually crash PHP (due to reaching the +;stack size limit imposed by the Operating System). +; http://php.net/pcre.recursion-limit +;pcre.recursion_limit=100000 + +;Enables or disables JIT compilation of patterns. This requires the PCRE +;library to be compiled with JIT support. +;pcre.jit=1 + +[Pdo] +; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" +; http://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +;pdo_odbc.db2_instance_name + +[Pdo_mysql] +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/pdo_mysql.cache_size +pdo_mysql.cache_size = 2000 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/pdo_mysql.default-socket +pdo_mysql.default_socket= + +[Phar] +; http://php.net/phar.readonly +;phar.readonly = On + +; http://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[mail function] +; For Win32 only. +; http://php.net/smtp +SMTP = localhost +; http://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; http://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; http://php.net/sendmail-path +;sendmail_path = + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(). +;mail.force_extra_parameters = + +; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename +mail.add_x_header = On + +; The path to a log file that will log all mail() calls. Log entries include +; the full path of the script, line number, To address and headers. +;mail.log = +; Log mail to syslog (Event Log on Windows). +;mail.log = syslog + +[ODBC] +; http://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; http://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; http://php.net/odbc.default-pw +;odbc.default_pw = Not yet implemented + +; Controls the ODBC cursor model. +; Default: SQL_CURSOR_STATIC (default). +;odbc.default_cursortype + +; Allow or prevent persistent links. +; http://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; http://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; http://php.net/odbc.defaultlrl +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of odbc.defaultlrl and odbc.defaultbinmode +; http://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +;birdstep.max_links = -1 + +[Interbase] +; Allow or prevent persistent links. +ibase.allow_persistent = 1 + +; Maximum number of persistent links. -1 means no limit. +ibase.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +ibase.max_links = -1 + +; Default database name for ibase_connect(). +;ibase.default_db = + +; Default username for ibase_connect(). +;ibase.default_user = + +; Default password for ibase_connect(). +;ibase.default_password = + +; Default charset for ibase_connect(). +;ibase.default_charset = + +; Default timestamp format. +ibase.timestampformat = "%Y-%m-%d %H:%M:%S" + +; Default date format. +ibase.dateformat = "%Y-%m-%d" + +; Default time format. +ibase.timeformat = "%H:%M:%S" + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; http://php.net/mysqli.max-links +mysqli.max_links = -1 + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysqli.cache_size +mysqli.cache_size = 2000 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-user +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysqli.default-pw +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mysqlnd] +; Enable / Disable collection of general statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_statistics +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_memory_statistics +mysqlnd.collect_memory_statistics = Off + +; Records communication from all extensions using mysqlnd to the specified log +; file. +; http://php.net/mysqlnd.debug +;mysqlnd.debug = + +; Defines which queries will be logged. +; http://php.net/mysqlnd.log_mask +;mysqlnd.log_mask = 0 + +; Default size of the mysqlnd memory pool, which is used by result sets. +; http://php.net/mysqlnd.mempool_default_size +;mysqlnd.mempool_default_size = 16000 + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +; http://php.net/mysqlnd.net_cmd_buffer_size +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +; http://php.net/mysqlnd.net_read_buffer_size +;mysqlnd.net_read_buffer_size = 32768 + +; Timeout for network requests in seconds. +; http://php.net/mysqlnd.net_read_timeout +;mysqlnd.net_read_timeout = 31536000 + +; SHA-256 Authentication Plugin related. File with the MySQL server public RSA +; key. +; http://php.net/mysqlnd.sha256_server_public_key +;mysqlnd.sha256_server_public_key = + +[OCI8] + +; Connection: Enables privileged connections using external +; credentials (OCI_SYSOPER, OCI_SYSDBA) +; http://php.net/oci8.privileged-connect +;oci8.privileged_connect = Off + +; Connection: The maximum number of persistent OCI8 connections per +; process. Using -1 means no limit. +; http://php.net/oci8.max-persistent +;oci8.max_persistent = -1 + +; Connection: The maximum number of seconds a process is allowed to +; maintain an idle persistent connection. Using -1 means idle +; persistent connections will be maintained forever. +; http://php.net/oci8.persistent-timeout +;oci8.persistent_timeout = -1 + +; Connection: The number of seconds that must pass before issuing a +; ping during oci_pconnect() to check the connection validity. When +; set to 0, each oci_pconnect() will cause a ping. Using -1 disables +; pings completely. +; http://php.net/oci8.ping-interval +;oci8.ping_interval = 60 + +; Connection: Set this to a user chosen connection class to be used +; for all pooled server requests with Oracle 11g Database Resident +; Connection Pooling (DRCP). To use DRCP, this value should be set to +; the same string for all web servers running the same application, +; the database pool must be configured, and the connection string must +; specify to use a pooled server. +;oci8.connection_class = + +; High Availability: Using On lets PHP receive Fast Application +; Notification (FAN) events generated when a database node fails. The +; database must also be configured to post FAN events. +;oci8.events = Off + +; Tuning: This option enables statement caching, and specifies how +; many statements to cache. Using 0 disables statement caching. +; http://php.net/oci8.statement-cache-size +;oci8.statement_cache_size = 20 + +; Tuning: Enables statement prefetching and sets the default number of +; rows that will be fetched automatically after statement execution. +; http://php.net/oci8.default-prefetch +;oci8.default_prefetch = 100 + +; Compatibility. Using On means oci_close() will not close +; oci_connect() and oci_new_connect() connections. +; http://php.net/oci8.old-oci-close-semantics +;oci8.old_oci_close_semantics = Off + +[PostgreSQL] +; Allow or prevent persistent links. +; http://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; http://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; http://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; http://php.net/pgsql.ignore-notice +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Notice message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +; http://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[bcmath] +; Number of decimal digits for all bcmath functions. +; http://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; http://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; http://php.net/session.save-handler +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; The path can be defined as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if +; your OS has problems with many files in one directory, and is +; a more efficient layout for servers that handle many sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +; http://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use strict session mode. +; Strict session mode does not accept uninitialized session ID and regenerate +; session ID if browser sends uninitialized session ID. Strict mode protects +; applications from session fixation via session adoption vulnerability. It is +; disabled by default for maximum compatibility, but enabling it is encouraged. +; https://wiki.php.net/rfc/strict_sessions +session.use_strict_mode = 0 + +; Whether to use cookies. +; http://php.net/session.use-cookies +session.use_cookies = 1 + +; http://php.net/session.cookie-secure +;session.cookie_secure = + +; This option forces PHP to fetch and use a cookie for storing and maintaining +; the session id. We encourage this operation as it's very helpful in combating +; session hijacking when not specifying and managing your own session id. It is +; not the be-all and end-all of session hijacking defense, but it's a good start. +; http://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; http://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; http://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; http://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; http://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; http://php.net/session.cookie-domain +session.cookie_domain = + +; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. +; http://php.net/session.cookie-httponly +session.cookie_httponly = + +; Handler used to serialize data. php is the standard serializer of PHP. +; http://php.net/session.serialize-handler +session.serialize_handler = php + +; Defines the probability that the 'garbage collection' process is started +; on every session initialization. The probability is calculated by using +; gc_probability/gc_divisor. Where session.gc_probability is the numerator +; and gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.gc-probability +session.gc_probability = 1 + +; Defines the probability that the 'garbage collection' process is started on every +; session initialization. The probability is calculated by using the following equation: +; gc_probability/gc_divisor. Where session.gc_probability is the numerator and +; session.gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. Increasing this value to 1000 will give you +; a 0.1% chance the gc will run on any give request. For high volume production servers, +; this is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; http://php.net/session.gc-divisor +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +; http://php.net/session.gc-maxlifetime +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script would is the equivalent of +; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; find /path/to/sessions -cmin +24 -type f | xargs rm + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +; http://php.net/session.referer-check +session.referer_check = + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +; http://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; http://php.net/session.cache-expire +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users' security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publicly accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +; http://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; Set session ID character length. This value could be between 22 to 256. +; Shorter length than default is supported only for compatibility reason. +; Users should use 32 or more chars. +; http://php.net/session.sid-length +; Default Value: 32 +; Development Value: 26 +; Production Value: 26 +session.sid_length = 26 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +;
is special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. tag's action attribute URL will not be modified +; unless it is specified. +; Note that all valid entries require a "=", even if no value follows. +; Default Value: "a=href,area=href,frame=src,form=" +; Development Value: "a=href,area=href,frame=src,form=" +; Production Value: "a=href,area=href,frame=src,form=" +; http://php.net/url-rewriter.tags +session.trans_sid_tags = "a=href,area=href,frame=src,form=" + +; URL rewriter does not rewrite absolute URLs by default. +; To enable rewrites for absolute pathes, target hosts must be specified +; at RUNTIME. i.e. use ini_set() +; tags is special. PHP will check action attribute's URL regardless +; of session.trans_sid_tags setting. +; If no host is defined, HTTP_HOST will be used for allowed host. +; Example value: php.net,www.php.net,wiki.php.net +; Use "," for multiple hosts. No spaces are allowed. +; Default Value: "" +; Development Value: "" +; Production Value: "" +;session.trans_sid_hosts="" + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; Possible values: +; 4 (4 bits: 0-9, a-f) +; 5 (5 bits: 0-9, a-v) +; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 +; http://php.net/session.hash-bits-per-character +session.sid_bits_per_character = 5 + +; Enable upload progress tracking in $_SESSION +; Default Value: On +; Development Value: On +; Production Value: On +; http://php.net/session.upload-progress.enabled +;session.upload_progress.enabled = On + +; Cleanup the progress information as soon as all POST data has been read +; (i.e. upload completed). +; Default Value: On +; Development Value: On +; Production Value: On +; http://php.net/session.upload-progress.cleanup +;session.upload_progress.cleanup = On + +; A prefix used for the upload progress key in $_SESSION +; Default Value: "upload_progress_" +; Development Value: "upload_progress_" +; Production Value: "upload_progress_" +; http://php.net/session.upload-progress.prefix +;session.upload_progress.prefix = "upload_progress_" + +; The index name (concatenated with the prefix) in $_SESSION +; containing the upload progress information +; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" +; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" +; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" +; http://php.net/session.upload-progress.name +;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" + +; How frequently the upload progress should be updated. +; Given either in percentages (per-file), or in bytes +; Default Value: "1%" +; Development Value: "1%" +; Production Value: "1%" +; http://php.net/session.upload-progress.freq +;session.upload_progress.freq = "1%" + +; The minimum delay between updates, in seconds +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.upload-progress.min-freq +;session.upload_progress.min_freq = "1" + +; Only write session data when session data is changed. Enabled by default. +; http://php.net/session.lazy-write +;session.lazy_write = On + +[Assertion] +; Switch whether to compile assertions at all (to have no overhead at run-time) +; -1: Do not compile at all +; 0: Jump over assertion at run-time +; 1: Execute assertions +; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1) +; Default Value: 1 +; Development Value: 1 +; Production Value: -1 +; http://php.net/zend.assertions +zend.assertions = -1 + +; Assert(expr); active by default. +; http://php.net/assert.active +;assert.active = On + +; Throw an AssertationException on failed assertions +; http://php.net/assert.exception +;assert.exception = On + +; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) +; http://php.net/assert.warning +;assert.warning = On + +; Don't bail out by default. +; http://php.net/assert.bail +;assert.bail = Off + +; User-function to be called if an assertion fails. +; http://php.net/assert.callback +;assert.callback = 0 + +; Eval the expression with current error_reporting(). Set to true if you want +; error_reporting(0) around the eval(). +; http://php.net/assert.quiet-eval +;assert.quiet_eval = 0 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; http://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; http://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a components typlib on com_load() +; http://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; http://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; http://php.net/com.autoregister-verbose +;com.autoregister_verbose = true + +; The default character set code-page to use when passing strings to and from COM objects. +; Default: system ANSI code page +;com.code_page= + +[mbstring] +; language for internal character representation. +; This affects mb_send_mail() and mbstring.detect_order. +; http://php.net/mbstring.language +;mbstring.language = Japanese + +; Use of this INI entry is deprecated, use global internal_encoding instead. +; internal/script encoding. +; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) +; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. +; The precedence is: default_charset < internal_encoding < iconv.internal_encoding +;mbstring.internal_encoding = + +; Use of this INI entry is deprecated, use global input_encoding instead. +; http input encoding. +; mbstring.encoding_traslation = On is needed to use this setting. +; If empty, default_charset or input_encoding or mbstring.input is used. +; The precedence is: default_charset < intput_encoding < mbsting.http_input +; http://php.net/mbstring.http-input +;mbstring.http_input = + +; Use of this INI entry is deprecated, use global output_encoding instead. +; http output encoding. +; mb_output_handler must be registered as output buffer to function. +; If empty, default_charset or output_encoding or mbstring.http_output is used. +; The precedence is: default_charset < output_encoding < mbstring.http_output +; To use an output encoding conversion, mbstring's output handler must be set +; otherwise output encoding conversion cannot be performed. +; http://php.net/mbstring.http-output +;mbstring.http_output = + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +; http://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; "auto" detect order is changed according to mbstring.language +; http://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; http://php.net/mbstring.substitute-character +;mbstring.substitute_character = none + +; overload(replace) single byte functions by mbstring functions. +; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), +; etc. Possible values are 0,1,2,4 or combination of them. +; For example, 7 for overload everything. +; 0: No overload +; 1: Overload mail() function +; 2: Overload str*() functions +; 4: Overload ereg*() functions +; http://php.net/mbstring.func-overload +;mbstring.func_overload = 0 + +; enable strict encoding detection. +; Default: Off +;mbstring.strict_detection = On + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetype= + +[gd] +; Tell the jpeg decode to ignore warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +; http://php.net/gd.jpeg-ignore-warning +;gd.jpeg_ignore_warning = 1 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +; http://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; http://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; http://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; http://php.net/exif.encode-jis +;exif.encode_jis = + +; http://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; http://php.net/exif.decode-jis-intel +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +; http://php.net/tidy.default-config +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +; http://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; http://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; http://php.net/soap.wsdl-cache-dir +soap.wsdl_cache_dir="/tmp" + +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +; http://php.net/soap.wsdl-cache-ttl +soap.wsdl_cache_ttl=86400 + +; Sets the size of the cache limit. (Max. number of WSDL files to cache) +soap.wsdl_cache_limit = 5 + +[sysvshm] +; A default size of the shared memory segment +;sysvshm.init_mem = 10000 + +[ldap] +; Sets the maximum number of open links or -1 for unlimited. +ldap.max_links = -1 + +[dba] +;dba.default_handler= + +[opcache] +; Determines if Zend OPCache is enabled +;opcache.enable=1 + +; Determines if Zend OPCache is enabled for the CLI version of PHP +;opcache.enable_cli=1 + +; The OPcache shared memory storage size. +;opcache.memory_consumption=128 + +; The amount of memory for interned strings in Mbytes. +;opcache.interned_strings_buffer=8 + +; The maximum number of keys (scripts) in the OPcache hash table. +; Only numbers between 200 and 1000000 are allowed. +;opcache.max_accelerated_files=10000 + +; The maximum percentage of "wasted" memory until a restart is scheduled. +;opcache.max_wasted_percentage=5 + +; When this directive is enabled, the OPcache appends the current working +; directory to the script key, thus eliminating possible collisions between +; files with the same name (basename). Disabling the directive improves +; performance, but may break existing applications. +;opcache.use_cwd=1 + +; When disabled, you must reset the OPcache manually or restart the +; webserver for changes to the filesystem to take effect. +;opcache.validate_timestamps=1 + +; How often (in seconds) to check file timestamps for changes to the shared +; memory storage allocation. ("1" means validate once per second, but only +; once per request. "0" means always validate) +;opcache.revalidate_freq=2 + +; Enables or disables file search in include_path optimization +;opcache.revalidate_path=0 + +; If disabled, all PHPDoc comments are dropped from the code to reduce the +; size of the optimized code. +;opcache.save_comments=1 + +; If enabled, a fast shutdown sequence is used for the accelerated code +; Depending on the used Memory Manager this may cause some incompatibilities. +;opcache.fast_shutdown=0 + +; Allow file existence override (file_exists, etc.) performance feature. +;opcache.enable_file_override=0 + +; A bitmask, where each bit enables or disables the appropriate OPcache +; passes +;opcache.optimization_level=0xffffffff + +;opcache.inherited_hack=1 +;opcache.dups_fix=0 + +; The location of the OPcache blacklist file (wildcards allowed). +; Each OPcache blacklist file is a text file that holds the names of files +; that should not be accelerated. The file format is to add each filename +; to a new line. The filename may be a full path or just a file prefix +; (i.e., /var/www/x blacklists all the files and directories in /var/www +; that start with 'x'). Line starting with a ; are ignored (comments). +;opcache.blacklist_filename= + +; Allows exclusion of large files from being cached. By default all files +; are cached. +;opcache.max_file_size=0 + +; Check the cache checksum each N requests. +; The default value of "0" means that the checks are disabled. +;opcache.consistency_checks=0 + +; How long to wait (in seconds) for a scheduled restart to begin if the cache +; is not being accessed. +;opcache.force_restart_timeout=180 + +; OPcache error_log file name. Empty string assumes "stderr". +;opcache.error_log= + +; All OPcache errors go to the Web server log. +; By default, only fatal errors (level 0) or errors (level 1) are logged. +; You can also enable warnings (level 2), info messages (level 3) or +; debug messages (level 4). +;opcache.log_verbosity_level=1 + +; Preferred Shared Memory back-end. Leave empty and let the system decide. +;opcache.preferred_memory_model= + +; Protect the shared memory from unexpected writing during script execution. +; Useful for internal debugging only. +;opcache.protect_memory=0 + +; Allows calling OPcache API functions only from PHP scripts which path is +; started from specified string. The default "" means no restriction +;opcache.restrict_api= + +; Mapping base of shared memory segments (for Windows only). All the PHP +; processes have to map shared memory into the same address space. This +; directive allows to manually fix the "Unable to reattach to base address" +; errors. +;opcache.mmap_base= + +; Enables and sets the second level cache directory. +; It should improve performance when SHM memory is full, at server restart or +; SHM reset. The default "" disables file based caching. +;opcache.file_cache= + +; Enables or disables opcode caching in shared memory. +;opcache.file_cache_only=0 + +; Enables or disables checksum validation when script loaded from file cache. +;opcache.file_cache_consistency_checks=1 + +; Implies opcache.file_cache_only=1 for a certain process that failed to +; reattach to the shared memory (for Windows only). Explicitly enabled file +; cache is required. +;opcache.file_cache_fallback=1 + +; Enables or disables copying of PHP code (text segment) into HUGE PAGES. +; This should improve performance, but requires appropriate OS configuration. +;opcache.huge_code_pages=1 + +; Validate cached file permissions. +;opcache.validate_permission=0 + +; Prevent name collisions in chroot'ed environment. +;opcache.validate_root=0 + +[curl] +; A default value for the CURLOPT_CAINFO option. This is required to be an +; absolute path. +;curl.cainfo = + +[openssl] +; The location of a Certificate Authority (CA) file on the local filesystem +; to use when verifying the identity of SSL/TLS peers. Most users should +; not specify a value for this directive as PHP will attempt to use the +; OS-managed cert stores in its absence. If specified, this value may still +; be overridden on a per-stream basis via the "cafile" SSL stream context +; option. +;openssl.cafile= + +; If openssl.cafile is not specified or if the CA file is not found, the +; directory pointed to by openssl.capath is searched for a suitable +; certificate. This value must be a correctly hashed certificate directory. +; Most users should not specify a value for this directive as PHP will +; attempt to use the OS-managed cert stores in its absence. If specified, +; this value may still be overridden on a per-stream basis via the "capath" +; SSL stream context option. +;openssl.capath= + +; Local Variables: +; tab-width: 4 +; End: + +[XDebug] +xdebug.remote_enable = 1 +xdebug.remote_handler = "dbgp" +; Set to host.docker.internal on Mac and Windows, otherwise, set to host real ip +xdebug.remote_host = host.docker.internal +;xdebug.remote_port = 9000 +xdebug.remote_log = /var/log/php/xdebug.log + +SERVER_ENV=develop + +yaf.use_spl_autoload=1 diff --git a/conf/redis.conf b/services/redis/redis.conf similarity index 100% rename from conf/redis.conf rename to services/redis/redis.conf diff --git a/www/localhost/index.php b/www/localhost/index.php index 9ce07eec..8d1aabbd 100755 --- a/www/localhost/index.php +++ b/www/localhost/index.php @@ -1,4 +1,6 @@ 欢迎使用DNMP!'; echo '

版本信息

'; @@ -8,6 +10,7 @@ echo '
  • Nginx版本:', $_SERVER['SERVER_SOFTWARE'], '
  • '; echo '
  • MySQL服务器版本:', getMysqlVersion(), '
  • '; echo '
  • Redis服务器版本:', getRedisVersion(), '
  • '; +echo '
  • MongoDB服务器版本:', getMongoVersion(), '
  • '; echo ''; echo '

    已安装扩展

    '; @@ -53,6 +56,27 @@ function getRedisVersion() } } +/** + * 获取MongoDB版本 + */ +function getMongoVersion() +{ + if (extension_loaded('mongodb')) { + try { + $manager = new MongoDB\Driver\Manager('mongodb://root:123456@mongodb:27017'); + $command = new MongoDB\Driver\Command(array('serverStatus'=>true)); + + $cursor = $manager->executeCommand('admin', $command); + + return $cursor->toArray()[0]->version; + } catch (Exception $e) { + return $e->getMessage(); + } + } else { + return 'MongoDB 扩展未安装 ×'; + } +} + /** * 获取已安装扩展列表 */