From 43c0739dfaffd1b0ae720d304dcbf60dfae3e511 Mon Sep 17 00:00:00 2001 From: Bitrix Developer Date: Wed, 20 May 2026 15:23:05 +0300 Subject: [PATCH] init --- .env.example | 8 + .env_php | 5 + .env_push.example | 4 + .env_push_pub | 5 + .env_push_sub | 5 + .env_redis | 5 + .env_sql.example | 12 + .env_ssl | 18 + .gitignore | 16 + README.md | 362 ++++ confs/mysql/etc/my.cnf | 35 + confs/mysql/etc/my.cnf.d/docker.cnf | 3 + confs/mysql/etc/my.cnf.d/my.cnf | 85 + confs/nginx/blank/index.html | 10 + confs/nginx/certs/example.com/ca-chain.pem | 74 + confs/nginx/certs/example.com/cert.pem | 44 + confs/nginx/certs/example.com/chain.pem | 81 + confs/nginx/certs/example.com/dhparam.pem | 13 + confs/nginx/certs/example.com/fullchain.pem | 118 ++ .../certs/example.com/intermediateCA.pem | 37 + confs/nginx/certs/example.com/privkey.pem | 51 + confs/nginx/certs/example.com/rootCA.pem | 37 + confs/nginx/conf.d/default.conf | 231 ++ confs/nginx/errors/403.html | 24 + confs/nginx/errors/404.html | 24 + confs/nginx/errors/500.html | 24 + confs/nginx/errors/502.html | 24 + confs/nginx/errors/503.html | 24 + confs/nginx/errors/504.html | 24 + confs/nginx/fastcgi.conf | 25 + confs/nginx/fastcgi_params | 25 + confs/nginx/inc/block.conf | 79 + confs/nginx/inc/bx_temp.conf | 11 + confs/nginx/inc/clouds.conf | 481 +++++ confs/nginx/inc/composite.conf | 8 + confs/nginx/inc/dav.conf | 17 + confs/nginx/inc/errors.conf | 27 + confs/nginx/inc/modules.conf | 165 ++ confs/nginx/inc/proxy.conf | 17 + confs/nginx/inc/push.conf | 31 + confs/nginx/inc/push_secure.conf | 31 + confs/nginx/inc/static.conf | 92 + confs/nginx/koi-utf | 108 + confs/nginx/koi-win | 102 + confs/nginx/maps/im_settings.conf | 11 + confs/nginx/mime.types | 99 + confs/nginx/nginx.conf | 73 + confs/nginx/scgi_params | 16 + confs/nginx/ssl/ssl.conf | 82 + confs/nginx/uwsgi_params | 16 + confs/nginx/win-utf | 125 ++ confs/php84/etc/image.png | Bin 0 -> 10268 bytes confs/php84/etc/pear.conf | 2 + confs/php84/etc/php-fpm.conf | 142 ++ confs/php84/etc/php-fpm.conf.default | 142 ++ confs/php84/etc/php-fpm.d/docker.conf | 16 + confs/php84/etc/php-fpm.d/www.conf | 495 +++++ confs/php84/etc/php-fpm.d/www.conf.default | 495 +++++ confs/php84/etc/php-fpm.d/zz-docker.conf | 5 + confs/php84/etc/php/conf.d/bitrixenv.ini | 32 + confs/php84/etc/php/conf.d/docker-fpm.ini | 2 + .../etc/php/conf.d/docker-php-ext-amqp.ini | 1 + .../etc/php/conf.d/docker-php-ext-apcu.ini | 62 + .../etc/php/conf.d/docker-php-ext-bz2.ini | 1 + .../php/conf.d/docker-php-ext-calendar.ini | 1 + .../etc/php/conf.d/docker-php-ext-exif.ini | 1 + .../etc/php/conf.d/docker-php-ext-gd.ini | 1 + .../etc/php/conf.d/docker-php-ext-gettext.ini | 1 + .../php/conf.d/docker-php-ext-igbinary.ini | 1 + .../etc/php/conf.d/docker-php-ext-imagick.ini | 1 + .../etc/php/conf.d/docker-php-ext-intl.ini | 1 + .../etc/php/conf.d/docker-php-ext-ldap.ini | 1 + .../etc/php/conf.d/docker-php-ext-mcrypt.ini | 1 + .../php/conf.d/docker-php-ext-memcache.ini | 47 + .../php/conf.d/docker-php-ext-memcached.ini | 186 ++ .../etc/php/conf.d/docker-php-ext-msgpack.ini | 1 + .../etc/php/conf.d/docker-php-ext-mysqli.ini | 1 + .../etc/php/conf.d/docker-php-ext-opcache.ini | 12 + .../php/conf.d/docker-php-ext-pdo_mysql.ini | 1 + .../php/conf.d/docker-php-ext-pdo_pgsql.ini | 1 + .../etc/php/conf.d/docker-php-ext-pgsql.ini | 1 + .../etc/php/conf.d/docker-php-ext-pspell.ini | 1 + .../etc/php/conf.d/docker-php-ext-redis.ini | 1 + .../etc/php/conf.d/docker-php-ext-shmop.ini | 1 + .../etc/php/conf.d/docker-php-ext-sockets.ini | 1 + .../etc/php/conf.d/docker-php-ext-sodium.ini | 1 + .../etc/php/conf.d/docker-php-ext-ssh2.ini | 1 + .../etc/php/conf.d/docker-php-ext-sysvmsg.ini | 1 + .../etc/php/conf.d/docker-php-ext-sysvsem.ini | 1 + .../etc/php/conf.d/docker-php-ext-sysvshm.ini | 1 + .../etc/php/conf.d/docker-php-ext-xdebug.ini | 10 + .../etc/php/conf.d/docker-php-ext-xhprof.ini | 7 + .../etc/php/conf.d/docker-php-ext-xsl.ini | 1 + .../etc/php/conf.d/docker-php-ext-zip.ini | 1 + .../php84/etc/php/conf.d/timezone.ini.example | 1 + confs/php84/etc/php/php.ini-development | 1848 ++++++++++++++++ confs/php84/etc/php/php.ini-production | 1850 +++++++++++++++++ confs/redis/redis.conf | 57 + confs/sphinx/sphinx.conf | 83 + data/mysql/.gitkeep | 0 data/www/.gitkeep | 0 docker-compose.yml | 278 +++ sources/bxlego4231/Dockerfile | 16 + sources/bxlego4240/Dockerfile | 16 + sources/bxlego4251/Dockerfile | 16 + sources/bxlego4252/Dockerfile | 16 + sources/bxlego4260/Dockerfile | 16 + sources/bxlego4270/Dockerfile | 16 + sources/bxlego4281/Dockerfile | 16 + sources/bxlego4290/Dockerfile | 16 + sources/bxlego4301/Dockerfile | 16 + sources/bxlego4310/Dockerfile | 16 + sources/bxnginx1263/Dockerfile | 33 + sources/bxnginx1263modules/v1/Dockerfile | 149 ++ .../bxnginx1263modules/v1/Dockerfile.origin | 79 + .../v1/Makefile.module-brotli | 63 + .../bxnginx1263modules/v1/Makefile.module-zip | 42 + sources/bxnginx1263modules/v1/brotli_makefile | 18 + sources/bxnginx1263modules/v1/brotli_shasum | 1 + sources/bxnginx1263modules/v1/brotli_version | 1 + .../bxnginx1263modules/v1/headersmore_version | 2 + .../v1/mod_zip-1.3.0.tar.gz | Bin 0 -> 30812 bytes .../v1/nginx-module-brotli.xml | 333 +++ .../v1/nginx-module-headers-more.xml | 371 ++++ .../v1/nginx-module-zip.copyright | 28 + .../v1/nginx-module-zip.xml | 38 + sources/bxnginx1280/Dockerfile | 33 + sources/bxnginx1280modules/v1/Dockerfile | 152 ++ .../bxnginx1280modules/v1/Dockerfile.origin | 79 + .../v1/Makefile.module-brotli | 63 + .../bxnginx1280modules/v1/Makefile.module-zip | 42 + sources/bxnginx1280modules/v1/brotli_makefile | 18 + sources/bxnginx1280modules/v1/brotli_shasum | 1 + sources/bxnginx1280modules/v1/brotli_version | 1 + .../bxnginx1280modules/v1/headersmore_shasum | 1 + .../bxnginx1280modules/v1/headersmore_version | 2 + .../v1/mod_zip-1.3.0.tar.gz | Bin 0 -> 30266 bytes .../v1/nginx-module-brotli.xml | 430 ++++ .../v1/nginx-module-headers-more.xml | 371 ++++ .../v1/nginx-module-zip.copyright | 28 + .../v1/nginx-module-zip.xml | 38 + sources/bxnginx1280modules/v2/Dockerfile | 152 ++ .../bxnginx1280modules/v2/Dockerfile.origin | 79 + .../v2/Makefile.module-brotli | 39 + .../bxnginx1280modules/v2/Makefile.module-zip | 42 + sources/bxnginx1280modules/v2/brotli_makefile | 18 + sources/bxnginx1280modules/v2/brotli_shasum | 1 + sources/bxnginx1280modules/v2/brotli_version | 1 + .../bxnginx1280modules/v2/headersmore_shasum | 1 + .../bxnginx1280modules/v2/headersmore_version | 2 + .../v2/mod_zip-1.3.0.tar.gz | Bin 0 -> 30266 bytes .../v2/nginx-module-brotli.xml | 381 ++++ .../v2/nginx-module-headers-more.xml | 430 ++++ .../v2/nginx-module-zip.copyright | 28 + .../v2/nginx-module-zip.xml | 38 + sources/bxnginx1280modules/v3/Dockerfile | 152 ++ .../bxnginx1280modules/v3/Dockerfile.origin | 79 + .../v3/Makefile.module-brotli | 39 + .../bxnginx1280modules/v3/Makefile.module-zip | 42 + sources/bxnginx1280modules/v3/brotli_makefile | 18 + sources/bxnginx1280modules/v3/brotli_shasum | 1 + sources/bxnginx1280modules/v3/brotli_version | 1 + .../bxnginx1280modules/v3/headersmore_shasum | 1 + .../bxnginx1280modules/v3/headersmore_version | 2 + .../v3/mod_zip-1.3.0.tar.gz | Bin 0 -> 31189 bytes .../v3/nginx-module-brotli.xml | 381 ++++ .../v3/nginx-module-headers-more.xml | 430 ++++ .../v3/nginx-module-zip.copyright | 28 + .../v3/nginx-module-zip.xml | 38 + sources/bxnginx1281/Dockerfile | 33 + sources/bxnginx1281modules/v1/Dockerfile | 153 ++ .../bxnginx1281modules/v1/Dockerfile.origin | 79 + .../v1/Makefile.module-brotli | 39 + .../bxnginx1281modules/v1/Makefile.module-zip | 42 + sources/bxnginx1281modules/v1/brotli_makefile | 18 + sources/bxnginx1281modules/v1/brotli_shasum | 1 + sources/bxnginx1281modules/v1/brotli_version | 1 + .../bxnginx1281modules/v1/headersmore_shasum | 1 + .../bxnginx1281modules/v1/headersmore_version | 2 + .../v1/mod_zip-1.3.0.tar.gz | Bin 0 -> 31189 bytes .../v1/nginx-module-brotli.xml | 381 ++++ .../v1/nginx-module-headers-more.xml | 430 ++++ .../v1/nginx-module-zip.copyright | 28 + .../v1/nginx-module-zip.xml | 38 + sources/bxnginx1282/Dockerfile | 33 + sources/bxnginx1282modules/v1/Dockerfile | 160 ++ .../bxnginx1282modules/v1/Dockerfile.origin | 86 + .../v1/Makefile.module-brotli | 39 + .../bxnginx1282modules/v1/Makefile.module-zip | 42 + sources/bxnginx1282modules/v1/brotli_makefile | 18 + sources/bxnginx1282modules/v1/brotli_shasum | 1 + sources/bxnginx1282modules/v1/brotli_version | 1 + .../bxnginx1282modules/v1/headersmore_shasum | 1 + .../bxnginx1282modules/v1/headersmore_version | 2 + .../v1/mod_zip-1.3.0.tar.gz | Bin 0 -> 31189 bytes .../v1/nginx-module-brotli.xml | 405 ++++ .../v1/nginx-module-headers-more.xml | 454 ++++ .../v1/nginx-module-zip.copyright | 28 + .../v1/nginx-module-zip.xml | 38 + sources/bxpercona8040/Dockerfile | 12 + sources/bxpercona8040/etc_my.cnf | 35 + sources/bxpercona8040/etc_mycnfd_docker.cnf | 3 + sources/bxpercona8040/etc_mycnfd_my.cnf | 85 + sources/bxpercona8041/Dockerfile | 12 + sources/bxpercona8041/etc_my.cnf | 35 + sources/bxpercona8041/etc_mycnfd_docker.cnf | 3 + sources/bxpercona8041/etc_mycnfd_my.cnf | 85 + sources/bxpercona8042/Dockerfile | 12 + sources/bxpercona8042/etc_my.cnf | 35 + sources/bxpercona8042/etc_mycnfd_docker.cnf | 3 + sources/bxpercona8042/etc_mycnfd_my.cnf | 85 + sources/bxpercona8043/Dockerfile | 12 + sources/bxpercona8043/etc_my.cnf | 35 + sources/bxpercona8043/etc_mycnfd_docker.cnf | 3 + sources/bxpercona8043/etc_mycnfd_my.cnf | 85 + sources/bxpercona8044/Dockerfile | 12 + sources/bxpercona8044/etc_my.cnf | 35 + sources/bxpercona8044/etc_mycnfd_docker.cnf | 3 + sources/bxpercona8044/etc_mycnfd_my.cnf | 85 + sources/bxpercona844/Dockerfile | 12 + sources/bxpercona844/etc_my.cnf | 35 + sources/bxpercona844/etc_mycnfd_docker.cnf | 3 + sources/bxpercona844/etc_mycnfd_my.cnf | 85 + sources/bxpercona845/Dockerfile | 12 + sources/bxpercona845/etc_my.cnf | 35 + sources/bxpercona845/etc_mycnfd_docker.cnf | 3 + sources/bxpercona845/etc_mycnfd_my.cnf | 85 + sources/bxpercona846/Dockerfile | 12 + sources/bxpercona846/etc_my.cnf | 35 + sources/bxpercona846/etc_mycnfd_docker.cnf | 3 + sources/bxpercona846/etc_mycnfd_my.cnf | 85 + sources/bxpercona847/Dockerfile | 12 + sources/bxpercona847/etc_my.cnf | 35 + sources/bxpercona847/etc_mycnfd_docker.cnf | 3 + sources/bxpercona847/etc_mycnfd_my.cnf | 85 + sources/bxphp8227/Dockerfile | 95 + sources/bxphp8227/bitrix.sh | 10 + sources/bxphp8227/msmtprc | 16 + sources/bxphp8228/Dockerfile | 95 + sources/bxphp8228/bitrix.sh | 10 + sources/bxphp8228/msmtprc | 16 + sources/bxphp8229/Dockerfile | 95 + sources/bxphp8229/bitrix.sh | 10 + sources/bxphp8229/msmtprc | 16 + sources/bxphp8230/Dockerfile | 95 + sources/bxphp8230/bitrix.sh | 10 + sources/bxphp8230/msmtprc | 16 + sources/bxphp8321/Dockerfile | 95 + sources/bxphp8321/bitrix.sh | 10 + sources/bxphp8321/msmtprc | 16 + sources/bxphp8322/Dockerfile | 95 + sources/bxphp8322/bitrix.sh | 10 + sources/bxphp8322/msmtprc | 16 + sources/bxphp8323/Dockerfile | 95 + sources/bxphp8323/bitrix.sh | 10 + sources/bxphp8323/msmtprc | 16 + sources/bxphp8324/Dockerfile | 95 + sources/bxphp8324/bitrix.sh | 10 + sources/bxphp8324/msmtprc | 16 + sources/bxphp8325/Dockerfile | 95 + sources/bxphp8325/bitrix.sh | 10 + sources/bxphp8325/msmtprc | 16 + sources/bxphp8326/Dockerfile | 95 + sources/bxphp8326/bitrix.sh | 10 + sources/bxphp8326/msmtprc | 16 + sources/bxphp8327/Dockerfile | 95 + sources/bxphp8327/bitrix.sh | 10 + sources/bxphp8327/msmtprc | 16 + sources/bxphp8328/Dockerfile | 95 + sources/bxphp8328/bitrix.sh | 10 + sources/bxphp8328/msmtprc | 16 + sources/bxphp8329/Dockerfile | 95 + sources/bxphp8329/bitrix.sh | 10 + sources/bxphp8329/msmtprc | 16 + sources/bxphp8330/Dockerfile | 95 + sources/bxphp8330/bitrix.sh | 10 + sources/bxphp8330/msmtprc | 16 + sources/bxphp8410/Dockerfile | 96 + sources/bxphp8410/bitrix.sh | 10 + sources/bxphp8410/msmtprc | 16 + sources/bxphp8411/Dockerfile | 96 + sources/bxphp8411/bitrix.sh | 10 + sources/bxphp8411/msmtprc | 16 + sources/bxphp8412/Dockerfile | 96 + sources/bxphp8412/bitrix.sh | 10 + sources/bxphp8412/msmtprc | 16 + sources/bxphp8413/Dockerfile | 96 + sources/bxphp8413/bitrix.sh | 10 + sources/bxphp8413/msmtprc | 16 + sources/bxphp8414/Dockerfile | 96 + sources/bxphp8414/bitrix.sh | 10 + sources/bxphp8414/msmtprc | 16 + sources/bxphp8415/Dockerfile | 96 + sources/bxphp8415/bitrix.sh | 10 + sources/bxphp8415/msmtprc | 16 + sources/bxphp8416/Dockerfile | 96 + sources/bxphp8416/bitrix.sh | 10 + sources/bxphp8416/msmtprc | 16 + sources/bxphp8417/Dockerfile | 96 + sources/bxphp8417/bitrix.sh | 10 + sources/bxphp8417/msmtprc | 16 + sources/bxphp8418/Dockerfile | 96 + sources/bxphp8418/bitrix.sh | 10 + sources/bxphp8418/msmtprc | 16 + sources/bxphp847/Dockerfile | 96 + sources/bxphp847/bitrix.sh | 10 + sources/bxphp847/msmtprc | 16 + sources/bxphp848/Dockerfile | 96 + sources/bxphp848/bitrix.sh | 10 + sources/bxphp848/msmtprc | 16 + sources/bxpush30/Dockerfile | 47 + sources/bxpush30/docker-entrypoint.sh | 71 + sources/bxpush30/push-server-0.4.0.tar.gz | Bin 0 -> 146902 bytes sources/bxpush30/push-server-pub.json | 49 + sources/bxpush30/push-server-sub.json | 38 + sources/bxpush31/Dockerfile | 47 + sources/bxpush31/docker-entrypoint.sh | 71 + sources/bxpush31/push-server-0.4.0.tar.gz | Bin 0 -> 146902 bytes sources/bxpush31/push-server-pub.json | 49 + sources/bxpush31/push-server-sub.json | 38 + sources/bxpush32/Dockerfile | 49 + sources/bxpush32/docker-entrypoint.sh | 71 + sources/bxpush32/push-server-0.5.0.tar.gz | Bin 0 -> 148364 bytes sources/bxpush32/push-server-pub.json | 50 + sources/bxpush32/push-server-sub.json | 39 + sources/bxsphinx2211/v1/Dockerfile | 23 + sources/bxsphinx2211/v1/de.pak | Bin 0 -> 7153523 bytes sources/bxsphinx2211/v1/en.pak | Bin 0 -> 1632084 bytes sources/bxsphinx2211/v1/ru.pak | Bin 0 -> 9803380 bytes sources/bxsphinx2211/v1/sample_sphinx.conf | 47 + sources/bxsphinx2211/v1/start.sh | 5 + sources/bxsphinx2211/v2/Dockerfile | 23 + sources/bxsphinx2211/v2/de.pak | Bin 0 -> 7153523 bytes sources/bxsphinx2211/v2/en.pak | Bin 0 -> 1632084 bytes sources/bxsphinx2211/v2/ru.pak | Bin 0 -> 9803380 bytes sources/bxsphinx2211/v2/sample_sphinx.conf | 47 + sources/bxsphinx2211/v2/start.sh | 5 + sources/bxssl10/Dockerfile | 22 + sources/bxssl10/cas.sh | 336 +++ sources/bxssl10/dhparam.pem | 13 + sources/bxssl10/srv.sh | 203 ++ sources/bxssl11/Dockerfile | 22 + sources/bxssl11/cas.sh | 336 +++ sources/bxssl11/dhparam.pem | 13 + sources/bxssl11/srv.sh | 203 ++ sources/memcached1637/Dockerfile | 83 + sources/memcached1637/docker-entrypoint.sh | 9 + sources/memcached1638/Dockerfile | 83 + sources/memcached1638/docker-entrypoint.sh | 9 + sources/memcached1639/Dockerfile | 89 + sources/memcached1639/docker-entrypoint.sh | 9 + sources/memcached1640/Dockerfile | 89 + sources/memcached1640/docker-entrypoint.sh | 9 + .../nginx1263/10-listen-on-ipv6-by-default.sh | 67 + sources/nginx1263/15-local-resolvers.envsh | 15 + sources/nginx1263/20-envsubst-on-templates.sh | 78 + sources/nginx1263/30-tune-worker-processes.sh | 188 ++ sources/nginx1263/Dockerfile | 123 ++ sources/nginx1263/docker-entrypoint.sh | 47 + .../nginx1280/10-listen-on-ipv6-by-default.sh | 67 + sources/nginx1280/15-local-resolvers.envsh | 15 + sources/nginx1280/20-envsubst-on-templates.sh | 78 + sources/nginx1280/30-tune-worker-processes.sh | 188 ++ sources/nginx1280/Dockerfile | 108 + sources/nginx1280/docker-entrypoint.sh | 47 + .../nginx1281/10-listen-on-ipv6-by-default.sh | 67 + sources/nginx1281/15-local-resolvers.envsh | 15 + sources/nginx1281/20-envsubst-on-templates.sh | 78 + sources/nginx1281/30-tune-worker-processes.sh | 188 ++ sources/nginx1281/Dockerfile | 108 + sources/nginx1281/docker-entrypoint.sh | 47 + .../nginx1282/10-listen-on-ipv6-by-default.sh | 67 + sources/nginx1282/15-local-resolvers.envsh | 15 + sources/nginx1282/20-envsubst-on-templates.sh | 78 + sources/nginx1282/30-tune-worker-processes.sh | 188 ++ sources/nginx1282/Dockerfile | 108 + sources/nginx1282/docker-entrypoint.sh | 47 + sources/node20192/alpine/Dockerfile | 110 + sources/node20192/alpine/docker-entrypoint.sh | 11 + sources/node20192/bookworm/Dockerfile | 77 + .../node20192/bookworm/docker-entrypoint.sh | 11 + sources/node22151/alpine/Dockerfile | 110 + sources/node22151/alpine/docker-entrypoint.sh | 11 + sources/node22151/bookworm/Dockerfile | 77 + .../node22151/bookworm/docker-entrypoint.sh | 11 + sources/node22220/alpine/Dockerfile | 110 + sources/node22220/alpine/docker-entrypoint.sh | 11 + sources/node22220/trixie/Dockerfile | 77 + sources/node22220/trixie/docker-entrypoint.sh | 11 + sources/percona8040/Dockerfile | 138 ++ sources/percona8040/Dockerfile-dockerhub | 126 ++ sources/percona8040/Dockerfile.aarch64 | 135 ++ sources/percona8040/Dockerfile.ubi8 | 105 + sources/percona8040/README-build.md | 40 + sources/percona8040/README.md | 158 ++ sources/percona8040/docker-compose.yml | 33 + sources/percona8040/ps-entry-dockerhub.sh | 250 +++ sources/percona8040/ps-entry.sh | 253 +++ .../percona8040/telemetry-agent-supervisor.sh | 14 + sources/percona8041/Dockerfile | 140 ++ sources/percona8041/Dockerfile-dockerhub | 128 ++ sources/percona8041/Dockerfile.aarch64 | 137 ++ sources/percona8041/Dockerfile.ubi8 | 105 + sources/percona8041/README-build.md | 40 + sources/percona8041/README.md | 158 ++ sources/percona8041/docker-compose.yml | 33 + sources/percona8041/ps-entry-dockerhub.sh | 250 +++ sources/percona8041/ps-entry.sh | 253 +++ .../percona8041/telemetry-agent-supervisor.sh | 14 + sources/percona8042/Dockerfile | 140 ++ sources/percona8042/Dockerfile-dockerhub | 128 ++ sources/percona8042/Dockerfile.aarch64 | 137 ++ sources/percona8042/Dockerfile.ubi8 | 105 + sources/percona8042/README-build.md | 40 + sources/percona8042/README.md | 158 ++ sources/percona8042/docker-compose.yml | 33 + sources/percona8042/ps-entry-dockerhub.sh | 250 +++ sources/percona8042/ps-entry.sh | 253 +++ .../percona8042/telemetry-agent-supervisor.sh | 14 + sources/percona8043/Dockerfile | 140 ++ sources/percona8043/Dockerfile-dockerhub | 128 ++ sources/percona8043/Dockerfile.aarch64 | 141 ++ sources/percona8043/Dockerfile.ubi8 | 105 + sources/percona8043/README-build.md | 40 + sources/percona8043/README.md | 158 ++ sources/percona8043/docker-compose.yml | 33 + sources/percona8043/ps-entry-dockerhub.sh | 250 +++ sources/percona8043/ps-entry.sh | 253 +++ .../percona8043/telemetry-agent-supervisor.sh | 14 + sources/percona8044/Dockerfile | 152 ++ sources/percona8044/Dockerfile-dockerhub | 128 ++ .../percona8044/Dockerfile-mysqlsh-upstream | 142 ++ .../Dockerfile-mysqlsh-upstream.aarch64 | 143 ++ sources/percona8044/Dockerfile.aarch64 | 153 ++ sources/percona8044/Dockerfile.ubi8 | 105 + sources/percona8044/LICENSE | 201 ++ sources/percona8044/README-build.md | 40 + sources/percona8044/README.md | 158 ++ sources/percona8044/docker-compose.yml | 33 + sources/percona8044/ps-entry-dockerhub.sh | 250 +++ sources/percona8044/ps-entry.sh | 253 +++ .../percona8044/telemetry-agent-supervisor.sh | 14 + sources/percona844/Dockerfile | 140 ++ sources/percona844/Dockerfile-dockerhub | 128 ++ sources/percona844/Dockerfile.aarch64 | 137 ++ sources/percona844/README-build.md | 40 + sources/percona844/README.md | 158 ++ sources/percona844/docker-compose.yml | 33 + sources/percona844/ps-entry-dockerhub.sh | 250 +++ sources/percona844/ps-entry.sh | 253 +++ .../percona844/telemetry-agent-supervisor.sh | 14 + sources/percona845/Dockerfile | 140 ++ sources/percona845/Dockerfile-dockerhub | 128 ++ sources/percona845/Dockerfile.aarch64 | 137 ++ sources/percona845/README-build.md | 40 + sources/percona845/README.md | 158 ++ sources/percona845/docker-compose.yml | 33 + sources/percona845/ps-entry-dockerhub.sh | 250 +++ sources/percona845/ps-entry.sh | 253 +++ .../percona845/telemetry-agent-supervisor.sh | 14 + sources/percona846/Dockerfile | 141 ++ sources/percona846/Dockerfile-dockerhub | 128 ++ sources/percona846/Dockerfile.aarch64 | 142 ++ sources/percona846/README-build.md | 40 + sources/percona846/README.md | 158 ++ sources/percona846/docker-compose.yml | 33 + .../mysql/plugin/component_keyring_vault.cnf | 1 + .../percona846/dockerdir/usr/sbin/mysqld.my | 1 + sources/percona846/ps-entry-dockerhub.sh | 250 +++ sources/percona846/ps-entry.sh | 253 +++ .../percona846/telemetry-agent-supervisor.sh | 14 + sources/percona847/Dockerfile | 153 ++ sources/percona847/Dockerfile-dockerhub | 128 ++ .../percona847/Dockerfile-mysqlsh-upstream | 153 ++ .../Dockerfile-mysqlsh-upstream.aarch64 | 154 ++ sources/percona847/Dockerfile.aarch64 | 154 ++ sources/percona847/LICENSE | 201 ++ sources/percona847/README-build.md | 40 + sources/percona847/README.md | 158 ++ sources/percona847/docker-compose.yml | 33 + .../mysql/plugin/component_keyring_vault.cnf | 1 + .../percona847/dockerdir/usr/sbin/mysqld.my | 1 + sources/percona847/ps-entry-dockerhub.sh | 250 +++ sources/percona847/ps-entry.sh | 253 +++ .../percona847/telemetry-agent-supervisor.sh | 14 + sources/php8227/Dockerfile | 263 +++ sources/php8227/docker-php-entrypoint | 9 + sources/php8227/docker-php-ext-configure | 69 + sources/php8227/docker-php-ext-enable | 121 ++ sources/php8227/docker-php-ext-install | 143 ++ sources/php8227/docker-php-source | 34 + sources/php8228/Dockerfile | 263 +++ sources/php8228/docker-php-entrypoint | 9 + sources/php8228/docker-php-ext-configure | 69 + sources/php8228/docker-php-ext-enable | 121 ++ sources/php8228/docker-php-ext-install | 143 ++ sources/php8228/docker-php-source | 34 + sources/php8229/Dockerfile | 266 +++ sources/php8229/docker-php-entrypoint | 9 + sources/php8229/docker-php-ext-configure | 69 + sources/php8229/docker-php-ext-enable | 121 ++ sources/php8229/docker-php-ext-install | 143 ++ sources/php8229/docker-php-source | 34 + sources/php8230/Dockerfile | 264 +++ sources/php8230/docker-php-entrypoint | 9 + sources/php8230/docker-php-ext-configure | 69 + sources/php8230/docker-php-ext-enable | 121 ++ sources/php8230/docker-php-ext-install | 143 ++ sources/php8230/docker-php-source | 34 + sources/php8321/Dockerfile | 259 +++ sources/php8321/docker-php-entrypoint | 9 + sources/php8321/docker-php-ext-configure | 69 + sources/php8321/docker-php-ext-enable | 121 ++ sources/php8321/docker-php-ext-install | 143 ++ sources/php8321/docker-php-source | 34 + sources/php8322/Dockerfile | 259 +++ sources/php8322/docker-php-entrypoint | 9 + sources/php8322/docker-php-ext-configure | 69 + sources/php8322/docker-php-ext-enable | 121 ++ sources/php8322/docker-php-ext-install | 143 ++ sources/php8322/docker-php-source | 34 + sources/php8323/Dockerfile | 262 +++ sources/php8323/docker-php-entrypoint | 9 + sources/php8323/docker-php-ext-configure | 69 + sources/php8323/docker-php-ext-enable | 121 ++ sources/php8323/docker-php-ext-install | 143 ++ sources/php8323/docker-php-source | 34 + sources/php8324/Dockerfile | 260 +++ sources/php8324/docker-php-entrypoint | 9 + sources/php8324/docker-php-ext-configure | 69 + sources/php8324/docker-php-ext-enable | 121 ++ sources/php8324/docker-php-ext-install | 143 ++ sources/php8324/docker-php-source | 34 + sources/php8325/Dockerfile | 260 +++ sources/php8325/docker-php-entrypoint | 9 + sources/php8325/docker-php-ext-configure | 69 + sources/php8325/docker-php-ext-enable | 121 ++ sources/php8325/docker-php-ext-install | 143 ++ sources/php8325/docker-php-source | 34 + sources/php8326/Dockerfile | 260 +++ sources/php8326/docker-php-entrypoint | 9 + sources/php8326/docker-php-ext-configure | 69 + sources/php8326/docker-php-ext-enable | 121 ++ sources/php8326/docker-php-ext-install | 143 ++ sources/php8326/docker-php-source | 34 + sources/php8327/Dockerfile | 260 +++ sources/php8327/docker-php-entrypoint | 9 + sources/php8327/docker-php-ext-configure | 69 + sources/php8327/docker-php-ext-enable | 121 ++ sources/php8327/docker-php-ext-install | 143 ++ sources/php8327/docker-php-source | 34 + sources/php8328/Dockerfile | 260 +++ sources/php8328/docker-php-entrypoint | 9 + sources/php8328/docker-php-ext-configure | 69 + sources/php8328/docker-php-ext-enable | 121 ++ sources/php8328/docker-php-ext-install | 143 ++ sources/php8328/docker-php-source | 34 + sources/php8329/Dockerfile | 260 +++ sources/php8329/docker-php-entrypoint | 9 + sources/php8329/docker-php-ext-configure | 69 + sources/php8329/docker-php-ext-enable | 121 ++ sources/php8329/docker-php-ext-install | 143 ++ sources/php8329/docker-php-source | 34 + sources/php8330/Dockerfile | 258 +++ sources/php8330/docker-php-entrypoint | 9 + sources/php8330/docker-php-ext-configure | 69 + sources/php8330/docker-php-ext-enable | 121 ++ sources/php8330/docker-php-ext-install | 143 ++ sources/php8330/docker-php-source | 34 + sources/php8410/Dockerfile | 262 +++ sources/php8410/docker-php-entrypoint | 9 + sources/php8410/docker-php-ext-configure | 69 + sources/php8410/docker-php-ext-enable | 121 ++ sources/php8410/docker-php-ext-install | 143 ++ sources/php8410/docker-php-source | 34 + sources/php8411/Dockerfile | 260 +++ sources/php8411/docker-php-entrypoint | 9 + sources/php8411/docker-php-ext-configure | 69 + sources/php8411/docker-php-ext-enable | 121 ++ sources/php8411/docker-php-ext-install | 143 ++ sources/php8411/docker-php-source | 34 + sources/php8412/Dockerfile | 260 +++ sources/php8412/docker-php-entrypoint | 9 + sources/php8412/docker-php-ext-configure | 69 + sources/php8412/docker-php-ext-enable | 121 ++ sources/php8412/docker-php-ext-install | 143 ++ sources/php8412/docker-php-source | 34 + sources/php8413/Dockerfile | 260 +++ sources/php8413/docker-php-entrypoint | 9 + sources/php8413/docker-php-ext-configure | 69 + sources/php8413/docker-php-ext-enable | 121 ++ sources/php8413/docker-php-ext-install | 143 ++ sources/php8413/docker-php-source | 34 + sources/php8414/Dockerfile | 260 +++ sources/php8414/docker-php-entrypoint | 9 + sources/php8414/docker-php-ext-configure | 69 + sources/php8414/docker-php-ext-enable | 121 ++ sources/php8414/docker-php-ext-install | 143 ++ sources/php8414/docker-php-source | 34 + sources/php8415/Dockerfile | 260 +++ sources/php8415/docker-php-entrypoint | 9 + sources/php8415/docker-php-ext-configure | 69 + sources/php8415/docker-php-ext-enable | 121 ++ sources/php8415/docker-php-ext-install | 143 ++ sources/php8415/docker-php-source | 34 + sources/php8416/Dockerfile | 260 +++ sources/php8416/docker-php-entrypoint | 9 + sources/php8416/docker-php-ext-configure | 69 + sources/php8416/docker-php-ext-enable | 121 ++ sources/php8416/docker-php-ext-install | 143 ++ sources/php8416/docker-php-source | 34 + sources/php8417/Dockerfile | 258 +++ sources/php8417/docker-php-entrypoint | 9 + sources/php8417/docker-php-ext-configure | 69 + sources/php8417/docker-php-ext-enable | 121 ++ sources/php8417/docker-php-ext-install | 143 ++ sources/php8417/docker-php-source | 34 + sources/php8418/Dockerfile | 261 +++ sources/php8418/docker-php-entrypoint | 9 + sources/php8418/docker-php-ext-configure | 69 + sources/php8418/docker-php-ext-enable | 121 ++ sources/php8418/docker-php-ext-install | 143 ++ sources/php8418/docker-php-source | 34 + sources/php847/Dockerfile | 259 +++ sources/php847/docker-php-entrypoint | 9 + sources/php847/docker-php-ext-configure | 69 + sources/php847/docker-php-ext-enable | 121 ++ sources/php847/docker-php-ext-install | 143 ++ sources/php847/docker-php-source | 34 + sources/php848/Dockerfile | 259 +++ sources/php848/docker-php-entrypoint | 9 + sources/php848/docker-php-ext-configure | 69 + sources/php848/docker-php-ext-enable | 121 ++ sources/php848/docker-php-ext-install | 143 ++ sources/php848/docker-php-source | 34 + sources/php850/Dockerfile | 257 +++ sources/php850/docker-php-entrypoint | 9 + sources/php850/docker-php-ext-configure | 69 + sources/php850/docker-php-ext-enable | 121 ++ sources/php850/docker-php-ext-install | 143 ++ sources/php850/docker-php-source | 34 + sources/php851/Dockerfile | 257 +++ sources/php851/docker-php-entrypoint | 9 + sources/php851/docker-php-ext-configure | 69 + sources/php851/docker-php-ext-enable | 121 ++ sources/php851/docker-php-ext-install | 143 ++ sources/php851/docker-php-source | 34 + sources/php852/Dockerfile | 255 +++ sources/php852/docker-php-entrypoint | 9 + sources/php852/docker-php-ext-configure | 69 + sources/php852/docker-php-ext-enable | 121 ++ sources/php852/docker-php-ext-install | 143 ++ sources/php852/docker-php-source | 34 + sources/php853/Dockerfile | 258 +++ sources/php853/docker-php-entrypoint | 9 + sources/php853/docker-php-ext-configure | 69 + sources/php853/docker-php-ext-enable | 121 ++ sources/php853/docker-php-ext-install | 143 ++ sources/php853/docker-php-source | 34 + sources/redis7210/Dockerfile | 141 ++ sources/redis7210/docker-entrypoint.sh | 24 + sources/redis7211/Dockerfile | 141 ++ sources/redis7211/docker-entrypoint.sh | 24 + sources/redis7212/Dockerfile | 141 ++ sources/redis7212/docker-entrypoint.sh | 24 + sources/redis727/Dockerfile | 141 ++ sources/redis727/docker-entrypoint.sh | 24 + sources/redis728/Dockerfile | 141 ++ sources/redis728/docker-entrypoint.sh | 24 + sources/redis729/Dockerfile | 141 ++ sources/redis729/docker-entrypoint.sh | 24 + sources/redis744/Dockerfile | 141 ++ sources/redis744/docker-entrypoint.sh | 24 + sources/redis745/Dockerfile | 141 ++ sources/redis745/docker-entrypoint.sh | 24 + sources/redis746/Dockerfile | 141 ++ sources/redis746/docker-entrypoint.sh | 24 + sources/redis747/Dockerfile | 141 ++ sources/redis747/docker-entrypoint.sh | 24 + sources/redis802/Dockerfile | 149 ++ sources/redis802/docker-entrypoint.sh | 184 ++ sources/redis803/Dockerfile | 149 ++ sources/redis803/docker-entrypoint.sh | 184 ++ sources/redis804/Dockerfile | 149 ++ sources/redis804/docker-entrypoint.sh | 184 ++ sources/redis805/Dockerfile | 149 ++ sources/redis805/docker-entrypoint.sh | 184 ++ sources/redis820/Dockerfile | 154 ++ sources/redis820/docker-entrypoint.sh | 184 ++ sources/redis821/Dockerfile | 154 ++ sources/redis821/docker-entrypoint.sh | 184 ++ sources/redis822/Dockerfile | 154 ++ sources/redis822/docker-entrypoint.sh | 184 ++ sources/redis823/Dockerfile | 154 ++ sources/redis823/docker-entrypoint.sh | 184 ++ sources/redis824/Dockerfile | 154 ++ sources/redis824/docker-entrypoint.sh | 184 ++ sources/redis840/Dockerfile | 154 ++ sources/redis840/docker-entrypoint.sh | 184 ++ sources/redis841/Dockerfile | 154 ++ sources/redis841/docker-entrypoint.sh | 184 ++ sources/redis860/Dockerfile | 154 ++ sources/redis860/docker-entrypoint.sh | 184 ++ 703 files changed, 61692 insertions(+) create mode 100644 .env.example create mode 100644 .env_php create mode 100644 .env_push.example create mode 100644 .env_push_pub create mode 100644 .env_push_sub create mode 100644 .env_redis create mode 100644 .env_sql.example create mode 100644 .env_ssl create mode 100644 .gitignore create mode 100644 README.md create mode 100644 confs/mysql/etc/my.cnf create mode 100644 confs/mysql/etc/my.cnf.d/docker.cnf create mode 100644 confs/mysql/etc/my.cnf.d/my.cnf create mode 100644 confs/nginx/blank/index.html create mode 100644 confs/nginx/certs/example.com/ca-chain.pem create mode 100644 confs/nginx/certs/example.com/cert.pem create mode 100644 confs/nginx/certs/example.com/chain.pem create mode 100644 confs/nginx/certs/example.com/dhparam.pem create mode 100644 confs/nginx/certs/example.com/fullchain.pem create mode 100644 confs/nginx/certs/example.com/intermediateCA.pem create mode 100644 confs/nginx/certs/example.com/privkey.pem create mode 100644 confs/nginx/certs/example.com/rootCA.pem create mode 100644 confs/nginx/conf.d/default.conf create mode 100644 confs/nginx/errors/403.html create mode 100644 confs/nginx/errors/404.html create mode 100644 confs/nginx/errors/500.html create mode 100644 confs/nginx/errors/502.html create mode 100644 confs/nginx/errors/503.html create mode 100644 confs/nginx/errors/504.html create mode 100644 confs/nginx/fastcgi.conf create mode 100644 confs/nginx/fastcgi_params create mode 100644 confs/nginx/inc/block.conf create mode 100644 confs/nginx/inc/bx_temp.conf create mode 100644 confs/nginx/inc/clouds.conf create mode 100644 confs/nginx/inc/composite.conf create mode 100644 confs/nginx/inc/dav.conf create mode 100644 confs/nginx/inc/errors.conf create mode 100644 confs/nginx/inc/modules.conf create mode 100644 confs/nginx/inc/proxy.conf create mode 100644 confs/nginx/inc/push.conf create mode 100644 confs/nginx/inc/push_secure.conf create mode 100644 confs/nginx/inc/static.conf create mode 100644 confs/nginx/koi-utf create mode 100644 confs/nginx/koi-win create mode 100644 confs/nginx/maps/im_settings.conf create mode 100644 confs/nginx/mime.types create mode 100644 confs/nginx/nginx.conf create mode 100644 confs/nginx/scgi_params create mode 100644 confs/nginx/ssl/ssl.conf create mode 100644 confs/nginx/uwsgi_params create mode 100644 confs/nginx/win-utf create mode 100644 confs/php84/etc/image.png create mode 100644 confs/php84/etc/pear.conf create mode 100644 confs/php84/etc/php-fpm.conf create mode 100644 confs/php84/etc/php-fpm.conf.default create mode 100644 confs/php84/etc/php-fpm.d/docker.conf create mode 100644 confs/php84/etc/php-fpm.d/www.conf create mode 100644 confs/php84/etc/php-fpm.d/www.conf.default create mode 100644 confs/php84/etc/php-fpm.d/zz-docker.conf create mode 100644 confs/php84/etc/php/conf.d/bitrixenv.ini create mode 100644 confs/php84/etc/php/conf.d/docker-fpm.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-amqp.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-apcu.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-bz2.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-calendar.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-exif.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-gd.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-gettext.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-igbinary.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-imagick.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-intl.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-ldap.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-mcrypt.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-memcache.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-memcached.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-msgpack.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-mysqli.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-opcache.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-pdo_mysql.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-pgsql.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-pspell.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-redis.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-shmop.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-sockets.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-sodium.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-ssh2.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-sysvmsg.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-sysvsem.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-sysvshm.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-xdebug.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-xhprof.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-xsl.ini create mode 100644 confs/php84/etc/php/conf.d/docker-php-ext-zip.ini create mode 100644 confs/php84/etc/php/conf.d/timezone.ini.example create mode 100644 confs/php84/etc/php/php.ini-development create mode 100644 confs/php84/etc/php/php.ini-production create mode 100644 confs/redis/redis.conf create mode 100644 confs/sphinx/sphinx.conf create mode 100644 data/mysql/.gitkeep create mode 100644 data/www/.gitkeep create mode 100644 docker-compose.yml create mode 100644 sources/bxlego4231/Dockerfile create mode 100644 sources/bxlego4240/Dockerfile create mode 100644 sources/bxlego4251/Dockerfile create mode 100644 sources/bxlego4252/Dockerfile create mode 100644 sources/bxlego4260/Dockerfile create mode 100644 sources/bxlego4270/Dockerfile create mode 100644 sources/bxlego4281/Dockerfile create mode 100644 sources/bxlego4290/Dockerfile create mode 100644 sources/bxlego4301/Dockerfile create mode 100644 sources/bxlego4310/Dockerfile create mode 100644 sources/bxnginx1263/Dockerfile create mode 100644 sources/bxnginx1263modules/v1/Dockerfile create mode 100644 sources/bxnginx1263modules/v1/Dockerfile.origin create mode 100644 sources/bxnginx1263modules/v1/Makefile.module-brotli create mode 100644 sources/bxnginx1263modules/v1/Makefile.module-zip create mode 100644 sources/bxnginx1263modules/v1/brotli_makefile create mode 100644 sources/bxnginx1263modules/v1/brotli_shasum create mode 100644 sources/bxnginx1263modules/v1/brotli_version create mode 100644 sources/bxnginx1263modules/v1/headersmore_version create mode 100644 sources/bxnginx1263modules/v1/mod_zip-1.3.0.tar.gz create mode 100644 sources/bxnginx1263modules/v1/nginx-module-brotli.xml create mode 100644 sources/bxnginx1263modules/v1/nginx-module-headers-more.xml create mode 100644 sources/bxnginx1263modules/v1/nginx-module-zip.copyright create mode 100644 sources/bxnginx1263modules/v1/nginx-module-zip.xml create mode 100644 sources/bxnginx1280/Dockerfile create mode 100644 sources/bxnginx1280modules/v1/Dockerfile create mode 100644 sources/bxnginx1280modules/v1/Dockerfile.origin create mode 100644 sources/bxnginx1280modules/v1/Makefile.module-brotli create mode 100644 sources/bxnginx1280modules/v1/Makefile.module-zip create mode 100644 sources/bxnginx1280modules/v1/brotli_makefile create mode 100644 sources/bxnginx1280modules/v1/brotli_shasum create mode 100644 sources/bxnginx1280modules/v1/brotli_version create mode 100644 sources/bxnginx1280modules/v1/headersmore_shasum create mode 100644 sources/bxnginx1280modules/v1/headersmore_version create mode 100644 sources/bxnginx1280modules/v1/mod_zip-1.3.0.tar.gz create mode 100644 sources/bxnginx1280modules/v1/nginx-module-brotli.xml create mode 100644 sources/bxnginx1280modules/v1/nginx-module-headers-more.xml create mode 100644 sources/bxnginx1280modules/v1/nginx-module-zip.copyright create mode 100644 sources/bxnginx1280modules/v1/nginx-module-zip.xml create mode 100644 sources/bxnginx1280modules/v2/Dockerfile create mode 100644 sources/bxnginx1280modules/v2/Dockerfile.origin create mode 100644 sources/bxnginx1280modules/v2/Makefile.module-brotli create mode 100644 sources/bxnginx1280modules/v2/Makefile.module-zip create mode 100644 sources/bxnginx1280modules/v2/brotli_makefile create mode 100644 sources/bxnginx1280modules/v2/brotli_shasum create mode 100644 sources/bxnginx1280modules/v2/brotli_version create mode 100644 sources/bxnginx1280modules/v2/headersmore_shasum create mode 100644 sources/bxnginx1280modules/v2/headersmore_version create mode 100644 sources/bxnginx1280modules/v2/mod_zip-1.3.0.tar.gz create mode 100644 sources/bxnginx1280modules/v2/nginx-module-brotli.xml create mode 100644 sources/bxnginx1280modules/v2/nginx-module-headers-more.xml create mode 100644 sources/bxnginx1280modules/v2/nginx-module-zip.copyright create mode 100644 sources/bxnginx1280modules/v2/nginx-module-zip.xml create mode 100644 sources/bxnginx1280modules/v3/Dockerfile create mode 100644 sources/bxnginx1280modules/v3/Dockerfile.origin create mode 100644 sources/bxnginx1280modules/v3/Makefile.module-brotli create mode 100644 sources/bxnginx1280modules/v3/Makefile.module-zip create mode 100644 sources/bxnginx1280modules/v3/brotli_makefile create mode 100644 sources/bxnginx1280modules/v3/brotli_shasum create mode 100644 sources/bxnginx1280modules/v3/brotli_version create mode 100644 sources/bxnginx1280modules/v3/headersmore_shasum create mode 100644 sources/bxnginx1280modules/v3/headersmore_version create mode 100644 sources/bxnginx1280modules/v3/mod_zip-1.3.0.tar.gz create mode 100644 sources/bxnginx1280modules/v3/nginx-module-brotli.xml create mode 100644 sources/bxnginx1280modules/v3/nginx-module-headers-more.xml create mode 100644 sources/bxnginx1280modules/v3/nginx-module-zip.copyright create mode 100644 sources/bxnginx1280modules/v3/nginx-module-zip.xml create mode 100644 sources/bxnginx1281/Dockerfile create mode 100644 sources/bxnginx1281modules/v1/Dockerfile create mode 100644 sources/bxnginx1281modules/v1/Dockerfile.origin create mode 100644 sources/bxnginx1281modules/v1/Makefile.module-brotli create mode 100644 sources/bxnginx1281modules/v1/Makefile.module-zip create mode 100644 sources/bxnginx1281modules/v1/brotli_makefile create mode 100644 sources/bxnginx1281modules/v1/brotli_shasum create mode 100644 sources/bxnginx1281modules/v1/brotli_version create mode 100644 sources/bxnginx1281modules/v1/headersmore_shasum create mode 100644 sources/bxnginx1281modules/v1/headersmore_version create mode 100644 sources/bxnginx1281modules/v1/mod_zip-1.3.0.tar.gz create mode 100644 sources/bxnginx1281modules/v1/nginx-module-brotli.xml create mode 100644 sources/bxnginx1281modules/v1/nginx-module-headers-more.xml create mode 100644 sources/bxnginx1281modules/v1/nginx-module-zip.copyright create mode 100644 sources/bxnginx1281modules/v1/nginx-module-zip.xml create mode 100644 sources/bxnginx1282/Dockerfile create mode 100644 sources/bxnginx1282modules/v1/Dockerfile create mode 100644 sources/bxnginx1282modules/v1/Dockerfile.origin create mode 100644 sources/bxnginx1282modules/v1/Makefile.module-brotli create mode 100644 sources/bxnginx1282modules/v1/Makefile.module-zip create mode 100644 sources/bxnginx1282modules/v1/brotli_makefile create mode 100644 sources/bxnginx1282modules/v1/brotli_shasum create mode 100644 sources/bxnginx1282modules/v1/brotli_version create mode 100644 sources/bxnginx1282modules/v1/headersmore_shasum create mode 100644 sources/bxnginx1282modules/v1/headersmore_version create mode 100644 sources/bxnginx1282modules/v1/mod_zip-1.3.0.tar.gz create mode 100644 sources/bxnginx1282modules/v1/nginx-module-brotli.xml create mode 100644 sources/bxnginx1282modules/v1/nginx-module-headers-more.xml create mode 100644 sources/bxnginx1282modules/v1/nginx-module-zip.copyright create mode 100644 sources/bxnginx1282modules/v1/nginx-module-zip.xml create mode 100644 sources/bxpercona8040/Dockerfile create mode 100644 sources/bxpercona8040/etc_my.cnf create mode 100644 sources/bxpercona8040/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona8040/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona8041/Dockerfile create mode 100644 sources/bxpercona8041/etc_my.cnf create mode 100644 sources/bxpercona8041/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona8041/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona8042/Dockerfile create mode 100644 sources/bxpercona8042/etc_my.cnf create mode 100644 sources/bxpercona8042/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona8042/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona8043/Dockerfile create mode 100644 sources/bxpercona8043/etc_my.cnf create mode 100644 sources/bxpercona8043/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona8043/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona8044/Dockerfile create mode 100644 sources/bxpercona8044/etc_my.cnf create mode 100644 sources/bxpercona8044/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona8044/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona844/Dockerfile create mode 100644 sources/bxpercona844/etc_my.cnf create mode 100644 sources/bxpercona844/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona844/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona845/Dockerfile create mode 100644 sources/bxpercona845/etc_my.cnf create mode 100644 sources/bxpercona845/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona845/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona846/Dockerfile create mode 100644 sources/bxpercona846/etc_my.cnf create mode 100644 sources/bxpercona846/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona846/etc_mycnfd_my.cnf create mode 100644 sources/bxpercona847/Dockerfile create mode 100644 sources/bxpercona847/etc_my.cnf create mode 100644 sources/bxpercona847/etc_mycnfd_docker.cnf create mode 100644 sources/bxpercona847/etc_mycnfd_my.cnf create mode 100644 sources/bxphp8227/Dockerfile create mode 100755 sources/bxphp8227/bitrix.sh create mode 100644 sources/bxphp8227/msmtprc create mode 100644 sources/bxphp8228/Dockerfile create mode 100755 sources/bxphp8228/bitrix.sh create mode 100644 sources/bxphp8228/msmtprc create mode 100644 sources/bxphp8229/Dockerfile create mode 100755 sources/bxphp8229/bitrix.sh create mode 100644 sources/bxphp8229/msmtprc create mode 100644 sources/bxphp8230/Dockerfile create mode 100755 sources/bxphp8230/bitrix.sh create mode 100644 sources/bxphp8230/msmtprc create mode 100644 sources/bxphp8321/Dockerfile create mode 100755 sources/bxphp8321/bitrix.sh create mode 100644 sources/bxphp8321/msmtprc create mode 100644 sources/bxphp8322/Dockerfile create mode 100755 sources/bxphp8322/bitrix.sh create mode 100644 sources/bxphp8322/msmtprc create mode 100644 sources/bxphp8323/Dockerfile create mode 100755 sources/bxphp8323/bitrix.sh create mode 100644 sources/bxphp8323/msmtprc create mode 100644 sources/bxphp8324/Dockerfile create mode 100755 sources/bxphp8324/bitrix.sh create mode 100644 sources/bxphp8324/msmtprc create mode 100644 sources/bxphp8325/Dockerfile create mode 100755 sources/bxphp8325/bitrix.sh create mode 100644 sources/bxphp8325/msmtprc create mode 100644 sources/bxphp8326/Dockerfile create mode 100755 sources/bxphp8326/bitrix.sh create mode 100644 sources/bxphp8326/msmtprc create mode 100644 sources/bxphp8327/Dockerfile create mode 100755 sources/bxphp8327/bitrix.sh create mode 100644 sources/bxphp8327/msmtprc create mode 100644 sources/bxphp8328/Dockerfile create mode 100755 sources/bxphp8328/bitrix.sh create mode 100644 sources/bxphp8328/msmtprc create mode 100644 sources/bxphp8329/Dockerfile create mode 100755 sources/bxphp8329/bitrix.sh create mode 100644 sources/bxphp8329/msmtprc create mode 100644 sources/bxphp8330/Dockerfile create mode 100755 sources/bxphp8330/bitrix.sh create mode 100644 sources/bxphp8330/msmtprc create mode 100644 sources/bxphp8410/Dockerfile create mode 100755 sources/bxphp8410/bitrix.sh create mode 100644 sources/bxphp8410/msmtprc create mode 100644 sources/bxphp8411/Dockerfile create mode 100755 sources/bxphp8411/bitrix.sh create mode 100644 sources/bxphp8411/msmtprc create mode 100644 sources/bxphp8412/Dockerfile create mode 100755 sources/bxphp8412/bitrix.sh create mode 100644 sources/bxphp8412/msmtprc create mode 100644 sources/bxphp8413/Dockerfile create mode 100755 sources/bxphp8413/bitrix.sh create mode 100644 sources/bxphp8413/msmtprc create mode 100644 sources/bxphp8414/Dockerfile create mode 100755 sources/bxphp8414/bitrix.sh create mode 100644 sources/bxphp8414/msmtprc create mode 100644 sources/bxphp8415/Dockerfile create mode 100755 sources/bxphp8415/bitrix.sh create mode 100644 sources/bxphp8415/msmtprc create mode 100644 sources/bxphp8416/Dockerfile create mode 100755 sources/bxphp8416/bitrix.sh create mode 100644 sources/bxphp8416/msmtprc create mode 100644 sources/bxphp8417/Dockerfile create mode 100755 sources/bxphp8417/bitrix.sh create mode 100644 sources/bxphp8417/msmtprc create mode 100644 sources/bxphp8418/Dockerfile create mode 100755 sources/bxphp8418/bitrix.sh create mode 100644 sources/bxphp8418/msmtprc create mode 100644 sources/bxphp847/Dockerfile create mode 100755 sources/bxphp847/bitrix.sh create mode 100644 sources/bxphp847/msmtprc create mode 100644 sources/bxphp848/Dockerfile create mode 100755 sources/bxphp848/bitrix.sh create mode 100644 sources/bxphp848/msmtprc create mode 100644 sources/bxpush30/Dockerfile create mode 100755 sources/bxpush30/docker-entrypoint.sh create mode 100644 sources/bxpush30/push-server-0.4.0.tar.gz create mode 100644 sources/bxpush30/push-server-pub.json create mode 100644 sources/bxpush30/push-server-sub.json create mode 100644 sources/bxpush31/Dockerfile create mode 100755 sources/bxpush31/docker-entrypoint.sh create mode 100644 sources/bxpush31/push-server-0.4.0.tar.gz create mode 100644 sources/bxpush31/push-server-pub.json create mode 100644 sources/bxpush31/push-server-sub.json create mode 100644 sources/bxpush32/Dockerfile create mode 100755 sources/bxpush32/docker-entrypoint.sh create mode 100644 sources/bxpush32/push-server-0.5.0.tar.gz create mode 100644 sources/bxpush32/push-server-pub.json create mode 100644 sources/bxpush32/push-server-sub.json create mode 100644 sources/bxsphinx2211/v1/Dockerfile create mode 100644 sources/bxsphinx2211/v1/de.pak create mode 100644 sources/bxsphinx2211/v1/en.pak create mode 100644 sources/bxsphinx2211/v1/ru.pak create mode 100644 sources/bxsphinx2211/v1/sample_sphinx.conf create mode 100755 sources/bxsphinx2211/v1/start.sh create mode 100644 sources/bxsphinx2211/v2/Dockerfile create mode 100644 sources/bxsphinx2211/v2/de.pak create mode 100644 sources/bxsphinx2211/v2/en.pak create mode 100644 sources/bxsphinx2211/v2/ru.pak create mode 100644 sources/bxsphinx2211/v2/sample_sphinx.conf create mode 100755 sources/bxsphinx2211/v2/start.sh create mode 100644 sources/bxssl10/Dockerfile create mode 100755 sources/bxssl10/cas.sh create mode 100644 sources/bxssl10/dhparam.pem create mode 100755 sources/bxssl10/srv.sh create mode 100644 sources/bxssl11/Dockerfile create mode 100755 sources/bxssl11/cas.sh create mode 100644 sources/bxssl11/dhparam.pem create mode 100755 sources/bxssl11/srv.sh create mode 100644 sources/memcached1637/Dockerfile create mode 100755 sources/memcached1637/docker-entrypoint.sh create mode 100644 sources/memcached1638/Dockerfile create mode 100755 sources/memcached1638/docker-entrypoint.sh create mode 100644 sources/memcached1639/Dockerfile create mode 100755 sources/memcached1639/docker-entrypoint.sh create mode 100644 sources/memcached1640/Dockerfile create mode 100755 sources/memcached1640/docker-entrypoint.sh create mode 100755 sources/nginx1263/10-listen-on-ipv6-by-default.sh create mode 100755 sources/nginx1263/15-local-resolvers.envsh create mode 100755 sources/nginx1263/20-envsubst-on-templates.sh create mode 100755 sources/nginx1263/30-tune-worker-processes.sh create mode 100644 sources/nginx1263/Dockerfile create mode 100755 sources/nginx1263/docker-entrypoint.sh create mode 100755 sources/nginx1280/10-listen-on-ipv6-by-default.sh create mode 100755 sources/nginx1280/15-local-resolvers.envsh create mode 100755 sources/nginx1280/20-envsubst-on-templates.sh create mode 100755 sources/nginx1280/30-tune-worker-processes.sh create mode 100644 sources/nginx1280/Dockerfile create mode 100755 sources/nginx1280/docker-entrypoint.sh create mode 100755 sources/nginx1281/10-listen-on-ipv6-by-default.sh create mode 100755 sources/nginx1281/15-local-resolvers.envsh create mode 100755 sources/nginx1281/20-envsubst-on-templates.sh create mode 100755 sources/nginx1281/30-tune-worker-processes.sh create mode 100644 sources/nginx1281/Dockerfile create mode 100755 sources/nginx1281/docker-entrypoint.sh create mode 100755 sources/nginx1282/10-listen-on-ipv6-by-default.sh create mode 100755 sources/nginx1282/15-local-resolvers.envsh create mode 100755 sources/nginx1282/20-envsubst-on-templates.sh create mode 100755 sources/nginx1282/30-tune-worker-processes.sh create mode 100644 sources/nginx1282/Dockerfile create mode 100755 sources/nginx1282/docker-entrypoint.sh create mode 100644 sources/node20192/alpine/Dockerfile create mode 100755 sources/node20192/alpine/docker-entrypoint.sh create mode 100644 sources/node20192/bookworm/Dockerfile create mode 100755 sources/node20192/bookworm/docker-entrypoint.sh create mode 100644 sources/node22151/alpine/Dockerfile create mode 100755 sources/node22151/alpine/docker-entrypoint.sh create mode 100644 sources/node22151/bookworm/Dockerfile create mode 100755 sources/node22151/bookworm/docker-entrypoint.sh create mode 100644 sources/node22220/alpine/Dockerfile create mode 100755 sources/node22220/alpine/docker-entrypoint.sh create mode 100644 sources/node22220/trixie/Dockerfile create mode 100755 sources/node22220/trixie/docker-entrypoint.sh create mode 100644 sources/percona8040/Dockerfile create mode 100644 sources/percona8040/Dockerfile-dockerhub create mode 100644 sources/percona8040/Dockerfile.aarch64 create mode 100644 sources/percona8040/Dockerfile.ubi8 create mode 100644 sources/percona8040/README-build.md create mode 100644 sources/percona8040/README.md create mode 100644 sources/percona8040/docker-compose.yml create mode 100755 sources/percona8040/ps-entry-dockerhub.sh create mode 100755 sources/percona8040/ps-entry.sh create mode 100755 sources/percona8040/telemetry-agent-supervisor.sh create mode 100644 sources/percona8041/Dockerfile create mode 100644 sources/percona8041/Dockerfile-dockerhub create mode 100644 sources/percona8041/Dockerfile.aarch64 create mode 100644 sources/percona8041/Dockerfile.ubi8 create mode 100644 sources/percona8041/README-build.md create mode 100644 sources/percona8041/README.md create mode 100644 sources/percona8041/docker-compose.yml create mode 100755 sources/percona8041/ps-entry-dockerhub.sh create mode 100755 sources/percona8041/ps-entry.sh create mode 100755 sources/percona8041/telemetry-agent-supervisor.sh create mode 100644 sources/percona8042/Dockerfile create mode 100644 sources/percona8042/Dockerfile-dockerhub create mode 100644 sources/percona8042/Dockerfile.aarch64 create mode 100644 sources/percona8042/Dockerfile.ubi8 create mode 100644 sources/percona8042/README-build.md create mode 100644 sources/percona8042/README.md create mode 100644 sources/percona8042/docker-compose.yml create mode 100755 sources/percona8042/ps-entry-dockerhub.sh create mode 100755 sources/percona8042/ps-entry.sh create mode 100755 sources/percona8042/telemetry-agent-supervisor.sh create mode 100644 sources/percona8043/Dockerfile create mode 100644 sources/percona8043/Dockerfile-dockerhub create mode 100644 sources/percona8043/Dockerfile.aarch64 create mode 100644 sources/percona8043/Dockerfile.ubi8 create mode 100644 sources/percona8043/README-build.md create mode 100644 sources/percona8043/README.md create mode 100644 sources/percona8043/docker-compose.yml create mode 100755 sources/percona8043/ps-entry-dockerhub.sh create mode 100755 sources/percona8043/ps-entry.sh create mode 100755 sources/percona8043/telemetry-agent-supervisor.sh create mode 100644 sources/percona8044/Dockerfile create mode 100644 sources/percona8044/Dockerfile-dockerhub create mode 100644 sources/percona8044/Dockerfile-mysqlsh-upstream create mode 100644 sources/percona8044/Dockerfile-mysqlsh-upstream.aarch64 create mode 100644 sources/percona8044/Dockerfile.aarch64 create mode 100644 sources/percona8044/Dockerfile.ubi8 create mode 100644 sources/percona8044/LICENSE create mode 100644 sources/percona8044/README-build.md create mode 100644 sources/percona8044/README.md create mode 100644 sources/percona8044/docker-compose.yml create mode 100755 sources/percona8044/ps-entry-dockerhub.sh create mode 100755 sources/percona8044/ps-entry.sh create mode 100755 sources/percona8044/telemetry-agent-supervisor.sh create mode 100644 sources/percona844/Dockerfile create mode 100644 sources/percona844/Dockerfile-dockerhub create mode 100644 sources/percona844/Dockerfile.aarch64 create mode 100644 sources/percona844/README-build.md create mode 100644 sources/percona844/README.md create mode 100644 sources/percona844/docker-compose.yml create mode 100755 sources/percona844/ps-entry-dockerhub.sh create mode 100755 sources/percona844/ps-entry.sh create mode 100755 sources/percona844/telemetry-agent-supervisor.sh create mode 100644 sources/percona845/Dockerfile create mode 100644 sources/percona845/Dockerfile-dockerhub create mode 100644 sources/percona845/Dockerfile.aarch64 create mode 100644 sources/percona845/README-build.md create mode 100644 sources/percona845/README.md create mode 100644 sources/percona845/docker-compose.yml create mode 100755 sources/percona845/ps-entry-dockerhub.sh create mode 100755 sources/percona845/ps-entry.sh create mode 100755 sources/percona845/telemetry-agent-supervisor.sh create mode 100644 sources/percona846/Dockerfile create mode 100644 sources/percona846/Dockerfile-dockerhub create mode 100644 sources/percona846/Dockerfile.aarch64 create mode 100644 sources/percona846/README-build.md create mode 100644 sources/percona846/README.md create mode 100644 sources/percona846/docker-compose.yml create mode 100644 sources/percona846/dockerdir/usr/lib64/mysql/plugin/component_keyring_vault.cnf create mode 100644 sources/percona846/dockerdir/usr/sbin/mysqld.my create mode 100755 sources/percona846/ps-entry-dockerhub.sh create mode 100755 sources/percona846/ps-entry.sh create mode 100755 sources/percona846/telemetry-agent-supervisor.sh create mode 100644 sources/percona847/Dockerfile create mode 100644 sources/percona847/Dockerfile-dockerhub create mode 100644 sources/percona847/Dockerfile-mysqlsh-upstream create mode 100644 sources/percona847/Dockerfile-mysqlsh-upstream.aarch64 create mode 100644 sources/percona847/Dockerfile.aarch64 create mode 100644 sources/percona847/LICENSE create mode 100644 sources/percona847/README-build.md create mode 100644 sources/percona847/README.md create mode 100644 sources/percona847/docker-compose.yml create mode 100644 sources/percona847/dockerdir/usr/lib64/mysql/plugin/component_keyring_vault.cnf create mode 100644 sources/percona847/dockerdir/usr/sbin/mysqld.my create mode 100755 sources/percona847/ps-entry-dockerhub.sh create mode 100755 sources/percona847/ps-entry.sh create mode 100755 sources/percona847/telemetry-agent-supervisor.sh create mode 100644 sources/php8227/Dockerfile create mode 100755 sources/php8227/docker-php-entrypoint create mode 100755 sources/php8227/docker-php-ext-configure create mode 100755 sources/php8227/docker-php-ext-enable create mode 100755 sources/php8227/docker-php-ext-install create mode 100755 sources/php8227/docker-php-source create mode 100644 sources/php8228/Dockerfile create mode 100755 sources/php8228/docker-php-entrypoint create mode 100755 sources/php8228/docker-php-ext-configure create mode 100755 sources/php8228/docker-php-ext-enable create mode 100755 sources/php8228/docker-php-ext-install create mode 100755 sources/php8228/docker-php-source create mode 100644 sources/php8229/Dockerfile create mode 100755 sources/php8229/docker-php-entrypoint create mode 100755 sources/php8229/docker-php-ext-configure create mode 100755 sources/php8229/docker-php-ext-enable create mode 100755 sources/php8229/docker-php-ext-install create mode 100755 sources/php8229/docker-php-source create mode 100644 sources/php8230/Dockerfile create mode 100755 sources/php8230/docker-php-entrypoint create mode 100755 sources/php8230/docker-php-ext-configure create mode 100755 sources/php8230/docker-php-ext-enable create mode 100755 sources/php8230/docker-php-ext-install create mode 100755 sources/php8230/docker-php-source create mode 100644 sources/php8321/Dockerfile create mode 100755 sources/php8321/docker-php-entrypoint create mode 100755 sources/php8321/docker-php-ext-configure create mode 100755 sources/php8321/docker-php-ext-enable create mode 100755 sources/php8321/docker-php-ext-install create mode 100755 sources/php8321/docker-php-source create mode 100644 sources/php8322/Dockerfile create mode 100755 sources/php8322/docker-php-entrypoint create mode 100755 sources/php8322/docker-php-ext-configure create mode 100755 sources/php8322/docker-php-ext-enable create mode 100755 sources/php8322/docker-php-ext-install create mode 100755 sources/php8322/docker-php-source create mode 100644 sources/php8323/Dockerfile create mode 100755 sources/php8323/docker-php-entrypoint create mode 100755 sources/php8323/docker-php-ext-configure create mode 100755 sources/php8323/docker-php-ext-enable create mode 100755 sources/php8323/docker-php-ext-install create mode 100755 sources/php8323/docker-php-source create mode 100644 sources/php8324/Dockerfile create mode 100755 sources/php8324/docker-php-entrypoint create mode 100755 sources/php8324/docker-php-ext-configure create mode 100755 sources/php8324/docker-php-ext-enable create mode 100755 sources/php8324/docker-php-ext-install create mode 100755 sources/php8324/docker-php-source create mode 100644 sources/php8325/Dockerfile create mode 100755 sources/php8325/docker-php-entrypoint create mode 100755 sources/php8325/docker-php-ext-configure create mode 100755 sources/php8325/docker-php-ext-enable create mode 100755 sources/php8325/docker-php-ext-install create mode 100755 sources/php8325/docker-php-source create mode 100644 sources/php8326/Dockerfile create mode 100755 sources/php8326/docker-php-entrypoint create mode 100755 sources/php8326/docker-php-ext-configure create mode 100755 sources/php8326/docker-php-ext-enable create mode 100755 sources/php8326/docker-php-ext-install create mode 100755 sources/php8326/docker-php-source create mode 100644 sources/php8327/Dockerfile create mode 100755 sources/php8327/docker-php-entrypoint create mode 100755 sources/php8327/docker-php-ext-configure create mode 100755 sources/php8327/docker-php-ext-enable create mode 100755 sources/php8327/docker-php-ext-install create mode 100755 sources/php8327/docker-php-source create mode 100644 sources/php8328/Dockerfile create mode 100755 sources/php8328/docker-php-entrypoint create mode 100755 sources/php8328/docker-php-ext-configure create mode 100755 sources/php8328/docker-php-ext-enable create mode 100755 sources/php8328/docker-php-ext-install create mode 100755 sources/php8328/docker-php-source create mode 100644 sources/php8329/Dockerfile create mode 100755 sources/php8329/docker-php-entrypoint create mode 100755 sources/php8329/docker-php-ext-configure create mode 100755 sources/php8329/docker-php-ext-enable create mode 100755 sources/php8329/docker-php-ext-install create mode 100755 sources/php8329/docker-php-source create mode 100644 sources/php8330/Dockerfile create mode 100755 sources/php8330/docker-php-entrypoint create mode 100755 sources/php8330/docker-php-ext-configure create mode 100755 sources/php8330/docker-php-ext-enable create mode 100755 sources/php8330/docker-php-ext-install create mode 100755 sources/php8330/docker-php-source create mode 100644 sources/php8410/Dockerfile create mode 100755 sources/php8410/docker-php-entrypoint create mode 100755 sources/php8410/docker-php-ext-configure create mode 100755 sources/php8410/docker-php-ext-enable create mode 100755 sources/php8410/docker-php-ext-install create mode 100755 sources/php8410/docker-php-source create mode 100644 sources/php8411/Dockerfile create mode 100755 sources/php8411/docker-php-entrypoint create mode 100755 sources/php8411/docker-php-ext-configure create mode 100755 sources/php8411/docker-php-ext-enable create mode 100755 sources/php8411/docker-php-ext-install create mode 100755 sources/php8411/docker-php-source create mode 100644 sources/php8412/Dockerfile create mode 100755 sources/php8412/docker-php-entrypoint create mode 100755 sources/php8412/docker-php-ext-configure create mode 100755 sources/php8412/docker-php-ext-enable create mode 100755 sources/php8412/docker-php-ext-install create mode 100755 sources/php8412/docker-php-source create mode 100644 sources/php8413/Dockerfile create mode 100755 sources/php8413/docker-php-entrypoint create mode 100755 sources/php8413/docker-php-ext-configure create mode 100755 sources/php8413/docker-php-ext-enable create mode 100755 sources/php8413/docker-php-ext-install create mode 100755 sources/php8413/docker-php-source create mode 100644 sources/php8414/Dockerfile create mode 100755 sources/php8414/docker-php-entrypoint create mode 100755 sources/php8414/docker-php-ext-configure create mode 100755 sources/php8414/docker-php-ext-enable create mode 100755 sources/php8414/docker-php-ext-install create mode 100755 sources/php8414/docker-php-source create mode 100644 sources/php8415/Dockerfile create mode 100755 sources/php8415/docker-php-entrypoint create mode 100755 sources/php8415/docker-php-ext-configure create mode 100755 sources/php8415/docker-php-ext-enable create mode 100755 sources/php8415/docker-php-ext-install create mode 100755 sources/php8415/docker-php-source create mode 100644 sources/php8416/Dockerfile create mode 100755 sources/php8416/docker-php-entrypoint create mode 100755 sources/php8416/docker-php-ext-configure create mode 100755 sources/php8416/docker-php-ext-enable create mode 100755 sources/php8416/docker-php-ext-install create mode 100755 sources/php8416/docker-php-source create mode 100644 sources/php8417/Dockerfile create mode 100755 sources/php8417/docker-php-entrypoint create mode 100755 sources/php8417/docker-php-ext-configure create mode 100755 sources/php8417/docker-php-ext-enable create mode 100755 sources/php8417/docker-php-ext-install create mode 100755 sources/php8417/docker-php-source create mode 100644 sources/php8418/Dockerfile create mode 100755 sources/php8418/docker-php-entrypoint create mode 100755 sources/php8418/docker-php-ext-configure create mode 100755 sources/php8418/docker-php-ext-enable create mode 100755 sources/php8418/docker-php-ext-install create mode 100755 sources/php8418/docker-php-source create mode 100644 sources/php847/Dockerfile create mode 100755 sources/php847/docker-php-entrypoint create mode 100755 sources/php847/docker-php-ext-configure create mode 100755 sources/php847/docker-php-ext-enable create mode 100755 sources/php847/docker-php-ext-install create mode 100755 sources/php847/docker-php-source create mode 100644 sources/php848/Dockerfile create mode 100755 sources/php848/docker-php-entrypoint create mode 100755 sources/php848/docker-php-ext-configure create mode 100755 sources/php848/docker-php-ext-enable create mode 100755 sources/php848/docker-php-ext-install create mode 100755 sources/php848/docker-php-source create mode 100644 sources/php850/Dockerfile create mode 100755 sources/php850/docker-php-entrypoint create mode 100755 sources/php850/docker-php-ext-configure create mode 100755 sources/php850/docker-php-ext-enable create mode 100755 sources/php850/docker-php-ext-install create mode 100755 sources/php850/docker-php-source create mode 100644 sources/php851/Dockerfile create mode 100755 sources/php851/docker-php-entrypoint create mode 100755 sources/php851/docker-php-ext-configure create mode 100755 sources/php851/docker-php-ext-enable create mode 100755 sources/php851/docker-php-ext-install create mode 100755 sources/php851/docker-php-source create mode 100644 sources/php852/Dockerfile create mode 100755 sources/php852/docker-php-entrypoint create mode 100755 sources/php852/docker-php-ext-configure create mode 100755 sources/php852/docker-php-ext-enable create mode 100755 sources/php852/docker-php-ext-install create mode 100755 sources/php852/docker-php-source create mode 100644 sources/php853/Dockerfile create mode 100755 sources/php853/docker-php-entrypoint create mode 100755 sources/php853/docker-php-ext-configure create mode 100755 sources/php853/docker-php-ext-enable create mode 100755 sources/php853/docker-php-ext-install create mode 100755 sources/php853/docker-php-source create mode 100644 sources/redis7210/Dockerfile create mode 100755 sources/redis7210/docker-entrypoint.sh create mode 100644 sources/redis7211/Dockerfile create mode 100755 sources/redis7211/docker-entrypoint.sh create mode 100644 sources/redis7212/Dockerfile create mode 100755 sources/redis7212/docker-entrypoint.sh create mode 100644 sources/redis727/Dockerfile create mode 100755 sources/redis727/docker-entrypoint.sh create mode 100644 sources/redis728/Dockerfile create mode 100755 sources/redis728/docker-entrypoint.sh create mode 100644 sources/redis729/Dockerfile create mode 100755 sources/redis729/docker-entrypoint.sh create mode 100644 sources/redis744/Dockerfile create mode 100755 sources/redis744/docker-entrypoint.sh create mode 100644 sources/redis745/Dockerfile create mode 100755 sources/redis745/docker-entrypoint.sh create mode 100644 sources/redis746/Dockerfile create mode 100755 sources/redis746/docker-entrypoint.sh create mode 100644 sources/redis747/Dockerfile create mode 100755 sources/redis747/docker-entrypoint.sh create mode 100644 sources/redis802/Dockerfile create mode 100755 sources/redis802/docker-entrypoint.sh create mode 100644 sources/redis803/Dockerfile create mode 100755 sources/redis803/docker-entrypoint.sh create mode 100644 sources/redis804/Dockerfile create mode 100755 sources/redis804/docker-entrypoint.sh create mode 100644 sources/redis805/Dockerfile create mode 100755 sources/redis805/docker-entrypoint.sh create mode 100644 sources/redis820/Dockerfile create mode 100755 sources/redis820/docker-entrypoint.sh create mode 100644 sources/redis821/Dockerfile create mode 100755 sources/redis821/docker-entrypoint.sh create mode 100644 sources/redis822/Dockerfile create mode 100755 sources/redis822/docker-entrypoint.sh create mode 100644 sources/redis823/Dockerfile create mode 100755 sources/redis823/docker-entrypoint.sh create mode 100644 sources/redis824/Dockerfile create mode 100755 sources/redis824/docker-entrypoint.sh create mode 100644 sources/redis840/Dockerfile create mode 100755 sources/redis840/docker-entrypoint.sh create mode 100644 sources/redis841/Dockerfile create mode 100755 sources/redis841/docker-entrypoint.sh create mode 100644 sources/redis860/Dockerfile create mode 100755 sources/redis860/docker-entrypoint.sh diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..f559b23 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +# +# Project unique name +# +COMPOSE_PROJECT_NAME=b24pal +# +# Timezone +# +TZ=Europe/Moscow diff --git a/.env_php b/.env_php new file mode 100644 index 0000000..079c802 --- /dev/null +++ b/.env_php @@ -0,0 +1,5 @@ +# +# VMBitrix +# +BITRIX_VA_VER=9.0.9 +BITRIX_ENV_TYPE=general diff --git a/.env_push.example b/.env_push.example new file mode 100644 index 0000000..5e73447 --- /dev/null +++ b/.env_push.example @@ -0,0 +1,4 @@ +# +# Push Server on NodeJS: Security Key +# +PUSH_SECURITY_KEY=qWWNopE43vkcTONyXgHzalhf1l5wFVUrwRjNZ1koVMt5wvJm3SmiCw6rqTrEFwZe68YVTUeNaj64uScnen2AAB3SwUOl7XOfqBjeiX4WGqCpFab1D5mIaaE013zIWWGH diff --git a/.env_push_pub b/.env_push_pub new file mode 100644 index 0000000..6bfa4a6 --- /dev/null +++ b/.env_push_pub @@ -0,0 +1,5 @@ +# +# Push Server on NodeJS: Pub +# +PUSH_PUB_PORT=9010 +PUSH_PUB_MODE=pub diff --git a/.env_push_sub b/.env_push_sub new file mode 100644 index 0000000..e34c99d --- /dev/null +++ b/.env_push_sub @@ -0,0 +1,5 @@ +# +# Push Server on NodeJS: Sub +# +PUSH_SUB_PORT=8010 +PUSH_SUB_MODE=sub diff --git a/.env_redis b/.env_redis new file mode 100644 index 0000000..1ead89c --- /dev/null +++ b/.env_redis @@ -0,0 +1,5 @@ +# +# Redis +# +REDIS_HOST=redis +REDIS_PORT=6379 diff --git a/.env_sql.example b/.env_sql.example new file mode 100644 index 0000000..6bfc2f2 --- /dev/null +++ b/.env_sql.example @@ -0,0 +1,12 @@ +# +# MySQL DB: Root Password +# +# example: lBZPsD1U}u8]HxJ +# +# CHANGE_MYSQL_ROOT_PASSWORD_HERE +# +MYSQL_ROOT_PASSWORD="lBZPsD1U}u8]HxJ" +# +# Percona Server 8.0.x or Percona Server 8.4.x: disable telemetry agent run, collect, send data +# +PERCONA_TELEMETRY_DISABLE=1 diff --git a/.env_ssl b/.env_ssl new file mode 100644 index 0000000..ca41e5b --- /dev/null +++ b/.env_ssl @@ -0,0 +1,18 @@ +# +# Root Certificate Authority and Intermediate Certificate Authority Data +# +CA_COUNTRY_NAME='RU' +CA_STATE_OR_PROVINCE_NAME='Kaliningrad Region' +CA_LOCALITY_NAME='Kaliningrad' +CA_ORGANIZATION_NAME='Dev Corporation Ltd' +CA_ORGANIZATIONAL_UNIT_NAME='Dev Corporation Ltd Unit' +CA_EMAIL_ADDRESS='info@devcorporation.ltd' +# +# Certificate Data +# +CERT_COUNTRY_NAME='RU' +CERT_STATE_OR_PROVINCE_NAME='Kaliningrad Region' +CERT_LOCALITY_NAME='Kaliningrad' +CERT_ORGANIZATION_NAME='Dev Corporation Ltd' +CERT_ORGANIZATIONAL_UNIT_NAME='Dev Corporation Ltd Unit' +CERT_EMAIL_ADDRESS='info@devcorporation.ltd' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79d7e80 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# исключаем phpstorm +.idea/* + +# исключаем env и ini файлы +.env +.env_sql +.env_push +confs/php84/etc/php/conf.d/timezone.ini + +# файлы битрикс +/data/www/* +!/data/www/.gitkeep + +# БД +/data/mysql/* +!/data/mysql/.gitkeep \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..63f7901 --- /dev/null +++ b/README.md @@ -0,0 +1,362 @@ +# Docker-окружение для Bitrix (env-docker) + +Этот проект предназначен для быстрого развертывания локального окружения для разработки на Битрикс с использованием Docker. В основе лежит репозиторий https://github.com/bitrix-tools/env-docker + +## Директории +- [mysql](data/mysql) — файлы баз данных MySQL. Эта папка привязана к контейнеру через bind mount, поэтому данные сохраняются даже после удаления контейнеров. +- [www](data/www) — файлы проектов (скрипты Битрикс). Это основной рабочий каталог для разработки. + +## Навигация +* [Инициализация проекта](#инициализация-проекта) +* [Настройка среды разработки](#настройка-среды-разработки) +* [Настройка доступа к сайту](#настройка-доступа-к-сайту) +* [Настройка Xdebug](#настройка-xdebug) +* [Docker](#docker) +* [Управление контейнерами (Docker Compose)](#управление-контейнерами) + +## Инициализация проекта +1. Создайте директорию для вашего проекта и перейдите в неё. + +2. Склонируйте репозиторий в текущую директорию (обратите внимание на точку в конце команды): +```bash +git clone git@gitlab.vniigaz.local:internal-automation/isup/bitrix-docker.git . +``` + +3. Склонируйте подмодули проекта +Выполните в корне проекта: +```bash +git submodule update --init --recursive +``` + +4. В [www](data/www) Необходимо добавить исключенные из репозитория, проекта ИСУП, папки: +- `/bitrix` +- `/upload` + +Взять их можно из полной копии проекта (склеить и распаковать полный архив) +```bash +# Склеить архив и сразу распаковать (для не сжатых архивов): +cat *$(ls -v *tar.*) | tar xf - + +# Склеить архив и распаковать (для сжатых архивов): +cat *$(ls -v *tar.gz*) | tar xzf - +``` + +Далее перенести необходимые директории + +5. Импортируем БД +> Импорт БД должен происходить после запуска контейнеров. + +При создании полной копии проекта, средствами резервного копирования Битрикс и после переноса папки `bitrix` в [www](data/www) в `/bitrix/backup` будет находиться копия БД (2 файла). + +Необходимо скопировать SQL-файлы в контейнер mysql: + +```bash +# Создаем папку, которая не является tmpfs +docker exec dev_mysql mkdir /import +# основная БД, например b24pal.local_20260304_231417_full_2dk2oay35dm6fu8r.sql +# Формат: docker cp /путь/к/файлу.sql <имя_контейнера>:/import/файл.sql +docker cp ./data/www/bitrix/backup/{имя файла}.sql dev_mysql:/import/{имя файла}.sql + +# БД after_connect, например b24pal.local_20260304_231417_full_2dk2oay35dm6fu8r_after_connect.sql +docker cp ./data/www/bitrix/backup/{имя файла}_after_connect.sql dev_mysql:/import/{имя файла}_after_connect.sql +``` + +Зайдите в контейнер и подключитесь к MySQL. + +```bash +docker exec -it dev_mysql bash +``` + +Внутри контейнера выполните: +```bash +mysql -u root -p +``` + +Введите пароль root, пароль указан в файле `.env_sql` + +Создайте базу данных (если её нет). В командной строке MySQL выполните: + +```bash +# укажите любое имя БД, например b24local +CREATE DATABASE IF NOT EXISTS b24local; +# переключаемся на созданную БД, проверяем что выбор работает +USE b24local; +# Выходим из консоли mysql +exit; +``` + +**Загрузите дамп.** Не выходя из контейнера, выполните команду загрузки. +```bash +# укажите имя БД и имя загруженной копии БД +mysql -u root -p имя_вашей_базы < /tmp/{имя файла копии}.sql +# укажите имя БД и имя загруженной копии after_connect.sql +mysql -u root -p имя_вашей_базы < /tmp/{имя файла копии}.sql +``` + +Система снова запросит пароль root + +## Настройка среды разработки +Настройки вносятся **до первого запуска контейнеров** + +1. Скопируйте файлы +```bash +cp .env.example .env +cp .env_sql.example .env_sql +cp .env_push.example .env_push +cp confs/php84/etc/php/conf.d/timezone.ini.example confs/php84/etc/php/conf.d/timezone.ini +``` +2. Заполните их значениями для вашей среды разработки: + +**Пароль к базам данных MySQL** + +Пароль для суперпользователя `root` задается в файле `.env_sql`: + +```dotenv +MYSQL_ROOT_PASSWORD="..." +``` + +**Секретный ключ для Push-сервера** + +Ключ используется для подписи соединений между клиентом и Push-сервером. Он задается в файле `.env_push`, можно использовать уже установленное значение + +```dotenv +PUSH_SECURITY_KEY=... +``` + +**Часовой пояс (timezone)** +> Часовой пояс для контейнеров задается в двух местах + +1. Файл `.env`. (основная настройка для большинства сервисов). Значение задано как: +```dotenv +TZ=Europe/Moscow +``` + +2. Файл `confs/php84/etc/php/conf.d/timezone.ini` (настройка для PHP): +```ini +date.timezone = Europe/Moscow +``` + +После выполнения этих шагов можно переходить к запуску контейнеров. + +## Настройка доступа к сайту +Для macOS. По умолчанию сайт использует порты **8588 (HTTP)** и **8589 (HTTPS)**. Эти настройки указаны в файле `docker-compose.yml`. + +Если порты заняты, можно указать другие в `docker-compose.yml`. + +Для доступа к сайту по удобному адресу (например, http://b24.vniigaz.gazprom.local) без указания порта, нужно перенаправить трафик с 80-го порта на порт 8588. + +Ниже описаны два способа **для macOS**. + +Так как на `macOS` системный `80` порт часто занят или защищен, можно: +- использовать PF (Packet Filter) — встроенный в macOS фаервол, который перенаправит трафик. +- настроить прокси для локального Apache (рекомендованный способ) + +### Предварительная настройка (общая для обоих способов) +Как открывать сайт: +1) через `127.0.0.1:8588` +2) `b24.vniigaz.gazprom.local:8588` +3) `b24.vniigaz.gazprom.local` - без порта — см. ниже + +1. Добавьте запись в файл `/etc/hosts`. Это свяжет доменное имя с локальным компьютером. +```bash +sudo nano /etc/hosts +``` +Добавьте строку: +```text +127.0.0.1 b24.vniigaz.gazprom.local +``` + +2. **(Опционально)** Создайте тестовый файл. +Для проверки работы создайте в директории [data/www](data/www) файл `index.php` с содержимым: +```php + 127.0.0.1 port 8588 +# Для HTTPS (порт 443) раскомментируйте следующую строку, если настроите SSL: +#rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 8589 +``` + +Сохраните файл. + +3. Загрузите новое правило. Эта команда включает PF с вашим правилом. +```bash +sudo pfctl -ef /etc/pf.conf +sudo pfctl -f /etc/pf.anchors/bitrix-dev +``` +После этого сайт должен открываться по адресу http://b24.vniigaz.gazprom.local. + +### Способ 2: Проксирование через локальный Apache - рекомендуется +Этот способ подойдет, если у вас уже запущен встроенный веб-сервер Apache и вы не хотите отключать его. + +**1. Найдите конфигурацию Apache** +Эта команда показывает полную конфигурацию, которую видит Apache, и в самом верху вывода будет путь к основному файлу `httpd.conf` +```bash +apachectl -t -D DUMP_INCLUDES +``` + +**2. Создайте конфигурационный файл для виртуального хоста.** +Создайте файл, например: `sudo nano /{путь к конфигу}/users/httpd-bitrix-vhost.conf` (путь может отличаться в зависимости от вашей системы) +Вставьте в него следующее содержимое: +```apacheconf + + ServerName b24.vniigaz.gazprom.local + + # Включаем проксирование + ProxyPreserveHost On + ProxyPass / http://127.0.0.1:8588/ + ProxyPassReverse / http://127.0.0.1:8588/ + + # Логи (опционально), они локальные + ErrorLog "/var/log/apache2/b24-error_log" + +``` + +**3. Включите модули прокси в Apache.** + +Откройте основной файл `httpd.conf` `/{путь к конфигу}/httpd.conf` (путь к которому вы узнали в шаге 1.). +Найдите и раскомментируйте (уберите символ `#` в начале) следующие строки, чтобы включить модули прокси:: +```apacheconf +LoadModule proxy_module libexec/apache2/mod_proxy.so +LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so +``` +Сохраните файл. + +**3. Подключите созданный виртуальный хост.** +В конец того же файла `httpd.conf` добавьте строку для подключения вашего конфига: + +```apacheconf +# подключаем все кастомные конфиги +Include /{путь к конфигу}/users/* +# или подключаем один файл точечно +Include /{путь к конфигу}/users/httpd-bitrix-vhost.conf +``` +Убедитесь, что путь указан верно. + +**4. Перезапустите Apache.** +```apacheconf +sudo apachectl restart +``` +Теперь сайт должен быть доступен по адресу http://b24.vniigaz.gazprom.local. + +## Настройка Xdebug + +### Настраиваем PhpStorm +#### 1. Настройка PHP Interpreter +1. `Settings` → `PHP` → `CLI Interpreter` → `+` → `From Docker, Vagrant, WSL...` +2. Выберите `Docker Compose` +3. Укажите путь к `docker-compose.yml` и сервис `php` +4. `PhpStorm` подключится к контейнеру и проиндексирует файлы + +#### 2. Настройка Path Mappings +1. `Settings` → `PHP` → `Servers` +2. Добавьте сервер: +* Name: bitrix-docker +* Host: localhost (или ваш домен, например dev.bx) +* Port: 8588 +* Debugger: Xdebug +3. Внизу в Path mappings укажите: +```text +Local: /путь/к/data/www → Remote: /opt/www/ +``` + +#### 3. Настройка Debug +1. `Settings` → `PHP` → `Debug`: +* Debug port: 9003 +* Can accept external connections +2. `Settings` → `PHP` → `Debug` → `Xdebug`: +* Filter debug connection by IDE key +* IDE key: `PHPSTORM` + +#### 4. Создайте конфигурацию запуска +1. `Run` → `Edit Configurations` → `+` → `PHP Remote Debug` +2. Настройки: +* Name: `Bitrix Docker Debug` +* Server: выберите созданный сервер `bitrix-docker` +* IDE key: `PHPSTORM` +3. Примените и закройте + +В PhpStorm включите "Start Listening for PHP Debug Connections" (иконка 🐞 в панели) + +Поставьте брейкпоинт в коде и откройте страницу — отладка должна сработать! + +## Docker +Для удобного управления контейнерами в графическом интерфейсе рекомендуется использовать `Docker Desktop`. Он доступен для Windows, Linux и macOS. + +Документация по установке: +- `Docker Desktop on Windows`: https://docs.docker.com/desktop/setup/install/windows-install/ +- `Docker Desktop on Linux`: https://docs.docker.com/desktop/setup/install/linux/ +- `Docker Desktop on Mac`: https://docs.docker.com/desktop/setup/install/mac-install/ + +## Управление контейнерами +Для оркестрации контейнеров используется `Docker Compose`. Все команды выполняются из корневой директории проекта. + +Основная команда для пересборки и перезапуска: +```bash +docker compose down && docker compose up -d +``` + +
Полезные команды Docker + +* **Запустить все контейнеры и оставить их работать в фоне:** + +```bash +docker compose up -d +``` + +* **Отобразить список контейнеров и их статус:** +```bash +docker compose ps +``` + +* **Показать логи сразу всех контейнеров:** +```bash +docker compose logs +``` + +* **Показать лог определенного сервиса-контейнера:** +```bash +docker compose logs redis +``` + +* **Перезапустить определенный контейнер:** +```bash +docker compose restart nginx +``` + +* **Перезапустить все контейнеры:** +```bash +docker compose restart +``` + +* **Остановить все контейнеры:** +```bash +docker compose stop +``` + +* **Остановить все контейнеры, удалить их:** +```bash +docker compose down +``` + +* **Остановить все контейнеры, удалить их и удалить все тома этих контейнеров:** +```bash +docker compose down -v +``` + +* **Зайти в sh-консоль определенного контейнера, например nginx:** +```bash +docker compose exec nginx sh +``` +
diff --git a/confs/mysql/etc/my.cnf b/confs/mysql/etc/my.cnf new file mode 100644 index 0000000..df9069e --- /dev/null +++ b/confs/mysql/etc/my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/confs/mysql/etc/my.cnf.d/docker.cnf b/confs/mysql/etc/my.cnf.d/docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/confs/mysql/etc/my.cnf.d/docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/confs/mysql/etc/my.cnf.d/my.cnf b/confs/mysql/etc/my.cnf.d/my.cnf new file mode 100644 index 0000000..74c3e62 --- /dev/null +++ b/confs/mysql/etc/my.cnf.d/my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.0.37 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/confs/nginx/blank/index.html b/confs/nginx/blank/index.html new file mode 100644 index 0000000..ad23e67 --- /dev/null +++ b/confs/nginx/blank/index.html @@ -0,0 +1,10 @@ + + + + + 200 OK + + +
Ping!
+ + diff --git a/confs/nginx/certs/example.com/ca-chain.pem b/confs/nginx/certs/example.com/ca-chain.pem new file mode 100644 index 0000000..0b89671 --- /dev/null +++ b/confs/nginx/certs/example.com/ca-chain.pem @@ -0,0 +1,74 @@ +-----BEGIN CERTIFICATE----- +MIIGXjCCBEagAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgcQxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcMC0thbGluaW5n +cmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2MDQGA1UECwwt +RXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSgw +JgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENBMB4XDTIxMDky +NDIyMDEzN1oXDTMzMDkyMTIyMDEzN1owgbYxCzAJBgNVBAYTAlJVMRswGQYDVQQI +DBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUgQ29ycG9yYXRp +b24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AMHB34FLQKB1vrdXOViiK/jsoS9W9YWl5eFTelbIacFoh5JmDAP+wR3/mjDvQVUN +24qavPuCnkGsXvh23vXzofulm2ItoL8vVMwwzdrSBpdXkQhFu9yryFN6DrRdDHFi +M0ck0+IBCce0qbm3jHz+HhrTfWxcxKYWW97IOS4lmRjMsUCGNa0aL9RmNkHkOGwz +D8d9VyJA0SMrE+oOZTWKXieOC+NPGT9K6Ei5/EX64pcq5Pgefma2qaSNWJDzk3FZ +32YfTX0OyHvJLD8FthWfXouxBaaxmgGoPaTGS4EFfmA27fxEZJFZb3WBr8RJLUxq +X9NUZt23XqLyr5sJN3UvCgJNsGx5fNXPqZDHxZhYLTL+C2nAZu2D3YOqMlhL/czl +PWtSInuGkeO5DrBw+JoIVyV6yylLao7q0aEpLPIYcpbDhLH0VWLpdVWnizyBTBvB +gkahU37JSFOJHRc/B7/6NkDgsK1MJuOYsPz1k9Vl5fvocCp1Y7F2wpICpWNS8FF3 +emaXt129WLQ6647+YxOJc+L3YlBnbN2M8M/aDUk2ukha69sxvhMCYOqIrUhAey6K +eUJT4ANzJCZyrLNp1eYCbr4jEeK+7cLxRxzSf4M/8bFNSqXJ8L4ODRLvFm2zagJT +bQgpJDKcR3UwqoHUl4Cfknw++p4w03Hx7191cXH+OS1HAgMBAAGjZjBkMB0GA1Ud +DgQWBBSQxJ5QdPZszi46nfFlikou/tauwzAfBgNVHSMEGDAWgBTYsCwyeYbRwATw +UuxxekErGqVHaTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAn+hzVAQgjSvS49O0RuhKt5wggVXaNmx6H+QFfvLm +VMiSr0ILjVfjjTw76Ogk+q5CKpne4PsQ5Aw6YKzM7jINCA5cLQ1OVN53HxJOjXzP +B1aSeEcIRbCBQOomMBzP1yzf6lBkpTK1tpYvGBosLjCQyYwu+Ty52bT+NEbAoqYd +J0LXzEJeW5xN9AN+bWJ1IVemjCgyAa6MmWlCiYveHcO7/DkfLmi8JZj60ynPjkNZ +8CWpdSOzLFwVRSy5YMLluTcdjIgCdgYrBwFxQ4+/QX9V+iRJ7QxRKNbSM5ZZE948 +VvYWB3oZEPrRv4Rji5Geedy8xhXe9dAgPkeYY7Ra9i6MyisiLcSqScG+k0hMHmbF +5NhJiToUJaZcff1wfBUBKDoSmeCNdDzxtWODIa4ouh7T/7Jitk9Ps4OV8MBJC2zE +c0vKplgxKdCWA2luJHkFOrKWQgwN+ypdbbCZ0pcQS2pJ7w53QlVKf4Y4qlO+uJLs +pTMlem0rmV6Y8u0K+lGk0keGKz5stzLhk9LeKxiXqnh4pv0DvGUScfdOa75d9IYh +JZy7/KNgNYFdW/FgqXKzlbA1nv3NBl7dVYXQ3ICnRje1UHK0IlXcy3fY3ajKD+8o ++FtpOVp65U17XFS6yBbejSnfVsrrHi2HMHkLTot9SCn1E8LS//pFKW+992kENvVI +P5o= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGezCCBGOgAwIBAgIUJZ5ElNKY4dnFET+p9yIObZSierkwDQYJKoZIhvcNAQEL +BQAwgcQxCzAJBgNVBAYTAlJVMRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24x +FDASBgNVBAcMC0thbGluaW5ncmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0 +aW9uIEx0ZDE2MDQGA1UECwwtRXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MSgwJgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0 +ZCBSb290IENBMB4XDTIxMDkyNDIyMDEzN1oXDTM3MDkyMDIyMDEzN1owgcQxCzAJ +BgNVBAYTAlJVMRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcM +C0thbGluaW5ncmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2 +MDQGA1UECwwtRXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0 +aG9yaXR5MSgwJgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt5LGz+dNpCBb3gk9Av4L +zzrMseZilNtJrr8afOmBgZw06TVPwutVah5PrXj3EbACE+JdO9c31WrxJiyym2CO +vZCYDtveiIN+o3U84STQ6s5tqQReqopoEHTjYXafSTkjeY5u51IM3kksic5HDYCe +g9xEwlWUXYNb7PtKUlNnZOgEhO3AK6OOPMp/0ApQX6ScDU0EjPQ7y5wFrSqRqCBB +yyYvJd9aG9vmwdckESoKxNo1HXEV0V/6SH4D3scKVKJB148e9zbjvd2U+SJ29/AQ +NsoDE7SeG+wDRc1f2jhXiaopg/mNjE63w8+whQsN98CbO+HuoI7dR5AgMZ2xDrA1 +JgWahT10gpA5OIS0V/6flTYIyMKSBURM0QfHxz887VBwHoPHYb3xc50yH6OemoMS +ZtcbGlCqIi9if/9vgaEZNYRjJZEkhHLFem9sn1n1IfeIutyR2pbUbo2sJvnldCk1 +ePzn24nbGJLQvpv8PZg01wI0HCTfFdC28VbwMPC7vsm2EfP9+qKVhQ6JCzFewo1t +0EpF49HwZqAR1oAXXxLYiP+O9/MsYzJ12RNjpL75R9PzD7bU7Dw9Qjk6r6C7FTlT +MID4gsCHfwUTUiVtMlXwc33WM5ucifhmfX/eCvM2g8fbygf+LcvKPaoUGnF3IULb +G3IELyx1Ye9wAZGJO7T1IIMCAwEAAaNjMGEwHQYDVR0OBBYEFNiwLDJ5htHABPBS +7HF6QSsapUdpMB8GA1UdIwQYMBaAFNiwLDJ5htHABPBS7HF6QSsapUdpMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQA/ +V8LKw2S2RoN063jX3G2Q+U9hbQsE8t6xYvxjiu+TJrJUUcU1PrlV6iNSbWaVPARr +6noY3/6zK9kxXQryvgjVK6ckPTEaaYST7iKGgBtJkYU354cACPtybt0GrXvqTEQc +Aly8/2mJ+/X6/ZadwVeJV6XswHqc8466/KEeKThm62mWHgAX26i98FMzFlQryFYs +CnQq0EIv5Zg7uFRKt0Z/pCosU8+JFX42UKnRVbsMMjZMOVxAhe8QBvMA7bkw0P1o +0GSY++mhKAORAUi0/jPCfj5Y+ot+VWpSgVHVxpo6EuefgNQl7c1KmaESur4ToW0a +va/VpxGFgbRUJJAgLg59uRAs3WvUqCCw2p9M2K6xbMiqAZYKRVoK3J6EB7REFypD +c/vaJfFXJyUmgKgW1eeWODqIOvhhkdi1tfx8YDBXNjk519Engrd0nTY06g7O3B9D +V0dajcylfSTeFxaQLa6jF5Qs6rE655wLS7I8SpmYZ4Eevqwl6nU1GffD7JnthZEl +c7G74iB68ksqQcjhpNwt+eg/LzokmybKnzK5QMnxDisttR9qhhcM+p+kIiy9XC82 +8GMUkdw6eG8VUqnkcRIADffaWuVwcH6fwWBqq4Ju9LVpVbm97jeQ/GszFYGyANba +/vu1wRYPkcWgrFXN/UlbKra5RNFmHesrQ5gcRXsR7Q== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/confs/nginx/certs/example.com/cert.pem b/confs/nginx/certs/example.com/cert.pem new file mode 100644 index 0000000..8872e9e --- /dev/null +++ b/confs/nginx/certs/example.com/cert.pem @@ -0,0 +1,44 @@ +-----BEGIN CERTIFICATE----- +MIIHujCCBaKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgbYxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUg +Q29ycG9yYXRpb24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0 +ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9y +YXRpb24gTHRkIEludGVybWVkaWF0ZSBDQTAeFw0yMTA5MjQyMjEwMjFaFw0zMTA5 +MjIyMjEwMjFaMIHNMQswCQYDVQQGEwJSVTEbMBkGA1UECAwSS2FsaW5pbmdyYWQg +UmVnaW9uMRQwEgYDVQQHDAtLYWxpbmluZ3JhZDEgMB4GA1UECgwXRXhhbXBsZSBD +b3Jwb3JhdGlvbiBMdGQxMDAuBgNVBAsMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IFFBIFdlYiBTZXJ2aWNlczEWMBQGA1UEAwwNKi5leGFtcGxlLmNvbTEfMB0GCSqG +SIb3DQEJARYQaW5mb0BleGFtcGxlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALuhbo3Xt4ot38eGjAJpdLZfALyCqH1iqWNXuVpnaUL8JNzv+pQH +BIf9IJpe7VzLgTQTBE+WtvSgIJmaLdlUOnlLSxO4c1l+nyTBa8ckQXHtuYEAggJ2 +MqdYTs0R6O//ee+abDPYGgwa/SDR6J9ocPe2y/Ya1QIJcAgliKwHFGibNaANzDFU +r3WlukgXJU3bqHgxi/77DQWgCkUWGfnlQ1xFqDrH2Oila7CobAnim9RZmHBVDgb+ +btIXikJks9yHSzh1Ev1EVsSFSF48tFQE7ZydNI6z6KedkpHJU2CzWEJXBzsJck3o +0DxpE/AjQzctBYSVloo1uIBkJSHlkpi0g84h6DHAuYtUODaXQN/3OR1oLYCEgsUk +1DoCM9LxR7C90ocU0cyl0DXWm3R3+zLRm+nvutrZINaUeBYXVVTNsUOO1KIYxb6a +5iVSLgP62BelEqwiqaxPkijCGmFMeOa41DqsvASGdZhbjlbzQOegwLShl/t1BRY0 +/fpYgFhFe+YdnCn6JtFnKDYJlgxg+kekK5EQp1uHDLcIPBJyRQ1qzA6iJWrzL5Jk +3HzRznQE6LwW8JQR81KJskDvmZGHpgM40byOs2iLAe1udlwgGsF3Mu2qI/2dTe5k +C4k8eWsjbq166OoRIc1SDorD8emCobwrSeE0++JcChM0tJIPHYg0x4WzAgMBAAGj +ggG3MIIBszAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhC +AQ0EJhYkT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUgZm9yIFFBMB0GA1Ud +DgQWBBSuM/p3euZL9tN/yakfM64+AFSdWDCB8gYDVR0jBIHqMIHngBSQxJ5QdPZs +zi46nfFlikou/tauw6GByqSBxzCBxDELMAkGA1UEBhMCUlUxGzAZBgNVBAgMEkth +bGluaW5ncmFkIFJlZ2lvbjEUMBIGA1UEBwwLS2FsaW5pbmdyYWQxIDAeBgNVBAoM +F0V4YW1wbGUgQ29ycG9yYXRpb24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBv +cmF0aW9uIEx0ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKDAmBgNVBAMMH0V4YW1w +bGUgQ29ycG9yYXRpb24gTHRkIFJvb3QgQ0GCAhAAMA4GA1UdDwEB/wQEAwIF4DAT +BgNVHSUEDDAKBggrBgEFBQcDATAlBgNVHREEHjAcggtleGFtcGxlLmNvbYINKi5l +eGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEAYUq5j+SX6oL8CIEzUmyUv5Ud +fBQwMvNcPF8bAyFGip7KnjJIOyvBdgfAhiXyiDobphcAOzWgY2eAaoWzSBjW+JnB +dDB4cROeG0MJwYq3ScTCsyfkxe6uVvyjy6mLw380eo2A0phW/UqSxOOTnL1uMo6K +StzuQa0AOLkZmPekWtP/WKWmwG1HnBlrDEOTHXPhxVQWLylfCxJXJpRgh2PQwCwI +mOTX/wfWnutqWyLyWsyy37vQ8IEAUaBY7NbHQgTE93Qrfhyb1/d0FdDT8xF/XgQo +1JU/xfEeDZJMbwLUITv7Yl5zFwSXcDhjgA0d27hxJHPGEp9S/xIpyQ/FVzkimt+W +QU4I34SkITLYpble3I9PBK0QqBWQw7SRVwIWLinrGc1bb16rPlfijLutXI56JVjC +qaUV7HiTS5uL4F4Agdr1Ax+LynE1V+FRTsQSvdEe2BPFVIv9IMxMlMniYJdTeTf+ +Z4iGHLHotutklp6my57cirM08g+gKQQBJFlcs66QZj9SZ2vTMvB7QLQ3iYX0jo/6 +Hj7c2wfy+1CQ3AbbrAPSgDlconz7SCH2VON5lydY6ltPB6GnwMYK/dQq0WqpKjvR +0QG2HUbysUvtDmQAaqleVQoDz8BC5+p301gL2OhbS8eEfubjQTidYgvcu2H0NkkX +oQkUKWwNA2HY4IiO2e4= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/confs/nginx/certs/example.com/chain.pem b/confs/nginx/certs/example.com/chain.pem new file mode 100644 index 0000000..d1b1d8e --- /dev/null +++ b/confs/nginx/certs/example.com/chain.pem @@ -0,0 +1,81 @@ +-----BEGIN CERTIFICATE----- +MIIHujCCBaKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgbYxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUg +Q29ycG9yYXRpb24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0 +ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9y +YXRpb24gTHRkIEludGVybWVkaWF0ZSBDQTAeFw0yMTA5MjQyMjEwMjFaFw0zMTA5 +MjIyMjEwMjFaMIHNMQswCQYDVQQGEwJSVTEbMBkGA1UECAwSS2FsaW5pbmdyYWQg +UmVnaW9uMRQwEgYDVQQHDAtLYWxpbmluZ3JhZDEgMB4GA1UECgwXRXhhbXBsZSBD +b3Jwb3JhdGlvbiBMdGQxMDAuBgNVBAsMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IFFBIFdlYiBTZXJ2aWNlczEWMBQGA1UEAwwNKi5leGFtcGxlLmNvbTEfMB0GCSqG +SIb3DQEJARYQaW5mb0BleGFtcGxlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALuhbo3Xt4ot38eGjAJpdLZfALyCqH1iqWNXuVpnaUL8JNzv+pQH +BIf9IJpe7VzLgTQTBE+WtvSgIJmaLdlUOnlLSxO4c1l+nyTBa8ckQXHtuYEAggJ2 +MqdYTs0R6O//ee+abDPYGgwa/SDR6J9ocPe2y/Ya1QIJcAgliKwHFGibNaANzDFU +r3WlukgXJU3bqHgxi/77DQWgCkUWGfnlQ1xFqDrH2Oila7CobAnim9RZmHBVDgb+ +btIXikJks9yHSzh1Ev1EVsSFSF48tFQE7ZydNI6z6KedkpHJU2CzWEJXBzsJck3o +0DxpE/AjQzctBYSVloo1uIBkJSHlkpi0g84h6DHAuYtUODaXQN/3OR1oLYCEgsUk +1DoCM9LxR7C90ocU0cyl0DXWm3R3+zLRm+nvutrZINaUeBYXVVTNsUOO1KIYxb6a +5iVSLgP62BelEqwiqaxPkijCGmFMeOa41DqsvASGdZhbjlbzQOegwLShl/t1BRY0 +/fpYgFhFe+YdnCn6JtFnKDYJlgxg+kekK5EQp1uHDLcIPBJyRQ1qzA6iJWrzL5Jk +3HzRznQE6LwW8JQR81KJskDvmZGHpgM40byOs2iLAe1udlwgGsF3Mu2qI/2dTe5k +C4k8eWsjbq166OoRIc1SDorD8emCobwrSeE0++JcChM0tJIPHYg0x4WzAgMBAAGj +ggG3MIIBszAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhC +AQ0EJhYkT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUgZm9yIFFBMB0GA1Ud +DgQWBBSuM/p3euZL9tN/yakfM64+AFSdWDCB8gYDVR0jBIHqMIHngBSQxJ5QdPZs +zi46nfFlikou/tauw6GByqSBxzCBxDELMAkGA1UEBhMCUlUxGzAZBgNVBAgMEkth +bGluaW5ncmFkIFJlZ2lvbjEUMBIGA1UEBwwLS2FsaW5pbmdyYWQxIDAeBgNVBAoM +F0V4YW1wbGUgQ29ycG9yYXRpb24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBv +cmF0aW9uIEx0ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKDAmBgNVBAMMH0V4YW1w +bGUgQ29ycG9yYXRpb24gTHRkIFJvb3QgQ0GCAhAAMA4GA1UdDwEB/wQEAwIF4DAT +BgNVHSUEDDAKBggrBgEFBQcDATAlBgNVHREEHjAcggtleGFtcGxlLmNvbYINKi5l +eGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEAYUq5j+SX6oL8CIEzUmyUv5Ud +fBQwMvNcPF8bAyFGip7KnjJIOyvBdgfAhiXyiDobphcAOzWgY2eAaoWzSBjW+JnB +dDB4cROeG0MJwYq3ScTCsyfkxe6uVvyjy6mLw380eo2A0phW/UqSxOOTnL1uMo6K +StzuQa0AOLkZmPekWtP/WKWmwG1HnBlrDEOTHXPhxVQWLylfCxJXJpRgh2PQwCwI +mOTX/wfWnutqWyLyWsyy37vQ8IEAUaBY7NbHQgTE93Qrfhyb1/d0FdDT8xF/XgQo +1JU/xfEeDZJMbwLUITv7Yl5zFwSXcDhjgA0d27hxJHPGEp9S/xIpyQ/FVzkimt+W +QU4I34SkITLYpble3I9PBK0QqBWQw7SRVwIWLinrGc1bb16rPlfijLutXI56JVjC +qaUV7HiTS5uL4F4Agdr1Ax+LynE1V+FRTsQSvdEe2BPFVIv9IMxMlMniYJdTeTf+ +Z4iGHLHotutklp6my57cirM08g+gKQQBJFlcs66QZj9SZ2vTMvB7QLQ3iYX0jo/6 +Hj7c2wfy+1CQ3AbbrAPSgDlconz7SCH2VON5lydY6ltPB6GnwMYK/dQq0WqpKjvR +0QG2HUbysUvtDmQAaqleVQoDz8BC5+p301gL2OhbS8eEfubjQTidYgvcu2H0NkkX +oQkUKWwNA2HY4IiO2e4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGXjCCBEagAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgcQxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcMC0thbGluaW5n +cmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2MDQGA1UECwwt +RXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSgw +JgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENBMB4XDTIxMDky +NDIyMDEzN1oXDTMzMDkyMTIyMDEzN1owgbYxCzAJBgNVBAYTAlJVMRswGQYDVQQI +DBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUgQ29ycG9yYXRp +b24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AMHB34FLQKB1vrdXOViiK/jsoS9W9YWl5eFTelbIacFoh5JmDAP+wR3/mjDvQVUN +24qavPuCnkGsXvh23vXzofulm2ItoL8vVMwwzdrSBpdXkQhFu9yryFN6DrRdDHFi +M0ck0+IBCce0qbm3jHz+HhrTfWxcxKYWW97IOS4lmRjMsUCGNa0aL9RmNkHkOGwz +D8d9VyJA0SMrE+oOZTWKXieOC+NPGT9K6Ei5/EX64pcq5Pgefma2qaSNWJDzk3FZ +32YfTX0OyHvJLD8FthWfXouxBaaxmgGoPaTGS4EFfmA27fxEZJFZb3WBr8RJLUxq +X9NUZt23XqLyr5sJN3UvCgJNsGx5fNXPqZDHxZhYLTL+C2nAZu2D3YOqMlhL/czl +PWtSInuGkeO5DrBw+JoIVyV6yylLao7q0aEpLPIYcpbDhLH0VWLpdVWnizyBTBvB +gkahU37JSFOJHRc/B7/6NkDgsK1MJuOYsPz1k9Vl5fvocCp1Y7F2wpICpWNS8FF3 +emaXt129WLQ6647+YxOJc+L3YlBnbN2M8M/aDUk2ukha69sxvhMCYOqIrUhAey6K +eUJT4ANzJCZyrLNp1eYCbr4jEeK+7cLxRxzSf4M/8bFNSqXJ8L4ODRLvFm2zagJT +bQgpJDKcR3UwqoHUl4Cfknw++p4w03Hx7191cXH+OS1HAgMBAAGjZjBkMB0GA1Ud +DgQWBBSQxJ5QdPZszi46nfFlikou/tauwzAfBgNVHSMEGDAWgBTYsCwyeYbRwATw +UuxxekErGqVHaTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAn+hzVAQgjSvS49O0RuhKt5wggVXaNmx6H+QFfvLm +VMiSr0ILjVfjjTw76Ogk+q5CKpne4PsQ5Aw6YKzM7jINCA5cLQ1OVN53HxJOjXzP +B1aSeEcIRbCBQOomMBzP1yzf6lBkpTK1tpYvGBosLjCQyYwu+Ty52bT+NEbAoqYd +J0LXzEJeW5xN9AN+bWJ1IVemjCgyAa6MmWlCiYveHcO7/DkfLmi8JZj60ynPjkNZ +8CWpdSOzLFwVRSy5YMLluTcdjIgCdgYrBwFxQ4+/QX9V+iRJ7QxRKNbSM5ZZE948 +VvYWB3oZEPrRv4Rji5Geedy8xhXe9dAgPkeYY7Ra9i6MyisiLcSqScG+k0hMHmbF +5NhJiToUJaZcff1wfBUBKDoSmeCNdDzxtWODIa4ouh7T/7Jitk9Ps4OV8MBJC2zE +c0vKplgxKdCWA2luJHkFOrKWQgwN+ypdbbCZ0pcQS2pJ7w53QlVKf4Y4qlO+uJLs +pTMlem0rmV6Y8u0K+lGk0keGKz5stzLhk9LeKxiXqnh4pv0DvGUScfdOa75d9IYh +JZy7/KNgNYFdW/FgqXKzlbA1nv3NBl7dVYXQ3ICnRje1UHK0IlXcy3fY3ajKD+8o ++FtpOVp65U17XFS6yBbejSnfVsrrHi2HMHkLTot9SCn1E8LS//pFKW+992kENvVI +P5o= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/confs/nginx/certs/example.com/dhparam.pem b/confs/nginx/certs/example.com/dhparam.pem new file mode 100644 index 0000000..86d5186 --- /dev/null +++ b/confs/nginx/certs/example.com/dhparam.pem @@ -0,0 +1,13 @@ +-----BEGIN DH PARAMETERS----- +MIICCAKCAgEAovFUNRNIZ5euF8tx/KUe3mRMfTNYGvz9prWG3baAg5XWssM/DLaC +ci9z6A9M36R8sFZogGenp5H8VHCTF0JBe4DkmB389m8z6qY7rk5viq/S3buOxo41 +sSqVUZkDF9dnAoT0eFSgbJXieg30gVsxxtxdNfGb3A/42fjlxhzo/4tK7aShhKv8 +YXV1kCPAWPGsqmnXZeia8VVKmAnao6TLpSLbn2gEo77TsyHKKVb+qvfldwqfqgkc +jGP4IT1E6MxvAjOliDxE/99OcO1yCDvHZGVJ9GtskXFVJI2spjUvL2oRFYJvW+Cv +NrBjd2e4x6h+WINNp/bvLv3oDhZ75sPN+2PCpq6IFS2KX+yJWG9z82Gv2YDg6VpA +AwVRHOFqiltbi6s5xSdGF5sExDcUyNCb52GPC3u7UiewpC7ZRL0TsNYmx5Kdb5cs +ST8x/rCJAIsRN9czccIh9Hc96A40v1ZW0N848pGh6Rbgb/cz3EDJMFIiHOr4ZcOf +qbvA9//yU94F5Ctiv54neO9uKeIecx0LILDRpz5dPmZIy69pdkc9/2JNB2fqdL6j +8CW+3z0Dq2z0o3xOnOBwNA0fSNGHEjA4CqlolGevGkFEMIBXBYqz0xq8vSwKF6AC +Ex/W58agi8B61hH4XKFBokD/RkLlN/Ulf2LTaTQOTalcGQDQR1uHWo8CAQI= +-----END DH PARAMETERS----- diff --git a/confs/nginx/certs/example.com/fullchain.pem b/confs/nginx/certs/example.com/fullchain.pem new file mode 100644 index 0000000..2baace3 --- /dev/null +++ b/confs/nginx/certs/example.com/fullchain.pem @@ -0,0 +1,118 @@ +-----BEGIN CERTIFICATE----- +MIIHujCCBaKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgbYxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUg +Q29ycG9yYXRpb24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0 +ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9y +YXRpb24gTHRkIEludGVybWVkaWF0ZSBDQTAeFw0yMTA5MjQyMjEwMjFaFw0zMTA5 +MjIyMjEwMjFaMIHNMQswCQYDVQQGEwJSVTEbMBkGA1UECAwSS2FsaW5pbmdyYWQg +UmVnaW9uMRQwEgYDVQQHDAtLYWxpbmluZ3JhZDEgMB4GA1UECgwXRXhhbXBsZSBD +b3Jwb3JhdGlvbiBMdGQxMDAuBgNVBAsMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IFFBIFdlYiBTZXJ2aWNlczEWMBQGA1UEAwwNKi5leGFtcGxlLmNvbTEfMB0GCSqG +SIb3DQEJARYQaW5mb0BleGFtcGxlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALuhbo3Xt4ot38eGjAJpdLZfALyCqH1iqWNXuVpnaUL8JNzv+pQH +BIf9IJpe7VzLgTQTBE+WtvSgIJmaLdlUOnlLSxO4c1l+nyTBa8ckQXHtuYEAggJ2 +MqdYTs0R6O//ee+abDPYGgwa/SDR6J9ocPe2y/Ya1QIJcAgliKwHFGibNaANzDFU +r3WlukgXJU3bqHgxi/77DQWgCkUWGfnlQ1xFqDrH2Oila7CobAnim9RZmHBVDgb+ +btIXikJks9yHSzh1Ev1EVsSFSF48tFQE7ZydNI6z6KedkpHJU2CzWEJXBzsJck3o +0DxpE/AjQzctBYSVloo1uIBkJSHlkpi0g84h6DHAuYtUODaXQN/3OR1oLYCEgsUk +1DoCM9LxR7C90ocU0cyl0DXWm3R3+zLRm+nvutrZINaUeBYXVVTNsUOO1KIYxb6a +5iVSLgP62BelEqwiqaxPkijCGmFMeOa41DqsvASGdZhbjlbzQOegwLShl/t1BRY0 +/fpYgFhFe+YdnCn6JtFnKDYJlgxg+kekK5EQp1uHDLcIPBJyRQ1qzA6iJWrzL5Jk +3HzRznQE6LwW8JQR81KJskDvmZGHpgM40byOs2iLAe1udlwgGsF3Mu2qI/2dTe5k +C4k8eWsjbq166OoRIc1SDorD8emCobwrSeE0++JcChM0tJIPHYg0x4WzAgMBAAGj +ggG3MIIBszAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhC +AQ0EJhYkT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUgZm9yIFFBMB0GA1Ud +DgQWBBSuM/p3euZL9tN/yakfM64+AFSdWDCB8gYDVR0jBIHqMIHngBSQxJ5QdPZs +zi46nfFlikou/tauw6GByqSBxzCBxDELMAkGA1UEBhMCUlUxGzAZBgNVBAgMEkth +bGluaW5ncmFkIFJlZ2lvbjEUMBIGA1UEBwwLS2FsaW5pbmdyYWQxIDAeBgNVBAoM +F0V4YW1wbGUgQ29ycG9yYXRpb24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBv +cmF0aW9uIEx0ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKDAmBgNVBAMMH0V4YW1w +bGUgQ29ycG9yYXRpb24gTHRkIFJvb3QgQ0GCAhAAMA4GA1UdDwEB/wQEAwIF4DAT +BgNVHSUEDDAKBggrBgEFBQcDATAlBgNVHREEHjAcggtleGFtcGxlLmNvbYINKi5l +eGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEAYUq5j+SX6oL8CIEzUmyUv5Ud +fBQwMvNcPF8bAyFGip7KnjJIOyvBdgfAhiXyiDobphcAOzWgY2eAaoWzSBjW+JnB +dDB4cROeG0MJwYq3ScTCsyfkxe6uVvyjy6mLw380eo2A0phW/UqSxOOTnL1uMo6K +StzuQa0AOLkZmPekWtP/WKWmwG1HnBlrDEOTHXPhxVQWLylfCxJXJpRgh2PQwCwI +mOTX/wfWnutqWyLyWsyy37vQ8IEAUaBY7NbHQgTE93Qrfhyb1/d0FdDT8xF/XgQo +1JU/xfEeDZJMbwLUITv7Yl5zFwSXcDhjgA0d27hxJHPGEp9S/xIpyQ/FVzkimt+W +QU4I34SkITLYpble3I9PBK0QqBWQw7SRVwIWLinrGc1bb16rPlfijLutXI56JVjC +qaUV7HiTS5uL4F4Agdr1Ax+LynE1V+FRTsQSvdEe2BPFVIv9IMxMlMniYJdTeTf+ +Z4iGHLHotutklp6my57cirM08g+gKQQBJFlcs66QZj9SZ2vTMvB7QLQ3iYX0jo/6 +Hj7c2wfy+1CQ3AbbrAPSgDlconz7SCH2VON5lydY6ltPB6GnwMYK/dQq0WqpKjvR +0QG2HUbysUvtDmQAaqleVQoDz8BC5+p301gL2OhbS8eEfubjQTidYgvcu2H0NkkX +oQkUKWwNA2HY4IiO2e4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGXjCCBEagAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgcQxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcMC0thbGluaW5n +cmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2MDQGA1UECwwt +RXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSgw +JgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENBMB4XDTIxMDky +NDIyMDEzN1oXDTMzMDkyMTIyMDEzN1owgbYxCzAJBgNVBAYTAlJVMRswGQYDVQQI +DBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUgQ29ycG9yYXRp +b24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AMHB34FLQKB1vrdXOViiK/jsoS9W9YWl5eFTelbIacFoh5JmDAP+wR3/mjDvQVUN +24qavPuCnkGsXvh23vXzofulm2ItoL8vVMwwzdrSBpdXkQhFu9yryFN6DrRdDHFi +M0ck0+IBCce0qbm3jHz+HhrTfWxcxKYWW97IOS4lmRjMsUCGNa0aL9RmNkHkOGwz +D8d9VyJA0SMrE+oOZTWKXieOC+NPGT9K6Ei5/EX64pcq5Pgefma2qaSNWJDzk3FZ +32YfTX0OyHvJLD8FthWfXouxBaaxmgGoPaTGS4EFfmA27fxEZJFZb3WBr8RJLUxq +X9NUZt23XqLyr5sJN3UvCgJNsGx5fNXPqZDHxZhYLTL+C2nAZu2D3YOqMlhL/czl +PWtSInuGkeO5DrBw+JoIVyV6yylLao7q0aEpLPIYcpbDhLH0VWLpdVWnizyBTBvB +gkahU37JSFOJHRc/B7/6NkDgsK1MJuOYsPz1k9Vl5fvocCp1Y7F2wpICpWNS8FF3 +emaXt129WLQ6647+YxOJc+L3YlBnbN2M8M/aDUk2ukha69sxvhMCYOqIrUhAey6K +eUJT4ANzJCZyrLNp1eYCbr4jEeK+7cLxRxzSf4M/8bFNSqXJ8L4ODRLvFm2zagJT +bQgpJDKcR3UwqoHUl4Cfknw++p4w03Hx7191cXH+OS1HAgMBAAGjZjBkMB0GA1Ud +DgQWBBSQxJ5QdPZszi46nfFlikou/tauwzAfBgNVHSMEGDAWgBTYsCwyeYbRwATw +UuxxekErGqVHaTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAn+hzVAQgjSvS49O0RuhKt5wggVXaNmx6H+QFfvLm +VMiSr0ILjVfjjTw76Ogk+q5CKpne4PsQ5Aw6YKzM7jINCA5cLQ1OVN53HxJOjXzP +B1aSeEcIRbCBQOomMBzP1yzf6lBkpTK1tpYvGBosLjCQyYwu+Ty52bT+NEbAoqYd +J0LXzEJeW5xN9AN+bWJ1IVemjCgyAa6MmWlCiYveHcO7/DkfLmi8JZj60ynPjkNZ +8CWpdSOzLFwVRSy5YMLluTcdjIgCdgYrBwFxQ4+/QX9V+iRJ7QxRKNbSM5ZZE948 +VvYWB3oZEPrRv4Rji5Geedy8xhXe9dAgPkeYY7Ra9i6MyisiLcSqScG+k0hMHmbF +5NhJiToUJaZcff1wfBUBKDoSmeCNdDzxtWODIa4ouh7T/7Jitk9Ps4OV8MBJC2zE +c0vKplgxKdCWA2luJHkFOrKWQgwN+ypdbbCZ0pcQS2pJ7w53QlVKf4Y4qlO+uJLs +pTMlem0rmV6Y8u0K+lGk0keGKz5stzLhk9LeKxiXqnh4pv0DvGUScfdOa75d9IYh +JZy7/KNgNYFdW/FgqXKzlbA1nv3NBl7dVYXQ3ICnRje1UHK0IlXcy3fY3ajKD+8o ++FtpOVp65U17XFS6yBbejSnfVsrrHi2HMHkLTot9SCn1E8LS//pFKW+992kENvVI +P5o= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGezCCBGOgAwIBAgIUJZ5ElNKY4dnFET+p9yIObZSierkwDQYJKoZIhvcNAQEL +BQAwgcQxCzAJBgNVBAYTAlJVMRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24x +FDASBgNVBAcMC0thbGluaW5ncmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0 +aW9uIEx0ZDE2MDQGA1UECwwtRXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MSgwJgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0 +ZCBSb290IENBMB4XDTIxMDkyNDIyMDEzN1oXDTM3MDkyMDIyMDEzN1owgcQxCzAJ +BgNVBAYTAlJVMRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcM +C0thbGluaW5ncmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2 +MDQGA1UECwwtRXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0 +aG9yaXR5MSgwJgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt5LGz+dNpCBb3gk9Av4L +zzrMseZilNtJrr8afOmBgZw06TVPwutVah5PrXj3EbACE+JdO9c31WrxJiyym2CO +vZCYDtveiIN+o3U84STQ6s5tqQReqopoEHTjYXafSTkjeY5u51IM3kksic5HDYCe +g9xEwlWUXYNb7PtKUlNnZOgEhO3AK6OOPMp/0ApQX6ScDU0EjPQ7y5wFrSqRqCBB +yyYvJd9aG9vmwdckESoKxNo1HXEV0V/6SH4D3scKVKJB148e9zbjvd2U+SJ29/AQ +NsoDE7SeG+wDRc1f2jhXiaopg/mNjE63w8+whQsN98CbO+HuoI7dR5AgMZ2xDrA1 +JgWahT10gpA5OIS0V/6flTYIyMKSBURM0QfHxz887VBwHoPHYb3xc50yH6OemoMS +ZtcbGlCqIi9if/9vgaEZNYRjJZEkhHLFem9sn1n1IfeIutyR2pbUbo2sJvnldCk1 +ePzn24nbGJLQvpv8PZg01wI0HCTfFdC28VbwMPC7vsm2EfP9+qKVhQ6JCzFewo1t +0EpF49HwZqAR1oAXXxLYiP+O9/MsYzJ12RNjpL75R9PzD7bU7Dw9Qjk6r6C7FTlT +MID4gsCHfwUTUiVtMlXwc33WM5ucifhmfX/eCvM2g8fbygf+LcvKPaoUGnF3IULb +G3IELyx1Ye9wAZGJO7T1IIMCAwEAAaNjMGEwHQYDVR0OBBYEFNiwLDJ5htHABPBS +7HF6QSsapUdpMB8GA1UdIwQYMBaAFNiwLDJ5htHABPBS7HF6QSsapUdpMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQA/ +V8LKw2S2RoN063jX3G2Q+U9hbQsE8t6xYvxjiu+TJrJUUcU1PrlV6iNSbWaVPARr +6noY3/6zK9kxXQryvgjVK6ckPTEaaYST7iKGgBtJkYU354cACPtybt0GrXvqTEQc +Aly8/2mJ+/X6/ZadwVeJV6XswHqc8466/KEeKThm62mWHgAX26i98FMzFlQryFYs +CnQq0EIv5Zg7uFRKt0Z/pCosU8+JFX42UKnRVbsMMjZMOVxAhe8QBvMA7bkw0P1o +0GSY++mhKAORAUi0/jPCfj5Y+ot+VWpSgVHVxpo6EuefgNQl7c1KmaESur4ToW0a +va/VpxGFgbRUJJAgLg59uRAs3WvUqCCw2p9M2K6xbMiqAZYKRVoK3J6EB7REFypD +c/vaJfFXJyUmgKgW1eeWODqIOvhhkdi1tfx8YDBXNjk519Engrd0nTY06g7O3B9D +V0dajcylfSTeFxaQLa6jF5Qs6rE655wLS7I8SpmYZ4Eevqwl6nU1GffD7JnthZEl +c7G74iB68ksqQcjhpNwt+eg/LzokmybKnzK5QMnxDisttR9qhhcM+p+kIiy9XC82 +8GMUkdw6eG8VUqnkcRIADffaWuVwcH6fwWBqq4Ju9LVpVbm97jeQ/GszFYGyANba +/vu1wRYPkcWgrFXN/UlbKra5RNFmHesrQ5gcRXsR7Q== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/confs/nginx/certs/example.com/intermediateCA.pem b/confs/nginx/certs/example.com/intermediateCA.pem new file mode 100644 index 0000000..cb4960b --- /dev/null +++ b/confs/nginx/certs/example.com/intermediateCA.pem @@ -0,0 +1,37 @@ +-----BEGIN CERTIFICATE----- +MIIGXjCCBEagAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgcQxCzAJBgNVBAYTAlJV +MRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcMC0thbGluaW5n +cmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2MDQGA1UECwwt +RXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSgw +JgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENBMB4XDTIxMDky +NDIyMDEzN1oXDTMzMDkyMTIyMDEzN1owgbYxCzAJBgNVBAYTAlJVMRswGQYDVQQI +DBJLYWxpbmluZ3JhZCBSZWdpb24xIDAeBgNVBAoMF0V4YW1wbGUgQ29ycG9yYXRp +b24gTHRkMTYwNAYDVQQLDC1FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkxMDAuBgNVBAMMJ0V4YW1wbGUgQ29ycG9yYXRpb24gTHRk +IEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AMHB34FLQKB1vrdXOViiK/jsoS9W9YWl5eFTelbIacFoh5JmDAP+wR3/mjDvQVUN +24qavPuCnkGsXvh23vXzofulm2ItoL8vVMwwzdrSBpdXkQhFu9yryFN6DrRdDHFi +M0ck0+IBCce0qbm3jHz+HhrTfWxcxKYWW97IOS4lmRjMsUCGNa0aL9RmNkHkOGwz +D8d9VyJA0SMrE+oOZTWKXieOC+NPGT9K6Ei5/EX64pcq5Pgefma2qaSNWJDzk3FZ +32YfTX0OyHvJLD8FthWfXouxBaaxmgGoPaTGS4EFfmA27fxEZJFZb3WBr8RJLUxq +X9NUZt23XqLyr5sJN3UvCgJNsGx5fNXPqZDHxZhYLTL+C2nAZu2D3YOqMlhL/czl +PWtSInuGkeO5DrBw+JoIVyV6yylLao7q0aEpLPIYcpbDhLH0VWLpdVWnizyBTBvB +gkahU37JSFOJHRc/B7/6NkDgsK1MJuOYsPz1k9Vl5fvocCp1Y7F2wpICpWNS8FF3 +emaXt129WLQ6647+YxOJc+L3YlBnbN2M8M/aDUk2ukha69sxvhMCYOqIrUhAey6K +eUJT4ANzJCZyrLNp1eYCbr4jEeK+7cLxRxzSf4M/8bFNSqXJ8L4ODRLvFm2zagJT +bQgpJDKcR3UwqoHUl4Cfknw++p4w03Hx7191cXH+OS1HAgMBAAGjZjBkMB0GA1Ud +DgQWBBSQxJ5QdPZszi46nfFlikou/tauwzAfBgNVHSMEGDAWgBTYsCwyeYbRwATw +UuxxekErGqVHaTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAn+hzVAQgjSvS49O0RuhKt5wggVXaNmx6H+QFfvLm +VMiSr0ILjVfjjTw76Ogk+q5CKpne4PsQ5Aw6YKzM7jINCA5cLQ1OVN53HxJOjXzP +B1aSeEcIRbCBQOomMBzP1yzf6lBkpTK1tpYvGBosLjCQyYwu+Ty52bT+NEbAoqYd +J0LXzEJeW5xN9AN+bWJ1IVemjCgyAa6MmWlCiYveHcO7/DkfLmi8JZj60ynPjkNZ +8CWpdSOzLFwVRSy5YMLluTcdjIgCdgYrBwFxQ4+/QX9V+iRJ7QxRKNbSM5ZZE948 +VvYWB3oZEPrRv4Rji5Geedy8xhXe9dAgPkeYY7Ra9i6MyisiLcSqScG+k0hMHmbF +5NhJiToUJaZcff1wfBUBKDoSmeCNdDzxtWODIa4ouh7T/7Jitk9Ps4OV8MBJC2zE +c0vKplgxKdCWA2luJHkFOrKWQgwN+ypdbbCZ0pcQS2pJ7w53QlVKf4Y4qlO+uJLs +pTMlem0rmV6Y8u0K+lGk0keGKz5stzLhk9LeKxiXqnh4pv0DvGUScfdOa75d9IYh +JZy7/KNgNYFdW/FgqXKzlbA1nv3NBl7dVYXQ3ICnRje1UHK0IlXcy3fY3ajKD+8o ++FtpOVp65U17XFS6yBbejSnfVsrrHi2HMHkLTot9SCn1E8LS//pFKW+992kENvVI +P5o= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/confs/nginx/certs/example.com/privkey.pem b/confs/nginx/certs/example.com/privkey.pem new file mode 100644 index 0000000..dc3ed76 --- /dev/null +++ b/confs/nginx/certs/example.com/privkey.pem @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/confs/nginx/certs/example.com/rootCA.pem b/confs/nginx/certs/example.com/rootCA.pem new file mode 100644 index 0000000..25a2924 --- /dev/null +++ b/confs/nginx/certs/example.com/rootCA.pem @@ -0,0 +1,37 @@ +-----BEGIN CERTIFICATE----- +MIIGezCCBGOgAwIBAgIUJZ5ElNKY4dnFET+p9yIObZSierkwDQYJKoZIhvcNAQEL +BQAwgcQxCzAJBgNVBAYTAlJVMRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24x +FDASBgNVBAcMC0thbGluaW5ncmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0 +aW9uIEx0ZDE2MDQGA1UECwwtRXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MSgwJgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0 +ZCBSb290IENBMB4XDTIxMDkyNDIyMDEzN1oXDTM3MDkyMDIyMDEzN1owgcQxCzAJ +BgNVBAYTAlJVMRswGQYDVQQIDBJLYWxpbmluZ3JhZCBSZWdpb24xFDASBgNVBAcM +C0thbGluaW5ncmFkMSAwHgYDVQQKDBdFeGFtcGxlIENvcnBvcmF0aW9uIEx0ZDE2 +MDQGA1UECwwtRXhhbXBsZSBDb3Jwb3JhdGlvbiBMdGQgQ2VydGlmaWNhdGUgQXV0 +aG9yaXR5MSgwJgYDVQQDDB9FeGFtcGxlIENvcnBvcmF0aW9uIEx0ZCBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt5LGz+dNpCBb3gk9Av4L +zzrMseZilNtJrr8afOmBgZw06TVPwutVah5PrXj3EbACE+JdO9c31WrxJiyym2CO +vZCYDtveiIN+o3U84STQ6s5tqQReqopoEHTjYXafSTkjeY5u51IM3kksic5HDYCe +g9xEwlWUXYNb7PtKUlNnZOgEhO3AK6OOPMp/0ApQX6ScDU0EjPQ7y5wFrSqRqCBB +yyYvJd9aG9vmwdckESoKxNo1HXEV0V/6SH4D3scKVKJB148e9zbjvd2U+SJ29/AQ +NsoDE7SeG+wDRc1f2jhXiaopg/mNjE63w8+whQsN98CbO+HuoI7dR5AgMZ2xDrA1 +JgWahT10gpA5OIS0V/6flTYIyMKSBURM0QfHxz887VBwHoPHYb3xc50yH6OemoMS +ZtcbGlCqIi9if/9vgaEZNYRjJZEkhHLFem9sn1n1IfeIutyR2pbUbo2sJvnldCk1 +ePzn24nbGJLQvpv8PZg01wI0HCTfFdC28VbwMPC7vsm2EfP9+qKVhQ6JCzFewo1t +0EpF49HwZqAR1oAXXxLYiP+O9/MsYzJ12RNjpL75R9PzD7bU7Dw9Qjk6r6C7FTlT +MID4gsCHfwUTUiVtMlXwc33WM5ucifhmfX/eCvM2g8fbygf+LcvKPaoUGnF3IULb +G3IELyx1Ye9wAZGJO7T1IIMCAwEAAaNjMGEwHQYDVR0OBBYEFNiwLDJ5htHABPBS +7HF6QSsapUdpMB8GA1UdIwQYMBaAFNiwLDJ5htHABPBS7HF6QSsapUdpMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQA/ +V8LKw2S2RoN063jX3G2Q+U9hbQsE8t6xYvxjiu+TJrJUUcU1PrlV6iNSbWaVPARr +6noY3/6zK9kxXQryvgjVK6ckPTEaaYST7iKGgBtJkYU354cACPtybt0GrXvqTEQc +Aly8/2mJ+/X6/ZadwVeJV6XswHqc8466/KEeKThm62mWHgAX26i98FMzFlQryFYs +CnQq0EIv5Zg7uFRKt0Z/pCosU8+JFX42UKnRVbsMMjZMOVxAhe8QBvMA7bkw0P1o +0GSY++mhKAORAUi0/jPCfj5Y+ot+VWpSgVHVxpo6EuefgNQl7c1KmaESur4ToW0a +va/VpxGFgbRUJJAgLg59uRAs3WvUqCCw2p9M2K6xbMiqAZYKRVoK3J6EB7REFypD +c/vaJfFXJyUmgKgW1eeWODqIOvhhkdi1tfx8YDBXNjk519Engrd0nTY06g7O3B9D +V0dajcylfSTeFxaQLa6jF5Qs6rE655wLS7I8SpmYZ4Eevqwl6nU1GffD7JnthZEl +c7G74iB68ksqQcjhpNwt+eg/LzokmybKnzK5QMnxDisttR9qhhcM+p+kIiy9XC82 +8GMUkdw6eG8VUqnkcRIADffaWuVwcH6fwWBqq4Ju9LVpVbm97jeQ/GszFYGyANba +/vu1wRYPkcWgrFXN/UlbKra5RNFmHesrQ5gcRXsR7Q== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/confs/nginx/conf.d/default.conf b/confs/nginx/conf.d/default.conf new file mode 100644 index 0000000..c83ec48 --- /dev/null +++ b/confs/nginx/conf.d/default.conf @@ -0,0 +1,231 @@ +# +# HTTP +# +server { + listen 80; + listen [::]:80; + server_name b24pal.local; + + real_ip_header X-Real-IP; + ###set_real_ip_from %REAL_IP_FROM%; + + #charset utf-8; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + index index.php; + root /opt/www; + + error_page 404 @bitrix; + error_page 405 =200 @php; + + # redirect server error pages to the static page /500.html + error_page 500 502 503 504 /500.html; + location = /500.html { + root /opt/www; + } + + # block + include /etc/nginx/inc/block.conf; + + # static files + include /etc/nginx/inc/static.conf; + + # bx temp + include /etc/nginx/inc/bx_temp.conf; + + # composite + #include /etc/nginx/inc/composite.conf; + + # push and pull + include /etc/nginx/inc/push.conf; + + # clouds storage + include /etc/nginx/inc/clouds.conf; + + # proxying + include /etc/nginx/inc/proxy.conf; + + # php files processing + location ~ \.php$ { + include fastcgi_params; + fastcgi_split_path_info ^(.+\.php)(.*)$; + fastcgi_pass php:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + # for CalDAV/CardDAV/GroupDAV server + include /etc/nginx/inc/dav.conf; + + # directories page processing + location / { + index index.php; + try_files $uri $uri/ @bitrix; + } + + # php processing + location @php { + include fastcgi_params; + fastcgi_split_path_info ^(.+\.php)(.*)$; + fastcgi_pass php:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + # bitrix rewrite + location @bitrix { + include fastcgi_params; + fastcgi_pass php:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php; + #fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php; + } +} +# +# HTTPS +# +server { + listen 443 ssl; + listen [::]:443 ssl; + server_name _; + + include /etc/nginx/ssl/ssl.conf; + + real_ip_header X-Real-IP; + ###set_real_ip_from %REAL_IP_FROM%; + + #charset utf-8; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + index index.php; + root /opt/www; + + error_page 404 @bitrix; + error_page 405 =200 @php; + + # redirect server error pages to the static page /500.html + error_page 500 502 503 504 /500.html; + location = /500.html { + root /opt/www; + } + + # block + include /etc/nginx/inc/block.conf; + + # static files + include /etc/nginx/inc/static.conf; + + # bx temp + include /etc/nginx/inc/bx_temp.conf; + + # composite + #include /etc/nginx/inc/composite.conf; + + # push and pull secure + include /etc/nginx/inc/push_secure.conf; + + # clouds storage + include /etc/nginx/inc/clouds.conf; + + # proxying + include /etc/nginx/inc/proxy.conf; + + # php files processing + location ~ \.php$ { + include fastcgi_params; + fastcgi_split_path_info ^(.+\.php)(.*)$; + fastcgi_pass php:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + # for CalDAV/CardDAV/GroupDAV server + include /etc/nginx/inc/dav.conf; + + # directories page processing + location / { + index index.php; + try_files $uri $uri/ @bitrix; + } + + # php processing + location @php { + include fastcgi_params; + fastcgi_split_path_info ^(.+\.php)(.*)$; + fastcgi_pass php:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + # bitrix rewrite + location @bitrix { + include fastcgi_params; + fastcgi_pass php:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php; + #fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php; + } +} +# +# HTTP MOBILE +# +server { + listen 8893; + listen [::]:8893; + server_name _; + + real_ip_header X-Real-IP; + ###set_real_ip_from %REAL_IP_FROM%; + + #charset utf-8; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # errors pages + include /etc/nginx/inc/errors.conf; + + # block + include /etc/nginx/inc/block.conf; + + # push and pull + include /etc/nginx/inc/push.conf; + + location / { + index index.html; + root /etc/nginx/blank; + } +} +# +# HTTPS MOBILE +# +server { + listen 8894 ssl; + listen [::]:8894 ssl; + server_name _; + + include /etc/nginx/ssl/ssl.conf; + + real_ip_header X-Real-IP; + ###set_real_ip_from %REAL_IP_FROM%; + + #charset utf-8; + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # errors pages + include /etc/nginx/inc/errors.conf; + + # block + include /etc/nginx/inc/block.conf; + + # push and pull secure + include /etc/nginx/inc/push_secure.conf; + + location / { + index index.html; + root /etc/nginx/blank; + } +} +# diff --git a/confs/nginx/errors/403.html b/confs/nginx/errors/403.html new file mode 100644 index 0000000..16b8997 --- /dev/null +++ b/confs/nginx/errors/403.html @@ -0,0 +1,24 @@ + + + + + + 403 Forbidden + + +
+
403
+
+
403 Forbidden
+
+
Bitrix Env
+
+
+ + diff --git a/confs/nginx/errors/404.html b/confs/nginx/errors/404.html new file mode 100644 index 0000000..7521394 --- /dev/null +++ b/confs/nginx/errors/404.html @@ -0,0 +1,24 @@ + + + + + + 404 Not Found + + +
+
404
+
+
404 Not Found
+
+
Bitrix Env
+
+
+ + diff --git a/confs/nginx/errors/500.html b/confs/nginx/errors/500.html new file mode 100644 index 0000000..52ce98e --- /dev/null +++ b/confs/nginx/errors/500.html @@ -0,0 +1,24 @@ + + + + + + 500 System Error + + +
+
500
+
+
500 System Error
+
+
Bitrix Env
+
+
+ + diff --git a/confs/nginx/errors/502.html b/confs/nginx/errors/502.html new file mode 100644 index 0000000..577cd1a --- /dev/null +++ b/confs/nginx/errors/502.html @@ -0,0 +1,24 @@ + + + + + + 502 Bad Gateway + + +
+
502
+
+
502 Bad Gateway
+
+
Bitrix Env
+
+
+ + diff --git a/confs/nginx/errors/503.html b/confs/nginx/errors/503.html new file mode 100644 index 0000000..485010f --- /dev/null +++ b/confs/nginx/errors/503.html @@ -0,0 +1,24 @@ + + + + + + 503 Service Unavailable + + +
+
503
+
+
503 Service Unavailable
+
+
Bitrix Env
+
+
+ + diff --git a/confs/nginx/errors/504.html b/confs/nginx/errors/504.html new file mode 100644 index 0000000..93961b7 --- /dev/null +++ b/confs/nginx/errors/504.html @@ -0,0 +1,24 @@ + + + + + + 504 Gateway Timeout + + +
+
504
+
+
504 Gateway Timeout
+
+
Bitrix Env
+
+
+ + diff --git a/confs/nginx/fastcgi.conf b/confs/nginx/fastcgi.conf new file mode 100644 index 0000000..acd0b38 --- /dev/null +++ b/confs/nginx/fastcgi.conf @@ -0,0 +1,25 @@ +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; diff --git a/confs/nginx/fastcgi_params b/confs/nginx/fastcgi_params new file mode 100644 index 0000000..28decb9 --- /dev/null +++ b/confs/nginx/fastcgi_params @@ -0,0 +1,25 @@ + +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param REQUEST_SCHEME $scheme; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; diff --git a/confs/nginx/inc/block.conf b/confs/nginx/inc/block.conf new file mode 100644 index 0000000..bc7aa8b --- /dev/null +++ b/confs/nginx/inc/block.conf @@ -0,0 +1,79 @@ +# +# .ht files: .htpasswd, .htaccess +# +location ~* /\.ht { + deny all; +} +# +# repositories: .svn, .hg, .git +# +location ~* /\.(svn|hg|git) { + deny all; +} +# +# ignore files: .hgignore, .gitignore +# +location ~* /\.(hgignore|gitignore) { + deny all; +} +# +# tmp files without filename: .orig, .bak, .save, .old, .swp +# +location ~* /(\.(orig|bak|save|old|swp)) { + deny all; +} +# +# tmp files with filename: index.orig, index.bak, index.save, index.old, index.swp, index~ +# +location ~* /*(\.(orig|bak|save|old|swp)|~)$ { + deny all; +} +# +# macos and windows special files: .DS_Store, Thumbs.db +# +location ~* /(\.DS_Store|Thumbs.db) { + deny all; +} +# +#location ~* /vendor/ { +# deny all; +#} +# +location ~* /composer { + deny all; +} +# +# bitrix internal locations +# +location ~* ^/bitrix/(modules|local_cache|stack_cache|managed_cache|php_interface) { + deny all; +} +# +location ~* ^/bitrix/\.settings\.php { + deny all; +} +# +location ~* ^/bitrix/\.settings_extra\.php { + deny all; +} +# +# upload 1c files +# +location ~* ^/upload/1c_[^/]+/ { + deny all; +} +# +# use the file system to access files outside the site (cache) +# +location ~* /\.\./ { + deny all; +} +# +location ~* ^/bitrix/html_pages/\.config\.php { + deny all; +} +# +location ~* ^/bitrix/html_pages/\.enabled { + deny all; +} +# diff --git a/confs/nginx/inc/bx_temp.conf b/confs/nginx/inc/bx_temp.conf new file mode 100644 index 0000000..773eac0 --- /dev/null +++ b/confs/nginx/inc/bx_temp.conf @@ -0,0 +1,11 @@ +# +location ~* ^/bx_tmp_download/ { + internal; + rewrite /bx_tmp_download/(.+) /.bx_temp/$1 last; +} +# +location ~* ^/.bx_temp/ { + internal; + root /opt; +} +# diff --git a/confs/nginx/inc/clouds.conf b/confs/nginx/inc/clouds.conf new file mode 100644 index 0000000..bdb69ad --- /dev/null +++ b/confs/nginx/inc/clouds.conf @@ -0,0 +1,481 @@ +# +# Use nginx to return static content from cloud storage +# +location ^~ /upload/bx_cloud_upload/ { + # Amazon Simple Storage Service + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.(s3|af-south-1|ap-east-1|ap-south-1|ap-south-2|ap-southeast-1|ap-southeast-2|ap-southeast-3|ap-southeast-4|ap-northeast-1|ap-northeast-2|ap-northeast-3|ca-central-1|ca-west-1|cn-north-1|cn-northwest-1|eu-central-1|eu-central-2|eu-west-1|eu-west-2|eu-west-3|eu-south-1|eu-south-2|eu-north-1|il-central-1|me-south-1|me-central-1|sa-east-1|us-east-1|us-east-2|us-west-1|us-west-2|us-gov-east-1|us-gov-west-1)\.amazonaws\.com/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.$3.amazonaws.com/$4; + } + # Google Storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.commondatastorage\.googleapis\.com/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.commondatastorage.googleapis.com/$3; + } + # Rackspace Cloud Files + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.([^/:\s]+)\.([^/:\s]+)\.rackcdn\.com/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.$3.$4.rackcdn.com/$5; + } + # Clodo.ru (old) + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.clodo\.ru\:(80|443)/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.clodo.ru:$3/$4; + } + # Clodo.ru + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.clodo\.ru/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.clodo.ru/$3; + } + # Selectel + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.selcdn\.ru/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.selcdn.ru/$3; + } + # Selectel as S3 compatible storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.selstorage\.ru/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.selstorage.ru/$3; + } + # HotBox + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.hb\.bizmrg\.com/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.hb.bizmrg.com/$3; + } + # HotBox + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.hb\.bizmrg\.com/([^\s].+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://hb.bizmrg.com/$2; + } + # Yandex Object Storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.storage\.yandexcloud\.net/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.storage.yandexcloud.net/$3; + } + # Yandex Object Storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.storage\.yandexcloud\.net/([^\s].+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://storage.yandexcloud.net/$2; + } + # S3 compatible storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.io\.activecloud\.com/([^\s]+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://$2.io.activecloud.com/$3; + } + # S3 compatible storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.io\.activecloud\.com/([^\s].+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://io.activecloud.com/$2; + } + # Timeweb.cloud S3 compatible storage + location ~ ^/upload/bx_cloud_upload/(http[s]?)\.s3\.timeweb\.cloud/([^\s].+)$ { + internal; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + #proxy_max_temp_file_size 0; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $1://s3.timeweb.cloud/$2; + } + # block everything else + location ~* .*$ { + deny all; + } +} +# +# cloud resize cache +# +location ^~ /upload/resize_cache/c/upload/bx_cloud_upload/ { + # Amazon + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.(s3|af-south-1|ap-east-1|ap-south-1|ap-south-2|ap-southeast-1|ap-southeast-2|ap-southeast-3|ap-southeast-4|ap-northeast-1|ap-northeast-2|ap-northeast-3|ca-central-1|ca-west-1|cn-north-1|cn-northwest-1|eu-central-1|eu-central-2|eu-west-1|eu-west-2|eu-west-3|eu-south-1|eu-south-2|eu-north-1|il-central-1|me-south-1|me-central-1|sa-east-1|us-east-1|us-east-2|us-west-1|us-west-2|us-gov-east-1|us-gov-west-1)\.amazonaws\.com/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.$3.amazonaws.com/$4; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Rackspace + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.([^/:\s]+)\.([^/:\s]+)\.rackcdn\.com/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.$3.$4.rackcdn.com/$5; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Clodo + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.clodo\.ru\:(80|443)/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.clodo.ru:$3/$4; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Google + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.commondatastorage\.googleapis\.com/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.commondatastorage.googleapis.com/$3; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Selectel + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.selcdn\.ru/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.selcdn.ru/$3; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Selectel as S3 compatible storage + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.selstorage\.ru/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.selstorage.ru/$3; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Yandex + location ~* ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.storage\.yandexcloud\.net/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.storage.yandexcloud.net/$3; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Yandex second option + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.storage\.yandexcloud\.net/([^\s].+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://storage.yandexcloud.net/$2; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # HotBox + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.hb\.bizmrg\.com/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.hb.bizmrg.com/$3; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # HotBox + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.hb\.bizmrg\.com/([^\s].+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://hb.bizmrg.com/$2; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Clodo.ru + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.clodo\.ru/([^\s]+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://$2.clodo.ru/$3; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # Timeweb.cloud S3 compatible storage + location ~ ^/upload/resize_cache/c/upload/bx_cloud_upload/(http[s]?)\.s3\.timeweb\.cloud/([^\s].+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + resolver 8.8.8.8 ipv6=off; + proxy_method GET; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition: $cdi'; + } + proxy_pass $1://s3.timeweb.cloud/$2; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; + } + # block everything else + location ~* .*$ { + deny all; + } +} +# diff --git a/confs/nginx/inc/composite.conf b/confs/nginx/inc/composite.conf new file mode 100644 index 0000000..f7dd541 --- /dev/null +++ b/confs/nginx/inc/composite.conf @@ -0,0 +1,8 @@ +# +location ~* @.*\.html$ { + internal; + # disable browser cache, php manage file + expires -1y; + add_header X-Bitrix-Composite "Nginx (file)"; +} +# diff --git a/confs/nginx/inc/dav.conf b/confs/nginx/inc/dav.conf new file mode 100644 index 0000000..212171c --- /dev/null +++ b/confs/nginx/inc/dav.conf @@ -0,0 +1,17 @@ +# +location ~ ^/bitrix/groupdav.php.*$ { + if ($request_method ~ ^(PROPPATCH|MKCALENDAR)$) { + add_header Allow "OPTIONS,REPORT,CHECKAUTH,PROPFIND,MKCOL,GET,POST,PUT,DELETE,COPY,MOVE,LOCK,UNLOCK,ACL,HEAD"; + return 405 "Method not allowed"; + } + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/bitrix/groupdav.php; + fastcgi_split_path_info ^(.+\.php)(.*)$; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_pass php:9000; +} +# +location ~ ^/.well-known/(caldav|carddav)$ { + rewrite ^ /bitrix/groupdav.php last; +} +# diff --git a/confs/nginx/inc/errors.conf b/confs/nginx/inc/errors.conf new file mode 100644 index 0000000..708eccd --- /dev/null +++ b/confs/nginx/inc/errors.conf @@ -0,0 +1,27 @@ +# errors pages +error_page 403 /403.html; +error_page 404 /404.html; +error_page 500 /500.html; +error_page 502 /502.html; +error_page 503 /503.html; +error_page 504 /504.html; + +# errors pages locations +location ^~ /403.html { + root /etc/nginx/errors; +} +location ^~ /404.html { + root /etc/nginx/errors; +} +location ^~ /500.html { + root /etc/nginx/errors; +} +location ^~ /502.html { + root /etc/nginx/errors; +} +location ^~ /503.html { + root /etc/nginx/errors; +} +location ^~ /504.html { + root /etc/nginx/errors; +} diff --git a/confs/nginx/inc/modules.conf b/confs/nginx/inc/modules.conf new file mode 100644 index 0000000..b3838e6 --- /dev/null +++ b/confs/nginx/inc/modules.conf @@ -0,0 +1,165 @@ +# +########################################################## +# +# nginx modules - uncomment line and restart nginx +# +########################################################## +# + +# +# nginx-module-brotli = brotli compression dynamic module +# +load_module "/usr/lib/nginx/modules/ngx_http_brotli_filter_module.so"; +load_module "/usr/lib/nginx/modules/ngx_http_brotli_static_module.so"; +# + +# +# nginx-module-headers-more = headers-more dynamic module +# +load_module "/usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so"; +# + +# +# nginx-module-zip = zip on fly dynamic module +# +load_module "/usr/lib/nginx/modules/ngx_http_zip_module.so"; +# + +# +# nginx-module-njs = njs dynamic module +# +#load_module "/usr/lib/nginx/modules/ngx_http_js_module.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_js_module.so"; +# + +# +# nginx-module-geoip = geoip dynamic module +# +#load_module "/usr/lib/nginx/modules/ngx_http_geoip_module.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_geoip_module.so"; +# + +# +# nginx-module-geoip2 = geoip2 dynamic module +# +#load_module "/usr/lib/nginx/modules/ngx_http_geoip2_module.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_geoip2_module.so"; +# + +# +# nginx-module-image-filter = image filter dynamic module +# +#load_module "/usr/lib/nginx/modules/ngx_http_image_filter_module.so"; +# + +# +# nginx-module-xslt = xslt dynamic module +# +#load_module "/usr/lib/nginx/modules/ngx_http_xslt_filter_module.so"; +# + +# +# nginx-module-perl = perl dynamic module +# +#load_module "/usr/lib/nginx/modules/ngx_http_perl_module.so"; +# + +# +# nginx-module-ndk = ndk dynamic module +# +#load_module "/usr/lib/nginx/modules/ndk_http_module.so"; +# + +# +# nginx-module-lua = lua dynamic module +# ndk_http_module must be placed first! +# +#load_module "/usr/lib/nginx/modules/ndk_http_module.so"; +#load_module "/usr/lib/nginx/modules/ngx_http_lua_module.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_lua_module.so"; +# + +# +########################################################## +# +# nginx-debug modules - uncomment line and restart nginx-debug +# +########################################################## +# + +# +# nginx-module-brotli = brotli compression dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_brotli_filter_module-debug.so"; +#load_module "/usr/lib/nginx/modules/ngx_http_brotli_static_module-debug.so"; +# + +# +# nginx-module-headers-more = headers-more dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_headers_more_filter_module-debug.so"; +# + +# +# nginx-module-zip = zip on fly dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_zip_module-debug.so"; +# + +# +# nginx-module-njs = njs dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_js_module-debug.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_js_module-debug.so"; +# + +# +# nginx-module-geoip = geoip dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_geoip_module-debug.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_geoip_module-debug.so"; +# + +# +# nginx-module-geoip2 = geoip2 dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_geoip2_module-debug.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_geoip2_module-debug.so"; +# + +# +# nginx-module-image-filter = image filter dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_image_filter_module-debug.so"; +# + +# +# nginx-module-xslt = xslt dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_xslt_filter_module-debug.so"; +# + +# +# nginx-module-perl = perl dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ngx_http_perl_module-debug.so"; +# + +# +# nginx-module-ndk = ndk dynamic module (debug) +# +#load_module "/usr/lib/nginx/modules/ndk_http_module-debug.so"; +# + +# +# nginx-module-lua = lua dynamic module (debug) +# ndk_http_module must be placed first! +# +#load_module "/usr/lib/nginx/modules/ndk_http_module-debug.so"; +#load_module "/usr/lib/nginx/modules/ngx_http_lua_module-debug.so"; +#load_module "/usr/lib/nginx/modules/ngx_stream_lua_module-debug.so"; +# + +# +########################################################## +# diff --git a/confs/nginx/inc/proxy.conf b/confs/nginx/inc/proxy.conf new file mode 100644 index 0000000..fd6975d --- /dev/null +++ b/confs/nginx/inc/proxy.conf @@ -0,0 +1,17 @@ +# +# bitrixsetup script +# +location ^~ ^(/bitrixsetup\.php)$ { + proxy_buffering off; +} +# +# pub and online + telephony and voximplant +# +#location ~* ^/(pub/|online/|services/telephony/info_receiver.php|/bitrix/tools/voximplant/) { +# add_header X-Frame-Options '' always; +# # +# location ~* ^/(pub/imconnector/|pub/imbot.php|services/telephony/info_receiver.php|bitrix/tools/voximplant/) { +# proxy_ignore_client_abort on; +# } +#} +# diff --git a/confs/nginx/inc/push.conf b/confs/nginx/inc/push.conf new file mode 100644 index 0000000..860d2f7 --- /dev/null +++ b/confs/nginx/inc/push.conf @@ -0,0 +1,31 @@ +# +location ~* ^/bitrix/subws/ { + proxy_pass http://push_sub:8010; + # http://blog.martinfjordvald.com/2013/02/websockets-in-nginx/ + # 12h+0.5 + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; + proxy_http_version 1.1; + proxy_set_header Upgrade $replace_upgrade; + proxy_set_header Connection $connection_upgrade; +} +# +location ~* ^/bitrix/sub/ { + rewrite ^/bitrix/sub/(.*)$ /bitrix/subws/$1 break; + proxy_pass http://push_sub:8010; + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; +} +# +location ~* ^/bitrix/rest/ { + proxy_pass http://push_pub:9010; + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; +} +# +location ~* ^/bitrix/pub/ { + proxy_pass http://push_pub:9010; + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; +} +# diff --git a/confs/nginx/inc/push_secure.conf b/confs/nginx/inc/push_secure.conf new file mode 100644 index 0000000..860d2f7 --- /dev/null +++ b/confs/nginx/inc/push_secure.conf @@ -0,0 +1,31 @@ +# +location ~* ^/bitrix/subws/ { + proxy_pass http://push_sub:8010; + # http://blog.martinfjordvald.com/2013/02/websockets-in-nginx/ + # 12h+0.5 + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; + proxy_http_version 1.1; + proxy_set_header Upgrade $replace_upgrade; + proxy_set_header Connection $connection_upgrade; +} +# +location ~* ^/bitrix/sub/ { + rewrite ^/bitrix/sub/(.*)$ /bitrix/subws/$1 break; + proxy_pass http://push_sub:8010; + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; +} +# +location ~* ^/bitrix/rest/ { + proxy_pass http://push_pub:9010; + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; +} +# +location ~* ^/bitrix/pub/ { + proxy_pass http://push_pub:9010; + proxy_max_temp_file_size 0; + proxy_read_timeout 43800; +} +# diff --git a/confs/nginx/inc/static.conf b/confs/nginx/inc/static.conf new file mode 100644 index 0000000..5d97390 --- /dev/null +++ b/confs/nginx/inc/static.conf @@ -0,0 +1,92 @@ +# +# static files +# +location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|html|htm|xml|jpg|jpeg|gif|png|css|flv|js|wmv|mp4|bmp|swf|ico|txt|otf|woff|woff2|ttf|eot|map|wav|tar|7z)$ { + log_not_found off; + access_log off; + expires 30d; + add_header Cache-Control public; +} +# +# internal sources +# +location ~ (/bitrix/modules|/upload/support/not_image|/bitrix/php_interface|local/modules|local/php_interface) { + internal; +} +# +# accept access for merged css and js +# +location ~* ^/bitrix/cache/(css/.+\.css|js/.+\.js)$ { + expires 30d; +} +# +# static content +# +location ~* ^/(upload|bitrix/images|bitrix/tmp) { + set $cdi $upstream_http_x_cd_info; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition:$cdi'; + } + expires 30d; +} +# +# fix xss on svg files in /upload/* +# +location ~* ^/upload/.+\.svg$ { + add_header Content-Security-Policy "default-src 'none'; style-src 'unsafe-inline'; sandbox"; +} +# +# download file from /upload/*, do not execute +# +location ~* ^/upload/.*([^/]+)\.(html|htm|php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht)$ { + add_header Content-Disposition "attachment"; +} +# +# upload sizes +# +location ~ /upload/ { + client_body_buffer_size 1024m; + client_max_body_size 1024m; +} +# +# local resize cache +# +location ~* ^/upload/resize_cache/x/(.+)$ { + internal; + set $new_uri $upstream_http_x_gen_src; + set $cdi $upstream_http_x_cd_info; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Server $host; + more_clear_input_headers 'Authorization'; + if ($cdi) { + more_set_headers -s 200 'Content-Disposition:$cdi'; + } + proxy_set_header "cookie" ""; + proxy_set_header "content-type" ""; + proxy_set_header "content-length" ""; + proxy_pass $scheme://$host/upload/resize_cache/$1; + proxy_intercept_errors on; + error_page 403 404 500 502 503 504 = /$new_uri; +} +# +# favicon.png +# +location = /favicon.png { + log_not_found off; + access_log off; +} +# +# robots.txt +# +location = /robots.txt { + log_not_found off; + access_log off; +} +# +# player options, disable no-sniff +# +location ~* ^/bitrix/components/bitrix/player/mediaplayer/player$ { + add_header Access-Control-Allow-Origin *; +} +# diff --git a/confs/nginx/koi-utf b/confs/nginx/koi-utf new file mode 100644 index 0000000..8ee20cf --- /dev/null +++ b/confs/nginx/koi-utf @@ -0,0 +1,108 @@ +# This map is not a full koi8-r <> utf8 map: it does not contain +# box-drawing and some other characters. Besides this map contains +# several koi8-u and Byelorussian letters which are not in koi8-r. +# If you need a full and standard map, use contrib/unicode2nginx/koi-utf +# map instead. + +charset_map koi8-r utf-8 { + + 80 E282AC ; # euro + + 95 E280A2 ; # bullet + + 9A C2A0 ; #   + + 9E C2B7 ; # · + + A3 D191 ; # small yo + A4 D194 ; # small Ukrainian ye + + A6 D196 ; # small Ukrainian i + A7 D197 ; # small Ukrainian yi + + AD D291 ; # small Ukrainian soft g + AE D19E ; # small Byelorussian short u + + B0 C2B0 ; # ° + + B3 D081 ; # capital YO + B4 D084 ; # capital Ukrainian YE + + B6 D086 ; # capital Ukrainian I + B7 D087 ; # capital Ukrainian YI + + B9 E28496 ; # numero sign + + BD D290 ; # capital Ukrainian soft G + BE D18E ; # capital Byelorussian short U + + BF C2A9 ; # (C) + + C0 D18E ; # small yu + C1 D0B0 ; # small a + C2 D0B1 ; # small b + C3 D186 ; # small ts + C4 D0B4 ; # small d + C5 D0B5 ; # small ye + C6 D184 ; # small f + C7 D0B3 ; # small g + C8 D185 ; # small kh + C9 D0B8 ; # small i + CA D0B9 ; # small j + CB D0BA ; # small k + CC D0BB ; # small l + CD D0BC ; # small m + CE D0BD ; # small n + CF D0BE ; # small o + + D0 D0BF ; # small p + D1 D18F ; # small ya + D2 D180 ; # small r + D3 D181 ; # small s + D4 D182 ; # small t + D5 D183 ; # small u + D6 D0B6 ; # small zh + D7 D0B2 ; # small v + D8 D18C ; # small soft sign + D9 D18B ; # small y + DA D0B7 ; # small z + DB D188 ; # small sh + DC D18D ; # small e + DD D189 ; # small shch + DE D187 ; # small ch + DF D18A ; # small hard sign + + E0 D0AE ; # capital YU + E1 D090 ; # capital A + E2 D091 ; # capital B + E3 D0A6 ; # capital TS + E4 D094 ; # capital D + E5 D095 ; # capital YE + E6 D0A4 ; # capital F + E7 D093 ; # capital G + E8 D0A5 ; # capital KH + E9 D098 ; # capital I + EA D099 ; # capital J + EB D09A ; # capital K + EC D09B ; # capital L + ED D09C ; # capital M + EE D09D ; # capital N + EF D09E ; # capital O + + F0 D09F ; # capital P + F1 D0AF ; # capital YA + F2 D0A0 ; # capital R + F3 D0A1 ; # capital S + F4 D0A2 ; # capital T + F5 D0A3 ; # capital U + F6 D096 ; # capital ZH + F7 D092 ; # capital V + F8 D0AC ; # capital soft sign + F9 D0AB ; # capital Y + FA D097 ; # capital Z + FB D0A8 ; # capital SH + FC D0AD ; # capital E + FD D0A9 ; # capital SHCH + FE D0A7 ; # capital CH + FF D0AA ; # capital hard sign +} diff --git a/confs/nginx/koi-win b/confs/nginx/koi-win new file mode 100644 index 0000000..2656e1a --- /dev/null +++ b/confs/nginx/koi-win @@ -0,0 +1,102 @@ +charset_map koi8-r windows-1251 { + + 80 88 ; # euro + + 95 95 ; # bullet + + 9A A0 ; #   + + 9E B7 ; # · + + A3 B8 ; # small yo + A4 BA ; # small Ukrainian ye + + A6 B3 ; # small Ukrainian i + A7 BF ; # small Ukrainian yi + + AD B4 ; # small Ukrainian soft g + AE A2 ; # small Byelorussian short u + + B0 B0 ; # ° + + B3 A8 ; # capital YO + B4 AA ; # capital Ukrainian YE + + B6 B2 ; # capital Ukrainian I + B7 AF ; # capital Ukrainian YI + + B9 B9 ; # numero sign + + BD A5 ; # capital Ukrainian soft G + BE A1 ; # capital Byelorussian short U + + BF A9 ; # (C) + + C0 FE ; # small yu + C1 E0 ; # small a + C2 E1 ; # small b + C3 F6 ; # small ts + C4 E4 ; # small d + C5 E5 ; # small ye + C6 F4 ; # small f + C7 E3 ; # small g + C8 F5 ; # small kh + C9 E8 ; # small i + CA E9 ; # small j + CB EA ; # small k + CC EB ; # small l + CD EC ; # small m + CE ED ; # small n + CF EE ; # small o + + D0 EF ; # small p + D1 FF ; # small ya + D2 F0 ; # small r + D3 F1 ; # small s + D4 F2 ; # small t + D5 F3 ; # small u + D6 E6 ; # small zh + D7 E2 ; # small v + D8 FC ; # small soft sign + D9 FB ; # small y + DA E7 ; # small z + DB F8 ; # small sh + DC FD ; # small e + DD F9 ; # small shch + DE F7 ; # small ch + DF FA ; # small hard sign + + E0 DE ; # capital YU + E1 C0 ; # capital A + E2 C1 ; # capital B + E3 D6 ; # capital TS + E4 C4 ; # capital D + E5 C5 ; # capital YE + E6 D4 ; # capital F + E7 C3 ; # capital G + E8 D5 ; # capital KH + E9 C8 ; # capital I + EA C9 ; # capital J + EB CA ; # capital K + EC CB ; # capital L + ED CC ; # capital M + EE CD ; # capital N + EF CE ; # capital O + + F0 CF ; # capital P + F1 DF ; # capital YA + F2 D0 ; # capital R + F3 D1 ; # capital S + F4 D2 ; # capital T + F5 D3 ; # capital U + F6 C6 ; # capital ZH + F7 C2 ; # capital V + F8 DC ; # capital soft sign + F9 DB ; # capital Y + FA C7 ; # capital Z + FB D8 ; # capital SH + FC DD ; # capital E + FD D9 ; # capital SHCH + FE D7 ; # capital CH + FF DA ; # capital hard sign +} diff --git a/confs/nginx/maps/im_settings.conf b/confs/nginx/maps/im_settings.conf new file mode 100644 index 0000000..5d39438 --- /dev/null +++ b/confs/nginx/maps/im_settings.conf @@ -0,0 +1,11 @@ +# +map $http_upgrade $connection_upgrade { + default upgrade; + '' 'close'; +} +# +map $http_upgrade $replace_upgrade { + default $http_upgrade; + '' 'websocket'; +} +# diff --git a/confs/nginx/mime.types b/confs/nginx/mime.types new file mode 100644 index 0000000..083c2fa --- /dev/null +++ b/confs/nginx/mime.types @@ -0,0 +1,99 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + + font/woff woff; + font/woff2 woff2; + + application/x-font-ttf ttf; + application/x-font-opentype otf; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.oasis.opendocument.graphics odg; + application/vnd.oasis.opendocument.presentation odp; + application/vnd.oasis.opendocument.spreadsheet ods; + application/vnd.oasis.opendocument.text odt; + application/vnd.openxmlformats-officedocument.presentationml.presentation + pptx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + xlsx; + application/vnd.openxmlformats-officedocument.wordprocessingml.document + docx; + application/vnd.wap.wmlc wmlc; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/confs/nginx/nginx.conf b/confs/nginx/nginx.conf new file mode 100644 index 0000000..e0eafd7 --- /dev/null +++ b/confs/nginx/nginx.conf @@ -0,0 +1,73 @@ +# +user bitrix; +worker_processes auto; +error_log /var/log/nginx/error.log warn; +pid /var/runs/nginx/nginx.pid; +# +include /etc/nginx/inc/modules.conf; +# +events { + worker_connections 2048; + use epoll; + multi_accept on; +} +# +http { + server_tokens off; + ###more_clear_headers Server; + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #sendfile_max_chunk 128k; + keepalive_timeout 75s; + keepalive_requests 1000; + client_body_buffer_size 512k; + client_header_buffer_size 512k; + large_client_header_buffers 4 64k; + client_max_body_size 1024m; + fastcgi_buffers 64 16k; + fastcgi_buffer_size 64k; + client_body_timeout 60s; + client_header_timeout 60s; + reset_timedout_connection on; + send_timeout 60s; + tcp_nopush on; + tcp_nodelay on; + server_names_hash_max_size 512; + server_names_hash_bucket_size 128; + types_hash_max_size 2048; + # + # gzip content compression params + # + gzip on; + gzip_vary on; + gzip_static on; + gzip_proxied any; + gzip_disable "msie6"; + gzip_min_length 1100; + gzip_buffers 64 8k; + gzip_comp_level 5; + gzip_http_version 1.1; + gzip_types text/plain text/css text/javascript text/xml application/xml application/x-javascript application/json application/xml+rss; + # + # brotli content compression params + # + brotli on; + brotli_static on; + brotli_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; + brotli_buffers 16 8k; + brotli_comp_level 6; + brotli_window 512k; + brotli_min_length 20; + + include /etc/nginx/maps/*.conf; + include /etc/nginx/conf.d/*.conf; +} +# diff --git a/confs/nginx/scgi_params b/confs/nginx/scgi_params new file mode 100644 index 0000000..c462a05 --- /dev/null +++ b/confs/nginx/scgi_params @@ -0,0 +1,16 @@ +scgi_param REQUEST_METHOD $request_method; +scgi_param REQUEST_URI $request_uri; +scgi_param QUERY_STRING $query_string; +scgi_param CONTENT_TYPE $content_type; + +scgi_param DOCUMENT_URI $document_uri; +scgi_param DOCUMENT_ROOT $document_root; +scgi_param SCGI 1; +scgi_param SERVER_PROTOCOL $server_protocol; +scgi_param REQUEST_SCHEME $scheme; +scgi_param HTTPS $https if_not_empty; + +scgi_param REMOTE_ADDR $remote_addr; +scgi_param REMOTE_PORT $remote_port; +scgi_param SERVER_PORT $server_port; +scgi_param SERVER_NAME $server_name; diff --git a/confs/nginx/ssl/ssl.conf b/confs/nginx/ssl/ssl.conf new file mode 100644 index 0000000..d22f909 --- /dev/null +++ b/confs/nginx/ssl/ssl.conf @@ -0,0 +1,82 @@ +# +# ssl on; +# +# files +# +ssl_certificate /etc/nginx/certs/example.com/fullchain.pem; +ssl_certificate_key /etc/nginx/certs/example.com/privkey.pem; +ssl_trusted_certificate /etc/nginx/certs/example.com/chain.pem; +ssl_dhparam /etc/nginx/certs/example.com/dhparam.pem; +# +# ssl params +# +ssl_protocols TLSv1.2 TLSv1.3; +ssl_prefer_server_ciphers on; +ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256"; +ssl_ecdh_curve prime256v1:secp384r1:secp521r1:X25519; +ssl_early_data on; +# +# ssl session cache +# +ssl_session_cache shared:SSL:10m; +ssl_session_timeout 10m; +ssl_session_tickets on; +# +# ocsp +# +ssl_stapling off; +ssl_stapling_verify off; +resolver 8.8.8.8 8.8.4.4 valid=300s; +resolver_timeout 10s; +# +# csp +# +# add_header Content-Security-Policy-Report-Only ""; +# add_header X-Content-Security-Policy-Report-Only ""; +# add_header X-WebKit-CSP-Report-Only ""; +# +# headers +# +# add_header Public-Key-Pins 'pin-sha256=""; pin-sha256=""; pin-sha256=""; pin-sha256=""; pin-sha256=""; pin-sha256=""; max-age=31536000;'; +# add_header Frame-Options SAMEORIGIN; +# add_header X-Frame-Options SAMEORIGIN; +# add_header X-Content-Type-Options nosniff; +# add_header X-XSS-Protection "1; mode=block"; +add_header Strict-Transport-Security "max-age=15552000;"; # 180 days +# +# other +# +ssl_buffer_size 4k; +keepalive_timeout 70; +keepalive_requests 150; +# +# http2 +# https://nginx.org/ru/docs/http/ngx_http_v2_module.html +# +http2 on; +http2_body_preread_size 64k; +http2_chunk_size 8k; +# http2_idle_timeout 3m; -> keepalive_timeout use, obsolete 1.19.7 +# http2_max_concurrent_pushes 10; -> obsolete 1.25.1 +http2_max_concurrent_streams 128; +# http2_max_field_size 4k; -> large_client_header_buffers use, obsolete 1.19.7 +# http2_max_header_size 16k; -> large_client_header_buffers use, obsolete 1.19.7 +# http2_max_requests 1000; -> keepalive_requests use, obsolete 1.19.7 +# http2_push off; -> obsolete 1.25.1 +# http2_push_preload off; -> obsolete 1.25.1 +# http2_recv_buffer_size 256k; -> only on http available +# http2_recv_timeout 30s; -> client_header_timeout use, obsolete 1.19.7 +# +# http3 +# https://nginx.org/ru/docs/http/ngx_http_v3_module.html +# +# http3 on; +# http3_hq off; +# http3_max_concurrent_streams 128; +# http3_stream_buffer_size 64k; +# quic_active_connection_id_limit 2; +# quic_bpf off; +# quic_gso off; +# quic_host_key file; +# quic_retry off; +# diff --git a/confs/nginx/uwsgi_params b/confs/nginx/uwsgi_params new file mode 100644 index 0000000..5abf809 --- /dev/null +++ b/confs/nginx/uwsgi_params @@ -0,0 +1,16 @@ +uwsgi_param QUERY_STRING $query_string; +uwsgi_param REQUEST_METHOD $request_method; +uwsgi_param CONTENT_TYPE $content_type; +uwsgi_param CONTENT_LENGTH $content_length; + +uwsgi_param REQUEST_URI $request_uri; +uwsgi_param PATH_INFO $document_uri; +uwsgi_param DOCUMENT_ROOT $document_root; +uwsgi_param SERVER_PROTOCOL $server_protocol; +uwsgi_param REQUEST_SCHEME $scheme; +uwsgi_param HTTPS $https if_not_empty; + +uwsgi_param REMOTE_ADDR $remote_addr; +uwsgi_param REMOTE_PORT $remote_port; +uwsgi_param SERVER_PORT $server_port; +uwsgi_param SERVER_NAME $server_name; diff --git a/confs/nginx/win-utf b/confs/nginx/win-utf new file mode 100644 index 0000000..391b335 --- /dev/null +++ b/confs/nginx/win-utf @@ -0,0 +1,125 @@ +# This map is not a full windows-1251 <> utf8 map: it does not +# contain Serbian and Macedonian letters. If you need a full map, +# use contrib/unicode2nginx/win-utf map instead. + +charset_map windows-1251 utf-8 { + + 82 E2809A ; # single low-9 quotation mark + + 84 E2809E ; # double low-9 quotation mark + 85 E280A6 ; # ellipsis + 86 E280A0 ; # dagger + 87 E280A1 ; # double dagger + 88 E282AC ; # euro + 89 E280B0 ; # per mille + + 91 E28098 ; # left single quotation mark + 92 E28099 ; # right single quotation mark + 93 E2809C ; # left double quotation mark + 94 E2809D ; # right double quotation mark + 95 E280A2 ; # bullet + 96 E28093 ; # en dash + 97 E28094 ; # em dash + + 99 E284A2 ; # trade mark sign + + A0 C2A0 ; #   + A1 D18E ; # capital Byelorussian short U + A2 D19E ; # small Byelorussian short u + + A4 C2A4 ; # currency sign + A5 D290 ; # capital Ukrainian soft G + A6 C2A6 ; # borken bar + A7 C2A7 ; # section sign + A8 D081 ; # capital YO + A9 C2A9 ; # (C) + AA D084 ; # capital Ukrainian YE + AB C2AB ; # left-pointing double angle quotation mark + AC C2AC ; # not sign + AD C2AD ; # soft hypen + AE C2AE ; # (R) + AF D087 ; # capital Ukrainian YI + + B0 C2B0 ; # ° + B1 C2B1 ; # plus-minus sign + B2 D086 ; # capital Ukrainian I + B3 D196 ; # small Ukrainian i + B4 D291 ; # small Ukrainian soft g + B5 C2B5 ; # micro sign + B6 C2B6 ; # pilcrow sign + B7 C2B7 ; # · + B8 D191 ; # small yo + B9 E28496 ; # numero sign + BA D194 ; # small Ukrainian ye + BB C2BB ; # right-pointing double angle quotation mark + + BF D197 ; # small Ukrainian yi + + C0 D090 ; # capital A + C1 D091 ; # capital B + C2 D092 ; # capital V + C3 D093 ; # capital G + C4 D094 ; # capital D + C5 D095 ; # capital YE + C6 D096 ; # capital ZH + C7 D097 ; # capital Z + C8 D098 ; # capital I + C9 D099 ; # capital J + CA D09A ; # capital K + CB D09B ; # capital L + CC D09C ; # capital M + CD D09D ; # capital N + CE D09E ; # capital O + CF D09F ; # capital P + + D0 D0A0 ; # capital R + D1 D0A1 ; # capital S + D2 D0A2 ; # capital T + D3 D0A3 ; # capital U + D4 D0A4 ; # capital F + D5 D0A5 ; # capital KH + D6 D0A6 ; # capital TS + D7 D0A7 ; # capital CH + D8 D0A8 ; # capital SH + D9 D0A9 ; # capital SHCH + DA D0AA ; # capital hard sign + DB D0AB ; # capital Y + DC D0AC ; # capital soft sign + DD D0AD ; # capital E + DE D0AE ; # capital YU + DF D0AF ; # capital YA + + E0 D0B0 ; # small a + E1 D0B1 ; # small b + E2 D0B2 ; # small v + E3 D0B3 ; # small g + E4 D0B4 ; # small d + E5 D0B5 ; # small ye + E6 D0B6 ; # small zh + E7 D0B7 ; # small z + E8 D0B8 ; # small i + E9 D0B9 ; # small j + EA D0BA ; # small k + EB D0BB ; # small l + EC D0BC ; # small m + ED D0BD ; # small n + EE D0BE ; # small o + EF D0BF ; # small p + + F0 D180 ; # small r + F1 D181 ; # small s + F2 D182 ; # small t + F3 D183 ; # small u + F4 D184 ; # small f + F5 D185 ; # small kh + F6 D186 ; # small ts + F7 D187 ; # small ch + F8 D188 ; # small sh + F9 D189 ; # small shch + FA D18A ; # small hard sign + FB D18B ; # small y + FC D18C ; # small soft sign + FD D18D ; # small e + FE D18E ; # small yu + FF D18F ; # small ya +} diff --git a/confs/php84/etc/image.png b/confs/php84/etc/image.png new file mode 100644 index 0000000000000000000000000000000000000000..0dbdaca4ee4d7e0a5fa41595d826b69702223858 GIT binary patch literal 10268 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 DsRuTx literal 0 HcmV?d00001 diff --git a/confs/php84/etc/pear.conf b/confs/php84/etc/pear.conf new file mode 100644 index 0000000..6579d43 --- /dev/null +++ b/confs/php84/etc/pear.conf @@ -0,0 +1,2 @@ +#PEAR_Config 0.9 +a:33:{s:9:"cache_dir";s:15:"/tmp/pear/cache";s:15:"default_channel";s:12:"pear.php.net";s:16:"preferred_mirror";s:12:"pear.php.net";s:13:"remote_config";s:0:"";s:13:"auto_discover";i:0;s:13:"master_server";s:12:"pear.php.net";s:10:"http_proxy";s:0:"";s:7:"php_dir";s:18:"/usr/local/lib/php";s:7:"ext_dir";s:55:"/usr/local/lib/php/extensions/no-debug-non-zts-20240924";s:7:"doc_dir";s:22:"/usr/local/lib/php/doc";s:7:"bin_dir";s:14:"/usr/local/bin";s:8:"data_dir";s:23:"/usr/local/lib/php/data";s:7:"cfg_dir";s:22:"/usr/local/lib/php/cfg";s:7:"www_dir";s:25:"/usr/local/lib/php/htdocs";s:7:"man_dir";s:28:"/usr/local/lib/php/local/man";s:8:"test_dir";s:23:"/usr/local/lib/php/test";s:8:"temp_dir";s:14:"/tmp/pear/temp";s:12:"download_dir";s:18:"/tmp/pear/download";s:7:"php_bin";s:18:"/usr/local/bin/php";s:10:"php_prefix";s:0:"";s:10:"php_suffix";s:0:"";s:7:"php_ini";s:0:"";s:12:"metadata_dir";s:0:"";s:8:"username";s:0:"";s:8:"password";s:0:"";s:7:"verbose";i:1;s:15:"preferred_state";s:6:"stable";s:5:"umask";i:18;s:9:"cache_ttl";i:3600;s:8:"sig_type";s:3:"gpg";s:7:"sig_bin";s:18:"/usr/local/bin/gpg";s:9:"sig_keyid";s:0:"";s:10:"sig_keydir";s:23:"/usr/local/etc/pearkeys";} diff --git a/confs/php84/etc/php-fpm.conf b/confs/php84/etc/php-fpm.conf new file mode 100644 index 0000000..762350d --- /dev/null +++ b/confs/php84/etc/php-fpm.conf @@ -0,0 +1,142 @@ +;;;;;;;;;;;;;;;;;;;;; +; FPM Configuration ; +;;;;;;;;;;;;;;;;;;;;; + +; All relative paths in this configuration file are relative to PHP's install +; prefix (/usr/local). This prefix can be dynamically changed by using the +; '-p' argument from the command line. + +;;;;;;;;;;;;;;;;;; +; Global Options ; +;;;;;;;;;;;;;;;;;; + +[global] +; Pid file +; Note: the default prefix is /usr/local/var +; Default Value: none +;pid = run/php-fpm.pid + +; Error log file +; If it's set to "syslog", log is sent to syslogd instead of being written +; into a local file. +; Note: the default prefix is /usr/local/var +; Default Value: log/php-fpm.log +;error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +;log_level = notice + +; Log limit on number of characters in the single line (log entry). If the +; line is over the limit, it is wrapped on multiple lines. The limit is for +; all logged characters including message prefix and suffix if present. However +; the new line character does not count into it as it is present only when +; logging to a file descriptor. It means the new line character is not present +; when logging to syslog. +; Default Value: 1024 +;log_limit = 4096 + +; Log buffering specifies if the log line is buffered which means that the +; line is written in a single write operation. If the value is false, then the +; data is written directly into the file descriptor. It is an experimental +; option that can potentially improve logging performance and memory usage +; for some heavy logging scenarios. This option is ignored if logging to syslog +; as it has to be always buffered. +; Default value: yes +;log_buffering = no + +; If this number of child processes exit with SIGSEGV or SIGBUS within the time +; interval set by emergency_restart_interval then FPM will restart. A value +; of '0' means 'Off'. +; Default Value: 0 +;emergency_restart_threshold = 0 + +; Interval of time used by emergency_restart_interval to determine when +; a graceful restart will be initiated. This can be useful to work around +; accidental corruptions in an accelerator's shared memory. +; Available Units: s(econds), m(inutes), h(ours), or d(ays) +; Default Unit: seconds +; Default Value: 0 +;emergency_restart_interval = 0 + +; Time limit for child processes to wait for a reaction on signals from master. +; Available units: s(econds), m(inutes), h(ours), or d(ays) +; Default Unit: seconds +; Default Value: 0 +;process_control_timeout = 0 + +; The maximum number of processes FPM will fork. This has been designed to control +; the global number of processes when using dynamic PM within a lot of pools. +; Use it with caution. +; Note: A value of 0 indicates no limit +; Default Value: 0 +; process.max = 128 + +; Specify the nice(2) priority to apply to the master process (only if set) +; The value can vary from -19 (highest priority) to 20 (lowest priority) +; Note: - It will only work if the FPM master process is launched as root +; - The pool process will inherit the master process priority +; unless specified otherwise +; Default Value: no set +; process.priority = -19 + +; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging. +; Default Value: yes +;daemonize = yes + +; Set open file descriptor rlimit for the master process. +; Default Value: system defined value +;rlimit_files = 1024 + +; Set max core size rlimit for the master process. +; Possible Values: 'unlimited' or an integer greater or equal to 0 +; Default Value: system defined value +;rlimit_core = 0 + +; Specify the event mechanism FPM will use. The following is available: +; - select (any POSIX os) +; - poll (any POSIX os) +; - epoll (linux >= 2.5.44) +; - kqueue (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0) +; - port (Solaris >= 10) +; Default Value: not set (auto detection) +;events.mechanism = epoll + +; When FPM is built with systemd integration, specify the interval, +; in seconds, between health report notification to systemd. +; Set to 0 to disable. +; Available Units: s(econds), m(inutes), h(ours) +; Default Unit: seconds +; Default value: 10 +;systemd_interval = 10 + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +; Multiple pools of child processes may be started with different listening +; ports and different management options. The name of the pool will be +; used in logs and stats. There is no limitation on the number of pools which +; FPM can handle. Your system will tell you anyway :) + +; Include one or more files. If glob(3) exists, it is used to include a bunch of +; files from a glob(3) pattern. This directive can be used everywhere in the +; file. +; Relative path can also be used. They will be prefixed by: +; - the global prefix if it's been set (-p argument) +; - /usr/local otherwise +include=etc/php-fpm.d/*.conf diff --git a/confs/php84/etc/php-fpm.conf.default b/confs/php84/etc/php-fpm.conf.default new file mode 100644 index 0000000..6f8dcd4 --- /dev/null +++ b/confs/php84/etc/php-fpm.conf.default @@ -0,0 +1,142 @@ +;;;;;;;;;;;;;;;;;;;;; +; FPM Configuration ; +;;;;;;;;;;;;;;;;;;;;; + +; All relative paths in this configuration file are relative to PHP's install +; prefix (/usr/local). This prefix can be dynamically changed by using the +; '-p' argument from the command line. + +;;;;;;;;;;;;;;;;;; +; Global Options ; +;;;;;;;;;;;;;;;;;; + +[global] +; Pid file +; Note: the default prefix is /usr/local/var +; Default Value: none +;pid = run/php-fpm.pid + +; Error log file +; If it's set to "syslog", log is sent to syslogd instead of being written +; into a local file. +; Note: the default prefix is /usr/local/var +; Default Value: log/php-fpm.log +;error_log = log/php-fpm.log + +; syslog_facility is used to specify what type of program is logging the +; message. This lets syslogd specify that messages from different facilities +; will be handled differently. +; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON) +; Default Value: daemon +;syslog.facility = daemon + +; syslog_ident is prepended to every message. If you have multiple FPM +; instances running on the same server, you can change the default value +; which must suit common needs. +; Default Value: php-fpm +;syslog.ident = php-fpm + +; Log level +; Possible Values: alert, error, warning, notice, debug +; Default Value: notice +;log_level = notice + +; Log limit on number of characters in the single line (log entry). If the +; line is over the limit, it is wrapped on multiple lines. The limit is for +; all logged characters including message prefix and suffix if present. However +; the new line character does not count into it as it is present only when +; logging to a file descriptor. It means the new line character is not present +; when logging to syslog. +; Default Value: 1024 +;log_limit = 4096 + +; Log buffering specifies if the log line is buffered which means that the +; line is written in a single write operation. If the value is false, then the +; data is written directly into the file descriptor. It is an experimental +; option that can potentially improve logging performance and memory usage +; for some heavy logging scenarios. This option is ignored if logging to syslog +; as it has to be always buffered. +; Default value: yes +;log_buffering = no + +; If this number of child processes exit with SIGSEGV or SIGBUS within the time +; interval set by emergency_restart_interval then FPM will restart. A value +; of '0' means 'Off'. +; Default Value: 0 +;emergency_restart_threshold = 0 + +; Interval of time used by emergency_restart_interval to determine when +; a graceful restart will be initiated. This can be useful to work around +; accidental corruptions in an accelerator's shared memory. +; Available Units: s(econds), m(inutes), h(ours), or d(ays) +; Default Unit: seconds +; Default Value: 0 +;emergency_restart_interval = 0 + +; Time limit for child processes to wait for a reaction on signals from master. +; Available units: s(econds), m(inutes), h(ours), or d(ays) +; Default Unit: seconds +; Default Value: 0 +;process_control_timeout = 0 + +; The maximum number of processes FPM will fork. This has been designed to control +; the global number of processes when using dynamic PM within a lot of pools. +; Use it with caution. +; Note: A value of 0 indicates no limit +; Default Value: 0 +; process.max = 128 + +; Specify the nice(2) priority to apply to the master process (only if set) +; The value can vary from -19 (highest priority) to 20 (lowest priority) +; Note: - It will only work if the FPM master process is launched as root +; - The pool process will inherit the master process priority +; unless specified otherwise +; Default Value: no set +; process.priority = -19 + +; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging. +; Default Value: yes +;daemonize = yes + +; Set open file descriptor rlimit for the master process. +; Default Value: system defined value +;rlimit_files = 1024 + +; Set max core size rlimit for the master process. +; Possible Values: 'unlimited' or an integer greater or equal to 0 +; Default Value: system defined value +;rlimit_core = 0 + +; Specify the event mechanism FPM will use. The following is available: +; - select (any POSIX os) +; - poll (any POSIX os) +; - epoll (linux >= 2.5.44) +; - kqueue (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0) +; - port (Solaris >= 10) +; Default Value: not set (auto detection) +;events.mechanism = epoll + +; When FPM is built with systemd integration, specify the interval, +; in seconds, between health report notification to systemd. +; Set to 0 to disable. +; Available Units: s(econds), m(inutes), h(ours) +; Default Unit: seconds +; Default value: 10 +;systemd_interval = 10 + +;;;;;;;;;;;;;;;;;;;; +; Pool Definitions ; +;;;;;;;;;;;;;;;;;;;; + +; Multiple pools of child processes may be started with different listening +; ports and different management options. The name of the pool will be +; used in logs and stats. There is no limitation on the number of pools which +; FPM can handle. Your system will tell you anyway :) + +; Include one or more files. If glob(3) exists, it is used to include a bunch of +; files from a glob(3) pattern. This directive can be used everywhere in the +; file. +; Relative path can also be used. They will be prefixed by: +; - the global prefix if it's been set (-p argument) +; - /usr/local otherwise +include=NONE/etc/php-fpm.d/*.conf diff --git a/confs/php84/etc/php-fpm.d/docker.conf b/confs/php84/etc/php-fpm.d/docker.conf new file mode 100644 index 0000000..bf993fe --- /dev/null +++ b/confs/php84/etc/php-fpm.d/docker.conf @@ -0,0 +1,16 @@ +[global] +error_log = /proc/self/fd/2 + +; https://github.com/docker-library/php/pull/725#issuecomment-443540114 +log_limit = 8192 + +[www] +; php-fpm closes STDOUT on startup, so sending logs to /proc/self/fd/1 does not work. +; https://bugs.php.net/bug.php?id=73886 +access.log = /proc/self/fd/2 + +clear_env = no + +; Ensure worker stdout and stderr are sent to the main error log. +catch_workers_output = yes +decorate_workers_output = no diff --git a/confs/php84/etc/php-fpm.d/www.conf b/confs/php84/etc/php-fpm.d/www.conf new file mode 100644 index 0000000..47dce6e --- /dev/null +++ b/confs/php84/etc/php-fpm.d/www.conf @@ -0,0 +1,495 @@ +; 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 the child processes. This can be used only if the master +; process running user is root. It is set after the child process is created. +; The user and group can be specified either by their name or by their numeric +; IDs. +; Note: If the user is root, the executable needs to be started with +; --allow-to-run-as-root option to work. +; Default Values: The user is set to master process running user by default. +; If the group is not set, the user's group is used. +;user = www-data +;group = www-data +;user = bitrix +;group = bitrix + +; 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 Linux, 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. The owner +; and group can be specified either by name or by their numeric IDs. +; Default Values: Owner is set to the master process running user. If the group +; is not set, the owner's group is used. Mode is set to 0660. +;listen.owner = www-data +;listen.group = www-data +;listen.mode = 0660 +listen.owner = bitrix +listen.group = bitrix +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 + +; Set the associated the route table (FIB). FreeBSD only +; Default Value: -1 +;listen.setfib = 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 for Linux or +; PROC_TRACE_CTL procctl for FreeBSD) even if the process user +; or group is different 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. +; pm.max_spawn_rate - the maximum number of rate to spawn child +; processes at once. +; 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 = 5 + +; 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) / 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 rate to spawn child processes at once. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +; Default Value: 32 +;pm.max_spawn_rate = 32 + +; 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 information: +; 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 information is related to the +; last request the process has served. Otherwise information is 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 address on which to accept FastCGI status request. This creates a new +; invisible pool that can handle requests independently. This is useful +; if the main pool is busy with long running requests because it is still possible +; to get the status before finishing the long running 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. +; Default Value: value of the listen option +;pm.status_listen = 127.0.0.1:9001 + +; 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) +; - %{milliseconds}d +; - %{milli}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 examples: +; - 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 encapsulated 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 encapsulated in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t +; %u: basic auth user if specified in Authorization header +; +; Default: "%R - %u %t \"%m %r\" %s" +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%" + +; A list of request_uri values which should be filtered from the access log. +; +; As a security precaution, this setting will be ignored if: +; - the request method is not GET or HEAD; or +; - there is a request body; or +; - there are query parameters; or +; - the response code is outwith the successful range of 200 to 299 +; +; Note: The paths are matched against the output of the access.format tag "%r". +; On common configurations, this may look more like SCRIPT_NAME than the +; expected pre-rewrite URI. +; +; Default Value: not set +;access.suppress_path[] = /ping +;access.suppress_path[] = /health_check.php + +; The log file for slow requests +; Default Value: not set +; Note: slowlog is mandatory if request_slowlog_timeout is set +;slowlog = log/$pool.log.slow + +; 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 = 0 + +; 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 + +; The timeout set by 'request_terminate_timeout' ini option is not engaged after +; application calls 'fastcgi_finish_request' or when application has finished and +; shutdown functions are being called (registered via register_shutdown_function). +; This option will enable timeout limit to be applied unconditionally +; even in such cases. +; Default Value: no +;request_terminate_timeout_track_finished = no + +; 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 environment, this can cause some delay in the page +; process time (several ms). +; Default Value: no +;catch_workers_output = yes + +; Decorate worker output with prefix and suffix containing information about +; the child that writes to the log and if stdout or stderr is used as well as +; log level and time. This options is used only if catch_workers_output is yes. +; Settings to "no" will output data as written to the stdout or stderr. +; Default value: yes +;decorate_workers_output = no + +; 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/confs/php84/etc/php-fpm.d/www.conf.default b/confs/php84/etc/php-fpm.d/www.conf.default new file mode 100644 index 0000000..47dce6e --- /dev/null +++ b/confs/php84/etc/php-fpm.d/www.conf.default @@ -0,0 +1,495 @@ +; 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 the child processes. This can be used only if the master +; process running user is root. It is set after the child process is created. +; The user and group can be specified either by their name or by their numeric +; IDs. +; Note: If the user is root, the executable needs to be started with +; --allow-to-run-as-root option to work. +; Default Values: The user is set to master process running user by default. +; If the group is not set, the user's group is used. +;user = www-data +;group = www-data +;user = bitrix +;group = bitrix + +; 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 Linux, 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. The owner +; and group can be specified either by name or by their numeric IDs. +; Default Values: Owner is set to the master process running user. If the group +; is not set, the owner's group is used. Mode is set to 0660. +;listen.owner = www-data +;listen.group = www-data +;listen.mode = 0660 +listen.owner = bitrix +listen.group = bitrix +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 + +; Set the associated the route table (FIB). FreeBSD only +; Default Value: -1 +;listen.setfib = 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 for Linux or +; PROC_TRACE_CTL procctl for FreeBSD) even if the process user +; or group is different 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. +; pm.max_spawn_rate - the maximum number of rate to spawn child +; processes at once. +; 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 = 5 + +; 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) / 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 rate to spawn child processes at once. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +; Default Value: 32 +;pm.max_spawn_rate = 32 + +; 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 information: +; 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 information is related to the +; last request the process has served. Otherwise information is 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 address on which to accept FastCGI status request. This creates a new +; invisible pool that can handle requests independently. This is useful +; if the main pool is busy with long running requests because it is still possible +; to get the status before finishing the long running 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. +; Default Value: value of the listen option +;pm.status_listen = 127.0.0.1:9001 + +; 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) +; - %{milliseconds}d +; - %{milli}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 examples: +; - 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 encapsulated 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 encapsulated in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t +; %u: basic auth user if specified in Authorization header +; +; Default: "%R - %u %t \"%m %r\" %s" +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%" + +; A list of request_uri values which should be filtered from the access log. +; +; As a security precaution, this setting will be ignored if: +; - the request method is not GET or HEAD; or +; - there is a request body; or +; - there are query parameters; or +; - the response code is outwith the successful range of 200 to 299 +; +; Note: The paths are matched against the output of the access.format tag "%r". +; On common configurations, this may look more like SCRIPT_NAME than the +; expected pre-rewrite URI. +; +; Default Value: not set +;access.suppress_path[] = /ping +;access.suppress_path[] = /health_check.php + +; The log file for slow requests +; Default Value: not set +; Note: slowlog is mandatory if request_slowlog_timeout is set +;slowlog = log/$pool.log.slow + +; 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 = 0 + +; 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 + +; The timeout set by 'request_terminate_timeout' ini option is not engaged after +; application calls 'fastcgi_finish_request' or when application has finished and +; shutdown functions are being called (registered via register_shutdown_function). +; This option will enable timeout limit to be applied unconditionally +; even in such cases. +; Default Value: no +;request_terminate_timeout_track_finished = no + +; 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 environment, this can cause some delay in the page +; process time (several ms). +; Default Value: no +;catch_workers_output = yes + +; Decorate worker output with prefix and suffix containing information about +; the child that writes to the log and if stdout or stderr is used as well as +; log level and time. This options is used only if catch_workers_output is yes. +; Settings to "no" will output data as written to the stdout or stderr. +; Default value: yes +;decorate_workers_output = no + +; 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/confs/php84/etc/php-fpm.d/zz-docker.conf b/confs/php84/etc/php-fpm.d/zz-docker.conf new file mode 100644 index 0000000..e0590d8 --- /dev/null +++ b/confs/php84/etc/php-fpm.d/zz-docker.conf @@ -0,0 +1,5 @@ +[global] +daemonize = no + +[www] +listen = 9000 diff --git a/confs/php84/etc/php/conf.d/bitrixenv.ini b/confs/php84/etc/php/conf.d/bitrixenv.ini new file mode 100644 index 0000000..7de704d --- /dev/null +++ b/confs/php84/etc/php/conf.d/bitrixenv.ini @@ -0,0 +1,32 @@ +error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING +enable_dl = Off +short_open_tag = On +allow_url_fopen = On +max_input_vars = 10000 +max_file_uploads = 100 +max_execution_time = 300 +max_input_time = 60 +output_buffering = 4096 +request_order = GP +variables_order = GPCS +post_max_size = 1024M +upload_max_filesize = 1024M +pcre.backtrack_limit = 1000000 +pcre.recursion_limit = 14000 +realpath_cache_size = 4096k +mysql.default_socket = /var/lib/mysqld/mysqld.sock +mysqli.default_socket = /var/lib/mysqld/mysqld.sock +default_charset = UTF-8 +; session.entropy_length = 128 +; session.entropy_file = /dev/urandom +; session.cookie_httponly = On +; sendmail_path = /usr/sbin/sendmail -t -i +sendmail_path = msmtp -t -i +memory_limit = 512M +mail.add_x_header = Off +expose_php = Off +display_errors = Off +session.name = BITRIX_PHPSESSID +session.cookie_samesite = "Lax" +; session.save_path = "/php_sessions" +; upload_tmp_dir = "/php_uploads" diff --git a/confs/php84/etc/php/conf.d/docker-fpm.ini b/confs/php84/etc/php/conf.d/docker-fpm.ini new file mode 100644 index 0000000..69e787a --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-fpm.ini @@ -0,0 +1,2 @@ +; https://github.com/docker-library/php/issues/878#issuecomment-938595965 +fastcgi.logging = Off diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-amqp.ini b/confs/php84/etc/php/conf.d/docker-php-ext-amqp.ini new file mode 100644 index 0000000..fc2c671 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-amqp.ini @@ -0,0 +1 @@ +extension=amqp.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-apcu.ini b/confs/php84/etc/php/conf.d/docker-php-ext-apcu.ini new file mode 100644 index 0000000..8969a54 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-apcu.ini @@ -0,0 +1,62 @@ +; Enable APCu extension module +extension=apcu.so +; +; This can be set to 0 to disable APCu +; apc.enabled=1 +; +; Setting this enables APCu for the CLI version of PHP (Mostly for testing and debugging). +;apc.enable_cli=0 +; +; Sets the path to text files containing caches to load from disk upon +; initialization of APCu. preload_path should be a directory where each +; file follows $key.data where $key should be used as the entry name +; and the contents of the file contains serialized data to use as the value +; of the entry. +;apc.preload_path= +; +; The size of each shared memory segment, with M/G suffixe +;apc.shm_size=32M +; +; The number of seconds a cache entry is allowed to idle in a slot in case +; this cache entry slot is needed by another entry. +;apc.ttl=0 +; +; The number of seconds that a cache entry may remain on the +; garbage-collection list. +;apc.gc_ttl=3600 +; +; If you begin to get low on resources, an expunge of the cache +; is performed if it is less than half full. This is not always +; a suitable way of determining if an expunge of the cache +; should be per apc.smart allows you to set a runtime configuration +; value which is used to determine if an expunge should be run +; if (available_size < apc.smart * requested_size) +;apc.smart=0 +; +; A "hint" about the number variables expected in the cache. +; Set to zero or omit if you are not sure; +;apc.entries_hint=4096 +; +; The mktemp-style file_mask to pass to the mmap module +; apc.mmap_file_mask=/tmp/apc.XXXXXX +; +; On very busy servers whenever you start the server or +; modify files you can create a race of many processes +; all trying to cache the same data at the same time. +; By default, APCu attempts to prevent "slamming" of a key. +; A key is considered "slammed" if it was the last key set, +; and a context other than the current one set it ( ie. it +; was set by another process or thread ) +;apc.slam_defense=0 +; +; Defines which serializer should be used +; Default is the standard PHP serializer. +;apc.serializer='php' +; +; use the SAPI request start time for TTL +;apc.use_request_time=0 +; +; Enables APCu handling of signals, such as SIGSEGV, that write core files +; when signaled. APCu will attempt to unmap the shared memory segment in +; order to exclude it from the core file +;apc.coredump_unmap=0 diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-bz2.ini b/confs/php84/etc/php/conf.d/docker-php-ext-bz2.ini new file mode 100644 index 0000000..f9d67d2 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-bz2.ini @@ -0,0 +1 @@ +extension=bz2.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-calendar.ini b/confs/php84/etc/php/conf.d/docker-php-ext-calendar.ini new file mode 100644 index 0000000..9106f44 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-calendar.ini @@ -0,0 +1 @@ +extension=calendar.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-exif.ini b/confs/php84/etc/php/conf.d/docker-php-ext-exif.ini new file mode 100644 index 0000000..0688bbe --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-exif.ini @@ -0,0 +1 @@ +extension=exif.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-gd.ini b/confs/php84/etc/php/conf.d/docker-php-ext-gd.ini new file mode 100644 index 0000000..1941c0d --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-gd.ini @@ -0,0 +1 @@ +extension=gd.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-gettext.ini b/confs/php84/etc/php/conf.d/docker-php-ext-gettext.ini new file mode 100644 index 0000000..1b2e930 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-gettext.ini @@ -0,0 +1 @@ +extension=gettext.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-igbinary.ini b/confs/php84/etc/php/conf.d/docker-php-ext-igbinary.ini new file mode 100644 index 0000000..1666292 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-igbinary.ini @@ -0,0 +1 @@ +extension=igbinary.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-imagick.ini b/confs/php84/etc/php/conf.d/docker-php-ext-imagick.ini new file mode 100644 index 0000000..d7513f1 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-imagick.ini @@ -0,0 +1 @@ +extension=imagick.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-intl.ini b/confs/php84/etc/php/conf.d/docker-php-ext-intl.ini new file mode 100644 index 0000000..b334e92 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-intl.ini @@ -0,0 +1 @@ +extension=intl.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-ldap.ini b/confs/php84/etc/php/conf.d/docker-php-ext-ldap.ini new file mode 100644 index 0000000..00825a2 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-ldap.ini @@ -0,0 +1 @@ +extension=ldap.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-mcrypt.ini b/confs/php84/etc/php/conf.d/docker-php-ext-mcrypt.ini new file mode 100644 index 0000000..547ebdd --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-mcrypt.ini @@ -0,0 +1 @@ +extension=mcrypt.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-memcache.ini b/confs/php84/etc/php/conf.d/docker-php-ext-memcache.ini new file mode 100644 index 0000000..88cc8ba --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-memcache.ini @@ -0,0 +1,47 @@ +; Enable memcache extension module +extension=memcache.so +; +; Options for the memcache module +; see http://www.php.net/manual/en/memcache.ini.php +; +; Whether to transparently failover to other servers on errors +;memcache.allow_failover=1 +; Data will be transferred in chunks of this size +;memcache.chunk_size=32768 +; Autocompress large data +;memcache.compress_threshold=20000 +; The default TCP port number to use when connecting to the memcached server +;memcache.default_port=11211 +; Hash function {crc32, fnv} +;memcache.hash_function=crc32 +; Hash strategy {standard, consistent} +;memcache.hash_strategy=consistent +; Defines how many servers to try when setting and getting data. +;memcache.max_failover_attempts=20 +; The protocol {ascii, binary} : You need a memcached >= 1.3.0 to use the binary protocol +; The binary protocol results in less traffic and is more efficient +;memcache.protocol=ascii +; Redundancy : When enabled the client sends requests to N servers in parallel +;memcache.redundancy=1 +;memcache.session_redundancy=2 +; Lock Timeout +;memcache.lock_timeout = 15 +;memcache.prefix_host_key = 0 +;memcache.prefix_host_key_remove_www = 1 +;memcache.prefix_host_key_remove_subdomain = 0 +;memcache.prefix_static_key = '' +; +; Options to use the memcache session handler +; RPM note : save_handler and save_path are defined +; for mod_php, in /etc/httpd/conf.d/php.conf +; for php-fpm, in /etc/php-fpm.d/*conf +; Use memcache as a session handler +;session.save_handler=memcache +; Defines a comma separated of server urls to use for session storage +; Only used when memcache.session_save_path is not set +;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15" +;memcache.session_prefix_host_key = 0 +;memcache.session_prefix_host_key_remove_www = 1 +;memcache.session_prefix_host_key_remove_subdomain = 0 +;memcache.session_prefix_static_key = '' +;memcache.session_save_path = '' diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-memcached.ini b/confs/php84/etc/php/conf.d/docker-php-ext-memcached.ini new file mode 100644 index 0000000..308759a --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-memcached.ini @@ -0,0 +1,186 @@ +; Enable memcached extension module +extension=memcached.so + +; ----- Options to use the memcached session handler + +; RPM note : save_handler and save_path are defined +; for mod_php, in /etc/httpd/conf.d/php.conf +; for php-fpm, in /etc/php-fpm.d/*conf + +; Use memcache as a session handler +;session.save_handler=memcached +; Defines a comma separated list of server urls to use for session storage +;session.save_path="localhost:11211" + +; ----- Configuration options +; https://php.net/manual/en/memcached.configuration.php + +[memcached] +; Use session locking +; valid values: On, Off +; the default is On +;memcached.sess_locking = On + +; The minimum time, in milliseconds, to wait between session lock attempts. +; This value is double on each lock retry until memcached.sess_lock_wait_max +; is reached, after which any further retries will take sess_lock_wait_max seconds. +; Default is 150. +;memcached.sess_lock_wait_min = 150; + +; The maximum time, in milliseconds, to wait between session lock attempts. +; Default is 150. +;memcached.sess_lock_wait_max = 150; + +; The number of times to retry locking the session lock, not including the first attempt. +; Default is 5. +;memcached.sess_lock_retries = 5; + +; The time, in seconds, before a lock should release itself. +; Setting to 0 results in the default behaviour, which is to +; use PHP's max_execution_time. +;memcached.sess_lock_expire = 0; + +; memcached session key prefix +; valid values are strings less than 219 bytes long +; the default value is "memc.sess.key." +;memcached.sess_prefix = "memc.sess.key." + +; Whether or not to re-use the memcached connections corresponding to the value(s) +; of session.save_path after the execution of the script ends. +; Don't use this if certain settings (e.g. SASL settings, sess_binary_protocol) would +; be overridden between requests. +; Default is Off. +;memcached.sess_persistent = Off + +; memcached session consistent hash mode +; if set to On, consistent hashing (libketama) is used +; for session handling. +; When consistent hashing is used, one can add or remove cache +; node(s) without messing up too much with existing keys +; default is On +;memcached.sess_consistent_hash = On + +; memcached session consistent hash type +; if set to 'ketama', consistent hashing (libketama) is used +; for session handling (default for php-memcached 3.x) +; if set to 'ketama_weighted', weighted consistent hashing (libketama) is used +; for session handling (default for php-memcached 2.x) +;memcached.sess_consistent_hash_type = "ketama" + +; Allow failed memcached server to automatically be removed. +; Default is Off. (In previous versions, this setting was called memcached.sess_remove_failed) +;memcached.sess_remove_failed_servers = Off + +; Set this value to enable the server be removed after +; configured number of continuous times connection failure. +;memcached.sess_server_failure_limit = 0 + +; Write data to a number of additional memcached servers +; This is "poor man's HA" as libmemcached calls it. +; If this value is positive and sess_remove_failed_servers is enabled +; when a memcached server fails the session will continue to be available +; from a replica. However, if the failed memcache server +; becomes available again it will read the session from there +; which could have old data or no data at all +;memcached.sess_number_of_replicas = 0 + +; Use the memcached binary protocol for memcached sessions (Instead of the text protocol) +; libmemcached replicas work only if binary mode is enabled. +; However, certain proxies (such as twemproxy) will work only if the binary protocol is disabled. +; In older versions of php-memcached, this setting was Off and was called memcached.sess_binary. +; Default is On with libmemcached 1.0.18 or newer. +; Default is Off with older version. +;memcached.sess_binary_protocol = On + +; memcached session replica read randomize +;memcached.sess_randomize_replica_read = Off + +; memcached connect timeout value +; In non-blocking mode this changes the value of the timeout +; during socket connection in milliseconds. Specifying -1 means an infinite timeout. +;memcached.sess_connect_timeout = 1000 + +; Session SASL username +; Both username and password need to be set for SASL to be enabled +;memcached.sess_sasl_username = NULL + +; Session SASL password +;memcached.sess_sasl_password = NULL + +; Set the compression type +; valid values are: fastlz, zlib +; the default is fastlz +;memcached.compression_type = "fastlz" + +; Compression factor +; Store compressed value only if the compression +; factor (saving) exceeds the set limit. +; +; store compressed if: +; plain_len > comp_len * factor +; +; the default value is 1.3 (23% space saving) +;memcached.compression_factor = "1.3" + +; The compression threshold +; +; Do not compress serialized values below this threshold. +; the default is 2000 bytes +;memcached.compression_threshold = 2000 + +; Set the default serializer for new memcached objects. +; valid values are: php, igbinary, json, json_array, msgpack +; +; json - standard php JSON encoding. This serializer +; is fast and compact but only works on UTF-8 +; encoded data and does not fully implement +; serializing. See the JSON extension. +; json_array - as json, but decodes into arrays +; php - the standard php serializer +; igbinary - a binary serializer +; msgpack - a cross-language binary serializer +; +; The default is igbinary if available, then msgpack if available, then php otherwise. +;memcached.serializer = "igbinary" + +; The amount of retries for failed store commands. +; This mechanism allows transparent fail-over to secondary servers when +; set/increment/decrement/setMulti operations fail on the desired server in a multi-server +; environment. +; the default is 0 +;memcached.store_retry_count = 0 + +; The maximum payload size in bytes that can be written. +; Writing a payload larger than the limit will result in RES_E2BIG error. +; Specifying 0 means no limit is enforced, though the server may still reject with RES_E2BIG. +; Default is 0. +;memcached.item_size_limit = 1000000 + +; Sets the default for consistent hashing for new connections. +; (To configure consistent hashing for session connections, +; use memcached.sess_consistent_hash instead) +; +; If set to On, consistent hashing (libketama) is used +; for session handling. +; When consistent hashing is used, one can add or remove cache +; node(s) without messing up too much with existing keys +; default is Off +;memcached.default_consistent_hash = Off + +; Sets the default memcached protocol for new connections. +; (To configure the memcached protocol for connections used by sessions, +; use memcached.sess_binary_protocol instead) +; +; If set to On, the memcached binary protocol is used by default. +; If set to Off, the memcached text protocol is used. +; Default is Off +;memcached.default_binary_protocol = Off + +; Sets the default memcached connection timeout for new connections. +; (To configure the memcached connection timeout for sessions, +; use memcached.sess_connect_timeout instead) +; In non-blocking mode this changes the value of the timeout. +; during socket connection in milliseconds. Specifying -1 means an infinite timeout. +; Specifying 0 means using the memcached library's default connection timeout. +; Default is 0. +;memcached.default_connect_timeout = 0 diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-msgpack.ini b/confs/php84/etc/php/conf.d/docker-php-ext-msgpack.ini new file mode 100644 index 0000000..c72b98d --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-msgpack.ini @@ -0,0 +1 @@ +extension=msgpack.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-mysqli.ini b/confs/php84/etc/php/conf.d/docker-php-ext-mysqli.ini new file mode 100644 index 0000000..9d0502f --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-mysqli.ini @@ -0,0 +1 @@ +extension=mysqli.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-opcache.ini b/confs/php84/etc/php/conf.d/docker-php-ext-opcache.ini new file mode 100644 index 0000000..a569956 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-opcache.ini @@ -0,0 +1,12 @@ +zend_extension=opcache.so +opcache.enable=1 +opcache.memory_consumption=471 +opcache.interned_strings_buffer=117 +opcache.max_accelerated_files=100000 +opcache.max_wasted_percentage=1 +opcache.validate_timestamps=1 +opcache.revalidate_freq=0 +opcache.fast_shutdown=1 +opcache.save_comments=1 +opcache.load_comments=1 +;opcache.blacklist_filename=/etc/php.d/opcache*.blacklist diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-pdo_mysql.ini b/confs/php84/etc/php/conf.d/docker-php-ext-pdo_mysql.ini new file mode 100644 index 0000000..34a7ff5 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-pdo_mysql.ini @@ -0,0 +1 @@ +extension=pdo_mysql.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini b/confs/php84/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini new file mode 100644 index 0000000..d1f7bf0 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini @@ -0,0 +1 @@ +extension=pdo_pgsql.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-pgsql.ini b/confs/php84/etc/php/conf.d/docker-php-ext-pgsql.ini new file mode 100644 index 0000000..21be5e4 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-pgsql.ini @@ -0,0 +1 @@ +extension=pgsql.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-pspell.ini b/confs/php84/etc/php/conf.d/docker-php-ext-pspell.ini new file mode 100644 index 0000000..b4d0a8c --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-pspell.ini @@ -0,0 +1 @@ +extension=pspell.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-redis.ini b/confs/php84/etc/php/conf.d/docker-php-ext-redis.ini new file mode 100644 index 0000000..6aecae4 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-redis.ini @@ -0,0 +1 @@ +extension=redis.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-shmop.ini b/confs/php84/etc/php/conf.d/docker-php-ext-shmop.ini new file mode 100644 index 0000000..b554ad3 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-shmop.ini @@ -0,0 +1 @@ +extension=shmop.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-sockets.ini b/confs/php84/etc/php/conf.d/docker-php-ext-sockets.ini new file mode 100644 index 0000000..327228b --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-sockets.ini @@ -0,0 +1 @@ +extension=sockets.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-sodium.ini b/confs/php84/etc/php/conf.d/docker-php-ext-sodium.ini new file mode 100644 index 0000000..5ee7788 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-sodium.ini @@ -0,0 +1 @@ +extension=sodium.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-ssh2.ini b/confs/php84/etc/php/conf.d/docker-php-ext-ssh2.ini new file mode 100644 index 0000000..3422094 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-ssh2.ini @@ -0,0 +1 @@ +; extension=ssh2.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-sysvmsg.ini b/confs/php84/etc/php/conf.d/docker-php-ext-sysvmsg.ini new file mode 100644 index 0000000..639950e --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-sysvmsg.ini @@ -0,0 +1 @@ +extension=sysvmsg.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-sysvsem.ini b/confs/php84/etc/php/conf.d/docker-php-ext-sysvsem.ini new file mode 100644 index 0000000..dd2c343 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-sysvsem.ini @@ -0,0 +1 @@ +extension=sysvsem.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-sysvshm.ini b/confs/php84/etc/php/conf.d/docker-php-ext-sysvshm.ini new file mode 100644 index 0000000..4c26779 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-sysvshm.ini @@ -0,0 +1 @@ +extension=sysvshm.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-xdebug.ini b/confs/php84/etc/php/conf.d/docker-php-ext-xdebug.ini new file mode 100644 index 0000000..ba57b5d --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-xdebug.ini @@ -0,0 +1,10 @@ +zend_extension=xdebug.so + +xdebug.mode=debug +xdebug.start_with_request = trigger +xdebug.client_host=host.docker.internal +xdebug.client_port=9003 +xdebug.idekey=PHPSTORM +xdebug.discover_client_host = 1 +;xdebug.log=/tmp/xdebug.log +xdebug.log_level=7 \ No newline at end of file diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-xhprof.ini b/confs/php84/etc/php/conf.d/docker-php-ext-xhprof.ini new file mode 100644 index 0000000..b5d90e2 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-xhprof.ini @@ -0,0 +1,7 @@ +; Enable xhprof extension module +; extension=xhprof.so +; You can either pass the directory location as an argument to the constructor for XHProfRuns_Default() or set xhprof.output_dir ini param. +;xhprof.output_dir='' +;xhprof.collect_additional_info=0 +;xhprof.sampling_interval=100000 +;xhprof.sampling_depth=0x7fffffff diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-xsl.ini b/confs/php84/etc/php/conf.d/docker-php-ext-xsl.ini new file mode 100644 index 0000000..3223510 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-xsl.ini @@ -0,0 +1 @@ +extension=xsl.so diff --git a/confs/php84/etc/php/conf.d/docker-php-ext-zip.ini b/confs/php84/etc/php/conf.d/docker-php-ext-zip.ini new file mode 100644 index 0000000..bb70997 --- /dev/null +++ b/confs/php84/etc/php/conf.d/docker-php-ext-zip.ini @@ -0,0 +1 @@ +extension=zip.so diff --git a/confs/php84/etc/php/conf.d/timezone.ini.example b/confs/php84/etc/php/conf.d/timezone.ini.example new file mode 100644 index 0000000..649566c --- /dev/null +++ b/confs/php84/etc/php/conf.d/timezone.ini.example @@ -0,0 +1 @@ +date.timezone = Europe/Moscow diff --git a/confs/php84/etc/php/php.ini-development b/confs/php84/etc/php/php.ini-development new file mode 100644 index 0000000..6e5064d --- /dev/null +++ b/confs/php84/etc/php/php.ini-development @@ -0,0 +1,1848 @@ +[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. +; 3. A number of predefined registry keys on Windows +; 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 (usually C:\windows) +; See the PHP docs for more specific information. +; https://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. +; https://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-conscious 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 the php.ini-development 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: On +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED + +; 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 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +; zend.assertions +; Default Value: 1 +; Development Value: 1 +; Production Value: -1 + +; zend.exception_ignore_args +; Default Value: Off +; Development Value: Off +; Production Value: On + +; zend.exception_string_param_max_len +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 + +;;;;;;;;;;;;;;;;;;;; +; 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 an 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. +; https://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. +; https://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. +; https://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. +; Note: if open_basedir is set, the cache is disabled +; https://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. +; https://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +; Enables or disables the circular reference collector. +; https://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. +;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. +;zend.script_encoding = + +; Allows to include or exclude arguments from stack traces generated for exceptions. +; In production, it is recommended to turn this setting on to prohibit the output +; of sensitive information in stack traces +; Default Value: Off +; Development Value: Off +; Production Value: On +zend.exception_ignore_args = Off + +; Allows setting the maximum string length in an argument of a stringified stack trace +; to a value between 0 and 1000000. +; This has no effect when zend.exception_ignore_args is enabled. +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 +zend.exception_string_param_max_len = 15 + +;;;;;;;;;;;;;;;;; +; 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. +; https://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; https://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) +; https://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; https://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 + +; How many multipart body parts (combined input variable and file uploads) may +; be accepted. +; Default Value: -1 (Sum of max_input_vars and max_file_uploads) +;max_multipart_body_parts = 1500 + +; Maximum amount of memory a script may consume +; https://php.net/memory-limit +memory_limit = 128M + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; 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, 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 +; 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_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_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; Default Value: E_ALL +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED +; https://php.net/error-reporting +error_reporting = E_ALL + +; 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 +; https://php.net/display-errors +display_errors = On + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. We strongly recommend you set this to 'off' +; for production servers to avoid leaking configuration details. +; Default Value: On +; Development Value: On +; Production Value: Off +; https://php.net/display-startup-errors +display_startup_errors = On + +; 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 +; https://php.net/log-errors +log_errors = On + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; https://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. +; https://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 is only effective in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; https://php.net/report-memleaks +report_memleaks = On + +; This setting is off by default. +;report_zend_debug = 0 + +; Turn off normal error reporting and emit XML-RPC error XML +; https://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 +; https://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 https://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. +; https://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; https://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; https://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. +; https://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; https://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on Windows). +;error_log = syslog + +; The syslog ident is a string which is prepended to every message logged +; to syslog. Only used when error_log is set to syslog. +;syslog.ident = php + +; The syslog facility is used to specify what type of program is logging +; the message. Only used when error_log is set to syslog. +;syslog.facility = user + +; Set this to disable filtering control characters (the default). +; Some loggers only accept NVT-ASCII, others accept anything that's not +; control characters. If your logger accepts everything, then no filtering +; is needed at all. +; Allowed values are: +; ascii (all printable ASCII characters and NL) +; no-ctrl (all characters except control characters) +; all (all characters) +; raw (like "all", but messages are not split at newlines) +; https://php.net/syslog.filter +;syslog.filter = ascii + +;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 "&". +; https://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! +; https://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"; +; https://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" +; https://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 +; https://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 effect. +; https://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. +; https://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. +; https://php.net/post-max-size +post_max_size = 8M + +; Automatically add files before PHP document. +; https://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; https://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. +; https://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to UTF-8. +; https://php.net/default-charset +default_charset = "UTF-8" + +; PHP internal character encoding is set to empty. +; If empty, default_charset is used. +; https://php.net/internal-encoding +;internal_encoding = + +; PHP input character encoding is set to empty. +; If empty, default_charset is used. +; https://php.net/input-encoding +;input_encoding = + +; PHP output character encoding is set to empty. +; If empty, default_charset is used. +; See also output_buffer. +; https://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" +; https://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 +; https://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; https://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; https://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. +; https://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.** +; https://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. +; https://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. +; https://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. +;cgi.discard_path=1 + +; FastCGI under IIS 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. +; https://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. +; https://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. +; https://php.net/cgi.check-shebang-line +;cgi.check_shebang_line=1 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; https://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; https://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; https://php.net/upload-max-filesize +upload_max_filesize = 2M + +; 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. +; https://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like https:// or ftp://) as files. +; https://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. +; https://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; https://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; https://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. +; https://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 +; +; For example: +; +; extension=mysqli +; +; When the extension library to load is not located in the default extension +; directory, You may specify an absolute path to the library file: +; +; extension=/path/to/extension/mysqli.so +; +; Note : The syntax used in previous PHP versions ('extension=.so' and +; 'extension='php_.dll') is supported for legacy reasons and may be +; deprecated in a future PHP major version. So, when it is possible, please +; move to the new ('extension=) syntax. +; +; Notes for Windows environments : +; +; - Many DLL files are located in the ext/ +; extension folders as well as the separate PECL DLL download. +; Be sure to appropriately set the extension_dir directive. +; +;extension=bz2 +;extension=curl +;extension=ffi +;extension=ftp +;extension=fileinfo +;extension=gd +;extension=gettext +;extension=gmp +;extension=intl +;extension=ldap +;extension=mbstring +;extension=exif ; Must be after mbstring as it depends on it +;extension=mysqli +;extension=odbc +;extension=openssl +;extension=pdo_firebird +;extension=pdo_mysql +;extension=pdo_odbc +;extension=pdo_pgsql +;extension=pdo_sqlite +;extension=pgsql +;extension=shmop + +; The MIBS data available in the PHP distribution must be installed. +; See https://www.php.net/manual/en/snmp.installation.php +;extension=snmp + +;extension=soap +;extension=sockets +;extension=sodium +;extension=sqlite3 +;extension=tidy +;extension=xsl +;extension=zip + +;zend_extension=opcache + +;;;;;;;;;;;;;;;;;;; +; 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 +; https://php.net/date.timezone +;date.timezone = + +; https://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; https://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; https://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.833333 + +; https://php.net/date.sunset-zenith +;date.sunset_zenith = 90.833333 + +[filter] +; https://php.net/filter.default +;filter.default = unsafe_raw + +; https://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 < input_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] +; Directory pointing to SQLite3 extensions +; https://php.net/sqlite3.extension-dir +;sqlite3.extension_dir = + +; SQLite defensive mode flag (only available from SQLite 3.26+) +; When the defensive flag is enabled, language features that allow ordinary +; SQL to deliberately corrupt the database file are disabled. This forbids +; writing directly to the schema, shadow tables (eg. FTS data tables), or +; the sqlite_dbpage virtual table. +; https://www.sqlite.org/c3ref/c_dbconfig_defensive.html +; (for older SQLite versions, this flag has no use) +;sqlite3.defensive = 1 + +[Pcre] +; PCRE library backtracking limit. +; https://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). +; https://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" +; https://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +[Pdo_mysql] +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +pdo_mysql.default_socket= + +[Phar] +; https://php.net/phar.readonly +;phar.readonly = On + +; https://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[mail function] +; For Win32 only. +; https://php.net/smtp +SMTP = localhost +; https://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; https://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; https://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 = Off + +; Use mixed LF and CRLF line separators to keep compatibility with some +; RFC 2822 non conformant MTA. +mail.mixed_lf_and_crlf = Off + +; 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] +; https://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; https://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; https://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. +; https://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; https://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; https://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; https://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; https://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 +; https://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; https://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; https://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; It allows the user to specify a folder where files that can be sent via LOAD DATA +; LOCAL can exist. It is ignored if mysqli.allow_local_infile is enabled. +;mysqli.local_infile_directory = + +; Allow or prevent persistent links. +; https://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; https://php.net/mysqli.max-links +mysqli.max_links = -1 + +; 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. +; https://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; https://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysqli_connect() (doesn't apply in safe mode). +; https://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysqli_connect() (doesn't apply in safe mode). +; https://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. +; https://php.net/mysqli.default-pw +mysqli.default_pw = + +; If this option is enabled, closing a persistent connection will rollback +; any pending transactions of this connection, before it is put back +; into the persistent connection pool. +;mysqli.rollback_on_cached_plink = Off + +[mysqlnd] +; Enable / Disable collection of general statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +mysqlnd.collect_memory_statistics = On + +; Records communication from all extensions using mysqlnd to the specified log +; file. +; https://php.net/mysqlnd.debug +;mysqlnd.debug = + +; Defines which queries will be logged. +;mysqlnd.log_mask = 0 + +; Default size of the mysqlnd memory pool, which is used by result sets. +;mysqlnd.mempool_default_size = 16000 + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +;mysqlnd.net_read_buffer_size = 32768 + +; Timeout for network requests in seconds. +;mysqlnd.net_read_timeout = 31536000 + +; SHA-256 Authentication Plugin related. File with the MySQL server public RSA +; key. +;mysqlnd.sha256_server_public_key = + +[PostgreSQL] +; Allow or prevent persistent links. +; https://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; https://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; https://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; https://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; https://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. +; https://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[bcmath] +; Number of decimal digits for all bcmath functions. +; https://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; https://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; https://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. +; https://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use strict session mode. +; Strict session mode does not accept an uninitialized session ID, and +; regenerates the session ID if the browser sends an uninitialized session ID. +; Strict mode protects applications from session fixation via a 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. +; https://php.net/session.use-cookies +session.use_cookies = 1 + +; https://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. +; https://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; https://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; https://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; https://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; https://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; https://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. +; https://php.net/session.cookie-httponly +session.cookie_httponly = + +; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) +; Current valid values are "Strict", "Lax" or "None". When using "None", +; make sure to include the quotes, as `none` is interpreted like `false` in ini files. +; https://tools.ietf.org/html/draft-west-first-party-cookies-07 +session.cookie_samesite = + +; Handler used to serialize data. php is the standard serializer of PHP. +; https://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, +; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; https://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 gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. +; For high volume production servers, using a value of 1000 is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; https://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. +; https://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 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. +; https://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. +; https://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; https://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. +; https://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; 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=" +; https://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 paths, 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="" + +; Enable upload progress tracking in $_SESSION +; Default Value: On +; Development Value: On +; Production Value: On +; https://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 +; https://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_" +; https://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" +; https://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%" +; https://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 +; https://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. +; https://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, toggle zend.assertions between the values 1 and 0) +; Default Value: 1 +; Development Value: 1 +; Production Value: -1 +; https://php.net/zend.assertions +zend.assertions = 1 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; https://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; https://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a component's typelib on com_load() +; https://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; https://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; https://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= + +; The version of the .NET framework to use. The value of the setting are the first three parts +; of the framework's version number, separated by dots, and prefixed with "v", e.g. "v4.0.30319". +;com.dotnet_version= + +[mbstring] +; language for internal character representation. +; This affects mb_send_mail() and mbstring.detect_order. +; https://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_translation = On is needed to use this setting. +; If empty, default_charset or input_encoding or mbstring.input is used. +; The precedence is: default_charset < input_encoding < mbstring.http_input +; https://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. +; https://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. +; https://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; "auto" detect order is changed according to mbstring.language +; https://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; https://php.net/mbstring.substitute-character +;mbstring.substitute_character = none + +; Enable strict encoding detection. +;mbstring.strict_detection = Off + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetypes=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetypes= + +; This directive specifies maximum stack depth for mbstring regular expressions. It is similar +; to the pcre.recursion_limit for PCRE. +;mbstring.regex_stack_limit=100000 + +; This directive specifies maximum retry count for mbstring regular expressions. It is similar +; to the pcre.backtrack_limit for PCRE. +;mbstring.regex_retry_limit=1000000 + +[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 +; https://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 must not be empty. +; https://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; https://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; https://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; https://php.net/exif.encode-jis +;exif.encode_jis = + +; https://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; https://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 +; https://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 +; https://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; https://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; https://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. +; https://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=0 + +; 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, compilation warnings (including notices and deprecations) will +; be recorded and replayed each time a file is included. Otherwise, compilation +; warnings will only be emitted when the file is first cached. +;opcache.record_warnings=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=0x7FFFBFFF + +;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 + +; 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= + +; Facilitates multiple OPcache instances per user (for Windows only). All PHP +; processes with the same cache ID and user share an OPcache instance. +;opcache.cache_id= + +; 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. +; Under certain circumstances (if only a single global PHP process is +; started from which all others fork), this can increase performance +; by a tiny amount because TLB misses are reduced. On the other hand, this +; delays PHP startup, increases memory usage and degrades performance +; under memory pressure - use with care. +; Requires appropriate OS configuration. +;opcache.huge_code_pages=0 + +; Validate cached file permissions. +;opcache.validate_permission=0 + +; Prevent name collisions in chroot'ed environment. +;opcache.validate_root=0 + +; If specified, it produces opcode dumps for debugging different stages of +; optimizations. +;opcache.opt_debug_level=0 + +; Specifies a PHP script that is going to be compiled and executed at server +; start-up. +; https://php.net/opcache.preload +;opcache.preload= + +; Preloading code as root is not allowed for security reasons. This directive +; facilitates to let the preloading to be run as another user. +; https://php.net/opcache.preload_user +;opcache.preload_user= + +; Prevents caching files that are less than this number of seconds old. It +; protects from caching of incompletely updated files. In case all file updates +; on your site are atomic, you may increase performance by setting it to "0". +;opcache.file_update_protection=2 + +; Absolute path used to store shared lockfiles (for *nix only). +;opcache.lockfile_path=/tmp + +[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= + +[ffi] +; FFI API restriction. Possible values: +; "preload" - enabled in CLI scripts and preloaded files (default) +; "false" - always disabled +; "true" - always enabled +;ffi.enable=preload + +; List of headers files to preload, wildcard patterns allowed. +;ffi.preload= diff --git a/confs/php84/etc/php/php.ini-production b/confs/php84/etc/php/php.ini-production new file mode 100644 index 0000000..c62faf5 --- /dev/null +++ b/confs/php84/etc/php/php.ini-production @@ -0,0 +1,1850 @@ +[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. +; 3. A number of predefined registry keys on Windows +; 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 (usually C:\windows) +; See the PHP docs for more specific information. +; https://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. +; https://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-conscious 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 the 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: On +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED + +; 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 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +; zend.assertions +; Default Value: 1 +; Development Value: 1 +; Production Value: -1 + +; zend.exception_ignore_args +; Default Value: Off +; Development Value: Off +; Production Value: On + +; zend.exception_string_param_max_len +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 + +;;;;;;;;;;;;;;;;;;;; +; 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 an 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. +; https://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. +; https://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. +; https://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. +; Note: if open_basedir is set, the cache is disabled +; https://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. +; https://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +; Enables or disables the circular reference collector. +; https://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. +;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. +;zend.script_encoding = + +; Allows to include or exclude arguments from stack traces generated for exceptions. +; In production, it is recommended to turn this setting on to prohibit the output +; of sensitive information in stack traces +; Default Value: Off +; Development Value: Off +; Production Value: On +zend.exception_ignore_args = On + +; Allows setting the maximum string length in an argument of a stringified stack trace +; to a value between 0 and 1000000. +; This has no effect when zend.exception_ignore_args is enabled. +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 +; In production, it is recommended to set this to 0 to reduce the output +; of sensitive information in stack traces. +zend.exception_string_param_max_len = 0 + +;;;;;;;;;;;;;;;;; +; 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. +; https://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; https://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) +; https://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; https://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 + +; How many multipart body parts (combined input variable and file uploads) may +; be accepted. +; Default Value: -1 (Sum of max_input_vars and max_file_uploads) +;max_multipart_body_parts = 1500 + +; Maximum amount of memory a script may consume +; https://php.net/memory-limit +memory_limit = 128M + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; 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, 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 +; 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_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_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; Default Value: E_ALL +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED +; https://php.net/error-reporting +error_reporting = E_ALL & ~E_DEPRECATED + +; 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 +; https://php.net/display-errors +display_errors = Off + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. We strongly recommend you set this to 'off' +; for production servers to avoid leaking configuration details. +; Default Value: On +; Development Value: On +; Production Value: Off +; https://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 +; https://php.net/log-errors +log_errors = On + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; https://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. +; https://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 is only effective in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; https://php.net/report-memleaks +report_memleaks = On + +; This setting is off by default. +;report_zend_debug = 0 + +; Turn off normal error reporting and emit XML-RPC error XML +; https://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 +; https://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 https://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. +; https://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; https://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; https://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. +; https://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; https://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on Windows). +;error_log = syslog + +; The syslog ident is a string which is prepended to every message logged +; to syslog. Only used when error_log is set to syslog. +;syslog.ident = php + +; The syslog facility is used to specify what type of program is logging +; the message. Only used when error_log is set to syslog. +;syslog.facility = user + +; Set this to disable filtering control characters (the default). +; Some loggers only accept NVT-ASCII, others accept anything that's not +; control characters. If your logger accepts everything, then no filtering +; is needed at all. +; Allowed values are: +; ascii (all printable ASCII characters and NL) +; no-ctrl (all characters except control characters) +; all (all characters) +; raw (like "all", but messages are not split at newlines) +; https://php.net/syslog.filter +;syslog.filter = ascii + +;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 "&". +; https://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! +; https://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"; +; https://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" +; https://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 +; https://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 effect. +; https://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. +; https://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. +; https://php.net/post-max-size +post_max_size = 8M + +; Automatically add files before PHP document. +; https://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; https://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. +; https://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to UTF-8. +; https://php.net/default-charset +default_charset = "UTF-8" + +; PHP internal character encoding is set to empty. +; If empty, default_charset is used. +; https://php.net/internal-encoding +;internal_encoding = + +; PHP input character encoding is set to empty. +; If empty, default_charset is used. +; https://php.net/input-encoding +;input_encoding = + +; PHP output character encoding is set to empty. +; If empty, default_charset is used. +; See also output_buffer. +; https://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" +; https://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 +; https://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; https://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; https://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. +; https://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.** +; https://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. +; https://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. +; https://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. +;cgi.discard_path=1 + +; FastCGI under IIS 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. +; https://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. +; https://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. +; https://php.net/cgi.check-shebang-line +;cgi.check_shebang_line=1 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; https://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; https://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; https://php.net/upload-max-filesize +upload_max_filesize = 2M + +; 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. +; https://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like https:// or ftp://) as files. +; https://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. +; https://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; https://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; https://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. +; https://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 +; +; For example: +; +; extension=mysqli +; +; When the extension library to load is not located in the default extension +; directory, You may specify an absolute path to the library file: +; +; extension=/path/to/extension/mysqli.so +; +; Note : The syntax used in previous PHP versions ('extension=.so' and +; 'extension='php_.dll') is supported for legacy reasons and may be +; deprecated in a future PHP major version. So, when it is possible, please +; move to the new ('extension=) syntax. +; +; Notes for Windows environments : +; +; - Many DLL files are located in the ext/ +; extension folders as well as the separate PECL DLL download. +; Be sure to appropriately set the extension_dir directive. +; +;extension=bz2 +;extension=curl +;extension=ffi +;extension=ftp +;extension=fileinfo +;extension=gd +;extension=gettext +;extension=gmp +;extension=intl +;extension=ldap +;extension=mbstring +;extension=exif ; Must be after mbstring as it depends on it +;extension=mysqli +;extension=odbc +;extension=openssl +;extension=pdo_firebird +;extension=pdo_mysql +;extension=pdo_odbc +;extension=pdo_pgsql +;extension=pdo_sqlite +;extension=pgsql +;extension=shmop + +; The MIBS data available in the PHP distribution must be installed. +; See https://www.php.net/manual/en/snmp.installation.php +;extension=snmp + +;extension=soap +;extension=sockets +;extension=sodium +;extension=sqlite3 +;extension=tidy +;extension=xsl +;extension=zip + +;zend_extension=opcache + +;;;;;;;;;;;;;;;;;;; +; 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 +; https://php.net/date.timezone +;date.timezone = + +; https://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; https://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; https://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.833333 + +; https://php.net/date.sunset-zenith +;date.sunset_zenith = 90.833333 + +[filter] +; https://php.net/filter.default +;filter.default = unsafe_raw + +; https://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 < input_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] +; Directory pointing to SQLite3 extensions +; https://php.net/sqlite3.extension-dir +;sqlite3.extension_dir = + +; SQLite defensive mode flag (only available from SQLite 3.26+) +; When the defensive flag is enabled, language features that allow ordinary +; SQL to deliberately corrupt the database file are disabled. This forbids +; writing directly to the schema, shadow tables (eg. FTS data tables), or +; the sqlite_dbpage virtual table. +; https://www.sqlite.org/c3ref/c_dbconfig_defensive.html +; (for older SQLite versions, this flag has no use) +;sqlite3.defensive = 1 + +[Pcre] +; PCRE library backtracking limit. +; https://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). +; https://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" +; https://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +[Pdo_mysql] +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +pdo_mysql.default_socket= + +[Phar] +; https://php.net/phar.readonly +;phar.readonly = On + +; https://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[mail function] +; For Win32 only. +; https://php.net/smtp +SMTP = localhost +; https://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; https://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; https://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 = Off + +; Use mixed LF and CRLF line separators to keep compatibility with some +; RFC 2822 non conformant MTA. +mail.mixed_lf_and_crlf = Off + +; 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] +; https://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; https://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; https://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. +; https://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; https://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; https://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; https://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; https://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 +; https://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; https://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; https://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; It allows the user to specify a folder where files that can be sent via LOAD DATA +; LOCAL can exist. It is ignored if mysqli.allow_local_infile is enabled. +;mysqli.local_infile_directory = + +; Allow or prevent persistent links. +; https://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; https://php.net/mysqli.max-links +mysqli.max_links = -1 + +; 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. +; https://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; https://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysqli_connect() (doesn't apply in safe mode). +; https://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysqli_connect() (doesn't apply in safe mode). +; https://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. +; https://php.net/mysqli.default-pw +mysqli.default_pw = + +; If this option is enabled, closing a persistent connection will rollback +; any pending transactions of this connection, before it is put back +; into the persistent connection pool. +;mysqli.rollback_on_cached_plink = Off + +[mysqlnd] +; Enable / Disable collection of general statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +mysqlnd.collect_memory_statistics = Off + +; Records communication from all extensions using mysqlnd to the specified log +; file. +; https://php.net/mysqlnd.debug +;mysqlnd.debug = + +; Defines which queries will be logged. +;mysqlnd.log_mask = 0 + +; Default size of the mysqlnd memory pool, which is used by result sets. +;mysqlnd.mempool_default_size = 16000 + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +;mysqlnd.net_read_buffer_size = 32768 + +; Timeout for network requests in seconds. +;mysqlnd.net_read_timeout = 31536000 + +; SHA-256 Authentication Plugin related. File with the MySQL server public RSA +; key. +;mysqlnd.sha256_server_public_key = + +[PostgreSQL] +; Allow or prevent persistent links. +; https://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; https://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; https://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; https://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; https://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. +; https://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[bcmath] +; Number of decimal digits for all bcmath functions. +; https://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; https://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; https://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. +; https://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use strict session mode. +; Strict session mode does not accept an uninitialized session ID, and +; regenerates the session ID if the browser sends an uninitialized session ID. +; Strict mode protects applications from session fixation via a 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. +; https://php.net/session.use-cookies +session.use_cookies = 1 + +; https://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. +; https://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; https://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; https://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; https://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; https://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; https://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. +; https://php.net/session.cookie-httponly +session.cookie_httponly = + +; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) +; Current valid values are "Strict", "Lax" or "None". When using "None", +; make sure to include the quotes, as `none` is interpreted like `false` in ini files. +; https://tools.ietf.org/html/draft-west-first-party-cookies-07 +session.cookie_samesite = + +; Handler used to serialize data. php is the standard serializer of PHP. +; https://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, +; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; https://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 gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. +; For high volume production servers, using a value of 1000 is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; https://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. +; https://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 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. +; https://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. +; https://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; https://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. +; https://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; 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=" +; https://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 paths, 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="" + +; Enable upload progress tracking in $_SESSION +; Default Value: On +; Development Value: On +; Production Value: On +; https://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 +; https://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_" +; https://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" +; https://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%" +; https://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 +; https://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. +; https://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, toggle zend.assertions between the values 1 and 0) +; Default Value: 1 +; Development Value: 1 +; Production Value: -1 +; https://php.net/zend.assertions +zend.assertions = -1 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; https://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; https://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a component's typelib on com_load() +; https://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; https://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; https://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= + +; The version of the .NET framework to use. The value of the setting are the first three parts +; of the framework's version number, separated by dots, and prefixed with "v", e.g. "v4.0.30319". +;com.dotnet_version= + +[mbstring] +; language for internal character representation. +; This affects mb_send_mail() and mbstring.detect_order. +; https://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_translation = On is needed to use this setting. +; If empty, default_charset or input_encoding or mbstring.input is used. +; The precedence is: default_charset < input_encoding < mbstring.http_input +; https://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. +; https://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. +; https://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; "auto" detect order is changed according to mbstring.language +; https://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; https://php.net/mbstring.substitute-character +;mbstring.substitute_character = none + +; Enable strict encoding detection. +;mbstring.strict_detection = Off + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetypes=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetypes= + +; This directive specifies maximum stack depth for mbstring regular expressions. It is similar +; to the pcre.recursion_limit for PCRE. +;mbstring.regex_stack_limit=100000 + +; This directive specifies maximum retry count for mbstring regular expressions. It is similar +; to the pcre.backtrack_limit for PCRE. +;mbstring.regex_retry_limit=1000000 + +[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 +; https://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 must not be empty. +; https://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; https://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; https://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; https://php.net/exif.encode-jis +;exif.encode_jis = + +; https://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; https://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 +; https://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 +; https://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; https://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; https://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. +; https://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=0 + +; 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, compilation warnings (including notices and deprecations) will +; be recorded and replayed each time a file is included. Otherwise, compilation +; warnings will only be emitted when the file is first cached. +;opcache.record_warnings=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=0x7FFFBFFF + +;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 + +; 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= + +; Facilitates multiple OPcache instances per user (for Windows only). All PHP +; processes with the same cache ID and user share an OPcache instance. +;opcache.cache_id= + +; 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. +; Under certain circumstances (if only a single global PHP process is +; started from which all others fork), this can increase performance +; by a tiny amount because TLB misses are reduced. On the other hand, this +; delays PHP startup, increases memory usage and degrades performance +; under memory pressure - use with care. +; Requires appropriate OS configuration. +;opcache.huge_code_pages=0 + +; Validate cached file permissions. +;opcache.validate_permission=0 + +; Prevent name collisions in chroot'ed environment. +;opcache.validate_root=0 + +; If specified, it produces opcode dumps for debugging different stages of +; optimizations. +;opcache.opt_debug_level=0 + +; Specifies a PHP script that is going to be compiled and executed at server +; start-up. +; https://php.net/opcache.preload +;opcache.preload= + +; Preloading code as root is not allowed for security reasons. This directive +; facilitates to let the preloading to be run as another user. +; https://php.net/opcache.preload_user +;opcache.preload_user= + +; Prevents caching files that are less than this number of seconds old. It +; protects from caching of incompletely updated files. In case all file updates +; on your site are atomic, you may increase performance by setting it to "0". +;opcache.file_update_protection=2 + +; Absolute path used to store shared lockfiles (for *nix only). +;opcache.lockfile_path=/tmp + +[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= + +[ffi] +; FFI API restriction. Possible values: +; "preload" - enabled in CLI scripts and preloaded files (default) +; "false" - always disabled +; "true" - always enabled +;ffi.enable=preload + +; List of headers files to preload, wildcard patterns allowed. +;ffi.preload= diff --git a/confs/redis/redis.conf b/confs/redis/redis.conf new file mode 100644 index 0000000..ff9804b --- /dev/null +++ b/confs/redis/redis.conf @@ -0,0 +1,57 @@ +#pidfile /var/run/redis_6379.pid +#logfile /log/redis.log +dir /data +dbfilename dump.rdb +bind 0.0.0.0 +protected-mode no +port 6379 +tcp-backlog 511 +#unixsocket /tmp/redis.sock +#unixsocketperm 770 +timeout 0 +tcp-keepalive 300 +daemonize no +supervised no +loglevel notice +databases 16 +save 86400 1 +save 7200 10 +save 3600 10000 +stop-writes-on-bgsave-error no +rdbcompression yes +rdbchecksum yes +dbfilename dump.rdb +slave-serve-stale-data yes +slave-read-only yes +repl-diskless-sync no +repl-diskless-sync-delay 5 +repl-disable-tcp-nodelay no +slave-priority 100 +appendonly no +appendfilename "appendonly.aof" +appendfsync everysec +no-appendfsync-on-rewrite no +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb +aof-load-truncated yes +lua-time-limit 5000 +slowlog-log-slower-than 10000 +slowlog-max-len 128 +latency-monitor-threshold 0 +notify-keyspace-events "" +hash-max-ziplist-entries 512 +hash-max-ziplist-value 64 +list-max-ziplist-size -2 +list-compress-depth 0 +set-max-intset-entries 512 +zset-max-ziplist-entries 128 +zset-max-ziplist-value 64 +hll-sparse-max-bytes 3000 +activerehashing yes +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit slave 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 +hz 10 +aof-rewrite-incremental-fsync yes +maxmemory 942mb +maxmemory-policy allkeys-lru diff --git a/confs/sphinx/sphinx.conf b/confs/sphinx/sphinx.conf new file mode 100644 index 0000000..81964a5 --- /dev/null +++ b/confs/sphinx/sphinx.conf @@ -0,0 +1,83 @@ +# +index bitrix +{ + # Main settings + type = rt + path = /opt/sphinx/lib/bitrix + docinfo = inline + # Choose appropriate type of morphology to use + #morphology = lemmatize_ru_all, lemmatize_en_all, lemmatize_de_all, stem_enru + morphology = stem_enru, soundex + # These settings are used by bitrix:search.title component + dict = keywords + prefix_fields = title + infix_fields = + min_prefix_len = 2 + enable_star = 1 + # All fields must be defined exactly as followed + rt_field = title + rt_field = body + rt_attr_uint = module_id + rt_attr_string = module + rt_attr_uint = item_id + rt_attr_string = item + rt_attr_uint = param1_id + rt_attr_string = param1 + rt_attr_uint = param2_id + rt_attr_string = param2 + rt_attr_timestamp = date_change + rt_attr_timestamp = date_to + rt_attr_timestamp = date_from + rt_attr_uint = custom_rank + rt_attr_multi = tags + rt_attr_multi = right + rt_attr_multi = site + rt_attr_multi = param + # Depends on settings of your site: + # for single byte (Windows-1251) use sdcs + # for multi byte (UTF-8) use utf-8 + charset_type = utf-8 +} +# +index testrt +{ + type = rt + rt_mem_limit = 128M + path = /opt/sphinx/lib/testrt + rt_field = title + rt_field = content + rt_attr_uint = gid +} +# +searchd +{ + listen = 9312 + listen = 9306:mysql41 + log = /opt/sphinx/log/searchd.log + query_log = /opt/sphinx/log/query.log + pid_file = /opt/sphinx/run/searchd.pid + binlog_path = /opt/sphinx/binlogs + read_timeout = 5 + max_children = 30 + max_matches = 1000 + seamless_rotate = 1 + preopen_indexes = 1 + unlink_old = 1 + workers = threads # for RT to work + binlog_max_log_size = 512M + # 2 - flush every transaction, sync every second. Good performance, and every committed transaction is guaranteed to be saved in case of daemon crash. + # 1 - flush and sync every transaction. Worst performance, but every committed transaction data is guaranteed to be saved + binlog_flush = 2 + rt_flush_period = 3600 +} +# +indexer +{ + lemmatizer_cache = 128M +} +# +common +{ + lemmatizer_base = /opt/sphinx/dict +} +# diff --git a/data/mysql/.gitkeep b/data/mysql/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/www/.gitkeep b/data/www/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..80956c2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,278 @@ +volumes: + redis_data: + driver: local + mysql_log_data: + driver: local + mysql_lib_data: + driver: local + bxtemp_data: + driver: local + msmtp_data: + driver: local + browscap_data: + driver: local + geoip2_data: + driver: local + ssl_data: + driver: local +services: + memcached: + image: memcached:1.6.40-alpine + container_name: b24pal_memcached + restart: unless-stopped + env_file: + - .env + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - memcached + redis: + image: redis:8.6.0-alpine + container_name: b24pal_redis + restart: unless-stopped + command: redis-server /usr/local/etc/redis/redis.conf + env_file: + - .env + volumes: + - redis_data:/data + - ./confs/redis/redis.conf:/usr/local/etc/redis/redis.conf + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + cap_add: + - CHOWN + - SETUID + - SETGID + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - redis + mysql: + image: quay.io/bitrix24/percona-server:8.4.7-v1-rhel + container_name: b24pal_mysql + ports: + - "33061:3306" + restart: unless-stopped + env_file: + - .env + - .env_sql + volumes: + - mysql_log_data:/var/log/mysql + - ./data/mysql:/var/lib/mysql + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + cap_add: + - SYS_NICE + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - mysql + php: + image: quay.io/bitrix24/php:8.4.18-fpm-v1-alpine + container_name: b24pal_php + restart: unless-stopped + env_file: + - .env + - .env_php + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - ./confs/php84/etc/:/usr/local/etc/ + - ./data/www/:/opt/www/:cached + - bxtemp_data:/opt/.bx_temp/ + - msmtp_data:/opt/msmtp/ + - browscap_data:/opt/browscap/ + - geoip2_data:/opt/geoip2/ + - ssl_data:/ssl/ + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - php + depends_on: + - mysql + environment: + PHP_IDE_CONFIG: "serverName=bitrix-docker" + nginx: + image: quay.io/bitrix24/nginx:1.28.2-v1-alpine + container_name: b24pal_nginx + restart: unless-stopped + env_file: + - .env + ports: + - "8560:80" + - "8561:443" + volumes: + - ./confs/nginx/:/etc/nginx/ + - ./data/www/:/opt/www/:cached + - bxtemp_data:/opt/.bx_temp/ + - ssl_data:/ssl/ + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + cap_add: + - CHOWN + - SETUID + - SETGID + - NET_BIND_SERVICE + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - nginx + push-sub: + image: quay.io/bitrix24/push:3.2-v1-alpine + container_name: b24pal_push_sub + restart: unless-stopped + env_file: + - .env + - .env_push + - .env_push_sub + - .env_redis + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - push_sub + depends_on: + - redis + push-pub: + image: quay.io/bitrix24/push:3.2-v1-alpine + container_name: b24pal_push_pub + restart: unless-stopped + env_file: + - .env + - .env_push + - .env_push_pub + - .env_redis + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - push_pub + depends_on: + - redis + sphinx: + image: quay.io/bitrix24/sphinx:2.2.11-v2-alpine + container_name: b24pal_sphinx + restart: unless-stopped + env_file: + - .env + volumes: + - ./confs/sphinx/sphinx.conf:/opt/sphinx/conf/sphinx.conf + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - sphinx + cron: + image: quay.io/bitrix24/php:8.4.18-fpm-v1-alpine + container_name: b24pal_cron + restart: unless-stopped + command: crond -f -d 8 + user: root + env_file: + - .env + - .env_php + volumes: + - ./confs/php84/etc/:/usr/local/etc/ + - ./data/www/:/opt/www/:cached + - bxtemp_data:/opt/.bx_temp/ + - msmtp_data:/opt/msmtp/ + - browscap_data:/opt/browscap/ + - geoip2_data:/opt/geoip2/ + init: true + cgroup: private + security_opt: + - no-new-privileges + cap_drop: + - ALL + cap_add: + - SETUID + - SETGID + tmpfs: + - /tmp:noexec,nodev,nosuid + - /var/tmp:noexec,nodev,nosuid + - /dev/shm:noexec,nodev,nosuid + networks: + dev: + aliases: + - cron + depends_on: + - php +networks: + dev: + driver: bridge + attachable: true + internal: false + ipam: + driver: default + config: + - subnet: 10.10.30.0/24 diff --git a/sources/bxlego4231/Dockerfile b/sources/bxlego4231/Dockerfile new file mode 100644 index 0000000..7a135f4 --- /dev/null +++ b/sources/bxlego4231/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.23.1 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4240/Dockerfile b/sources/bxlego4240/Dockerfile new file mode 100644 index 0000000..c709f21 --- /dev/null +++ b/sources/bxlego4240/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.24.0 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4251/Dockerfile b/sources/bxlego4251/Dockerfile new file mode 100644 index 0000000..b7f8c1c --- /dev/null +++ b/sources/bxlego4251/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.25.1 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4252/Dockerfile b/sources/bxlego4252/Dockerfile new file mode 100644 index 0000000..6056a5a --- /dev/null +++ b/sources/bxlego4252/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.25.2 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4260/Dockerfile b/sources/bxlego4260/Dockerfile new file mode 100644 index 0000000..9e40335 --- /dev/null +++ b/sources/bxlego4260/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.26.0 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4270/Dockerfile b/sources/bxlego4270/Dockerfile new file mode 100644 index 0000000..fe57710 --- /dev/null +++ b/sources/bxlego4270/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.27.0 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4281/Dockerfile b/sources/bxlego4281/Dockerfile new file mode 100644 index 0000000..0f05604 --- /dev/null +++ b/sources/bxlego4281/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.28.1 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4290/Dockerfile b/sources/bxlego4290/Dockerfile new file mode 100644 index 0000000..6e79289 --- /dev/null +++ b/sources/bxlego4290/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.29.0 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4301/Dockerfile b/sources/bxlego4301/Dockerfile new file mode 100644 index 0000000..f30499e --- /dev/null +++ b/sources/bxlego4301/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.30.1 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxlego4310/Dockerfile b/sources/bxlego4310/Dockerfile new file mode 100644 index 0000000..dcc1921 --- /dev/null +++ b/sources/bxlego4310/Dockerfile @@ -0,0 +1,16 @@ +FROM goacme/lego:v4.31.0 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache curl openssl bash mc ca-certificates tzdata && \ + mkdir -p /ssl && \ + chown -R bitrix:bitrix /ssl + +#VOLUME ["/ssl"] + +USER bitrix:bitrix + +ENTRYPOINT [""] + +CMD ["tail", "-f", "/dev/null"] diff --git a/sources/bxnginx1263/Dockerfile b/sources/bxnginx1263/Dockerfile new file mode 100644 index 0000000..4ad81b6 --- /dev/null +++ b/sources/bxnginx1263/Dockerfile @@ -0,0 +1,33 @@ +FROM nginx:1.26.3-alpine-slim + +USER root + +RUN cd /root/ && \ + apk add --no-cache git curl openssl ca-certificates tzdata && \ + git clone https://github.com/bitrix-tools/nginx-modules.git && \ + cp /root/nginx-modules/packages/1.26.3/v1/alpine/v3.20/main/$(uname -m)/abuild-key.rsa.pub /etc/apk/keys/ && \ + echo "/root/nginx-modules/packages/1.26.3/v1/alpine/v3.20/main" >> /etc/apk/repositories && \ + apk update && \ + apk add nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-brotli nginx-module-geoip2 nginx-module-ndk nginx-module-lua nginx-module-headers-more nginx-module-zip && \ + apk del git && \ + sed -i "s/.*1.26.3.*//" /etc/apk/repositories && \ + rm -f /etc/apk/keys/abuild-key.rsa.pub && \ + rm -rf /root/nginx-modules + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/msmtp /opt/browscap /opt/geoip2 /ssl /var/runs/nginx && \ + chown -R bitrix:bitrix /var/log/nginx && \ + chown -R bitrix:bitrix /var/cache/nginx && \ + chown -R bitrix:bitrix /var/runs/nginx && \ + chown -R bitrix:bitrix /usr/lib/nginx/modules && \ + chown -R bitrix:bitrix /etc/nginx && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxnginx1263modules/v1/Dockerfile b/sources/bxnginx1263modules/v1/Dockerfile new file mode 100644 index 0000000..1ab2ae2 --- /dev/null +++ b/sources/bxnginx1263modules/v1/Dockerfile @@ -0,0 +1,149 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.26.3-alpine-slim + +ENV NJS_VERSION=0.8.9 +ENV NJS_RELEASE=1 +ENV BROTLI_VERSION=1.1.0 +ENV GEOIP2_VERSION=3.4 +ENV HEADERSMORE_VERSION=0.38 +ENV ZIP_VERSION=1.3.0 +ENV NDK_VERSION=0.3.3 +ENV LUA_VERSION=0.10.26 + +COPY brotli_makefile /tmp/brotli_makefile +COPY brotli_shasum /tmp/brotli_shasum +COPY brotli_version /tmp/brotli_version +COPY nginx-module-brotli.xml /tmp/nginx-module-brotli.xml +COPY Makefile.module-brotli /tmp/Makefile.module-brotli + +RUN chown nobody:nobody /tmp/brotli_makefile && \ + chown nobody:nobody /tmp/brotli_shasum && \ + chown nobody:nobody /tmp/brotli_version && \ + chown nobody:nobody /tmp/nginx-module-brotli.xml && \ + chown nobody:nobody /tmp/Makefile.module-brotli + +COPY headersmore_version /tmp/headersmore_version +COPY nginx-module-headers-more.xml /tmp/nginx-module-headers-more.xml + +RUN chown nobody:nobody /tmp/headersmore_version && \ + chown nobody:nobody /tmp/nginx-module-headers-more.xml + +COPY nginx-module-zip.copyright /tmp/nginx-module-zip.copyright +COPY nginx-module-zip.xml /tmp/nginx-module-zip.xml +COPY Makefile.module-zip /tmp/Makefile.module-zip +COPY mod_zip-${ZIP_VERSION}.tar.gz /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN chown nobody:nobody /tmp/nginx-module-zip.copyright && \ + chown nobody:nobody /tmp/nginx-module-zip.xml && \ + chown nobody:nobody /tmp/Makefile.module-zip && \ + chown nobody:nobody /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-perl=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-brotli=${NGINX_VERSION}.${BROTLI_VERSION}-r${PKG_RELEASE} \ + nginx-module-geoip2=${NGINX_VERSION}.${GEOIP2_VERSION}-r${PKG_RELEASE} \ + nginx-module-ndk=${NGINX_VERSION}.${NDK_VERSION}-r${PKG_RELEASE} \ + nginx-module-lua=${NGINX_VERSION}.${LUA_VERSION}-r${PKG_RELEASE} \ + nginx-module-headers-more=${NGINX_VERSION}.${HEADERSMORE_VERSION}-r${PKG_RELEASE} \ + nginx-module-zip=${NGINX_VERSION}.${ZIP_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + i386) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cmake \ + wget \ + brotli-dev \ + libmaxminddb \ + libmaxminddb-dev \ + libzip-dev \ + xz \ + xz-dev \ + pcre \ + pcre-dev \ + perl-dev \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"3a4e869eded0c71e92f522e94edffea7fbfb5e78886ea7e484342fa2e028c62099a67d08860c249bf93776da97b924225e0d849dbb4697b298afe5421d7d6fea *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && sed -i 's/.*BASE_MODULES=.*/BASE_MODULES= geoip image-filter njs perl xslt brotli headers-more geoip2 ndk lua zip /' ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile \ + && mv -f /tmp/brotli_makefile ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/Makefile \ + && mv -f /tmp/brotli_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/SHA512SUMS \ + && mv -f /tmp/brotli_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/version \ + && mv -f /tmp/nginx-module-brotli.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv -f /tmp/Makefile.module-brotli ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile.module-brotli \ + && mv -f /tmp/headersmore_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/version \ + && mv -f /tmp/nginx-module-headers-more.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/Makefile.module-zip ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/ \ + && mv /tmp/mod_zip-${ZIP_VERSION}.tar.gz ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/tarballs/ \ + && mv /tmp/nginx-module-zip.copyright ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/nginx-module-zip.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && make module-geoip module-image-filter module-njs module-perl module-xslt module-brotli module-headers-more module-geoip2 module-ndk module-lua module-zip \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + && mkdir -p /root/packages/ \ + && cp -R ${tempDir}/packages/alpine/* /root/packages/ \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /root/packages/${apkArch} \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache tzdata curl ca-certificates openssl \ + && rm -rf /tmp/* + +VOLUME ["/root/packages/"] diff --git a/sources/bxnginx1263modules/v1/Dockerfile.origin b/sources/bxnginx1263modules/v1/Dockerfile.origin new file mode 100644 index 0000000..ec1007e --- /dev/null +++ b/sources/bxnginx1263modules/v1/Dockerfile.origin @@ -0,0 +1,79 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.26.3-alpine-slim + +ENV NJS_VERSION 0.8.9 +ENV NJS_RELEASE 1 + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + x86_64|aarch64) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"3a4e869eded0c71e92f522e94edffea7fbfb5e78886ea7e484342fa2e028c62099a67d08860c249bf93776da97b924225e0d849dbb4697b298afe5421d7d6fea *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && make module-geoip module-image-filter module-njs module-xslt \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache curl ca-certificates diff --git a/sources/bxnginx1263modules/v1/Makefile.module-brotli b/sources/bxnginx1263modules/v1/Makefile.module-brotli new file mode 100644 index 0000000..ff177d2 --- /dev/null +++ b/sources/bxnginx1263modules/v1/Makefile.module-brotli @@ -0,0 +1,63 @@ +MODULES+= brotli + +MODULE_SUMMARY_brotli= 3rd-party brotli compression dynamic modules + +include $(CONTRIB)/src/ngx_brotli/version + +MODULE_VERSION_brotli= $(NGX_BROTLI_VERSION) +MODULE_RELEASE_brotli= 1 + +MODULE_VERSION_PREFIX_brotli=$(MODULE_TARGET_PREFIX) + +MODULE_SOURCES_brotli= ngx_brotli-$(NGX_BROTLI_VERSION).tar.gz + +MODULE_CONFARGS_brotli= --add-dynamic-module=$(MODSRC_PREFIX)ngx_brotli-$(NGX_BROTLI_VERSION) + +.deps-module-brotli: + cd $(CONTRIB) && make .sum-ngx_brotli + touch $@ + +prerequisites-for-module-brotli: + +MODULE_BUILD_DEPENDS_brotli=brotli-dev cmake + +define MODULE_PREBUILD_brotli +cd $$builddir/../ngx_brotli-$(NGX_BROTLI_VERSION)/deps \&\& \ + rm -rf brotli \&\& \ + wget https://github.com/cyrax13/brotli/archive/refs/tags/v$(NGX_BROTLI_VERSION).tar.gz \&\& \ + tar -xvzf v$(NGX_BROTLI_VERSION).tar.gz \&\& \ + mv brotli-$(NGX_BROTLI_VERSION) brotli \&\& \ + rm -f v$(NGX_BROTLI_VERSION).tar.gz \&\& \ + cd brotli \&\& \ + mkdir out \&\& cd out \&\& \ + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" \ + -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" \ + -DCMAKE_INSTALL_PREFIX=./installed \ + ../ \&\& \ + cmake --build . --config Release --target brotlienc \&\& \ + cd ../../../.. \ +exit 1 +endef +export MODULE_PREBUILD_brotli + +define MODULE_POST_brotli +cat <1fWctiX8>>(d86O`dAn!t+uhDr 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 + + + + + + + + + +base version updated to 1.26.3-1 + + + + + + + + + +base version updated to 1.26.2-1 + + + + + + + + + +base version updated to 1.26.1-2 + + + + + + + + + +base version updated to 1.26.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.24.0-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of brotli nginx module package. + + + + + + + diff --git a/sources/bxnginx1263modules/v1/nginx-module-headers-more.xml b/sources/bxnginx1263modules/v1/nginx-module-headers-more.xml new file mode 100644 index 0000000..f116aed --- /dev/null +++ b/sources/bxnginx1263modules/v1/nginx-module-headers-more.xml @@ -0,0 +1,371 @@ + + + + + + + + + + +base version updated to 1.26.3-1 + + + + + + + + + +base version updated to 1.26.2-1 + + + + + + + + + +base version updated to 1.26.1-2 + + + + + + + + + +base version updated to 1.26.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1263modules/v1/nginx-module-zip.copyright b/sources/bxnginx1263modules/v1/nginx-module-zip.copyright new file mode 100644 index 0000000..5ffbca8 --- /dev/null +++ b/sources/bxnginx1263modules/v1/nginx-module-zip.copyright @@ -0,0 +1,28 @@ +/* + * Copyright 2007-2020 Evan Miller and contributors + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/sources/bxnginx1263modules/v1/nginx-module-zip.xml b/sources/bxnginx1263modules/v1/nginx-module-zip.xml new file mode 100644 index 0000000..e76bd38 --- /dev/null +++ b/sources/bxnginx1263modules/v1/nginx-module-zip.xml @@ -0,0 +1,38 @@ + + + + + + + + +base version updated to 1.3.0-1 + + + + + + + +base version updated to 1.2.2-1 + + + + + + + +base version updated to 1.2.1-1 + + + + + + + +base version updated to 1.2.0-1 + + + + + diff --git a/sources/bxnginx1280/Dockerfile b/sources/bxnginx1280/Dockerfile new file mode 100644 index 0000000..693dd97 --- /dev/null +++ b/sources/bxnginx1280/Dockerfile @@ -0,0 +1,33 @@ +FROM nginx:1.28.0-alpine-slim + +USER root + +RUN cd /root/ && \ + apk add --no-cache git curl openssl ca-certificates tzdata && \ + git clone https://github.com/bitrix-tools/nginx-modules.git && \ + cp /root/nginx-modules/packages/1.28.0/v3/alpine/v3.21/main/$(uname -m)/abuild-key.rsa.pub /etc/apk/keys/ && \ + echo "/root/nginx-modules/packages/1.28.0/v3/alpine/v3.21/main" >> /etc/apk/repositories && \ + apk update && \ + apk add nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-brotli nginx-module-geoip2 nginx-module-ndk nginx-module-lua nginx-module-headers-more nginx-module-zip && \ + apk del git && \ + sed -i "s/.*1.28.0.*//" /etc/apk/repositories && \ + rm -f /etc/apk/keys/abuild-key.rsa.pub && \ + rm -rf /root/nginx-modules + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/msmtp /opt/browscap /opt/geoip2 /ssl /var/runs/nginx && \ + chown -R bitrix:bitrix /var/log/nginx && \ + chown -R bitrix:bitrix /var/cache/nginx && \ + chown -R bitrix:bitrix /var/runs/nginx && \ + chown -R bitrix:bitrix /usr/lib/nginx/modules && \ + chown -R bitrix:bitrix /etc/nginx && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxnginx1280modules/v1/Dockerfile b/sources/bxnginx1280modules/v1/Dockerfile new file mode 100644 index 0000000..fdb709c --- /dev/null +++ b/sources/bxnginx1280modules/v1/Dockerfile @@ -0,0 +1,152 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.0-alpine-slim + +ENV NJS_VERSION=0.8.10 +ENV NJS_RELEASE=1 +ENV BROTLI_VERSION=1.1.0 +ENV GEOIP2_VERSION=3.4 +ENV HEADERSMORE_VERSION=0.38 +ENV ZIP_VERSION=1.3.0 +ENV NDK_VERSION=0.3.3 +ENV LUA_VERSION=0.10.28 + +COPY brotli_makefile /tmp/brotli_makefile +COPY brotli_shasum /tmp/brotli_shasum +COPY brotli_version /tmp/brotli_version +COPY nginx-module-brotli.xml /tmp/nginx-module-brotli.xml +COPY Makefile.module-brotli /tmp/Makefile.module-brotli + +RUN chown nobody:nobody /tmp/brotli_makefile && \ + chown nobody:nobody /tmp/brotli_shasum && \ + chown nobody:nobody /tmp/brotli_version && \ + chown nobody:nobody /tmp/nginx-module-brotli.xml && \ + chown nobody:nobody /tmp/Makefile.module-brotli + +COPY headersmore_shasum /tmp/headersmore_shasum +COPY headersmore_version /tmp/headersmore_version +COPY nginx-module-headers-more.xml /tmp/nginx-module-headers-more.xml + +RUN chown nobody:nobody /tmp/headersmore_shasum && \ + chown nobody:nobody /tmp/headersmore_version && \ + chown nobody:nobody /tmp/nginx-module-headers-more.xml + +COPY nginx-module-zip.copyright /tmp/nginx-module-zip.copyright +COPY nginx-module-zip.xml /tmp/nginx-module-zip.xml +COPY Makefile.module-zip /tmp/Makefile.module-zip +COPY mod_zip-${ZIP_VERSION}.tar.gz /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN chown nobody:nobody /tmp/nginx-module-zip.copyright && \ + chown nobody:nobody /tmp/nginx-module-zip.xml && \ + chown nobody:nobody /tmp/Makefile.module-zip && \ + chown nobody:nobody /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-perl=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-brotli=${NGINX_VERSION}.${BROTLI_VERSION}-r${PKG_RELEASE} \ + nginx-module-geoip2=${NGINX_VERSION}.${GEOIP2_VERSION}-r${PKG_RELEASE} \ + nginx-module-ndk=${NGINX_VERSION}.${NDK_VERSION}-r${PKG_RELEASE} \ + nginx-module-lua=${NGINX_VERSION}.${LUA_VERSION}-r${PKG_RELEASE} \ + nginx-module-headers-more=${NGINX_VERSION}.${HEADERSMORE_VERSION}-r${PKG_RELEASE} \ + nginx-module-zip=${NGINX_VERSION}.${ZIP_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + i386) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cmake \ + wget \ + brotli-dev \ + libmaxminddb \ + libmaxminddb-dev \ + libzip-dev \ + xz \ + xz-dev \ + pcre \ + pcre-dev \ + perl-dev \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4 *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && sed -i 's/.*BASE_MODULES=.*/BASE_MODULES= geoip image-filter njs perl xslt brotli headers-more geoip2 ndk lua zip /' ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile \ + && mv -f /tmp/brotli_makefile ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/Makefile \ + && mv -f /tmp/brotli_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/SHA512SUMS \ + && mv -f /tmp/brotli_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/version \ + && mv -f /tmp/nginx-module-brotli.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv -f /tmp/Makefile.module-brotli ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile.module-brotli \ + && mv -f /tmp/headersmore_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/SHA512SUMS \ + && mv -f /tmp/headersmore_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/version \ + && mv -f /tmp/nginx-module-headers-more.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/Makefile.module-zip ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/ \ + && mv /tmp/mod_zip-${ZIP_VERSION}.tar.gz ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/tarballs/ \ + && mv /tmp/nginx-module-zip.copyright ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/nginx-module-zip.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && make module-geoip module-image-filter module-njs module-perl module-xslt module-brotli module-headers-more module-geoip2 module-ndk module-lua module-zip \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + && mkdir -p /root/packages/ \ + && cp -R ${tempDir}/packages/alpine/* /root/packages/ \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /root/packages/${apkArch} \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache tzdata curl ca-certificates openssl \ + && rm -rf /tmp/* + +VOLUME ["/root/packages/"] diff --git a/sources/bxnginx1280modules/v1/Dockerfile.origin b/sources/bxnginx1280modules/v1/Dockerfile.origin new file mode 100644 index 0000000..fb0c900 --- /dev/null +++ b/sources/bxnginx1280modules/v1/Dockerfile.origin @@ -0,0 +1,79 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.0-alpine-slim + +ENV NJS_VERSION 0.8.10 +ENV NJS_RELEASE 1 + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + x86_64|aarch64) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4 *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && make module-geoip module-image-filter module-njs module-xslt \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache curl ca-certificates diff --git a/sources/bxnginx1280modules/v1/Makefile.module-brotli b/sources/bxnginx1280modules/v1/Makefile.module-brotli new file mode 100644 index 0000000..ff177d2 --- /dev/null +++ b/sources/bxnginx1280modules/v1/Makefile.module-brotli @@ -0,0 +1,63 @@ +MODULES+= brotli + +MODULE_SUMMARY_brotli= 3rd-party brotli compression dynamic modules + +include $(CONTRIB)/src/ngx_brotli/version + +MODULE_VERSION_brotli= $(NGX_BROTLI_VERSION) +MODULE_RELEASE_brotli= 1 + +MODULE_VERSION_PREFIX_brotli=$(MODULE_TARGET_PREFIX) + +MODULE_SOURCES_brotli= ngx_brotli-$(NGX_BROTLI_VERSION).tar.gz + +MODULE_CONFARGS_brotli= --add-dynamic-module=$(MODSRC_PREFIX)ngx_brotli-$(NGX_BROTLI_VERSION) + +.deps-module-brotli: + cd $(CONTRIB) && make .sum-ngx_brotli + touch $@ + +prerequisites-for-module-brotli: + +MODULE_BUILD_DEPENDS_brotli=brotli-dev cmake + +define MODULE_PREBUILD_brotli +cd $$builddir/../ngx_brotli-$(NGX_BROTLI_VERSION)/deps \&\& \ + rm -rf brotli \&\& \ + wget https://github.com/cyrax13/brotli/archive/refs/tags/v$(NGX_BROTLI_VERSION).tar.gz \&\& \ + tar -xvzf v$(NGX_BROTLI_VERSION).tar.gz \&\& \ + mv brotli-$(NGX_BROTLI_VERSION) brotli \&\& \ + rm -f v$(NGX_BROTLI_VERSION).tar.gz \&\& \ + cd brotli \&\& \ + mkdir out \&\& cd out \&\& \ + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" \ + -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" \ + -DCMAKE_INSTALL_PREFIX=./installed \ + ../ \&\& \ + cmake --build . --config Release --target brotlienc \&\& \ + cd ../../../.. \ +exit 1 +endef +export MODULE_PREBUILD_brotli + +define MODULE_POST_brotli +cat <-rpzg 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 + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +Updated headers-more module to 0.37 release. + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1280modules/v1/nginx-module-headers-more.xml b/sources/bxnginx1280modules/v1/nginx-module-headers-more.xml new file mode 100644 index 0000000..f116aed --- /dev/null +++ b/sources/bxnginx1280modules/v1/nginx-module-headers-more.xml @@ -0,0 +1,371 @@ + + + + + + + + + + +base version updated to 1.26.3-1 + + + + + + + + + +base version updated to 1.26.2-1 + + + + + + + + + +base version updated to 1.26.1-2 + + + + + + + + + +base version updated to 1.26.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1280modules/v1/nginx-module-zip.copyright b/sources/bxnginx1280modules/v1/nginx-module-zip.copyright new file mode 100644 index 0000000..5ffbca8 --- /dev/null +++ b/sources/bxnginx1280modules/v1/nginx-module-zip.copyright @@ -0,0 +1,28 @@ +/* + * Copyright 2007-2020 Evan Miller and contributors + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/sources/bxnginx1280modules/v1/nginx-module-zip.xml b/sources/bxnginx1280modules/v1/nginx-module-zip.xml new file mode 100644 index 0000000..e76bd38 --- /dev/null +++ b/sources/bxnginx1280modules/v1/nginx-module-zip.xml @@ -0,0 +1,38 @@ + + + + + + + + +base version updated to 1.3.0-1 + + + + + + + +base version updated to 1.2.2-1 + + + + + + + +base version updated to 1.2.1-1 + + + + + + + +base version updated to 1.2.0-1 + + + + + diff --git a/sources/bxnginx1280modules/v2/Dockerfile b/sources/bxnginx1280modules/v2/Dockerfile new file mode 100644 index 0000000..200a923 --- /dev/null +++ b/sources/bxnginx1280modules/v2/Dockerfile @@ -0,0 +1,152 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.0-alpine-slim + +ENV NJS_VERSION=0.8.10 +ENV NJS_RELEASE=1 +ENV BROTLI_VERSION=1.0.9 +ENV GEOIP2_VERSION=3.4 +ENV HEADERSMORE_VERSION=0.39 +ENV ZIP_VERSION=1.3.0 +ENV NDK_VERSION=0.3.3 +ENV LUA_VERSION=0.10.28 + +COPY brotli_makefile /tmp/brotli_makefile +COPY brotli_shasum /tmp/brotli_shasum +COPY brotli_version /tmp/brotli_version +COPY nginx-module-brotli.xml /tmp/nginx-module-brotli.xml +COPY Makefile.module-brotli /tmp/Makefile.module-brotli + +RUN chown nobody:nobody /tmp/brotli_makefile && \ + chown nobody:nobody /tmp/brotli_shasum && \ + chown nobody:nobody /tmp/brotli_version && \ + chown nobody:nobody /tmp/nginx-module-brotli.xml && \ + chown nobody:nobody /tmp/Makefile.module-brotli + +COPY headersmore_shasum /tmp/headersmore_shasum +COPY headersmore_version /tmp/headersmore_version +COPY nginx-module-headers-more.xml /tmp/nginx-module-headers-more.xml + +RUN chown nobody:nobody /tmp/headersmore_shasum && \ + chown nobody:nobody /tmp/headersmore_version && \ + chown nobody:nobody /tmp/nginx-module-headers-more.xml + +COPY nginx-module-zip.copyright /tmp/nginx-module-zip.copyright +COPY nginx-module-zip.xml /tmp/nginx-module-zip.xml +COPY Makefile.module-zip /tmp/Makefile.module-zip +COPY mod_zip-${ZIP_VERSION}.tar.gz /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN chown nobody:nobody /tmp/nginx-module-zip.copyright && \ + chown nobody:nobody /tmp/nginx-module-zip.xml && \ + chown nobody:nobody /tmp/Makefile.module-zip && \ + chown nobody:nobody /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-perl=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-brotli=${NGINX_VERSION}.${BROTLI_VERSION}-r${PKG_RELEASE} \ + nginx-module-geoip2=${NGINX_VERSION}.${GEOIP2_VERSION}-r${PKG_RELEASE} \ + nginx-module-ndk=${NGINX_VERSION}.${NDK_VERSION}-r${PKG_RELEASE} \ + nginx-module-lua=${NGINX_VERSION}.${LUA_VERSION}-r${PKG_RELEASE} \ + nginx-module-headers-more=${NGINX_VERSION}.${HEADERSMORE_VERSION}-r${PKG_RELEASE} \ + nginx-module-zip=${NGINX_VERSION}.${ZIP_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + i386) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cmake \ + wget \ + brotli-dev \ + libmaxminddb \ + libmaxminddb-dev \ + libzip-dev \ + xz \ + xz-dev \ + pcre \ + pcre-dev \ + perl-dev \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4 *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && sed -i 's/.*BASE_MODULES=.*/BASE_MODULES= geoip image-filter njs perl xslt brotli headers-more geoip2 ndk lua zip /' ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile \ + && mv -f /tmp/brotli_makefile ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/Makefile \ + && mv -f /tmp/brotli_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/SHA512SUMS \ + && mv -f /tmp/brotli_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/version \ + && mv -f /tmp/nginx-module-brotli.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv -f /tmp/Makefile.module-brotli ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile.module-brotli \ + && mv -f /tmp/headersmore_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/SHA512SUMS \ + && mv -f /tmp/headersmore_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/version \ + && mv -f /tmp/nginx-module-headers-more.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/Makefile.module-zip ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/ \ + && mv /tmp/mod_zip-${ZIP_VERSION}.tar.gz ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/tarballs/ \ + && mv /tmp/nginx-module-zip.copyright ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/nginx-module-zip.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && make module-geoip module-image-filter module-njs module-perl module-xslt module-brotli module-headers-more module-geoip2 module-ndk module-lua module-zip \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + && mkdir -p /root/packages/ \ + && cp -R ${tempDir}/packages/alpine/* /root/packages/ \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /root/packages/${apkArch} \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache tzdata curl ca-certificates openssl \ + && rm -rf /tmp/* + +VOLUME ["/root/packages/"] diff --git a/sources/bxnginx1280modules/v2/Dockerfile.origin b/sources/bxnginx1280modules/v2/Dockerfile.origin new file mode 100644 index 0000000..fb0c900 --- /dev/null +++ b/sources/bxnginx1280modules/v2/Dockerfile.origin @@ -0,0 +1,79 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.0-alpine-slim + +ENV NJS_VERSION 0.8.10 +ENV NJS_RELEASE 1 + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + x86_64|aarch64) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4 *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && make module-geoip module-image-filter module-njs module-xslt \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache curl ca-certificates diff --git a/sources/bxnginx1280modules/v2/Makefile.module-brotli b/sources/bxnginx1280modules/v2/Makefile.module-brotli new file mode 100644 index 0000000..d2f69b1 --- /dev/null +++ b/sources/bxnginx1280modules/v2/Makefile.module-brotli @@ -0,0 +1,39 @@ +MODULES+= brotli + +MODULE_SUMMARY_brotli= 3rd-party brotli compression dynamic modules + +include $(CONTRIB)/src/ngx_brotli/version + +MODULE_VERSION_brotli= $(NGX_BROTLI_VERSION) +MODULE_RELEASE_brotli= 1 + +MODULE_VERSION_PREFIX_brotli=$(MODULE_TARGET_PREFIX) + +MODULE_SOURCES_brotli= ngx_brotli-$(NGX_BROTLI_VERSION).tar.gz + +MODULE_CONFARGS_brotli= --add-dynamic-module=$(MODSRC_PREFIX)ngx_brotli-$(NGX_BROTLI_VERSION) + +.deps-module-brotli: + cd $(CONTRIB) && make .sum-ngx_brotli + touch $@ + +MODULE_BUILD_DEPENDS_brotli=brotli-dev + +define MODULE_POST_brotli +cat <-rpzg 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 + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of brotli nginx module package. + + + + + + + diff --git a/sources/bxnginx1280modules/v2/nginx-module-headers-more.xml b/sources/bxnginx1280modules/v2/nginx-module-headers-more.xml new file mode 100644 index 0000000..ca7affb --- /dev/null +++ b/sources/bxnginx1280modules/v2/nginx-module-headers-more.xml @@ -0,0 +1,430 @@ + + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +Updated headers-more module to 0.37 release. + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1280modules/v2/nginx-module-zip.copyright b/sources/bxnginx1280modules/v2/nginx-module-zip.copyright new file mode 100644 index 0000000..5ffbca8 --- /dev/null +++ b/sources/bxnginx1280modules/v2/nginx-module-zip.copyright @@ -0,0 +1,28 @@ +/* + * Copyright 2007-2020 Evan Miller and contributors + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/sources/bxnginx1280modules/v2/nginx-module-zip.xml b/sources/bxnginx1280modules/v2/nginx-module-zip.xml new file mode 100644 index 0000000..e76bd38 --- /dev/null +++ b/sources/bxnginx1280modules/v2/nginx-module-zip.xml @@ -0,0 +1,38 @@ + + + + + + + + +base version updated to 1.3.0-1 + + + + + + + +base version updated to 1.2.2-1 + + + + + + + +base version updated to 1.2.1-1 + + + + + + + +base version updated to 1.2.0-1 + + + + + diff --git a/sources/bxnginx1280modules/v3/Dockerfile b/sources/bxnginx1280modules/v3/Dockerfile new file mode 100644 index 0000000..200a923 --- /dev/null +++ b/sources/bxnginx1280modules/v3/Dockerfile @@ -0,0 +1,152 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.0-alpine-slim + +ENV NJS_VERSION=0.8.10 +ENV NJS_RELEASE=1 +ENV BROTLI_VERSION=1.0.9 +ENV GEOIP2_VERSION=3.4 +ENV HEADERSMORE_VERSION=0.39 +ENV ZIP_VERSION=1.3.0 +ENV NDK_VERSION=0.3.3 +ENV LUA_VERSION=0.10.28 + +COPY brotli_makefile /tmp/brotli_makefile +COPY brotli_shasum /tmp/brotli_shasum +COPY brotli_version /tmp/brotli_version +COPY nginx-module-brotli.xml /tmp/nginx-module-brotli.xml +COPY Makefile.module-brotli /tmp/Makefile.module-brotli + +RUN chown nobody:nobody /tmp/brotli_makefile && \ + chown nobody:nobody /tmp/brotli_shasum && \ + chown nobody:nobody /tmp/brotli_version && \ + chown nobody:nobody /tmp/nginx-module-brotli.xml && \ + chown nobody:nobody /tmp/Makefile.module-brotli + +COPY headersmore_shasum /tmp/headersmore_shasum +COPY headersmore_version /tmp/headersmore_version +COPY nginx-module-headers-more.xml /tmp/nginx-module-headers-more.xml + +RUN chown nobody:nobody /tmp/headersmore_shasum && \ + chown nobody:nobody /tmp/headersmore_version && \ + chown nobody:nobody /tmp/nginx-module-headers-more.xml + +COPY nginx-module-zip.copyright /tmp/nginx-module-zip.copyright +COPY nginx-module-zip.xml /tmp/nginx-module-zip.xml +COPY Makefile.module-zip /tmp/Makefile.module-zip +COPY mod_zip-${ZIP_VERSION}.tar.gz /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN chown nobody:nobody /tmp/nginx-module-zip.copyright && \ + chown nobody:nobody /tmp/nginx-module-zip.xml && \ + chown nobody:nobody /tmp/Makefile.module-zip && \ + chown nobody:nobody /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-perl=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-brotli=${NGINX_VERSION}.${BROTLI_VERSION}-r${PKG_RELEASE} \ + nginx-module-geoip2=${NGINX_VERSION}.${GEOIP2_VERSION}-r${PKG_RELEASE} \ + nginx-module-ndk=${NGINX_VERSION}.${NDK_VERSION}-r${PKG_RELEASE} \ + nginx-module-lua=${NGINX_VERSION}.${LUA_VERSION}-r${PKG_RELEASE} \ + nginx-module-headers-more=${NGINX_VERSION}.${HEADERSMORE_VERSION}-r${PKG_RELEASE} \ + nginx-module-zip=${NGINX_VERSION}.${ZIP_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + i386) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cmake \ + wget \ + brotli-dev \ + libmaxminddb \ + libmaxminddb-dev \ + libzip-dev \ + xz \ + xz-dev \ + pcre \ + pcre-dev \ + perl-dev \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4 *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && sed -i 's/.*BASE_MODULES=.*/BASE_MODULES= geoip image-filter njs perl xslt brotli headers-more geoip2 ndk lua zip /' ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile \ + && mv -f /tmp/brotli_makefile ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/Makefile \ + && mv -f /tmp/brotli_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/SHA512SUMS \ + && mv -f /tmp/brotli_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/version \ + && mv -f /tmp/nginx-module-brotli.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv -f /tmp/Makefile.module-brotli ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile.module-brotli \ + && mv -f /tmp/headersmore_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/SHA512SUMS \ + && mv -f /tmp/headersmore_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/version \ + && mv -f /tmp/nginx-module-headers-more.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/Makefile.module-zip ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/ \ + && mv /tmp/mod_zip-${ZIP_VERSION}.tar.gz ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/tarballs/ \ + && mv /tmp/nginx-module-zip.copyright ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/nginx-module-zip.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && make module-geoip module-image-filter module-njs module-perl module-xslt module-brotli module-headers-more module-geoip2 module-ndk module-lua module-zip \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + && mkdir -p /root/packages/ \ + && cp -R ${tempDir}/packages/alpine/* /root/packages/ \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /root/packages/${apkArch} \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache tzdata curl ca-certificates openssl \ + && rm -rf /tmp/* + +VOLUME ["/root/packages/"] diff --git a/sources/bxnginx1280modules/v3/Dockerfile.origin b/sources/bxnginx1280modules/v3/Dockerfile.origin new file mode 100644 index 0000000..fb0c900 --- /dev/null +++ b/sources/bxnginx1280modules/v3/Dockerfile.origin @@ -0,0 +1,79 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.0-alpine-slim + +ENV NJS_VERSION 0.8.10 +ENV NJS_RELEASE 1 + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + x86_64|aarch64) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"517bc18954ccf4efddd51986584ca1f37966833ad342a297e1fe58fd0faf14c5a4dabcb23519dca433878a2927a95d6bea05a6749ee2fa67a33bf24cdc41b1e4 *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && make module-geoip module-image-filter module-njs module-xslt \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache curl ca-certificates diff --git a/sources/bxnginx1280modules/v3/Makefile.module-brotli b/sources/bxnginx1280modules/v3/Makefile.module-brotli new file mode 100644 index 0000000..d2f69b1 --- /dev/null +++ b/sources/bxnginx1280modules/v3/Makefile.module-brotli @@ -0,0 +1,39 @@ +MODULES+= brotli + +MODULE_SUMMARY_brotli= 3rd-party brotli compression dynamic modules + +include $(CONTRIB)/src/ngx_brotli/version + +MODULE_VERSION_brotli= $(NGX_BROTLI_VERSION) +MODULE_RELEASE_brotli= 1 + +MODULE_VERSION_PREFIX_brotli=$(MODULE_TARGET_PREFIX) + +MODULE_SOURCES_brotli= ngx_brotli-$(NGX_BROTLI_VERSION).tar.gz + +MODULE_CONFARGS_brotli= --add-dynamic-module=$(MODSRC_PREFIX)ngx_brotli-$(NGX_BROTLI_VERSION) + +.deps-module-brotli: + cd $(CONTRIB) && make .sum-ngx_brotli + touch $@ + +MODULE_BUILD_DEPENDS_brotli=brotli-dev + +define MODULE_POST_brotli +cat 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 + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of brotli nginx module package. + + + + + + + diff --git a/sources/bxnginx1280modules/v3/nginx-module-headers-more.xml b/sources/bxnginx1280modules/v3/nginx-module-headers-more.xml new file mode 100644 index 0000000..ca7affb --- /dev/null +++ b/sources/bxnginx1280modules/v3/nginx-module-headers-more.xml @@ -0,0 +1,430 @@ + + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +Updated headers-more module to 0.37 release. + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1280modules/v3/nginx-module-zip.copyright b/sources/bxnginx1280modules/v3/nginx-module-zip.copyright new file mode 100644 index 0000000..5ffbca8 --- /dev/null +++ b/sources/bxnginx1280modules/v3/nginx-module-zip.copyright @@ -0,0 +1,28 @@ +/* + * Copyright 2007-2020 Evan Miller and contributors + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/sources/bxnginx1280modules/v3/nginx-module-zip.xml b/sources/bxnginx1280modules/v3/nginx-module-zip.xml new file mode 100644 index 0000000..e76bd38 --- /dev/null +++ b/sources/bxnginx1280modules/v3/nginx-module-zip.xml @@ -0,0 +1,38 @@ + + + + + + + + +base version updated to 1.3.0-1 + + + + + + + +base version updated to 1.2.2-1 + + + + + + + +base version updated to 1.2.1-1 + + + + + + + +base version updated to 1.2.0-1 + + + + + diff --git a/sources/bxnginx1281/Dockerfile b/sources/bxnginx1281/Dockerfile new file mode 100644 index 0000000..67ee152 --- /dev/null +++ b/sources/bxnginx1281/Dockerfile @@ -0,0 +1,33 @@ +FROM nginx:1.28.1-alpine-slim + +USER root + +RUN cd /root/ && \ + apk add --no-cache git curl openssl ca-certificates tzdata && \ + git clone https://github.com/bitrix-tools/nginx-modules.git && \ + cp /root/nginx-modules/packages/1.28.1/v1/alpine/v3.23/main/$(uname -m)/abuild-key.rsa.pub /etc/apk/keys/ && \ + echo "/root/nginx-modules/packages/1.28.1/v1/alpine/v3.23/main" >> /etc/apk/repositories && \ + apk update && \ + apk add nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-brotli nginx-module-geoip2 nginx-module-ndk nginx-module-lua nginx-module-headers-more nginx-module-zip && \ + apk del git && \ + sed -i "s/.*1.28.1.*//" /etc/apk/repositories && \ + rm -f /etc/apk/keys/abuild-key.rsa.pub && \ + rm -rf /root/nginx-modules + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/msmtp /opt/browscap /opt/geoip2 /ssl /var/runs/nginx && \ + chown -R bitrix:bitrix /var/log/nginx && \ + chown -R bitrix:bitrix /var/cache/nginx && \ + chown -R bitrix:bitrix /var/runs/nginx && \ + chown -R bitrix:bitrix /usr/lib/nginx/modules && \ + chown -R bitrix:bitrix /etc/nginx && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxnginx1281modules/v1/Dockerfile b/sources/bxnginx1281modules/v1/Dockerfile new file mode 100644 index 0000000..124b92d --- /dev/null +++ b/sources/bxnginx1281modules/v1/Dockerfile @@ -0,0 +1,153 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.1-alpine-slim + +ENV NJS_VERSION=0.9.4 +ENV NJS_RELEASE=1 +ENV BROTLI_VERSION=1.0.9 +ENV GEOIP2_VERSION=3.4 +ENV HEADERSMORE_VERSION=0.39 +ENV ZIP_VERSION=1.3.0 +ENV NDK_VERSION=0.3.3 +ENV LUA_VERSION=0.10.28 + +COPY brotli_makefile /tmp/brotli_makefile +COPY brotli_shasum /tmp/brotli_shasum +COPY brotli_version /tmp/brotli_version +COPY nginx-module-brotli.xml /tmp/nginx-module-brotli.xml +COPY Makefile.module-brotli /tmp/Makefile.module-brotli + +RUN chown nobody:nobody /tmp/brotli_makefile && \ + chown nobody:nobody /tmp/brotli_shasum && \ + chown nobody:nobody /tmp/brotli_version && \ + chown nobody:nobody /tmp/nginx-module-brotli.xml && \ + chown nobody:nobody /tmp/Makefile.module-brotli + +COPY headersmore_shasum /tmp/headersmore_shasum +COPY headersmore_version /tmp/headersmore_version +COPY nginx-module-headers-more.xml /tmp/nginx-module-headers-more.xml + +RUN chown nobody:nobody /tmp/headersmore_shasum && \ + chown nobody:nobody /tmp/headersmore_version && \ + chown nobody:nobody /tmp/nginx-module-headers-more.xml + +COPY nginx-module-zip.copyright /tmp/nginx-module-zip.copyright +COPY nginx-module-zip.xml /tmp/nginx-module-zip.xml +COPY Makefile.module-zip /tmp/Makefile.module-zip +COPY mod_zip-${ZIP_VERSION}.tar.gz /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN chown nobody:nobody /tmp/nginx-module-zip.copyright && \ + chown nobody:nobody /tmp/nginx-module-zip.xml && \ + chown nobody:nobody /tmp/Makefile.module-zip && \ + chown nobody:nobody /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-perl=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-brotli=${NGINX_VERSION}.${BROTLI_VERSION}-r${PKG_RELEASE} \ + nginx-module-geoip2=${NGINX_VERSION}.${GEOIP2_VERSION}-r${PKG_RELEASE} \ + nginx-module-ndk=${NGINX_VERSION}.${NDK_VERSION}-r${PKG_RELEASE} \ + nginx-module-lua=${NGINX_VERSION}.${LUA_VERSION}-r${PKG_RELEASE} \ + nginx-module-headers-more=${NGINX_VERSION}.${HEADERSMORE_VERSION}-r${PKG_RELEASE} \ + nginx-module-zip=${NGINX_VERSION}.${ZIP_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + i386) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2 \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cmake \ + wget \ + brotli-dev \ + libmaxminddb \ + libmaxminddb-dev \ + libzip-dev \ + xz \ + xz-dev \ + pcre \ + pcre-dev \ + perl-dev \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"4d43d5eadf39a2428e91a4e6fde0188f1cfb76354598d818d2ef2f8ff5cfa8d65993248b19a2d7ae663798d2362905e63ebd5dca6ca82cabc2831631d0e079ea *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && sed -i 's/.*BASE_MODULES=.*/BASE_MODULES= geoip image-filter njs perl xslt brotli headers-more geoip2 ndk lua zip /' ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile \ + && mv -f /tmp/brotli_makefile ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/Makefile \ + && mv -f /tmp/brotli_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/SHA512SUMS \ + && mv -f /tmp/brotli_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/version \ + && mv -f /tmp/nginx-module-brotli.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv -f /tmp/Makefile.module-brotli ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile.module-brotli \ + && mv -f /tmp/headersmore_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/SHA512SUMS \ + && mv -f /tmp/headersmore_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/version \ + && mv -f /tmp/nginx-module-headers-more.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/Makefile.module-zip ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/ \ + && mv /tmp/mod_zip-${ZIP_VERSION}.tar.gz ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/tarballs/ \ + && mv /tmp/nginx-module-zip.copyright ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/nginx-module-zip.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && make module-geoip module-image-filter module-njs module-perl module-xslt module-brotli module-headers-more module-geoip2 module-ndk module-lua module-zip \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + && mkdir -p /root/packages/ \ + && cp -R ${tempDir}/packages/alpine/* /root/packages/ \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /root/packages/${apkArch} \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache tzdata curl ca-certificates openssl \ + && rm -rf /tmp/* + +VOLUME ["/root/packages/"] diff --git a/sources/bxnginx1281modules/v1/Dockerfile.origin b/sources/bxnginx1281modules/v1/Dockerfile.origin new file mode 100644 index 0000000..74510b8 --- /dev/null +++ b/sources/bxnginx1281modules/v1/Dockerfile.origin @@ -0,0 +1,79 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.1-alpine-slim + +ENV NJS_VERSION 0.9.4 +ENV NJS_RELEASE 1 + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + x86_64|aarch64) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"4d43d5eadf39a2428e91a4e6fde0188f1cfb76354598d818d2ef2f8ff5cfa8d65993248b19a2d7ae663798d2362905e63ebd5dca6ca82cabc2831631d0e079ea *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && make module-geoip module-image-filter module-njs module-xslt \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache curl ca-certificates diff --git a/sources/bxnginx1281modules/v1/Makefile.module-brotli b/sources/bxnginx1281modules/v1/Makefile.module-brotli new file mode 100644 index 0000000..d2f69b1 --- /dev/null +++ b/sources/bxnginx1281modules/v1/Makefile.module-brotli @@ -0,0 +1,39 @@ +MODULES+= brotli + +MODULE_SUMMARY_brotli= 3rd-party brotli compression dynamic modules + +include $(CONTRIB)/src/ngx_brotli/version + +MODULE_VERSION_brotli= $(NGX_BROTLI_VERSION) +MODULE_RELEASE_brotli= 1 + +MODULE_VERSION_PREFIX_brotli=$(MODULE_TARGET_PREFIX) + +MODULE_SOURCES_brotli= ngx_brotli-$(NGX_BROTLI_VERSION).tar.gz + +MODULE_CONFARGS_brotli= --add-dynamic-module=$(MODSRC_PREFIX)ngx_brotli-$(NGX_BROTLI_VERSION) + +.deps-module-brotli: + cd $(CONTRIB) && make .sum-ngx_brotli + touch $@ + +MODULE_BUILD_DEPENDS_brotli=brotli-dev + +define MODULE_POST_brotli +cat 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 + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of brotli nginx module package. + + + + + + + diff --git a/sources/bxnginx1281modules/v1/nginx-module-headers-more.xml b/sources/bxnginx1281modules/v1/nginx-module-headers-more.xml new file mode 100644 index 0000000..ca7affb --- /dev/null +++ b/sources/bxnginx1281modules/v1/nginx-module-headers-more.xml @@ -0,0 +1,430 @@ + + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +Updated headers-more module to 0.37 release. + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1281modules/v1/nginx-module-zip.copyright b/sources/bxnginx1281modules/v1/nginx-module-zip.copyright new file mode 100644 index 0000000..5ffbca8 --- /dev/null +++ b/sources/bxnginx1281modules/v1/nginx-module-zip.copyright @@ -0,0 +1,28 @@ +/* + * Copyright 2007-2020 Evan Miller and contributors + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/sources/bxnginx1281modules/v1/nginx-module-zip.xml b/sources/bxnginx1281modules/v1/nginx-module-zip.xml new file mode 100644 index 0000000..e76bd38 --- /dev/null +++ b/sources/bxnginx1281modules/v1/nginx-module-zip.xml @@ -0,0 +1,38 @@ + + + + + + + + +base version updated to 1.3.0-1 + + + + + + + +base version updated to 1.2.2-1 + + + + + + + +base version updated to 1.2.1-1 + + + + + + + +base version updated to 1.2.0-1 + + + + + diff --git a/sources/bxnginx1282/Dockerfile b/sources/bxnginx1282/Dockerfile new file mode 100644 index 0000000..4285016 --- /dev/null +++ b/sources/bxnginx1282/Dockerfile @@ -0,0 +1,33 @@ +FROM nginx:1.28.2-alpine-slim + +USER root + +RUN cd /root/ && \ + apk add --no-cache git curl openssl ca-certificates tzdata && \ + git clone https://github.com/bitrix-tools/nginx-modules.git && \ + cp /root/nginx-modules/packages/1.28.2/v1/alpine/v3.23/main/$(uname -m)/abuild-key.rsa.pub /etc/apk/keys/ && \ + echo "/root/nginx-modules/packages/1.28.2/v1/alpine/v3.23/main" >> /etc/apk/repositories && \ + apk update && \ + apk add nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-acme nginx-module-perl nginx-module-brotli nginx-module-geoip2 nginx-module-ndk nginx-module-lua nginx-module-headers-more nginx-module-zip && \ + apk del git && \ + sed -i "s/.*1.28.2.*//" /etc/apk/repositories && \ + rm -f /etc/apk/keys/abuild-key.rsa.pub && \ + rm -rf /root/nginx-modules + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/msmtp /opt/browscap /opt/geoip2 /ssl /var/runs/nginx && \ + chown -R bitrix:bitrix /var/log/nginx && \ + chown -R bitrix:bitrix /var/cache/nginx && \ + chown -R bitrix:bitrix /var/runs/nginx && \ + chown -R bitrix:bitrix /usr/lib/nginx/modules && \ + chown -R bitrix:bitrix /etc/nginx && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxnginx1282modules/v1/Dockerfile b/sources/bxnginx1282modules/v1/Dockerfile new file mode 100644 index 0000000..3a83591 --- /dev/null +++ b/sources/bxnginx1282modules/v1/Dockerfile @@ -0,0 +1,160 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.2-alpine-slim + +ENV NJS_VERSION=0.9.5 +ENV NJS_RELEASE=1 +ENV ACME_VERSION=0.3.1 +ENV BROTLI_VERSION=1.0.9 +ENV GEOIP2_VERSION=3.4 +ENV HEADERSMORE_VERSION=0.39 +ENV ZIP_VERSION=1.3.0 +ENV NDK_VERSION=0.3.3 +ENV LUA_VERSION=0.10.28 + +COPY brotli_makefile /tmp/brotli_makefile +COPY brotli_shasum /tmp/brotli_shasum +COPY brotli_version /tmp/brotli_version +COPY nginx-module-brotli.xml /tmp/nginx-module-brotli.xml +COPY Makefile.module-brotli /tmp/Makefile.module-brotli + +RUN chown nobody:nobody /tmp/brotli_makefile && \ + chown nobody:nobody /tmp/brotli_shasum && \ + chown nobody:nobody /tmp/brotli_version && \ + chown nobody:nobody /tmp/nginx-module-brotli.xml && \ + chown nobody:nobody /tmp/Makefile.module-brotli + +COPY headersmore_shasum /tmp/headersmore_shasum +COPY headersmore_version /tmp/headersmore_version +COPY nginx-module-headers-more.xml /tmp/nginx-module-headers-more.xml + +RUN chown nobody:nobody /tmp/headersmore_shasum && \ + chown nobody:nobody /tmp/headersmore_version && \ + chown nobody:nobody /tmp/nginx-module-headers-more.xml + +COPY nginx-module-zip.copyright /tmp/nginx-module-zip.copyright +COPY nginx-module-zip.xml /tmp/nginx-module-zip.xml +COPY Makefile.module-zip /tmp/Makefile.module-zip +COPY mod_zip-${ZIP_VERSION}.tar.gz /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN chown nobody:nobody /tmp/nginx-module-zip.copyright && \ + chown nobody:nobody /tmp/nginx-module-zip.xml && \ + chown nobody:nobody /tmp/Makefile.module-zip && \ + chown nobody:nobody /tmp/mod_zip-${ZIP_VERSION}.tar.gz + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-acme=${NGINX_VERSION}.${ACME_VERSION}-r${PKG_RELEASE} \ + nginx-module-perl=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-brotli=${NGINX_VERSION}.${BROTLI_VERSION}-r${PKG_RELEASE} \ + nginx-module-geoip2=${NGINX_VERSION}.${GEOIP2_VERSION}-r${PKG_RELEASE} \ + nginx-module-ndk=${NGINX_VERSION}.${NDK_VERSION}-r${PKG_RELEASE} \ + nginx-module-lua=${NGINX_VERSION}.${LUA_VERSION}-r${PKG_RELEASE} \ + nginx-module-headers-more=${NGINX_VERSION}.${HEADERSMORE_VERSION}-r${PKG_RELEASE} \ + nginx-module-zip=${NGINX_VERSION}.${ZIP_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + i386) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2 \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cargo \ + clang-libclang \ + cmake \ + wget \ + brotli-dev \ + libmaxminddb \ + libmaxminddb-dev \ + libzip-dev \ + xz \ + xz-dev \ + pcre \ + pcre-dev \ + perl-dev \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"ef4545c05b1632a056482e3dbb47bb5d7393238318db3491e8bb308218cdb5f32dbb2ac73509097ac2426fd73270bc97836843a8b1846a396fd94e60826f7e3f *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && sed -i 's/.*BASE_MODULES=.*/BASE_MODULES= geoip image-filter njs perl xslt brotli headers-more geoip2 ndk lua zip /' ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile \ + && mv -f /tmp/brotli_makefile ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/Makefile \ + && mv -f /tmp/brotli_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/SHA512SUMS \ + && mv -f /tmp/brotli_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/ngx_brotli/version \ + && mv -f /tmp/nginx-module-brotli.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv -f /tmp/Makefile.module-brotli ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/Makefile.module-brotli \ + && mv -f /tmp/headersmore_shasum ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/SHA512SUMS \ + && mv -f /tmp/headersmore_version ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/src/headers-more-nginx-module/version \ + && mv -f /tmp/nginx-module-headers-more.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/Makefile.module-zip ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/alpine/ \ + && mv /tmp/mod_zip-${ZIP_VERSION}.tar.gz ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/contrib/tarballs/ \ + && mv /tmp/nginx-module-zip.copyright ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && mv /tmp/nginx-module-zip.xml ${tempDir}/pkg-oss-${NGINX_VERSION}-${PKG_RELEASE}/docs/ \ + && export BUILDTARGET=\"module-geoip module-image-filter module-njs module-acme module-perl module-xslt module-brotli module-headers-more module-geoip2 module-ndk module-lua module-zip\" \ + && if [ \"\$(apk --print-arch)\" = \"armhf\" ]; then BUILDTARGET=\"\$( echo \$BUILDTARGET | sed 's,module-acme,,' )\"; fi \ + && make \$BUILDTARGET \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && if [ "$apkArch" = "armhf" ]; then nginxPackages="$( echo $nginxPackages | sed 's,nginx-module-acme=.*,,')"; fi \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + && mkdir -p /root/packages/ \ + && cp -R ${tempDir}/packages/alpine/* /root/packages/ \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /root/packages/${apkArch} \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache tzdata curl ca-certificates openssl \ + && rm -rf /tmp/* + +VOLUME ["/root/packages/"] diff --git a/sources/bxnginx1282modules/v1/Dockerfile.origin b/sources/bxnginx1282modules/v1/Dockerfile.origin new file mode 100644 index 0000000..a78880d --- /dev/null +++ b/sources/bxnginx1282modules/v1/Dockerfile.origin @@ -0,0 +1,86 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# +FROM nginx:1.28.2-alpine-slim + +ENV NJS_VERSION 0.9.5 +ENV NJS_RELEASE 1 +ENV ACME_VERSION 0.3.1 + +RUN set -x \ + && apkArch="$(cat /etc/apk/arch)" \ + && nginxPackages=" \ + nginx=${NGINX_VERSION}-r${PKG_RELEASE} \ + nginx-module-xslt=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-geoip=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-image-filter=${NGINX_VERSION}-r${DYNPKG_RELEASE} \ + nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${NJS_RELEASE} \ + nginx-module-acme=${NGINX_VERSION}.${ACME_VERSION}-r${PKG_RELEASE} \ + " \ +# install prerequisites for public key and pkg-oss checks + && apk add --no-cache --virtual .checksum-deps \ + openssl \ + && case "$apkArch" in \ + x86_64|aarch64) \ +# arches officially built by upstream + apk add -X "https://nginx.org/packages/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \ + ;; \ + *) \ +# we're on an architecture upstream doesn't officially build for +# let's build binaries from the published packaging sources + set -x \ + && tempDir="$(mktemp -d)" \ + && chown nobody:nobody $tempDir \ + && apk add --no-cache --virtual .build-deps \ + gcc \ + libc-dev \ + make \ + openssl-dev \ + pcre2-dev \ + zlib-dev \ + linux-headers \ + libxslt-dev \ + gd-dev \ + geoip-dev \ + libedit-dev \ + bash \ + alpine-sdk \ + findutils \ + curl \ + cargo \ + clang-libclang \ + && su nobody -s /bin/sh -c " \ + export HOME=${tempDir} \ + && cd ${tempDir} \ + && curl -f -L -O https://github.com/nginx/pkg-oss/archive/${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && PKGOSSCHECKSUM=\"ef4545c05b1632a056482e3dbb47bb5d7393238318db3491e8bb308218cdb5f32dbb2ac73509097ac2426fd73270bc97836843a8b1846a396fd94e60826f7e3f *${NGINX_VERSION}-${PKG_RELEASE}.tar.gz\" \ + && if [ \"\$(openssl sha512 -r ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz)\" = \"\$PKGOSSCHECKSUM\" ]; then \ + echo \"pkg-oss tarball checksum verification succeeded!\"; \ + else \ + echo \"pkg-oss tarball checksum verification failed!\"; \ + exit 1; \ + fi \ + && tar xzvf ${NGINX_VERSION}-${PKG_RELEASE}.tar.gz \ + && cd pkg-oss-${NGINX_VERSION}-${PKG_RELEASE} \ + && cd alpine \ + && export BUILDTARGET=\"module-geoip module-image-filter module-njs module-xslt module-acme\" \ + && if [ \"\$(apk --print-arch)\" = \"armhf\" ]; then BUILDTARGET=\"\$( echo \$BUILDTARGET | sed 's,module-acme,,' )\"; fi \ + && make \$BUILDTARGET \ + && apk index --allow-untrusted -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \ + && abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \ + " \ + && cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \ + && apk del --no-network .build-deps \ + && if [ "$apkArch" = "armhf" ]; then nginxPackages="$( echo $nginxPackages | sed 's,nginx-module-acme=.*,,')"; fi \ + && apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \ + ;; \ + esac \ +# remove checksum deps + && apk del --no-network .checksum-deps \ +# if we have leftovers from building, let's purge them (including extra, unnecessary build deps) + && if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \ + && if [ -f "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \ +# Bring in curl and ca-certificates to make registering on DNS SD easier + && apk add --no-cache curl ca-certificates diff --git a/sources/bxnginx1282modules/v1/Makefile.module-brotli b/sources/bxnginx1282modules/v1/Makefile.module-brotli new file mode 100644 index 0000000..d2f69b1 --- /dev/null +++ b/sources/bxnginx1282modules/v1/Makefile.module-brotli @@ -0,0 +1,39 @@ +MODULES+= brotli + +MODULE_SUMMARY_brotli= 3rd-party brotli compression dynamic modules + +include $(CONTRIB)/src/ngx_brotli/version + +MODULE_VERSION_brotli= $(NGX_BROTLI_VERSION) +MODULE_RELEASE_brotli= 1 + +MODULE_VERSION_PREFIX_brotli=$(MODULE_TARGET_PREFIX) + +MODULE_SOURCES_brotli= ngx_brotli-$(NGX_BROTLI_VERSION).tar.gz + +MODULE_CONFARGS_brotli= --add-dynamic-module=$(MODSRC_PREFIX)ngx_brotli-$(NGX_BROTLI_VERSION) + +.deps-module-brotli: + cd $(CONTRIB) && make .sum-ngx_brotli + touch $@ + +MODULE_BUILD_DEPENDS_brotli=brotli-dev + +define MODULE_POST_brotli +cat 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 + + + + + + + + + +base version updated to 1.28.2-1 + + + + + + + + + +base version updated to 1.28.1-1 + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of brotli nginx module package. + + + + + + + diff --git a/sources/bxnginx1282modules/v1/nginx-module-headers-more.xml b/sources/bxnginx1282modules/v1/nginx-module-headers-more.xml new file mode 100644 index 0000000..1414987 --- /dev/null +++ b/sources/bxnginx1282modules/v1/nginx-module-headers-more.xml @@ -0,0 +1,454 @@ + + + + + + + + + + +base version updated to 1.28.2-1 + + + + + + + + + +base version updated to 1.28.1-1 + + + + + + + + + +base version updated to 1.28.0-1 + + + + + + + + + +base version updated to 1.27.5-1 + + + + + + + + + +base version updated to 1.27.4-1 + + + + + + + + + +base version updated to 1.27.3-1 + + + + + + + + + +Updated headers-more module to 0.37 release. + + + + + + + + +base version updated to 1.27.2-1 + + + + + + + + + +base version updated to 1.27.1-1 + + + + + + + + + +base version updated to 1.27.0-2 + + + + + + + + + +base version updated to 1.27.0-1 + + + + + + + + + +base version updated to 1.25.5-1 + + + + + + + + + +base version updated to 1.25.4-1 + + + + + + + + + +Updated headers-more module to 0.35 release. + + + + + + + + + +base version updated to 1.25.3-1 + + + + + + + + + +base version updated to 1.25.2-1 + + + + + + + + + +base version updated to 1.25.1-1 + + + + + + + + + +base version updated to 1.25.0-1 + + + + + + + + + +base version updated to 1.23.4-1 + + + + + + + + + +base version updated to 1.23.3-1 + + + + + + + + + +Updated headers-more to git hash bea1be3bbf6af28f6aa8cf0c01c07ee1637e2bd0 +which is version 0.34 + + + + + + + + + +base version updated to 1.23.2-1 + + + + + + + + + +base version updated to 1.23.1-1 + + + + + + + + + +Updated headers-more to git hash d502e41996d24a382bd9c632e3ae3efa0a5fca66 +This fixes FTBFS with nginx 1.23.0+. + + + + + + + + + +base version updated to 1.23.0-1 + + + + + + + + + +base version updated to 1.21.6-1 + + + + + + + + + +base version updated to 1.21.5-1 + + + + + + + + + +base version updated to 1.21.4-1 + + + + + + + + + +base version updated to 1.21.3-1 + + + + + + + + + +base version updated to 1.21.2-1 + + + + + + + + + +base version updated to 1.21.1-1 + + + + + + + + + +base version updated to 1.21.0-1 + + + + + + + + + +base version updated to 1.19.10-1 + + + + + + + + + +base version updated to 1.19.9-1 + + + + + + + + + +base version updated to 1.19.8-1 + + + + + + + + + +base version updated to 1.19.7-1 + + + + + + + + + + +Initial release of headers more nginx module package. + + + + + + + diff --git a/sources/bxnginx1282modules/v1/nginx-module-zip.copyright b/sources/bxnginx1282modules/v1/nginx-module-zip.copyright new file mode 100644 index 0000000..5ffbca8 --- /dev/null +++ b/sources/bxnginx1282modules/v1/nginx-module-zip.copyright @@ -0,0 +1,28 @@ +/* + * Copyright 2007-2020 Evan Miller and contributors + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/sources/bxnginx1282modules/v1/nginx-module-zip.xml b/sources/bxnginx1282modules/v1/nginx-module-zip.xml new file mode 100644 index 0000000..e76bd38 --- /dev/null +++ b/sources/bxnginx1282modules/v1/nginx-module-zip.xml @@ -0,0 +1,38 @@ + + + + + + + + +base version updated to 1.3.0-1 + + + + + + + +base version updated to 1.2.2-1 + + + + + + + +base version updated to 1.2.1-1 + + + + + + + +base version updated to 1.2.0-1 + + + + + diff --git a/sources/bxpercona8040/Dockerfile b/sources/bxpercona8040/Dockerfile new file mode 100644 index 0000000..eec5488 --- /dev/null +++ b/sources/bxpercona8040/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.0.40 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona8040/etc_my.cnf b/sources/bxpercona8040/etc_my.cnf new file mode 100644 index 0000000..df9069e --- /dev/null +++ b/sources/bxpercona8040/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona8040/etc_mycnfd_docker.cnf b/sources/bxpercona8040/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona8040/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona8040/etc_mycnfd_my.cnf b/sources/bxpercona8040/etc_mycnfd_my.cnf new file mode 100644 index 0000000..74c3e62 --- /dev/null +++ b/sources/bxpercona8040/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.0.37 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona8041/Dockerfile b/sources/bxpercona8041/Dockerfile new file mode 100644 index 0000000..59f16b5 --- /dev/null +++ b/sources/bxpercona8041/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.0.41 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona8041/etc_my.cnf b/sources/bxpercona8041/etc_my.cnf new file mode 100644 index 0000000..df9069e --- /dev/null +++ b/sources/bxpercona8041/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona8041/etc_mycnfd_docker.cnf b/sources/bxpercona8041/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona8041/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona8041/etc_mycnfd_my.cnf b/sources/bxpercona8041/etc_mycnfd_my.cnf new file mode 100644 index 0000000..74c3e62 --- /dev/null +++ b/sources/bxpercona8041/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.0.37 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona8042/Dockerfile b/sources/bxpercona8042/Dockerfile new file mode 100644 index 0000000..3ff3869 --- /dev/null +++ b/sources/bxpercona8042/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.0.42 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona8042/etc_my.cnf b/sources/bxpercona8042/etc_my.cnf new file mode 100644 index 0000000..df9069e --- /dev/null +++ b/sources/bxpercona8042/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona8042/etc_mycnfd_docker.cnf b/sources/bxpercona8042/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona8042/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona8042/etc_mycnfd_my.cnf b/sources/bxpercona8042/etc_mycnfd_my.cnf new file mode 100644 index 0000000..74c3e62 --- /dev/null +++ b/sources/bxpercona8042/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.0.37 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona8043/Dockerfile b/sources/bxpercona8043/Dockerfile new file mode 100644 index 0000000..acf6397 --- /dev/null +++ b/sources/bxpercona8043/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.0.43 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona8043/etc_my.cnf b/sources/bxpercona8043/etc_my.cnf new file mode 100644 index 0000000..df9069e --- /dev/null +++ b/sources/bxpercona8043/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona8043/etc_mycnfd_docker.cnf b/sources/bxpercona8043/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona8043/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona8043/etc_mycnfd_my.cnf b/sources/bxpercona8043/etc_mycnfd_my.cnf new file mode 100644 index 0000000..74c3e62 --- /dev/null +++ b/sources/bxpercona8043/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.0.37 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona8044/Dockerfile b/sources/bxpercona8044/Dockerfile new file mode 100644 index 0000000..935f010 --- /dev/null +++ b/sources/bxpercona8044/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.0.44 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona8044/etc_my.cnf b/sources/bxpercona8044/etc_my.cnf new file mode 100644 index 0000000..df9069e --- /dev/null +++ b/sources/bxpercona8044/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona8044/etc_mycnfd_docker.cnf b/sources/bxpercona8044/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona8044/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona8044/etc_mycnfd_my.cnf b/sources/bxpercona8044/etc_mycnfd_my.cnf new file mode 100644 index 0000000..74c3e62 --- /dev/null +++ b/sources/bxpercona8044/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.0.37 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona844/Dockerfile b/sources/bxpercona844/Dockerfile new file mode 100644 index 0000000..933f7c3 --- /dev/null +++ b/sources/bxpercona844/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.4.4-4 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona844/etc_my.cnf b/sources/bxpercona844/etc_my.cnf new file mode 100644 index 0000000..48d35a8 --- /dev/null +++ b/sources/bxpercona844/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.4/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona844/etc_mycnfd_docker.cnf b/sources/bxpercona844/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona844/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona844/etc_mycnfd_my.cnf b/sources/bxpercona844/etc_mycnfd_my.cnf new file mode 100644 index 0000000..3d13828 --- /dev/null +++ b/sources/bxpercona844/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.4.0 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona845/Dockerfile b/sources/bxpercona845/Dockerfile new file mode 100644 index 0000000..8ab6ddf --- /dev/null +++ b/sources/bxpercona845/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.4.5 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona845/etc_my.cnf b/sources/bxpercona845/etc_my.cnf new file mode 100644 index 0000000..48d35a8 --- /dev/null +++ b/sources/bxpercona845/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.4/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona845/etc_mycnfd_docker.cnf b/sources/bxpercona845/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona845/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona845/etc_mycnfd_my.cnf b/sources/bxpercona845/etc_mycnfd_my.cnf new file mode 100644 index 0000000..3d13828 --- /dev/null +++ b/sources/bxpercona845/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.4.0 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona846/Dockerfile b/sources/bxpercona846/Dockerfile new file mode 100644 index 0000000..9006377 --- /dev/null +++ b/sources/bxpercona846/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.4.6 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona846/etc_my.cnf b/sources/bxpercona846/etc_my.cnf new file mode 100644 index 0000000..48d35a8 --- /dev/null +++ b/sources/bxpercona846/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.4/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona846/etc_mycnfd_docker.cnf b/sources/bxpercona846/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona846/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona846/etc_mycnfd_my.cnf b/sources/bxpercona846/etc_mycnfd_my.cnf new file mode 100644 index 0000000..3d13828 --- /dev/null +++ b/sources/bxpercona846/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.4.0 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxpercona847/Dockerfile b/sources/bxpercona847/Dockerfile new file mode 100644 index 0000000..9c06afb --- /dev/null +++ b/sources/bxpercona847/Dockerfile @@ -0,0 +1,12 @@ +FROM percona/percona-server:8.4.7 + +USER root + +COPY etc_my.cnf /etc/my.cnf +COPY etc_mycnfd_docker.cnf /etc/my.cnf.d/docker.cnf +COPY etc_mycnfd_my.cnf /etc/my.cnf.d/my.cnf + +RUN chown -R mysql:root /etc/my.cnf /etc/my.cnf.d && \ + chmod -R ug+rwX /etc/my.cnf /etc/my.cnf.d + +USER mysql:mysql diff --git a/sources/bxpercona847/etc_my.cnf b/sources/bxpercona847/etc_my.cnf new file mode 100644 index 0000000..48d35a8 --- /dev/null +++ b/sources/bxpercona847/etc_my.cnf @@ -0,0 +1,35 @@ +# Percona Server template configuration +# +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/8.4/en/server-configuration-defaults.html +# +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove the leading "# " to disable binary logging +# Binary logging captures changes between backups and is enabled by +# default. It's default setting is log_bin=binlog +# disable_log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +# +# Remove leading # to revert to previous value for default_authentication_plugin, +# this will increase compatibility with older clients. For background, see: +# https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_default_authentication_plugin +# default-authentication-plugin=mysql_native_password +# +##datadir=/var/lib/mysql +##socket=/var/lib/mysql/mysql.sock +##log-error=/var/log/mysqld.log +##pid-file=/var/run/mysqld/mysqld.pid +# +!includedir /etc/my.cnf.d +# diff --git a/sources/bxpercona847/etc_mycnfd_docker.cnf b/sources/bxpercona847/etc_mycnfd_docker.cnf new file mode 100644 index 0000000..55405f3 --- /dev/null +++ b/sources/bxpercona847/etc_mycnfd_docker.cnf @@ -0,0 +1,3 @@ +#[mysqld] +#host_cache_size=0 +#skip-name-resolve diff --git a/sources/bxpercona847/etc_mycnfd_my.cnf b/sources/bxpercona847/etc_mycnfd_my.cnf new file mode 100644 index 0000000..3d13828 --- /dev/null +++ b/sources/bxpercona847/etc_mycnfd_my.cnf @@ -0,0 +1,85 @@ +[client] +port = 3306 +default-character-set = utf8mb4 +user = mysql + +[mysqld_safe] +nice = 0 +#log-error = /var/log/mysql/error.log +user = mysql + +[mysqld] +#default-authentication-plugin = mysql_native_password # deprecated +#authentication_policy = "mysql_native_password,," # mysql_native_password deprecated 8.0.34 +authentication_policy = "*,," +user = mysql +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +server-id = 101 +skip-external-locking +default-storage-engine = innodb +pid-file = /var/run/mysqld/mysqld.pid +transaction_isolation = READ-COMMITTED +max_allowed_packet = 16M +myisam-recover-options = BACKUP +explicit_defaults_for_timestamp = 1 +#expire_logs_days = 30 +#binlog_expire_logs_seconds = 2592000 +max_binlog_size = 1024M +sql_mode = "" +tmpdir = /tmp +innodb_file_per_table +innodb_buffer_pool_size = 1024M +innodb_flush_log_at_trx_commit = 2 +#innodb_log_file_size = 64M # deprecated percona 8.0.30 +innodb-redo-log-capacity = 104857600 +innodb_flush_method = O_DIRECT +innodb_strict_mode = OFF +innodb_default_row_format = DYNAMIC +character-set-server = utf8mb4 +collation-server = utf8mb4_0900_ai_ci +init-connect = "SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci" +#skip-character-set-client-handshake # deprecated 8.0.35 +skip-name-resolve +max_connections = 43 +table_open_cache = 8096 +thread_cache_size = 96 +thread_stack = 512K +max_heap_table_size = 128M +tmp_table_size = 128M +key_buffer_size = 48M +join_buffer_size = 8M +sort_buffer_size = 8M +bulk_insert_buffer_size = 2M +myisam_sort_buffer_size = 8M +general_log = 0 +#general_log_file = /var/log/mysql/mysql.log +#log_error = /var/log/mysql/error.log +skip-log-bin +#log_bin = /var/lib/mysql/mysql-binlog +log_bin_index = /var/lib/mysql/mysql-binlog.index +relay_log = /var/lib/mysql/mysql-relay-binlog +relay_log_index = /var/lib/mysql/mysql-relay-binlog.index +slow_query_log = 0 +#slow_query_log_file = /var/log/mysql/slow.log +sync_binlog = 0 +tls_version = TLSv1.2,TLSv1.3 +secure-log-path=/var/lib/mysql-files +percona_telemetry_disable = 1 # disable percona telemetry, from 8.4.0 and above + +[system_default_sect] +MinProtocol = TLSv1.2 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M +default-character-set = utf8mb4 +user = mysql + +[mysql] +user = mysql + +[isamchk] +key_buffer = 16M diff --git a/sources/bxphp8227/Dockerfile b/sources/bxphp8227/Dockerfile new file mode 100644 index 0000000..ea4d34c --- /dev/null +++ b/sources/bxphp8227/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.2.27-fpm-alpine AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.1.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.1.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.7.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.2.27-fpm-alpine AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8227/bitrix.sh b/sources/bxphp8227/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8227/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8227/msmtprc b/sources/bxphp8227/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8227/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8228/Dockerfile b/sources/bxphp8228/Dockerfile new file mode 100644 index 0000000..c98d2b5 --- /dev/null +++ b/sources/bxphp8228/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.2.28-fpm-alpine AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.3.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.2.28-fpm-alpine AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8228/bitrix.sh b/sources/bxphp8228/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8228/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8228/msmtprc b/sources/bxphp8228/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8228/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8229/Dockerfile b/sources/bxphp8229/Dockerfile new file mode 100644 index 0000000..3833e94 --- /dev/null +++ b/sources/bxphp8229/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.2.29-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.4.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.2.29-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8229/bitrix.sh b/sources/bxphp8229/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8229/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8229/msmtprc b/sources/bxphp8229/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8229/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8230/Dockerfile b/sources/bxphp8230/Dockerfile new file mode 100644 index 0000000..3022dd3 --- /dev/null +++ b/sources/bxphp8230/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.2.30-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.28.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.5.0.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.1.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.2.30-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libavif libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8230/bitrix.sh b/sources/bxphp8230/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8230/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8230/msmtprc b/sources/bxphp8230/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8230/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8321/Dockerfile b/sources/bxphp8321/Dockerfile new file mode 100644 index 0000000..937b87b --- /dev/null +++ b/sources/bxphp8321/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.21-fpm-alpine AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.3.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.21-fpm-alpine AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8321/bitrix.sh b/sources/bxphp8321/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8321/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8321/msmtprc b/sources/bxphp8321/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8321/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8322/Dockerfile b/sources/bxphp8322/Dockerfile new file mode 100644 index 0000000..0603198 --- /dev/null +++ b/sources/bxphp8322/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.22-fpm-alpine AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.3.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.22-fpm-alpine AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8322/bitrix.sh b/sources/bxphp8322/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8322/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8322/msmtprc b/sources/bxphp8322/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8322/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8323/Dockerfile b/sources/bxphp8323/Dockerfile new file mode 100644 index 0000000..af615ed --- /dev/null +++ b/sources/bxphp8323/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.23-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.4.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.23-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8323/bitrix.sh b/sources/bxphp8323/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8323/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8323/msmtprc b/sources/bxphp8323/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8323/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8324/Dockerfile b/sources/bxphp8324/Dockerfile new file mode 100644 index 0000000..9938719 --- /dev/null +++ b/sources/bxphp8324/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.24-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.25.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.7.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.5.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.24-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8324/bitrix.sh b/sources/bxphp8324/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8324/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8324/msmtprc b/sources/bxphp8324/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8324/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8325/Dockerfile b/sources/bxphp8325/Dockerfile new file mode 100644 index 0000000..e4cf0e4 --- /dev/null +++ b/sources/bxphp8325/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.25-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.5.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.25-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8325/bitrix.sh b/sources/bxphp8325/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8325/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8325/msmtprc b/sources/bxphp8325/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8325/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8326/Dockerfile b/sources/bxphp8326/Dockerfile new file mode 100644 index 0000000..ae8abbe --- /dev/null +++ b/sources/bxphp8326/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.26-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.5.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.26-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8326/bitrix.sh b/sources/bxphp8326/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8326/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8326/msmtprc b/sources/bxphp8326/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8326/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8327/Dockerfile b/sources/bxphp8327/Dockerfile new file mode 100644 index 0000000..a1c7d87 --- /dev/null +++ b/sources/bxphp8327/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.27-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.6.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.27-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8327/bitrix.sh b/sources/bxphp8327/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8327/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8327/msmtprc b/sources/bxphp8327/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8327/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8328/Dockerfile b/sources/bxphp8328/Dockerfile new file mode 100644 index 0000000..29e9735 --- /dev/null +++ b/sources/bxphp8328/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.28-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.7.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.28-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8328/bitrix.sh b/sources/bxphp8328/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8328/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8328/msmtprc b/sources/bxphp8328/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8328/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8329/Dockerfile b/sources/bxphp8329/Dockerfile new file mode 100644 index 0000000..1b1e2cf --- /dev/null +++ b/sources/bxphp8329/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.29-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.28.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.5.0.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.1.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.29-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libavif libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8329/bitrix.sh b/sources/bxphp8329/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8329/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8329/msmtprc b/sources/bxphp8329/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8329/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8330/Dockerfile b/sources/bxphp8330/Dockerfile new file mode 100644 index 0000000..2d8a049 --- /dev/null +++ b/sources/bxphp8330/Dockerfile @@ -0,0 +1,95 @@ +FROM php:8.3.30-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.28.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.5.0.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.2.0.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.1.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.3.30-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libavif libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8330/bitrix.sh b/sources/bxphp8330/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8330/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8330/msmtprc b/sources/bxphp8330/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8330/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8410/Dockerfile b/sources/bxphp8410/Dockerfile new file mode 100644 index 0000000..2985cfc --- /dev/null +++ b/sources/bxphp8410/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.10-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://github.com/cyrax13/pecl.php.net/raw/refs/heads/main/mcrypt-1.0.7dev.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.4.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.10-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8410/bitrix.sh b/sources/bxphp8410/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8410/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8410/msmtprc b/sources/bxphp8410/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8410/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8411/Dockerfile b/sources/bxphp8411/Dockerfile new file mode 100644 index 0000000..2ccd3c1 --- /dev/null +++ b/sources/bxphp8411/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.11-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.25.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://github.com/cyrax13/pecl.php.net/raw/refs/heads/main/mcrypt-1.0.7dev.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.5.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.11-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8411/bitrix.sh b/sources/bxphp8411/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8411/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8411/msmtprc b/sources/bxphp8411/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8411/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8412/Dockerfile b/sources/bxphp8412/Dockerfile new file mode 100644 index 0000000..3624714 --- /dev/null +++ b/sources/bxphp8412/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.12-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.5.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.12-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8412/bitrix.sh b/sources/bxphp8412/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8412/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8412/msmtprc b/sources/bxphp8412/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8412/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8413/Dockerfile b/sources/bxphp8413/Dockerfile new file mode 100644 index 0000000..859165a --- /dev/null +++ b/sources/bxphp8413/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.13-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.5.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.13-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8413/bitrix.sh b/sources/bxphp8413/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8413/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8413/msmtprc b/sources/bxphp8413/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8413/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8414/Dockerfile b/sources/bxphp8414/Dockerfile new file mode 100644 index 0000000..2869672 --- /dev/null +++ b/sources/bxphp8414/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.14-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.6.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.14-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8414/bitrix.sh b/sources/bxphp8414/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8414/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8414/msmtprc b/sources/bxphp8414/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8414/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8415/Dockerfile b/sources/bxphp8415/Dockerfile new file mode 100644 index 0000000..a308041 --- /dev/null +++ b/sources/bxphp8415/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.15-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.27.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.7.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.15-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8415/bitrix.sh b/sources/bxphp8415/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8415/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8415/msmtprc b/sources/bxphp8415/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8415/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8416/Dockerfile b/sources/bxphp8416/Dockerfile new file mode 100644 index 0000000..e55cb8b --- /dev/null +++ b/sources/bxphp8416/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.16-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.28.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.5.0.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.1.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.16-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libavif libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8416/bitrix.sh b/sources/bxphp8416/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8416/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8416/msmtprc b/sources/bxphp8416/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8416/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8417/Dockerfile b/sources/bxphp8417/Dockerfile new file mode 100644 index 0000000..0641098 --- /dev/null +++ b/sources/bxphp8417/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.17-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.28.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.5.0.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.2.0.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.1.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.17-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libavif libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8417/bitrix.sh b/sources/bxphp8417/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8417/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8417/msmtprc b/sources/bxphp8417/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8417/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp8418/Dockerfile b/sources/bxphp8418/Dockerfile new file mode 100644 index 0000000..e82f137 --- /dev/null +++ b/sources/bxphp8418/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.18-fpm-alpine3.22 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql17-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev libavif libavif-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.4.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.28.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://pecl.php.net/get/mcrypt-1.0.9.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.3.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.5.0.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.2.0.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.1.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-avif --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.18-fpm-alpine3.22 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libavif libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp8418/bitrix.sh b/sources/bxphp8418/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp8418/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp8418/msmtprc b/sources/bxphp8418/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp8418/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp847/Dockerfile b/sources/bxphp847/Dockerfile new file mode 100644 index 0000000..5513ba6 --- /dev/null +++ b/sources/bxphp847/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.7-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://github.com/cyrax13/pecl.php.net/raw/refs/heads/main/mcrypt-1.0.7dev.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.3.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.7-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp847/bitrix.sh b/sources/bxphp847/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp847/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp847/msmtprc b/sources/bxphp847/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp847/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxphp848/Dockerfile b/sources/bxphp848/Dockerfile new file mode 100644 index 0000000..bfcf5e5 --- /dev/null +++ b/sources/bxphp848/Dockerfile @@ -0,0 +1,96 @@ +FROM php:8.4.8-fpm-alpine3.21 AS builder + +USER root + +RUN apk add --no-cache --virtual .build-deps \ + file \ + autoconf \ + dpkg-dev dpkg \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c \ + bzip2-dev \ + postgresql16-dev \ + zip libzip libzip-dev \ + freetype freetype-dev libpng libpng-dev libjpeg-turbo libjpeg-turbo-dev libxpm libxpm-dev libwebp libwebp-dev \ + openldap-dev libldap libsasl cyrus-sasl-dev \ + gettext gettext-dev \ + aspell-dev \ + libxml2-dev \ + libxslt-dev \ + linux-headers \ + libmemcached libmemcached-dev libmemcached-libs \ + libmcrypt-dev \ + lz4 lz4-dev liblzf liblzf-dev zstd zstd-dev \ + rabbitmq-c rabbitmq-c-dev libpq libpq-dev \ + libssh2-dev \ + imagemagick imagemagick-dev + +RUN docker-php-source extract && \ + mkdir -p /usr/src/php/ext/memcache && curl -fsSL https://pecl.php.net/get/memcache-8.2.tgz | tar xvz -C "/usr/src/php/ext/memcache" --strip 1 && \ + mkdir -p /usr/src/php/ext/memcached && curl -fsSL https://pecl.php.net/get/memcached-3.3.0.tgz | tar xvz -C "/usr/src/php/ext/memcached" --strip 1 && \ + mkdir -p /usr/src/php/ext/apcu && curl -fsSL https://pecl.php.net/get/apcu-5.1.24.tgz | tar xvz -C "/usr/src/php/ext/apcu" --strip 1 && \ + mkdir -p /usr/src/php/ext/pspell && curl -fsSL https://pecl.php.net/get/pspell-1.0.1.tgz | tar xvz -C "/usr/src/php/ext/pspell" --strip 1 && \ + mkdir -p /usr/src/php/ext/mcrypt && curl -fsSL https://github.com/cyrax13/pecl.php.net/raw/refs/heads/main/mcrypt-1.0.7dev.tgz | tar xvz -C "/usr/src/php/ext/mcrypt" --strip 1 && \ + mkdir -p /usr/src/php/ext/msgpack && curl -fsSL https://pecl.php.net/get/msgpack-3.0.0.tgz | tar xvz -C "/usr/src/php/ext/msgpack" --strip 1 && \ + mkdir -p /usr/src/php/ext/igbinary && curl -fsSL https://pecl.php.net/get/igbinary-3.2.16.tgz | tar xvz -C "/usr/src/php/ext/igbinary" --strip 1 && \ + mkdir -p /usr/src/php/ext/redis && curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz | tar xvz -C "/usr/src/php/ext/redis" --strip 1 && \ + mkdir -p /usr/src/php/ext/xhprof && curl -fsSL https://pecl.php.net/get/xhprof-2.3.10.tgz | tar xvz -C "/usr/src/php/ext/xhprof" --strip 1 && \ + mkdir -p /usr/src/php/ext/xdebug && curl -fsSL https://pecl.php.net/get/xdebug-3.4.3.tgz | tar xvz -C "/usr/src/php/ext/xdebug" --strip 1 && \ + mkdir -p /usr/src/php/ext/amqp && curl -fsSL https://pecl.php.net/get/amqp-2.1.2.tgz | tar xvz -C "/usr/src/php/ext/amqp" --strip 1 && \ + mkdir -p /usr/src/php/ext/ssh2 && curl -fsSL https://pecl.php.net/get/ssh2-1.4.1.tgz | tar xvz -C "/usr/src/php/ext/ssh2" --strip 1 && \ + mkdir -p /usr/src/php/ext/imagick && curl -fsSL https://pecl.php.net/get/imagick-3.8.0.tgz | tar xvz -C "/usr/src/php/ext/imagick" --strip 1 && \ + cp -fr /usr/src/php/ext/xhprof/extension/* /usr/src/php/ext/xhprof/ && \ + cp -fr /usr/src/php/ext/igbinary /usr/local/include/php/ext/igbinary && \ + cp -fr /usr/src/php/ext/msgpack /usr/local/include/php/ext/msgpack + +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-xpm --with-webp && \ + docker-php-ext-configure opcache --enable-opcache && \ + docker-php-ext-configure redis --enable-redis-igbinary --enable-redis-msgpack --enable-redis-lzf --enable-redis-zstd + +RUN docker-php-ext-install mysqli pdo_mysql bz2 pgsql pdo_pgsql zip gd opcache ldap exif intl calendar sodium gettext pspell xml xmlwriter xsl shmop sysvmsg sysvsem sysvshm sockets memcache memcached apcu mcrypt msgpack igbinary redis xhprof xdebug amqp ssh2 imagick + +FROM php:8.4.8-fpm-alpine3.21 AS production + +USER root + +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ + +COPY --from=builder /usr/local/etc/ /usr/local/etc/ + +RUN mkdir -p /etc/periodic/1min && \ + mkdir -p /opt/msmtp/ + +COPY bitrix.sh /etc/periodic/1min/bitrix + +COPY msmtprc /opt/msmtp/.msmtprc + +RUN docker-php-source delete && \ + apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing catdoc && \ + apk add --no-cache msmtp curl openssl ca-certificates tzdata poppler-utils aspell bzip2 gettext libmcrypt libldap libsasl cyrus-sasl libmemcached libmemcached-libs icu-libs libxslt freetype libpng libjpeg-turbo libxpm libwebp libgomp zip libzip libxml2 lz4 liblzf zstd libpq rabbitmq-c libssh2 imagemagick && \ + curl -fsSL https://getcomposer.org/download/latest-stable/composer.phar -o composer.phar && \ + chmod +x composer.phar && \ + mv composer.phar /usr/local/bin/composer && \ + echo "* * * * * run-parts /etc/periodic/1min" >> /etc/crontabs/root && \ + sed -i '/^$/d' /etc/crontabs/root && \ + echo "" >> /etc/crontabs/root && \ + chmod -R a+x /etc/periodic/1min/bitrix && \ + chmod 600 /opt/msmtp/.msmtprc && \ + ln -s /opt/msmtp/.msmtprc /etc/msmtprc + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN mkdir -pv /opt/www /opt/.bx_temp /opt/browscap /opt/geoip2 /ssl && \ + chown -R bitrix:bitrix /usr/local/etc && \ + chown -R bitrix:bitrix /opt/www && \ + chown -R bitrix:bitrix /opt/.bx_temp && \ + chown -R bitrix:bitrix /opt/msmtp && \ + chown -R bitrix:bitrix /opt/browscap && \ + chown -R bitrix:bitrix /opt/geoip2 && \ + chown -R bitrix:bitrix /ssl + +USER bitrix:bitrix diff --git a/sources/bxphp848/bitrix.sh b/sources/bxphp848/bitrix.sh new file mode 100755 index 0000000..53225a5 --- /dev/null +++ b/sources/bxphp848/bitrix.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +if [[ -f /opt/www/bitrix/.settings.php ]]; +then + if [[ ! -f /opt/www/install.config && ! -f /opt/www/license.php && ! -f /opt/www/readme.php ]]; + then + su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/cron_events.php; > /dev/null 2>&1' + fi +fi +# diff --git a/sources/bxphp848/msmtprc b/sources/bxphp848/msmtprc new file mode 100644 index 0000000..f0c41c6 --- /dev/null +++ b/sources/bxphp848/msmtprc @@ -0,0 +1,16 @@ +# smtp account configuration for default +account default +logfile /proc/self/fd/2 +host localhost +port 25 +from xxx@yyy.zzz +user xxx@yyy.zzz +password xxxyyyzzz +auth login +aliases /etc/aliases +keepbcc off +tls on +tls_starttls on +tls_certcheck on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +protocol smtp diff --git a/sources/bxpush30/Dockerfile b/sources/bxpush30/Dockerfile new file mode 100644 index 0000000..db7392f --- /dev/null +++ b/sources/bxpush30/Dockerfile @@ -0,0 +1,47 @@ +FROM node:20 AS builder + +USER root + +ENV PUSH=push-server.tar.gz + +RUN mkdir -p /opt/push-server + +COPY push-server-0.4.0.tar.gz /opt/push-server/$PUSH + +WORKDIR /opt/push-server + +RUN tar xzvvf $PUSH && rm -f $PUSH + +RUN npm install --omit=dev + +FROM node:20-alpine AS production + +USER root + +RUN apk --no-cache add shadow bash gettext libintl curl openssl ca-certificates tzdata && \ + addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix && \ + mkdir -p /usr/local/bin && \ + mv /usr/bin/envsubst /usr/local/bin/envsubst && \ + [[ ! -d /tmp/push-server ]] && mkdir /tmp/push-server && \ + [[ ! -d /etc/push-server ]] && mkdir /etc/push-server && \ + mkdir -p /var/log/push-server + +WORKDIR /opt/push-server + +COPY --from=builder /opt/push-server /opt/push-server +COPY docker-entrypoint.sh /usr/local/bin/ +COPY push-server-pub.json /etc/push-server/push-server-pub.json +COPY push-server-sub.json /etc/push-server/push-server-sub.json + +RUN chown -R bitrix:bitrix /opt/push-server && \ + chown -R bitrix:bitrix /tmp/push-server && \ + chown -R bitrix:bitrix /etc/push-server && \ + chmod 0755 /usr/local/bin/docker-entrypoint.sh && \ + chown -R bitrix:bitrix /var/log/push-server + +# VOLUME /var/log/push-server + +USER bitrix:bitrix + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] diff --git a/sources/bxpush30/docker-entrypoint.sh b/sources/bxpush30/docker-entrypoint.sh new file mode 100755 index 0000000..b783f13 --- /dev/null +++ b/sources/bxpush30/docker-entrypoint.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Push Server on NodeJS variables +# +# REDIS_HOST - redis host +# REDIS_PORT - redis port +# +# PUSH_SECURITY_KEY - push security key +# PUSH_PUB_MODE - push pub +# PUSH_PUB_PORT - push pub port +# PUSH_SUB_MODE - push sub +# PUSH_SUB_PORT - push sub port +# +# RUN_DIR - temporary directory for service; default /tmp/push-server +# PUB_URI - pub service uri +# REST_URI - rest service uri +# SUB_URI - sub service uri +# +export WORKDIR=/opt/push-server +export CONFIG_DIR=/etc/push-server +PUB_TMPL=$CONFIG_DIR/push-server-pub.json +SUB_TMPL=$CONFIG_DIR/push-server-sub.json +CONFIG=$CONFIG_DIR/config.json +export LOG_DIR=/var/log/push-server +[[ -z $RUN_DIR ]] && RUN_DIR=/tmp/push-server +export RUN_DIR +# +log() { + msg="${1}" + printf "%-16s: [%d]> %s\n" "$(date +%Y/%m/%dT%H:%M)" "$$" "$msg" +} +# +error() { + msg="${1}" + rtn="${2:-1}" + log "$msg" + exit $rtn +} +# +pushd $WORKDIR || error "Cannot access $WORKDIR" +[[ -z $PUSH_PUB_MODE && -z $PUSH_SUB_MODE ]] && error "Not defind push-server mode environment variables: PUSH_PUB_MODE or PUSH_SUB_MODE" +[[ $PUSH_PUB_MODE != "pub" && -z $PUSH_SUB_MODE ]] && error "Incorrect value in PUSH_PUB_MODE=$PUSH_PUB_MODE variable" +[[ -z $PUSH_PUB_MODE && $PUSH_SUB_MODE != "sub" ]] && error "Incorrect value in PUSH_SUB_MODE=$PUSH_SUB_MODE variable" +# +if [[ $PUSH_PUB_MODE == "pub" ]]; +then + log "PUSH_PUB_MODE=$PUSH_PUB_MODE" + TEMPLATE=$PUB_TMPL + [[ -z $REST_URI ]] && REST_URI="/bitrix/rest/" + [[ -z $PUB_URI ]] && PUB_URI="/bitrix/pub/" + log "REST_URI=$REST_URI" + log "PUB_URI=$PUB_URI" + export REST_URI + export PUB_URI +elif [[ $PUSH_SUB_MODE == "sub" ]]; +then + log "PUSH_SUB_MODE=$PUSH_SUB_MODE" + TEMPLATE=$SUB_TMPL + [[ -z $SUB_URI ]] && SUB_URI="/bitrix/subws/" + log "SUB_URI=$SUB_URI" + export SUB_URI +fi +# +popd +# +log "Create $CONFIG" +envsubst <$TEMPLATE >$CONFIG +# +log "Start server" +node server.js --config $CONFIG +# diff --git a/sources/bxpush30/push-server-0.4.0.tar.gz b/sources/bxpush30/push-server-0.4.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a5fce78a52078f9572ea092d4d4a8d15c0005720 GIT binary patch literal 146902 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 A%K!iX literal 0 HcmV?d00001 diff --git a/sources/bxpush30/push-server-pub.json b/sources/bxpush30/push-server-pub.json new file mode 100644 index 0000000..71d6362 --- /dev/null +++ b/sources/bxpush30/push-server-pub.json @@ -0,0 +1,49 @@ +{ + "servers": + [ + { + "name": "${PUSH_PUB_MODE}-${PUSH_PUB_PORT}", + "port": ${PUSH_PUB_PORT}, + "hostname": "0.0.0.0", + "backlog": 1024, + "routes": + { + "pub": "${PUB_URI}", + "stat": "/server-stat/", + "rest": "${REST_URI}" + } + } + ], + "publishMode": true, + "dataDir": "${WORKDIR}/data", + "processUniqueId": "${PUSH_PUB_MODE}-${PUSH_PUB_PORT}", + "clusterMode": true, + "storage": + { + "type": "redis", + "messageTLL": 86400, + "channelTLL": 86400, + "onlineTLL": 120, + "onlineDelta": 10, + "host": "${REDIS_HOST}", + "port": ${REDIS_PORT} + }, + "security": + { + "key": "${PUSH_SECURITY_KEY}" + }, + "limits": + { + "maxPayload": 1048576, + "maxConnPerChannel": 100, + "maxMessagesPerRequest": 100, + "maxChannelsPerRequest": 100, + "maxRequestsPerSecond": 50 + }, + "debug": + { + "folderName": "/var/log/push-server", + "ip": ["127.0.0.256"], + "trustProxy": true + } +} diff --git a/sources/bxpush30/push-server-sub.json b/sources/bxpush30/push-server-sub.json new file mode 100644 index 0000000..40191fd --- /dev/null +++ b/sources/bxpush30/push-server-sub.json @@ -0,0 +1,38 @@ +{ + "servers": + [ + { + "name": "${PUSH_SUB_MODE}-${PUSH_SUB_PORT}", + "port": ${PUSH_SUB_PORT}, + "hostname": "0.0.0.0", + "backlog": 1024, + "routes": + { + "sub": "${SUB_URI}" + } + } + ], + "dataDir": "${WORKDIR}/data", + "clusterMode": true, + "processUniqueId": "${PUSH_SUB_MODE}-${PUSH_SUB_PORT}", + "storage": + { + "type": "redis", + "messageTLL": 86400, + "channelTLL": 86400, + "onlineTLL": 120, + "onlineDelta": 10, + "host": "${REDIS_HOST}", + "port": ${REDIS_PORT} + }, + "security": + { + "key": "${PUSH_SECURITY_KEY}" + }, + "debug": + { + "folderName": "/var/log/push-server", + "ip": ["127.0.0.256"], + "trustProxy": true + } +} diff --git a/sources/bxpush31/Dockerfile b/sources/bxpush31/Dockerfile new file mode 100644 index 0000000..1ff5d64 --- /dev/null +++ b/sources/bxpush31/Dockerfile @@ -0,0 +1,47 @@ +FROM node:22 AS builder + +USER root + +ENV PUSH=push-server.tar.gz + +RUN mkdir -p /opt/push-server + +COPY push-server-0.4.0.tar.gz /opt/push-server/$PUSH + +WORKDIR /opt/push-server + +RUN tar xzvvf $PUSH && rm -f $PUSH + +RUN npm install --omit=dev + +FROM node:22-alpine AS production + +USER root + +RUN apk --no-cache add shadow bash gettext libintl curl openssl ca-certificates tzdata && \ + addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix && \ + mkdir -p /usr/local/bin && \ + mv /usr/bin/envsubst /usr/local/bin/envsubst && \ + [[ ! -d /tmp/push-server ]] && mkdir /tmp/push-server && \ + [[ ! -d /etc/push-server ]] && mkdir /etc/push-server && \ + mkdir -p /var/log/push-server + +WORKDIR /opt/push-server + +COPY --from=builder /opt/push-server /opt/push-server +COPY docker-entrypoint.sh /usr/local/bin/ +COPY push-server-pub.json /etc/push-server/push-server-pub.json +COPY push-server-sub.json /etc/push-server/push-server-sub.json + +RUN chown -R bitrix:bitrix /opt/push-server && \ + chown -R bitrix:bitrix /tmp/push-server && \ + chown -R bitrix:bitrix /etc/push-server && \ + chmod 0755 /usr/local/bin/docker-entrypoint.sh && \ + chown -R bitrix:bitrix /var/log/push-server + +# VOLUME /var/log/push-server + +USER bitrix:bitrix + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] diff --git a/sources/bxpush31/docker-entrypoint.sh b/sources/bxpush31/docker-entrypoint.sh new file mode 100755 index 0000000..b783f13 --- /dev/null +++ b/sources/bxpush31/docker-entrypoint.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Push Server on NodeJS variables +# +# REDIS_HOST - redis host +# REDIS_PORT - redis port +# +# PUSH_SECURITY_KEY - push security key +# PUSH_PUB_MODE - push pub +# PUSH_PUB_PORT - push pub port +# PUSH_SUB_MODE - push sub +# PUSH_SUB_PORT - push sub port +# +# RUN_DIR - temporary directory for service; default /tmp/push-server +# PUB_URI - pub service uri +# REST_URI - rest service uri +# SUB_URI - sub service uri +# +export WORKDIR=/opt/push-server +export CONFIG_DIR=/etc/push-server +PUB_TMPL=$CONFIG_DIR/push-server-pub.json +SUB_TMPL=$CONFIG_DIR/push-server-sub.json +CONFIG=$CONFIG_DIR/config.json +export LOG_DIR=/var/log/push-server +[[ -z $RUN_DIR ]] && RUN_DIR=/tmp/push-server +export RUN_DIR +# +log() { + msg="${1}" + printf "%-16s: [%d]> %s\n" "$(date +%Y/%m/%dT%H:%M)" "$$" "$msg" +} +# +error() { + msg="${1}" + rtn="${2:-1}" + log "$msg" + exit $rtn +} +# +pushd $WORKDIR || error "Cannot access $WORKDIR" +[[ -z $PUSH_PUB_MODE && -z $PUSH_SUB_MODE ]] && error "Not defind push-server mode environment variables: PUSH_PUB_MODE or PUSH_SUB_MODE" +[[ $PUSH_PUB_MODE != "pub" && -z $PUSH_SUB_MODE ]] && error "Incorrect value in PUSH_PUB_MODE=$PUSH_PUB_MODE variable" +[[ -z $PUSH_PUB_MODE && $PUSH_SUB_MODE != "sub" ]] && error "Incorrect value in PUSH_SUB_MODE=$PUSH_SUB_MODE variable" +# +if [[ $PUSH_PUB_MODE == "pub" ]]; +then + log "PUSH_PUB_MODE=$PUSH_PUB_MODE" + TEMPLATE=$PUB_TMPL + [[ -z $REST_URI ]] && REST_URI="/bitrix/rest/" + [[ -z $PUB_URI ]] && PUB_URI="/bitrix/pub/" + log "REST_URI=$REST_URI" + log "PUB_URI=$PUB_URI" + export REST_URI + export PUB_URI +elif [[ $PUSH_SUB_MODE == "sub" ]]; +then + log "PUSH_SUB_MODE=$PUSH_SUB_MODE" + TEMPLATE=$SUB_TMPL + [[ -z $SUB_URI ]] && SUB_URI="/bitrix/subws/" + log "SUB_URI=$SUB_URI" + export SUB_URI +fi +# +popd +# +log "Create $CONFIG" +envsubst <$TEMPLATE >$CONFIG +# +log "Start server" +node server.js --config $CONFIG +# diff --git a/sources/bxpush31/push-server-0.4.0.tar.gz b/sources/bxpush31/push-server-0.4.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a5fce78a52078f9572ea092d4d4a8d15c0005720 GIT binary patch literal 146902 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 A%K!iX literal 0 HcmV?d00001 diff --git a/sources/bxpush31/push-server-pub.json b/sources/bxpush31/push-server-pub.json new file mode 100644 index 0000000..71d6362 --- /dev/null +++ b/sources/bxpush31/push-server-pub.json @@ -0,0 +1,49 @@ +{ + "servers": + [ + { + "name": "${PUSH_PUB_MODE}-${PUSH_PUB_PORT}", + "port": ${PUSH_PUB_PORT}, + "hostname": "0.0.0.0", + "backlog": 1024, + "routes": + { + "pub": "${PUB_URI}", + "stat": "/server-stat/", + "rest": "${REST_URI}" + } + } + ], + "publishMode": true, + "dataDir": "${WORKDIR}/data", + "processUniqueId": "${PUSH_PUB_MODE}-${PUSH_PUB_PORT}", + "clusterMode": true, + "storage": + { + "type": "redis", + "messageTLL": 86400, + "channelTLL": 86400, + "onlineTLL": 120, + "onlineDelta": 10, + "host": "${REDIS_HOST}", + "port": ${REDIS_PORT} + }, + "security": + { + "key": "${PUSH_SECURITY_KEY}" + }, + "limits": + { + "maxPayload": 1048576, + "maxConnPerChannel": 100, + "maxMessagesPerRequest": 100, + "maxChannelsPerRequest": 100, + "maxRequestsPerSecond": 50 + }, + "debug": + { + "folderName": "/var/log/push-server", + "ip": ["127.0.0.256"], + "trustProxy": true + } +} diff --git a/sources/bxpush31/push-server-sub.json b/sources/bxpush31/push-server-sub.json new file mode 100644 index 0000000..40191fd --- /dev/null +++ b/sources/bxpush31/push-server-sub.json @@ -0,0 +1,38 @@ +{ + "servers": + [ + { + "name": "${PUSH_SUB_MODE}-${PUSH_SUB_PORT}", + "port": ${PUSH_SUB_PORT}, + "hostname": "0.0.0.0", + "backlog": 1024, + "routes": + { + "sub": "${SUB_URI}" + } + } + ], + "dataDir": "${WORKDIR}/data", + "clusterMode": true, + "processUniqueId": "${PUSH_SUB_MODE}-${PUSH_SUB_PORT}", + "storage": + { + "type": "redis", + "messageTLL": 86400, + "channelTLL": 86400, + "onlineTLL": 120, + "onlineDelta": 10, + "host": "${REDIS_HOST}", + "port": ${REDIS_PORT} + }, + "security": + { + "key": "${PUSH_SECURITY_KEY}" + }, + "debug": + { + "folderName": "/var/log/push-server", + "ip": ["127.0.0.256"], + "trustProxy": true + } +} diff --git a/sources/bxpush32/Dockerfile b/sources/bxpush32/Dockerfile new file mode 100644 index 0000000..08e12f9 --- /dev/null +++ b/sources/bxpush32/Dockerfile @@ -0,0 +1,49 @@ +FROM node:22-trixie AS builder + +USER root + +ENV PUSH=push-server.tar.gz + +RUN mkdir -p /opt/push-server + +COPY push-server-0.5.0.tar.gz /opt/push-server/$PUSH + +WORKDIR /opt/push-server + +RUN tar xzvvf $PUSH && rm -f $PUSH + +RUN npm install --omit=dev + +FROM node:22-alpine AS production + +USER root + +RUN apk --no-cache add shadow bash gettext libintl curl openssl ca-certificates tzdata && \ + addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix && \ + mkdir -p /usr/local/bin && \ + mv /usr/bin/envsubst /usr/local/bin/envsubst && \ + [[ ! -d /tmp/push-server ]] && mkdir /tmp/push-server && \ + [[ ! -d /etc/push-server ]] && mkdir /etc/push-server && \ + mkdir -p /var/log/push-server && \ + ln -sf /dev/stdout /var/log/push-server/info.log && \ + ln -sf /dev/stderr /var/log/push-server/error.log + +WORKDIR /opt/push-server + +COPY --from=builder /opt/push-server /opt/push-server +COPY docker-entrypoint.sh /usr/local/bin/ +COPY push-server-pub.json /etc/push-server/push-server-pub.json +COPY push-server-sub.json /etc/push-server/push-server-sub.json + +RUN chown -R bitrix:bitrix /opt/push-server && \ + chown -R bitrix:bitrix /tmp/push-server && \ + chown -R bitrix:bitrix /etc/push-server && \ + chmod 0755 /usr/local/bin/docker-entrypoint.sh && \ + chown -R bitrix:bitrix /var/log/push-server + +# VOLUME /var/log/push-server + +USER bitrix:bitrix + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] diff --git a/sources/bxpush32/docker-entrypoint.sh b/sources/bxpush32/docker-entrypoint.sh new file mode 100755 index 0000000..b783f13 --- /dev/null +++ b/sources/bxpush32/docker-entrypoint.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Push Server on NodeJS variables +# +# REDIS_HOST - redis host +# REDIS_PORT - redis port +# +# PUSH_SECURITY_KEY - push security key +# PUSH_PUB_MODE - push pub +# PUSH_PUB_PORT - push pub port +# PUSH_SUB_MODE - push sub +# PUSH_SUB_PORT - push sub port +# +# RUN_DIR - temporary directory for service; default /tmp/push-server +# PUB_URI - pub service uri +# REST_URI - rest service uri +# SUB_URI - sub service uri +# +export WORKDIR=/opt/push-server +export CONFIG_DIR=/etc/push-server +PUB_TMPL=$CONFIG_DIR/push-server-pub.json +SUB_TMPL=$CONFIG_DIR/push-server-sub.json +CONFIG=$CONFIG_DIR/config.json +export LOG_DIR=/var/log/push-server +[[ -z $RUN_DIR ]] && RUN_DIR=/tmp/push-server +export RUN_DIR +# +log() { + msg="${1}" + printf "%-16s: [%d]> %s\n" "$(date +%Y/%m/%dT%H:%M)" "$$" "$msg" +} +# +error() { + msg="${1}" + rtn="${2:-1}" + log "$msg" + exit $rtn +} +# +pushd $WORKDIR || error "Cannot access $WORKDIR" +[[ -z $PUSH_PUB_MODE && -z $PUSH_SUB_MODE ]] && error "Not defind push-server mode environment variables: PUSH_PUB_MODE or PUSH_SUB_MODE" +[[ $PUSH_PUB_MODE != "pub" && -z $PUSH_SUB_MODE ]] && error "Incorrect value in PUSH_PUB_MODE=$PUSH_PUB_MODE variable" +[[ -z $PUSH_PUB_MODE && $PUSH_SUB_MODE != "sub" ]] && error "Incorrect value in PUSH_SUB_MODE=$PUSH_SUB_MODE variable" +# +if [[ $PUSH_PUB_MODE == "pub" ]]; +then + log "PUSH_PUB_MODE=$PUSH_PUB_MODE" + TEMPLATE=$PUB_TMPL + [[ -z $REST_URI ]] && REST_URI="/bitrix/rest/" + [[ -z $PUB_URI ]] && PUB_URI="/bitrix/pub/" + log "REST_URI=$REST_URI" + log "PUB_URI=$PUB_URI" + export REST_URI + export PUB_URI +elif [[ $PUSH_SUB_MODE == "sub" ]]; +then + log "PUSH_SUB_MODE=$PUSH_SUB_MODE" + TEMPLATE=$SUB_TMPL + [[ -z $SUB_URI ]] && SUB_URI="/bitrix/subws/" + log "SUB_URI=$SUB_URI" + export SUB_URI +fi +# +popd +# +log "Create $CONFIG" +envsubst <$TEMPLATE >$CONFIG +# +log "Start server" +node server.js --config $CONFIG +# diff --git a/sources/bxpush32/push-server-0.5.0.tar.gz b/sources/bxpush32/push-server-0.5.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..033771aa72c798425a2a50e2a37248526ca4a876 GIT binary patch literal 148364 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 z�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 literal 0 HcmV?d00001 diff --git a/sources/bxpush32/push-server-pub.json b/sources/bxpush32/push-server-pub.json new file mode 100644 index 0000000..83756c8 --- /dev/null +++ b/sources/bxpush32/push-server-pub.json @@ -0,0 +1,50 @@ +{ + "servers": + [ + { + "name": "${PUSH_PUB_MODE}-${PUSH_PUB_PORT}", + "port": ${PUSH_PUB_PORT}, + "hostname": "0.0.0.0", + "backlog": 1024, + "routes": + { + "pub": "${PUB_URI}", + "stat": "/server-stat/", + "rest": "${REST_URI}" + } + } + ], + "publishMode": true, + "dataDir": "${WORKDIR}/data", + "processUniqueId": "${PUSH_PUB_MODE}-${PUSH_PUB_PORT}", + "clusterMode": true, + "storage": + { + "type": "redis", + "messageTLL": 86400, + "channelTLL": 86400, + "onlineTLL": 120, + "onlineDelta": 10, + "host": "${REDIS_HOST}", + "port": ${REDIS_PORT} + }, + "security": + { + "key": "${PUSH_SECURITY_KEY}" + }, + "limits": + { + "maxPayload": 1048576, + "maxConnPerChannel": 100, + "maxMessagesPerRequest": 100, + "maxChannelsPerRequest": 100, + "maxRequestsPerSecond": 50 + }, + "debug": + { + "folderName": "/var/log/push-server", + "ip": ["127.0.0.256"], + "trustProxy": true, + "combineLogs": true + } +} diff --git a/sources/bxpush32/push-server-sub.json b/sources/bxpush32/push-server-sub.json new file mode 100644 index 0000000..13aa06b --- /dev/null +++ b/sources/bxpush32/push-server-sub.json @@ -0,0 +1,39 @@ +{ + "servers": + [ + { + "name": "${PUSH_SUB_MODE}-${PUSH_SUB_PORT}", + "port": ${PUSH_SUB_PORT}, + "hostname": "0.0.0.0", + "backlog": 1024, + "routes": + { + "sub": "${SUB_URI}" + } + } + ], + "dataDir": "${WORKDIR}/data", + "clusterMode": true, + "processUniqueId": "${PUSH_SUB_MODE}-${PUSH_SUB_PORT}", + "storage": + { + "type": "redis", + "messageTLL": 86400, + "channelTLL": 86400, + "onlineTLL": 120, + "onlineDelta": 10, + "host": "${REDIS_HOST}", + "port": ${REDIS_PORT} + }, + "security": + { + "key": "${PUSH_SECURITY_KEY}" + }, + "debug": + { + "folderName": "/var/log/push-server", + "ip": ["127.0.0.256"], + "trustProxy": true, + "combineLogs": true + } +} diff --git a/sources/bxsphinx2211/v1/Dockerfile b/sources/bxsphinx2211/v1/Dockerfile new file mode 100644 index 0000000..d09ad2c --- /dev/null +++ b/sources/bxsphinx2211/v1/Dockerfile @@ -0,0 +1,23 @@ +FROM alpine:3.21 + +RUN addgroup -g 979 bitrix && \ + adduser -D -u 979 -G bitrix bitrix + +RUN apk add --no-cache bash expat libgcc libpq libstdc++ mariadb-connector-c musl unixodbc zlib sphinx sphinx-doc sphinx-php curl openssl ca-certificates tzdata && \ + mkdir -pv /opt/sphinx/conf /opt/sphinx/log /opt/sphinx/run /opt/sphinx/dict /opt/sphinx/lib /opt/sphinx/binlogs + +COPY start.sh /opt/sphinx/ +COPY *.pak /opt/sphinx/dict/ +COPY sample_sphinx.conf /opt/sphinx/conf/sphinx.conf + +RUN ln -sf /dev/stdout /opt/sphinx/log/searchd.log && \ + ln -sf /dev/stderr /opt/sphinx/log/query.log && \ + chown -R bitrix:bitrix /opt/ + +# VOLUME ["/opt/sphinx/conf", "/opt/sphinx/log", "/opt/sphinx/dict", "/opt/sphinx/lib"] + +USER bitrix:bitrix + +EXPOSE 9312 9306 + +CMD ["bash", "/opt/sphinx/start.sh"] diff --git a/sources/bxsphinx2211/v1/de.pak b/sources/bxsphinx2211/v1/de.pak new file mode 100644 index 0000000000000000000000000000000000000000..0e71585249916a90aadd29a5530a69bf7051a2fc GIT binary patch literal 7153523 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
    kc4C;Ck3fUO&ZdXfh=SrJ2}Wj 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

    K(%Q?<-fs0(_8rKQn2KTtn zW1jGw7rf*(@A$wcKJ$gIeB(R6`NLoS5v0BL2u=t>5{l4-B^=?2Ktv)DnJ7dh8qtYC zOkxq6IK(9Z2}w*6l9HShq$CxoNkcl)lbNjKB|ilyNFj<*oD!6z6s0LcS;|qK%2c5m zHK|2y>QI-4G@>!hXif`S(V8~2r5zpVOc%P*gP!!FH+|?!Kl(F(K@4RW!x_OC#xjlx zOk@(1nZi`2F@u@RVm5PFz(N+WgrzKJ1uI$0IySJ8Eo^58JK4o<_OO?I?B@UnImBU( zaFpYm;3TIx!&%O8o(o*$5|;_!CbzlE10M2-$2{RF&v?!&Uh{@`yypX-_{rg5HK<7~>QI+@)Tbd$Xi9Th(2~})p%b0yN_TqG zhyILY6k{021ST?xsZ3)AvzW_bmavQ!tYIx%*v=02v7dt+;xI=z$}vuInzLNsB3HRa z0Jpf!9q#gghdkmjPk71;Uh;;wyyHC|`NU_w@{?cuBTz?MMlgaCf>4AZED?!JG~y7K zcqAYpiAY9rQj&_)q$2|v$wX$dk)0gmA`gWqOc9DwjN+7_B&8`!IVw_#%2cB|HK<8F z>eGORG^PnnX-0Ee(2`cPrY-I1NN2jxjUM!(H+|{P00uLZ5sYFqV;IXg#xse@Okpb1 zn9fXQF`GHeWf6;6!cvy8f|aad4eQv%Hny{ao$O*ad)Ui94se(w9OopbIm21bbCGLY z=LR>q&3zv6n5R7BIWKt2dp`1&U;O3|e+ksd#t@uPgdr^92u}ne5{bw}AsW$%K}=#1 zn>fTJ9`Q*;Vv>-Q6r>~-sYydx(vhAFWF!-r$wF4Lk)0gmCJ%YZM*#{`grXFqIHf5= zIm%Okid3R9RjEdGYEYBf)S)i*s80hL(ul@1p()L1P77Mnnl`kfJss&pXS&dp9`vLa zedtR+`ZIt*{KpW6GK}GjVI1R`z!au3jp@u_CbO8$9Og2Q1uSGS%UHo0*0P?>Y+)PQ z*}+bBvxj}`=OBkT!cmTKoD-blEay1SMJ{ofD_rF|0o>#kx4FYz?s1=oJmN7=dCm)7 z@`^XSNkdxFk)DiXCM(&=NiK4ehrHw?KZPkmG0IV%3RI;U)u};EYEhdy z)TJKvX+T37)0Ad3rv)u(MQhs7j`nn*Bc13>7rN1l{tRFc|1q4gjAt^_n87^evw%e` zWjQNY$tqT}mi265J3H9LJ`Qk*!yMr_XF11tE^vt}TqS@T+~F?wxX%L~@`%U0;tlV3 z&u6~yli&OyNEdw&mT-h80uhNs6k-sEgd`y)sYy>JGLw~T}C&pIlvK)a-5T#<}By9z-6v*l>lyYhr8V80grgb zOJ4Dsw|wLa-}ugN{_u}LUF`xv2ud(Q6OKqkCJNDrMQq{{kN6}YAxTL_a#E6-w4@_F z*~mdoa*>CE6rwOiC`vJkQ-aczr92g>L=|dMhq~0GJ`HF{BO23$rZl5DEoezATGNTn zbfp{p=+7`lF^WRILCP| zaFI(~<_cH2P5`&L!#(cvfJZ#x883LrD_--C_k7|r-}%8$e({^X{I8q$CpaMpNoc|l zmT*KMGEs<1G-42wSi~j{afwHK5|EH&q$CxoNkdxFk)F(CAv-zAMQ-wtp8^!55QQm1 zQHoKVl9Zw}WhhH|Do~NCRHHgIsYPw-(}0FFqA^WrP77Mmnl`kh9UbUMCpy!GuJoW6 zed$Mk1~8Dp3}ZMW7|AF`GlsE@V>}a>$Rs8+g{e$qI