├── .github └── workflows │ └── docker-publish.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── config ├── php.ini └── supervisord.conf ├── docker-run.png └── extension ├── event-3.0.5.tgz ├── install.sh ├── redis-5.3.7.tgz └── swoole-5.1.5.tgz /.github/workflows/docker-publish.yml: -------------------------------------------------------------------------------- 1 | name: Docker 2 | 3 | # This workflow uses actions that are not certified by GitHub. 4 | # They are provided by a third-party and are governed by 5 | # separate terms of service, privacy policy, and support 6 | # documentation. 7 | 8 | on: 9 | # schedule: 10 | # - cron: "0 10 * * *" 11 | push: 12 | # branches: 13 | # - "**" 14 | tags: 15 | - "v*.*.*" 16 | # pull_request: 17 | # branches: 18 | # - "main" 19 | 20 | env: 21 | # Use docker.io for Docker Hub if empty 22 | REGISTRY: ghcr.io 23 | # github.repository as / 24 | IMAGE_NAME: ${{ github.repository }} 25 | 26 | jobs: 27 | docker: 28 | runs-on: ubuntu-latest 29 | steps: 30 | - name: Checkout 31 | uses: actions/checkout@v4 32 | - name: Docker meta 33 | id: meta 34 | uses: docker/metadata-action@v5 35 | with: 36 | # list of Docker images to use as base name for tags 37 | images: | 38 | tinywan/docker-php-webman 39 | ghcr.io/tinywan/docker-php-webman 40 | # generate Docker tags based on the following events/attributes 41 | tags: | 42 | # type=schedule 43 | # type=ref,event=branch 44 | # type=ref,event=pr 45 | type=semver,pattern={{version}} 46 | # type=semver,pattern={{major}}.{{minor}} 47 | # type=semver,pattern={{major}} 48 | # type=sha 49 | - name: Set up QEMU 50 | uses: docker/setup-qemu-action@v3 51 | - name: Set up Docker Buildx 52 | uses: docker/setup-buildx-action@v3 53 | - name: Login to Docker Hub 54 | if: github.event_name != 'pull_request' 55 | uses: docker/login-action@v3 56 | with: 57 | username: ${{ secrets.DOCKERHUB_USERNAME }} 58 | password: ${{ secrets.DOCKERHUB_TOKEN }} 59 | - name: Login to GHCR 60 | if: github.event_name != 'pull_request' 61 | uses: docker/login-action@v3 62 | with: 63 | registry: ghcr.io 64 | username: ${{ github.repository_owner }} 65 | password: ${{ secrets.GITHUB_TOKEN }} 66 | - name: Build and push 67 | uses: docker/build-push-action@v5 68 | with: 69 | context: . 70 | push: ${{ github.event_name != 'pull_request' }} 71 | tags: ${{ steps.meta.outputs.tags }} 72 | labels: ${{ steps.meta.outputs.labels }} 73 | 74 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # FROM php:7.4.33-cli-alpine 2 | # FROM php:8.1.28-cli-alpine 3 | #FROM php:8.2.18-cli-alpine 4 | FROM php:8.3.22-cli-alpine 5 | 6 | LABEL Maintainer="ShaoBo Wan (Tinywan) <756684177@qq.com>" \ 7 | Description="Webman Lightweight container with PHP 8.2.16 based on Alpine Linux." 8 | 9 | # Container package : mirrors.163.com、mirrors.aliyun.com、mirrors.ustc.edu.cn 10 | RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories 11 | # RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g" /etc/apk/repositories 12 | 13 | RUN cat /etc/issue 14 | 15 | # [php74] Add basics first 16 | RUN apk update && apk add bash curl ca-certificates openssl openssh git libxml2-dev tzdata icu-dev openntpd libedit-dev libzip-dev libjpeg-turbo-dev libpng-dev freetype-dev autoconf dpkg-dev dpkg file g++ gcc libc-dev make pkgconf re2c pcre-dev libffi-dev libressl-dev libevent-dev zlib-dev libtool automake supervisor 17 | 18 | # [php8] Add basics first 19 | # RUN apt-get update && apt-get upgrade && apt-get install bash curl ca-certificates openssl openssh git nano libxml2-dev tzdata icu-dev openntpd libedit-dev libzip-dev libjpeg62-turbo-dev libpng12-dev libfreetype6-dev autoconf dpkg-dev dpkg file g++ gcc libc-dev make pkgconf re2c pcre-dev openssl-dev libffi-dev libressl-dev libevent-dev zlib-dev libtool automake supervisor 20 | 21 | COPY ./extension /tmp/extension 22 | WORKDIR /tmp/extension 23 | RUN chmod +x install.sh \ 24 | && sh install.sh \ 25 | && rm -rf /tmp/extension 26 | 27 | RUN php -m 28 | 29 | # Add Composer 30 | RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer 31 | 32 | # Configure PHP 33 | COPY config/php.ini /usr/local/etc/php/conf.d/zzz_custom.ini 34 | 35 | # Configure supervisord 36 | COPY config/supervisord.conf /etc/supervisor/conf.d/supervisord.conf 37 | 38 | # Make sure files/folders needed by the processes are accessable when they run under the nobody user 39 | # RUN chown -R nobody.nobody /run 40 | 41 | # Setup document root 42 | RUN mkdir -p /app 43 | 44 | # Make the document root a volume 45 | VOLUME /app 46 | 47 | #echo " > /usr/local/etc/php/conf.d/phalcon.ini 48 | # Switch to use a non-root user from here on 49 | USER root 50 | 51 | # Add application 52 | WORKDIR /app 53 | 54 | # Expose the port nginx is reachable on 55 | EXPOSE 8787 56 | 57 | # Let supervisord start nginx & php 58 | CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] 59 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Tim de Pater 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Docker](https://github.com/Tinywan/docker-php-webman/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/Tinywan/docker-php-webman/actions/workflows/docker-publish.yml) 2 | [![license](https://img.shields.io/github/license/Tinywan/docker-php-webman)]() 3 | [![nacos-sdk-php](https://img.shields.io/github/last-commit/tinywan/docker-php-webman/main)]() 4 | [![nacos-sdk-php](https://img.shields.io/github/v/tag/tinywan/docker-php-webman?color=ff69b4)]() 5 | 6 | ## Build 7 | 8 | ``` 9 | docker build -t tinywan/docker-php-webman:8.3.4 . 10 | ``` 11 | ## Usage 12 | 13 | Start the Docker container: 14 | 15 | ### Linux 16 | 17 | ``` 18 | docker run --rm -it -p 8787:8787 -v /home/www/webman:/app tinywan/docker-php-webman 19 | ``` 20 | 21 | ### Windows 22 | 23 | ``` 24 | docker run --rm -it -p 8787:8787 -v e:/dnmp/www/webman:/app tinywan/docker-php-webman 25 | ``` 26 | 27 | Test Run 28 | 29 | ![docker-run.png](./docker-run.png) 30 | 31 | > PHP Version **8.1.4** 32 | 33 | ![image](https://user-images.githubusercontent.com/14959876/159652489-7df26dcb-b5e7-4f31-be96-3ecb63f3f7c5.png) 34 | 35 | > **status** 36 | 37 | ![image](https://user-images.githubusercontent.com/14959876/159652735-86540cab-33c3-4b75-a0b7-41071300ee75.png) 38 | 39 | ## Extensions 40 | 41 | ``` 42 | bash-5.1# php -m 43 | [PHP Modules] 44 | bcmath 45 | bz2 46 | calendar 47 | Core 48 | ctype 49 | curl 50 | date 51 | dom 52 | event 53 | fileinfo 54 | filter 55 | ftp 56 | gd 57 | hash 58 | iconv 59 | json 60 | libxml 61 | mbstring 62 | mysqli 63 | mysqlnd 64 | openssl 65 | pcntl 66 | pcre 67 | PDO 68 | pdo_mysql 69 | pdo_sqlite 70 | Phar 71 | posix 72 | readline 73 | redis 74 | Reflection 75 | session 76 | SimpleXML 77 | soap 78 | sockets 79 | sodium 80 | SPL 81 | sqlite3 82 | standard 83 | tokenizer 84 | xml 85 | xmlreader 86 | xmlwriter 87 | Zend OPcache 88 | zip 89 | zlib 90 | 91 | [Zend Modules] 92 | Zend OPcache 93 | ``` 94 | ## Other 95 | 96 | delete all container 97 | ``` 98 | docker rm `docker ps -a -q` 99 | ``` 100 | 101 | delete all images 102 | ``` 103 | docker rmi -f $(docker images -qa) 104 | ``` 105 | 106 | ## dos2unix install.sh 107 | 108 | ``` 109 | => ERROR [ 7/14] RUN chmod +x install.sh && sh install.sh && rm -rf /tmp/extension 0.2s 110 | ------ 111 | > [ 7/14] RUN chmod +x install.sh && sh install.sh && rm -rf /tmp/extension: 112 | : not foundll.sh: line 1: #!/bin/sh 113 | : not foundll.sh: line 2: 114 | : not foundll.sh: line 4: 115 | : not foundll.sh: line 10: echo 116 | : not foundll.sh: line 11: 117 | : not foundll.sh: line 13: 118 | : not foundll.sh: line 30: 119 | 0.217 install.sh: return: line 36: Illegal number: 0 120 | ``` 121 | 查看文本格式 122 | ``` 123 | $ cat -A install.sh 124 | M-oM-;M-?#!/bin/sh^M$ 125 | ^M$ 126 | ``` 127 | 128 | > 执行转换 129 | ``` 130 | # 安装 131 | sudo apt-get install dos2unix 132 | 133 | # 转换 134 | dos2unix install.sh 135 | ``` 136 | -------------------------------------------------------------------------------- /config/php.ini: -------------------------------------------------------------------------------- 1 | [Date] 2 | date.timezone="UTC" 3 | -------------------------------------------------------------------------------- /config/supervisord.conf: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | nodaemon=true 3 | user=root 4 | logfile=/dev/null 5 | logfile_maxbytes=0 6 | pidfile=/run/supervisord.pid 7 | startsecs=3 8 | 9 | [program:webman] 10 | command=php /app/start.php start 11 | stdout_logfile=/dev/stdout 12 | stdout_logfile_maxbytes=0 13 | stderr_logfile=/dev/stderr 14 | stderr_logfile_maxbytes=0 15 | autorestart=false 16 | startretries=0 17 | -------------------------------------------------------------------------------- /docker-run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tinywan/docker-php-webman/ed6f5d5ccdca2b51d250fbca5ce5e886c789e855/docker-run.png -------------------------------------------------------------------------------- /extension/event-3.0.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tinywan/docker-php-webman/ed6f5d5ccdca2b51d250fbca5ce5e886c789e855/extension/event-3.0.5.tgz -------------------------------------------------------------------------------- /extension/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MC="-j$(nproc)" 4 | 5 | echo "============================================" 6 | echo "Install extensions from : install.sh" 7 | echo "PHP version : ${PHP_VERSION}" 8 | echo "Work directory : ${PWD}" 9 | echo "============================================" 10 | echo 11 | 12 | export EXTENSIONS=",gd,bcmath,pdo,mysqli,pdo_mysql,redis,bz2,calendar,opcache,pcntl,sockets,zip,event,xlswriter,swoole," 13 | 14 | # 15 | # Check if current php version is greater than or equal to 16 | # specific version. 17 | # 18 | # For example, to check if current php is greater than or 19 | # equal to PHP 7.0: 20 | # 21 | # isPhpVersionGreaterOrEqual 8 0 22 | # 23 | # Param 1: Specific PHP Major version 24 | # Param 2: Specific PHP Minor version 25 | # Return : 1 if greater than or equal to, 0 if less than 26 | # 27 | isPhpVersionGreaterOrEqual() { 28 | local PHP_MAJOR_VERSION=$(php -r "echo PHP_MAJOR_VERSION;") 29 | local PHP_MINOR_VERSION=$(php -r "echo PHP_MINOR_VERSION;") 30 | 31 | if [[ "$PHP_MAJOR_VERSION" -gt "$1" || "$PHP_MAJOR_VERSION" -eq "$1" && "$PHP_MINOR_VERSION" -ge "$2" ]]; then 32 | return 1 33 | else 34 | return 0 35 | fi 36 | } 37 | # 38 | # Install extension from package file(.tgz), 39 | # For example: 40 | # 41 | # installExtensionFromTgz redis-5.2.2 42 | # 43 | # Param 1: Package name with version 44 | # Param 2: enable options 45 | # 46 | installExtensionFromTgz() { 47 | tgzName=$1 48 | extensionName="${tgzName%%-*}" 49 | 50 | mkdir ${extensionName} 51 | tar -xf ${tgzName}.tgz -C ${extensionName} --strip-components=1 52 | (cd ${extensionName} && phpize && ./configure && make ${MC} && make install) 53 | 54 | docker-php-ext-enable ${extensionName} $2 55 | } 56 | 57 | if [[ -z "${EXTENSIONS##*,pdo_mysql,*}" ]]; then 58 | echo "---------- Install pdo_mysql ----------" 59 | docker-php-ext-install ${MC} pdo_mysql 60 | fi 61 | 62 | if [[ -z "${EXTENSIONS##*,pcntl,*}" ]]; then 63 | echo "---------- Install pcntl ----------" 64 | docker-php-ext-install ${MC} pcntl 65 | fi 66 | 67 | if [[ -z "${EXTENSIONS##*,mysqli,*}" ]]; then 68 | echo "---------- Install mysqli ----------" 69 | docker-php-ext-install ${MC} mysqli 70 | fi 71 | 72 | if [[ -z "${EXTENSIONS##*,mbstring,*}" ]]; then 73 | echo "---------- mbstring is installed ----------" 74 | fi 75 | 76 | if [[ -z "${EXTENSIONS##*,exif,*}" ]]; then 77 | echo "---------- Install exif ----------" 78 | docker-php-ext-install ${MC} exif 79 | fi 80 | 81 | if [[ -z "${EXTENSIONS##*,bcmath,*}" ]]; then 82 | echo "---------- Install bcmath ----------" 83 | docker-php-ext-install ${MC} bcmath 84 | fi 85 | 86 | if [[ -z "${EXTENSIONS##*,calendar,*}" ]]; then 87 | echo "---------- Install calendar ----------" 88 | docker-php-ext-install ${MC} calendar 89 | fi 90 | 91 | if [[ -z "${EXTENSIONS##*,zend_test,*}" ]]; then 92 | echo "---------- Install zend_test ----------" 93 | docker-php-ext-install ${MC} zend_test 94 | fi 95 | 96 | if [[ -z "${EXTENSIONS##*,opcache,*}" ]]; then 97 | echo "---------- Install opcache ----------" 98 | docker-php-ext-install opcache 99 | fi 100 | 101 | if [[ -z "${EXTENSIONS##*,sockets,*}" ]]; then 102 | echo "---------- Install sockets ----------" 103 | docker-php-ext-install ${MC} sockets 104 | fi 105 | 106 | if [[ -z "${EXTENSIONS##*,gettext,*}" ]]; then 107 | echo "---------- Install gettext ----------" 108 | apk --no-cache add gettext-dev 109 | docker-php-ext-install ${MC} gettext 110 | 111 | fi 112 | 113 | if [[ -z "${EXTENSIONS##*,shmop,*}" ]]; then 114 | echo "---------- Install shmop ----------" 115 | docker-php-ext-install ${MC} shmop 116 | fi 117 | 118 | if [[ -z "${EXTENSIONS##*,sysvmsg,*}" ]]; then 119 | echo "---------- Install sysvmsg ----------" 120 | docker-php-ext-install ${MC} sysvmsg 121 | fi 122 | 123 | if [[ -z "${EXTENSIONS##*,sysvsem,*}" ]]; then 124 | echo "---------- Install sysvsem ----------" 125 | docker-php-ext-install ${MC} sysvsem 126 | fi 127 | 128 | if [[ -z "${EXTENSIONS##*,sysvshm,*}" ]]; then 129 | echo "---------- Install sysvshm ----------" 130 | docker-php-ext-install ${MC} sysvshm 131 | fi 132 | 133 | if [[ -z "${EXTENSIONS##*,pdo_firebird,*}" ]]; then 134 | echo "---------- Install pdo_firebird ----------" 135 | docker-php-ext-install ${MC} pdo_firebird 136 | fi 137 | 138 | if [[ -z "${EXTENSIONS##*,pdo_dblib,*}" ]]; then 139 | echo "---------- Install pdo_dblib ----------" 140 | docker-php-ext-install ${MC} pdo_dblib 141 | fi 142 | 143 | if [[ -z "${EXTENSIONS##*,pdo_oci,*}" ]]; then 144 | echo "---------- Install pdo_oci ----------" 145 | docker-php-ext-install ${MC} pdo_oci 146 | fi 147 | 148 | if [[ -z "${EXTENSIONS##*,pdo_odbc,*}" ]]; then 149 | echo "---------- Install pdo_odbc ----------" 150 | docker-php-ext-install ${MC} pdo_odbc 151 | fi 152 | 153 | if [[ -z "${EXTENSIONS##*,pdo_pgsql,*}" ]]; then 154 | echo "---------- Install pdo_pgsql ----------" 155 | apk --no-cache add postgresql-dev && 156 | docker-php-ext-install ${MC} pdo_pgsql 157 | fi 158 | 159 | if [[ -z "${EXTENSIONS##*,pgsql,*}" ]]; then 160 | echo "---------- Install pgsql ----------" 161 | apk --no-cache add postgresql-dev && 162 | docker-php-ext-install ${MC} pgsql 163 | fi 164 | 165 | if [[ -z "${EXTENSIONS##*,oci8,*}" ]]; then 166 | echo "---------- Install oci8 ----------" 167 | docker-php-ext-install ${MC} oci8 168 | fi 169 | 170 | if [[ -z "${EXTENSIONS##*,odbc,*}" ]]; then 171 | echo "---------- Install odbc ----------" 172 | docker-php-ext-install ${MC} odbc 173 | fi 174 | 175 | if [[ -z "${EXTENSIONS##*,dba,*}" ]]; then 176 | echo "---------- Install dba ----------" 177 | docker-php-ext-install ${MC} dba 178 | fi 179 | 180 | if [[ -z "${EXTENSIONS##*,interbase,*}" ]]; then 181 | echo "---------- Install interbase ----------" 182 | echo "Alpine linux do not support interbase/firebird!!!" 183 | #docker-php-ext-install ${MC} interbase 184 | fi 185 | 186 | if [[ -z "${EXTENSIONS##*,gd,*}" ]]; then 187 | echo "---------- Install gd ----------" 188 | 189 | apk add --no-cache \ 190 | freetype \ 191 | freetype-dev \ 192 | libpng \ 193 | libpng-dev \ 194 | libjpeg-turbo \ 195 | libjpeg-turbo-dev \ 196 | libwebp-dev && 197 | docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp --enable-swoole-curl && 198 | docker-php-ext-install gd && 199 | apk del \ 200 | freetype-dev \ 201 | libpng-dev \ 202 | libjpeg-turbo-dev 203 | fi 204 | 205 | if [[ -z "${EXTENSIONS##*,intl,*}" ]]; then 206 | echo "---------- Install intl ----------" 207 | apk add --no-cache icu-dev 208 | docker-php-ext-install ${MC} intl 209 | fi 210 | 211 | if [[ -z "${EXTENSIONS##*,bz2,*}" ]]; then 212 | echo "---------- Install bz2 ----------" 213 | apk add --no-cache bzip2-dev 214 | docker-php-ext-install ${MC} bz2 215 | fi 216 | 217 | if [[ -z "${EXTENSIONS##*,soap,*}" ]]; then 218 | echo "---------- Install soap ----------" 219 | apk add --no-cache libxml2-dev 220 | docker-php-ext-install ${MC} soap 221 | fi 222 | 223 | if [[ -z "${EXTENSIONS##*,xsl,*}" ]]; then 224 | echo "---------- Install xsl ----------" 225 | apk add --no-cache libxml2-dev libxslt-dev 226 | docker-php-ext-install ${MC} xsl 227 | fi 228 | 229 | if [[ -z "${EXTENSIONS##*,xmlrpc,*}" ]]; then 230 | echo "---------- Install xmlrpc ----------" 231 | apk add --no-cache libxml2-dev libxslt-dev 232 | docker-php-ext-install ${MC} xmlrpc 233 | fi 234 | 235 | if [[ -z "${EXTENSIONS##*,wddx,*}" ]]; then 236 | echo "---------- Install wddx ----------" 237 | apk add --no-cache libxml2-dev libxslt-dev 238 | docker-php-ext-install ${MC} wddx 239 | fi 240 | 241 | if [[ -z "${EXTENSIONS##*,curl,*}" ]]; then 242 | echo "---------- curl is installed ----------" 243 | fi 244 | 245 | if [[ -z "${EXTENSIONS##*,readline,*}" ]]; then 246 | echo "---------- Install readline ----------" 247 | apk add --no-cache readline-dev 248 | apk add --no-cache libedit-dev 249 | docker-php-ext-install ${MC} readline 250 | fi 251 | 252 | if [[ -z "${EXTENSIONS##*,snmp,*}" ]]; then 253 | echo "---------- Install snmp ----------" 254 | apk add --no-cache net-snmp-dev 255 | docker-php-ext-install ${MC} snmp 256 | fi 257 | 258 | if [[ -z "${EXTENSIONS##*,pspell,*}" ]]; then 259 | echo "---------- Install pspell ----------" 260 | apk add --no-cache aspell-dev 261 | apk add --no-cache aspell-en 262 | docker-php-ext-install ${MC} pspell 263 | fi 264 | 265 | if [[ -z "${EXTENSIONS##*,recode,*}" ]]; then 266 | echo "---------- Install recode ----------" 267 | apk add --no-cache recode-dev 268 | docker-php-ext-install ${MC} recode 269 | fi 270 | 271 | if [[ -z "${EXTENSIONS##*,tidy,*}" ]]; then 272 | echo "---------- Install tidy ----------" 273 | apk add --no-cache tidyhtml-dev 274 | 275 | # Fix: https://github.com/htacg/tidy-html5/issues/235 276 | ln -s /usr/include/tidybuffio.h /usr/include/buffio.h 277 | 278 | docker-php-ext-install ${MC} tidy 279 | fi 280 | 281 | if [[ -z "${EXTENSIONS##*,gmp,*}" ]]; then 282 | echo "---------- Install gmp ----------" 283 | apk add --no-cache gmp-dev 284 | docker-php-ext-install ${MC} gmp 285 | fi 286 | 287 | if [[ -z "${EXTENSIONS##*,imap,*}" ]]; then 288 | echo "---------- Install imap ----------" 289 | apk add --no-cache imap-dev 290 | docker-php-ext-configure imap --with-imap --with-imap-ssl 291 | docker-php-ext-install ${MC} imap 292 | fi 293 | 294 | if [[ -z "${EXTENSIONS##*,ldap,*}" ]]; then 295 | echo "---------- Install ldap ----------" 296 | apk add --no-cache ldb-dev 297 | apk add --no-cache openldap-dev 298 | docker-php-ext-install ${MC} ldap 299 | fi 300 | 301 | if [[ -z "${EXTENSIONS##*,psr,*}" ]]; then 302 | echo "---------- Install psr ----------" 303 | printf "\n" | pecl install psr 304 | docker-php-ext-enable psr 305 | fi 306 | 307 | if [[ -z "${EXTENSIONS##*,imagick,*}" ]]; then 308 | echo "---------- Install imagick ----------" 309 | apk add --no-cache file-dev 310 | apk add --no-cache imagemagick-dev 311 | printf "\n" | pecl install imagick-3.4.4 312 | docker-php-ext-enable imagick 313 | fi 314 | 315 | if [[ -z "${EXTENSIONS##*,rar,*}" ]]; then 316 | echo "---------- Install rar ----------" 317 | printf "\n" | pecl install rar 318 | docker-php-ext-enable rar 319 | fi 320 | 321 | if [[ -z "${EXTENSIONS##*,ast,*}" ]]; then 322 | echo "---------- Install ast ----------" 323 | printf "\n" | pecl install ast 324 | docker-php-ext-enable ast 325 | fi 326 | 327 | if [[ -z "${EXTENSIONS##*,msgpack,*}" ]]; then 328 | echo "---------- Install msgpack ----------" 329 | printf "\n" | pecl install msgpack 330 | docker-php-ext-enable msgpack 331 | fi 332 | 333 | if [[ -z "${EXTENSIONS##*,igbinary,*}" ]]; then 334 | echo "---------- Install igbinary ----------" 335 | printf "\n" | pecl install igbinary 336 | docker-php-ext-enable igbinary 337 | fi 338 | 339 | if [[ -z "${EXTENSIONS##*,yac,*}" ]]; then 340 | isPhpVersionGreaterOrEqual 8 0 341 | if [[ "$?" = "1" ]]; then 342 | echo "---------- Install yac ----------" 343 | printf "\n" | pecl install yac-2.0.2 344 | docker-php-ext-enable yac 345 | else 346 | echo "yar requires PHP >= 7.0.0, installed version is ${PHP_VERSION}" 347 | fi 348 | fi 349 | 350 | if [[ -z "${EXTENSIONS##*,yar,*}" ]]; then 351 | isPhpVersionGreaterOrEqual 7 0 352 | if [[ "$?" = "1" ]]; then 353 | echo "---------- Install yar ----------" 354 | printf "\n" | pecl install yar 355 | docker-php-ext-enable yar 356 | else 357 | echo "yar requires PHP >= 7.0.0, installed version is ${PHP_VERSION}" 358 | fi 359 | 360 | fi 361 | 362 | if [[ -z "${EXTENSIONS##*,yaconf,*}" ]]; then 363 | isPhpVersionGreaterOrEqual 8 0 364 | if [[ "$?" = "1" ]]; then 365 | echo "---------- Install yaconf ----------" 366 | printf "\n" | pecl install yaconf 367 | docker-php-ext-enable yaconf 368 | else 369 | echo "yar requires PHP >= 7.0.0, installed version is ${PHP_VERSION}" 370 | fi 371 | fi 372 | 373 | if [[ -z "${EXTENSIONS##*,seaslog,*}" ]]; then 374 | echo "---------- Install seaslog ----------" 375 | printf "\n" | pecl install seaslog 376 | docker-php-ext-enable seaslog 377 | fi 378 | 379 | if [[ -z "${EXTENSIONS##*,varnish,*}" ]]; then 380 | echo "---------- Install varnish ----------" 381 | apk add --no-cache varnish-dev 382 | printf "\n" | pecl install varnish 383 | docker-php-ext-enable varnish 384 | fi 385 | 386 | if [[ -z "${EXTENSIONS##*,pdo_sqlsrv,*}" ]]; then 387 | isPhpVersionGreaterOrEqual 8 0 388 | if [[ "$?" = "1" ]]; then 389 | echo "---------- Install pdo_sqlsrv ----------" 390 | apk add --no-cache unixodbc-dev 391 | printf "\n" | pecl install pdo_sqlsrv 392 | docker-php-ext-enable pdo_sqlsrv 393 | curl -o /tmp/msodbcsql17_amd64.apk https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.5.2.1-1_amd64.apk 394 | apk add --allow-untrusted /tmp/msodbcsql17_amd64.apk 395 | else 396 | echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}" 397 | fi 398 | fi 399 | 400 | if [[ -z "${EXTENSIONS##*,sqlsrv,*}" ]]; then 401 | isPhpVersionGreaterOrEqual 7 1 402 | if [[ "$?" = "1" ]]; then 403 | echo "---------- Install sqlsrv ----------" 404 | apk add --no-cache unixodbc-dev 405 | printf "\n" | pecl install sqlsrv 406 | docker-php-ext-enable sqlsrv 407 | else 408 | echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}" 409 | fi 410 | fi 411 | 412 | if [[ -z "${EXTENSIONS##*,mcrypt,*}" ]]; then 413 | isPhpVersionGreaterOrEqual 7 0 414 | if [[ "$?" = "1" ]]; then 415 | echo "---------- Install mcrypt ----------" 416 | apk add --no-cache libmcrypt-dev libmcrypt re2c 417 | printf "\n" | pecl install mcrypt 418 | docker-php-ext-enable mcrypt 419 | else 420 | echo "---------- Install mcrypt ----------" 421 | apk add --no-cache libmcrypt-dev && 422 | docker-php-ext-install ${MC} mcrypt 423 | fi 424 | fi 425 | 426 | if [[ -z "${EXTENSIONS##*,mysql,*}" ]]; then 427 | isPhpVersionGreaterOrEqual 8 0 428 | 429 | if [[ "$?" = "1" ]]; then 430 | echo "---------- mysql was REMOVED from PHP 7.0.0 ----------" 431 | else 432 | echo "---------- Install mysql ----------" 433 | docker-php-ext-install ${MC} mysql 434 | fi 435 | fi 436 | 437 | if [[ -z "${EXTENSIONS##*,sodium,*}" ]]; then 438 | isPhpVersionGreaterOrEqual 7 2 439 | if [[ "$?" = "1" ]]; then 440 | echo 441 | echo "Sodium is bundled with PHP from PHP 7.2.0" 442 | echo 443 | else 444 | echo "---------- Install sodium ----------" 445 | apk add --no-cache libsodium-dev 446 | docker-php-ext-install ${MC} sodium 447 | fi 448 | fi 449 | 450 | if [[ -z "${EXTENSIONS##*,amqp,*}" ]]; then 451 | echo "---------- Install amqp ----------" 452 | apk add --no-cache rabbitmq-c-dev 453 | installExtensionFromTgz amqp-1.9.4 454 | fi 455 | 456 | if [[ -z "${EXTENSIONS##*,redis,*}" ]]; then 457 | echo "---------- Install redis ----------" 458 | isPhpVersionGreaterOrEqual 8 0 459 | if [[ "$?" = "1" ]]; then 460 | installExtensionFromTgz redis-5.3.4 461 | else 462 | printf "\n" | pecl install redis-4.3.0 463 | docker-php-ext-enable redis 464 | fi 465 | fi 466 | 467 | if [[ -z "${EXTENSIONS##*,apcu,*}" ]]; then 468 | echo "---------- Install apcu ----------" 469 | installExtensionFromTgz apcu-5.1.17 470 | fi 471 | 472 | if [[ -z "${EXTENSIONS##*,memcached,*}" ]]; then 473 | echo "---------- Install memcached ----------" 474 | apk add --no-cache libmemcached-dev zlib-dev 475 | isPhpVersionGreaterOrEqual 8 0 476 | 477 | if [[ "$?" = "1" ]]; then 478 | printf "\n" | pecl install memcached-3.1.3 479 | else 480 | printf "\n" | pecl install memcached-2.2.0 481 | fi 482 | 483 | docker-php-ext-enable memcached 484 | fi 485 | 486 | if [[ -z "${EXTENSIONS##*,memcache,*}" ]]; then 487 | echo "---------- Install memcache ----------" 488 | isPhpVersionGreaterOrEqual 7 0 489 | if [[ "$?" = "1" ]]; then 490 | installExtensionFromTgz memcache-4.0.5.2 491 | else 492 | installExtensionFromTgz memcache-2.2.6 493 | fi 494 | fi 495 | 496 | if [[ -z "${EXTENSIONS##*,xdebug,*}" ]]; then 497 | echo "---------- Install xdebug ----------" 498 | isPhpVersionGreaterOrEqual 7 0 499 | 500 | if [[ "$?" = "1" ]]; then 501 | isPhpVersionGreaterOrEqual 7 4 502 | if [[ "$?" = "1" ]]; then 503 | installExtensionFromTgz xdebug-2.9.0 504 | else 505 | installExtensionFromTgz xdebug-2.5.5 506 | fi 507 | else 508 | installExtensionFromTgz xdebug-2.5.5 509 | fi 510 | fi 511 | 512 | if [[ -z "${EXTENSIONS##*,event,*}" ]]; then 513 | echo "---------- Install event ----------" 514 | apk add --no-cache libevent-dev 515 | export is_sockets_installed=$(php -r "echo extension_loaded('sockets');") 516 | 517 | if [[ "${is_sockets_installed}" = "" ]]; then 518 | echo "---------- event is depend on sockets, install sockets first ----------" 519 | docker-php-ext-install sockets 520 | fi 521 | 522 | echo "---------- Install event again ----------" 523 | installExtensionFromTgz event-3.0.5 "--ini-name event.ini" 524 | fi 525 | 526 | if [[ -z "${EXTENSIONS##*,mongodb,*}" ]]; then 527 | echo "---------- Install mongodb ----------" 528 | installExtensionFromTgz mongodb-1.7.4 529 | fi 530 | 531 | if [[ -z "${EXTENSIONS##*,yaf,*}" ]]; then 532 | echo "---------- Install yaf ----------" 533 | isPhpVersionGreaterOrEqual 7 0 534 | 535 | if [[ "$?" = "1" ]]; then 536 | printf "\n" | pecl install yaf 537 | docker-php-ext-enable yaf 538 | else 539 | installExtensionFromTgz yaf-2.3.5 540 | fi 541 | fi 542 | 543 | if [[ -z "${EXTENSIONS##*,swoole,*}" ]]; then 544 | echo "---------- Install Swoole ----------" 545 | pecl install swoole-5.1.5 546 | docker-php-ext-enable swoole 547 | fi 548 | 549 | if [[ -z "${EXTENSIONS##*,zip,*}" ]]; then 550 | echo "---------- Install zip ----------" 551 | # Fix: https://github.com/docker-library/php/issues/797 552 | apk add --no-cache libzip-dev 553 | 554 | isPhpVersionGreaterOrEqual 8 0 555 | if [[ "$?" != "1" ]]; then 556 | docker-php-ext-configure zip --with-libzip=/usr/include 557 | fi 558 | 559 | docker-php-ext-install ${MC} zip 560 | fi 561 | 562 | if [[ -z "${EXTENSIONS##*,xhprof,*}" ]]; then 563 | echo "---------- Install XHProf ----------" 564 | 565 | isPhpVersionGreaterOrEqual 8 0 566 | 567 | if [[ "$?" = "1" ]]; then 568 | mkdir xhprof && 569 | tar -xf xhprof-2.2.0.tgz -C xhprof --strip-components=1 && 570 | (cd xhprof/extension/ && phpize && ./configure && make ${MC} && make install) && 571 | docker-php-ext-enable xhprof 572 | else 573 | echo "---------- PHP Version>= 7.0----------" 574 | fi 575 | 576 | fi 577 | 578 | if [[ -z "${EXTENSIONS##*,xlswriter,*}" ]]; then 579 | echo "---------- Install xlswriter ----------" 580 | pecl install xlswriter-1.5.5 581 | docker-php-ext-enable xlswriter 582 | fi 583 | 584 | if [[ -z "${EXTENSIONS##*,rdkafka,*}" ]]; then 585 | echo "---------- Install rdkafka ----------" 586 | isPhpVersionGreaterOrEqual 5 6 587 | 588 | if [[ "$?" = "1" ]]; then 589 | apk add librdkafka-dev 590 | printf "\n" | pecl install rdkafka 591 | docker-php-ext-enable rdkafka 592 | else 593 | echo "---------- PHP Version>= 5.6----------" 594 | fi 595 | fi 596 | 597 | if [[ -z "${EXTENSIONS##*,zookeeper,*}" ]]; then 598 | echo "---------- Install zookeeper ----------" 599 | isPhpVersionGreaterOrEqual 7 0 600 | 601 | if [[ "$?" = "1" ]]; then 602 | apk add re2c 603 | apk add libzookeeper-dev --repository http://${CONTAINER_PACKAGE_URL}/alpine/edge/testing/ 604 | printf "\n" | pecl install zookeeper 605 | docker-php-ext-enable zookeeper 606 | else 607 | echo "---------- PHP Version>= 7.0----------" 608 | fi 609 | fi 610 | 611 | if [[ -z "${EXTENSIONS##*,phalcon,*}" ]]; then 612 | echo "---------- Install phalcon ----------" 613 | isPhpVersionGreaterOrEqual 7 2 614 | 615 | if [[ "$?" = "1" ]]; then 616 | printf "\n" | pecl install phalcon 617 | docker-php-ext-enable psr 618 | docker-php-ext-enable phalcon 619 | else 620 | echo "---------- PHP Version>= 7.2----------" 621 | fi 622 | fi 623 | 624 | if [[ -z "${EXTENSIONS##*,sdebug,*}" ]]; then 625 | echo "---------- Install sdebug ----------" 626 | isPhpVersionGreaterOrEqual 7 2 627 | 628 | if [[ "$?" = "1" ]]; then 629 | curl -SL "https://github.com/swoole/sdebug/archive/sdebug_2_9-beta.tar.gz" -o sdebug.tar.gz && 630 | mkdir -p sdebug && 631 | tar -xf sdebug.tar.gz -C sdebug --strip-components=1 && 632 | rm sdebug.tar.gz && 633 | ( 634 | cd sdebug && 635 | phpize && 636 | ./configure --enable-xdebug && 637 | make clean && make && make install 638 | ) && 639 | docker-php-ext-enable xdebug 640 | else 641 | echo "---------- PHP Version>= 7.2----------" 642 | fi 643 | fi 644 | 645 | if [[ -z "${EXTENSIONS##*,protobuf,*}" ]]; then 646 | echo "---------- Install protobuf ----------" 647 | isPhpVersionGreaterOrEqual 8 0 648 | 649 | if [[ "$?" = "1" ]]; then 650 | installExtensionFromTgz protobuf-3.13.0.1 651 | else 652 | echo "---------- PHP Version>= 7.2----------" 653 | fi 654 | fi 655 | 656 | if [[ -z "${EXTENSIONS##*,grpc,*}" ]]; then 657 | echo "---------- Install grpc ----------" 658 | isPhpVersionGreaterOrEqual 7 2 659 | 660 | if [[ "$?" = "1" ]]; then 661 | installExtensionFromTgz grpc-1.33.1 662 | else 663 | echo "---------- PHP Version>= 7.2----------" 664 | fi 665 | fi 666 | 667 | if [ "${PHP_EXTENSIONS}" != "" ]; then 668 | apk del .build-deps && 669 | docker-php-source delete 670 | fi 671 | -------------------------------------------------------------------------------- /extension/redis-5.3.7.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tinywan/docker-php-webman/ed6f5d5ccdca2b51d250fbca5ce5e886c789e855/extension/redis-5.3.7.tgz -------------------------------------------------------------------------------- /extension/swoole-5.1.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tinywan/docker-php-webman/ed6f5d5ccdca2b51d250fbca5ce5e886c789e855/extension/swoole-5.1.5.tgz --------------------------------------------------------------------------------