diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c988057a7..9bf93863e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,10 +28,10 @@ stages: - 'cd docker/bootstrap/alpine' - 'docker build --no-cache -t webdevops/bootstrap:alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/bootstrap:alpine" >> Dockerfile_67b33780216a78.44838910' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780216a78.44838910' + - 'echo "FROM webdevops/bootstrap:alpine" >> Dockerfile_69287be80a1128.04599452' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a1128.04599452' - 'bundle install' - - 'bash serverspec.sh spec/docker/bootstrap_spec.rb webdevops/bootstrap:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jvb3RzdHJhcDphbHBpbmUiLCJET0NLRVJfVEFHIjoiYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IiIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjE2YTc4LjQ0ODM4OTEwIn0= Dockerfile_67b33780216a78.44838910' + - 'bash serverspec.sh spec/docker/bootstrap_spec.rb webdevops/bootstrap:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jvb3RzdHJhcDphbHBpbmUiLCJET0NLRVJfVEFHIjoiYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IiIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MGExMTI4LjA0NTk5NDUyIn0= Dockerfile_69287be80a1128.04599452' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/bootstrap:alpine --config bootstrap/test.yaml --config bootstrap/alpine/test.yaml' - 'docker push webdevops/bootstrap:alpine' @@ -51,10 +51,10 @@ stages: - 'cd docker/bootstrap/ubuntu-22.04' - 'docker build --no-cache -t webdevops/bootstrap:ubuntu-22.04 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/bootstrap:ubuntu-22.04" >> Dockerfile_67b33780214e35.25363639' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780214e35.25363639' + - 'echo "FROM webdevops/bootstrap:ubuntu-22.04" >> Dockerfile_69287be80a1fd9.42714191' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a1fd9.42714191' - 'bundle install' - - 'bash serverspec.sh spec/docker/bootstrap_spec.rb webdevops/bootstrap:ubuntu-22.04 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jvb3RzdHJhcDp1YnVudHUtMjIuMDQiLCJET0NLRVJfVEFHIjoidWJ1bnR1LTIyLjA0IiwiT1NfRkFNSUxZIjoidWJ1bnR1IiwiT1NfVkVSU0lPTiI6IjIyLjA0IiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMTRlMzUuMjUzNjM2MzkifQ== Dockerfile_67b33780214e35.25363639' + - 'bash serverspec.sh spec/docker/bootstrap_spec.rb webdevops/bootstrap:ubuntu-22.04 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jvb3RzdHJhcDp1YnVudHUtMjIuMDQiLCJET0NLRVJfVEFHIjoidWJ1bnR1LTIyLjA0IiwiT1NfRkFNSUxZIjoidWJ1bnR1IiwiT1NfVkVSU0lPTiI6IjIyLjA0IiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwYTFmZDkuNDI3MTQxOTEifQ== Dockerfile_69287be80a1fd9.42714191' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/bootstrap:ubuntu-22.04 --config bootstrap/test.yaml' - 'docker push webdevops/bootstrap:ubuntu-22.04' @@ -76,10 +76,10 @@ stages: - 'cd docker/php-official/8.1' - 'docker build --no-cache -t webdevops/php:8.1 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.1" >> Dockerfile_67b3378024f8d2.27347713' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378024f8d2.27347713' + - 'echo "FROM webdevops/php:8.1" >> Dockerfile_69287be80857d1.86702937' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80857d1.86702937' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjEiLCJET0NLRVJfVEFHIjoiOC4xIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjRmOGQyLjI3MzQ3NzEzIn0= Dockerfile_67b3378024f8d2.27347713' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjEiLCJET0NLRVJfVEFHIjoiOC4xIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDg1N2QxLjg2NzAyOTM3In0= Dockerfile_69287be80857d1.86702937' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.1 --config php/test.yaml' - 'docker push webdevops/php:8.1' @@ -101,10 +101,10 @@ stages: - 'cd docker/php-official/8.1-alpine' - 'docker build --no-cache -t webdevops/php:8.1-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.1-alpine" >> Dockerfile_67b3378023dc34.89923799' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378023dc34.89923799' + - 'echo "FROM webdevops/php:8.1-alpine" >> Dockerfile_69287be809c8c1.98352639' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809c8c1.98352639' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjEtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMS1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIzZGMzNC44OTkyMzc5OSJ9 Dockerfile_67b3378023dc34.89923799' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjEtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMS1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5YzhjMS45ODM1MjYzOSJ9 Dockerfile_69287be809c8c1.98352639' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.1-alpine --config php/test.yaml' - 'docker push webdevops/php:8.1-alpine' @@ -126,10 +126,10 @@ stages: - 'cd docker/php-official/8.2' - 'docker build --no-cache -t webdevops/php:8.2 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.2" >> Dockerfile_67b33780224305.94882603' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780224305.94882603' + - 'echo "FROM webdevops/php:8.2" >> Dockerfile_69287be8095ea5.80219908' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8095ea5.80219908' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjIiLCJET0NLRVJfVEFHIjoiOC4yIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjI0MzA1Ljk0ODgyNjAzIn0= Dockerfile_67b33780224305.94882603' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjIiLCJET0NLRVJfVEFHIjoiOC4yIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDk1ZWE1LjgwMjE5OTA4In0= Dockerfile_69287be8095ea5.80219908' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.2 --config php/test.yaml' - 'docker push webdevops/php:8.2' @@ -151,10 +151,10 @@ stages: - 'cd docker/php-official/8.2-alpine' - 'docker build --no-cache -t webdevops/php:8.2-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.2-alpine" >> Dockerfile_67b3378022db19.74137044' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378022db19.74137044' + - 'echo "FROM webdevops/php:8.2-alpine" >> Dockerfile_69287be808fcf5.62609062' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808fcf5.62609062' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjItYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMi1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyZGIxOS43NDEzNzA0NCJ9 Dockerfile_67b3378022db19.74137044' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjItYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMi1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4ZmNmNS42MjYwOTA2MiJ9 Dockerfile_69287be808fcf5.62609062' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.2-alpine --config php/test.yaml' - 'docker push webdevops/php:8.2-alpine' @@ -176,10 +176,10 @@ stages: - 'cd docker/php-official/8.3' - 'docker build --no-cache -t webdevops/php:8.3 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.3" >> Dockerfile_67b33780226889.37238216' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780226889.37238216' + - 'echo "FROM webdevops/php:8.3" >> Dockerfile_69287be809ec52.80068095' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809ec52.80068095' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjMiLCJET0NLRVJfVEFHIjoiOC4zIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjI2ODg5LjM3MjM4MjE2In0= Dockerfile_67b33780226889.37238216' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjMiLCJET0NLRVJfVEFHIjoiOC4zIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDllYzUyLjgwMDY4MDk1In0= Dockerfile_69287be809ec52.80068095' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.3 --config php/test.yaml' - 'docker push webdevops/php:8.3' @@ -201,10 +201,10 @@ stages: - 'cd docker/php-official/8.3-alpine' - 'docker build --no-cache -t webdevops/php:8.3-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.3-alpine" >> Dockerfile_67b33780222417.04342489' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780222417.04342489' + - 'echo "FROM webdevops/php:8.3-alpine" >> Dockerfile_69287be8087197.84499594' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8087197.84499594' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjMtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMy1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyMjQxNy4wNDM0MjQ4OSJ9 Dockerfile_67b33780222417.04342489' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjMtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMy1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4NzE5Ny44NDQ5OTU5NCJ9 Dockerfile_69287be8087197.84499594' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.3-alpine --config php/test.yaml' - 'docker push webdevops/php:8.3-alpine' @@ -226,10 +226,10 @@ stages: - 'cd docker/php-official/8.4' - 'docker build --no-cache -t webdevops/php:8.4 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.4" >> Dockerfile_67b33780240537.39972307' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780240537.39972307' + - 'echo "FROM webdevops/php:8.4" >> Dockerfile_69287be809a362.88889011' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809a362.88889011' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjQiLCJET0NLRVJfVEFHIjoiOC40IiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjQwNTM3LjM5OTcyMzA3In0= Dockerfile_67b33780240537.39972307' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjQiLCJET0NLRVJfVEFHIjoiOC40IiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDlhMzYyLjg4ODg5MDExIn0= Dockerfile_69287be809a362.88889011' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.4 --config php/test.yaml' - 'docker push webdevops/php:8.4' @@ -251,10 +251,10 @@ stages: - 'cd docker/php-official/8.4-alpine' - 'docker build --no-cache -t webdevops/php:8.4-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php:8.4-alpine" >> Dockerfile_67b33780220d09.67839072' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780220d09.67839072' + - 'echo "FROM webdevops/php:8.4-alpine" >> Dockerfile_69287be8091162.95273204' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8091162.95273204' - 'bundle install' - - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjQtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguNC1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyMGQwOS42NzgzOTA3MiJ9 Dockerfile_67b33780220d09.67839072' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjQtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguNC1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5MTE2Mi45NTI3MzIwNCJ9 Dockerfile_69287be8091162.95273204' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php:8.4-alpine --config php/test.yaml' - 'docker push webdevops/php:8.4-alpine' @@ -266,6 +266,56 @@ stages: - aws needs: - 'webdevops/toolbox:latest' +'webdevops/php:8.5': + stage: level2 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-official/8.5' + - 'docker build --no-cache -t webdevops/php:8.5 .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php:8.5" >> Dockerfile_69287be808d961.29259230' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808d961.29259230' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.5 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjUiLCJET0NLRVJfVEFHIjoiOC41IiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDhkOTYxLjI5MjU5MjMwIn0= Dockerfile_69287be808d961.29259230' + - 'cd $CI_PROJECT_DIR/tests/structure-test' + - '/usr/local/bin/container-structure-test test --image webdevops/php:8.5 --config php/test.yaml' + - 'docker push webdevops/php:8.5' + - 'docker tag webdevops/php:8.5 $CI_REGISTRY_IMAGE/php:8.5' + - 'docker push $CI_REGISTRY_IMAGE/php:8.5' + - 'docker tag webdevops/php:8.5 webdevops/php-official:8.5' + - 'docker push webdevops/php-official:8.5' + tags: + - aws + needs: + - 'webdevops/toolbox:latest' +'webdevops/php:8.5-alpine': + stage: level2 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-official/8.5-alpine' + - 'docker build --no-cache -t webdevops/php:8.5-alpine .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php:8.5-alpine" >> Dockerfile_69287be809da51.55661187' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809da51.55661187' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php_spec.rb webdevops/php:8.5-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1vZmZpY2lhbDo4LjUtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguNS1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5ZGE1MS41NTY2MTE4NyJ9 Dockerfile_69287be809da51.55661187' + - 'cd $CI_PROJECT_DIR/tests/structure-test' + - '/usr/local/bin/container-structure-test test --image webdevops/php:8.5-alpine --config php/test.yaml' + - 'docker push webdevops/php:8.5-alpine' + - 'docker tag webdevops/php:8.5-alpine $CI_REGISTRY_IMAGE/php:8.5-alpine' + - 'docker push $CI_REGISTRY_IMAGE/php:8.5-alpine' + - 'docker tag webdevops/php:8.5-alpine webdevops/php-official:8.5-alpine' + - 'docker push webdevops/php-official:8.5-alpine' + tags: + - aws + needs: + - 'webdevops/toolbox:latest' 'webdevops/storage:latest': stage: level2 before_script: @@ -292,10 +342,10 @@ stages: - 'cd docker/base/alpine' - 'docker build --no-cache -t webdevops/base:alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/base:alpine" >> Dockerfile_67b33780216ee1.41883577' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780216ee1.41883577' + - 'echo "FROM webdevops/base:alpine" >> Dockerfile_69287be80a1420.37249045' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a1420.37249045' - 'bundle install' - - 'bash serverspec.sh spec/docker/base_spec.rb webdevops/base:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2U6YWxwaW5lIiwiRE9DS0VSX1RBRyI6ImFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIxNmVlMS40MTg4MzU3NyJ9 Dockerfile_67b33780216ee1.41883577' + - 'bash serverspec.sh spec/docker/base_spec.rb webdevops/base:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2U6YWxwaW5lIiwiRE9DS0VSX1RBRyI6ImFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODBhMTQyMC4zNzI0OTA0NSJ9 Dockerfile_69287be80a1420.37249045' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/base:alpine --config base/test.yaml --config base/alpine/test.yaml' - 'docker push webdevops/base:alpine' @@ -315,10 +365,10 @@ stages: - 'cd docker/base/ubuntu-22.04' - 'docker build --no-cache -t webdevops/base:ubuntu-22.04 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/base:ubuntu-22.04" >> Dockerfile_67b33780215452.09106799' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780215452.09106799' + - 'echo "FROM webdevops/base:ubuntu-22.04" >> Dockerfile_69287be80a2271.41603408' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a2271.41603408' - 'bundle install' - - 'bash serverspec.sh spec/docker/base_spec.rb webdevops/base:ubuntu-22.04 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2U6dWJ1bnR1LTIyLjA0IiwiRE9DS0VSX1RBRyI6InVidW50dS0yMi4wNCIsIk9TX0ZBTUlMWSI6InVidW50dSIsIk9TX1ZFUlNJT04iOiIyMi4wNCIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjE1NDUyLjA5MTA2Nzk5In0= Dockerfile_67b33780215452.09106799' + - 'bash serverspec.sh spec/docker/base_spec.rb webdevops/base:ubuntu-22.04 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2U6dWJ1bnR1LTIyLjA0IiwiRE9DS0VSX1RBRyI6InVidW50dS0yMi4wNCIsIk9TX0ZBTUlMWSI6InVidW50dSIsIk9TX1ZFUlNJT04iOiIyMi4wNCIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MGEyMjcxLjQxNjAzNDA4In0= Dockerfile_69287be80a2271.41603408' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/base:ubuntu-22.04 --config base/test.yaml' - 'docker push webdevops/base:ubuntu-22.04' @@ -340,10 +390,10 @@ stages: - 'cd docker/php-apache/8.1' - 'docker build --no-cache -t webdevops/php-apache:8.1 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.1" >> Dockerfile_67b33780250782.57437894' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780250782.57437894' + - 'echo "FROM webdevops/php-apache:8.1" >> Dockerfile_69287be8086040.55246786' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8086040.55246786' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4xIiwiRE9DS0VSX1RBRyI6IjguMSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDI1MDc4Mi41NzQzNzg5NCJ9 Dockerfile_67b33780250782.57437894' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4xIiwiRE9DS0VSX1RBRyI6IjguMSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4NjA0MC41NTI0Njc4NiJ9 Dockerfile_69287be8086040.55246786' - 'docker push webdevops/php-apache:8.1' - 'docker tag webdevops/php-apache:8.1 $CI_REGISTRY_IMAGE/php-apache:8.1' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.1' @@ -361,10 +411,10 @@ stages: - 'cd docker/php-apache/8.1-alpine' - 'docker build --no-cache -t webdevops/php-apache:8.1-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.1-alpine" >> Dockerfile_67b3378023efa2.31447016' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378023efa2.31447016' + - 'echo "FROM webdevops/php-apache:8.1-alpine" >> Dockerfile_69287be809cc84.38539116' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809cc84.38539116' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4xLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjEtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyM2VmYTIuMzE0NDcwMTYifQ== Dockerfile_67b3378023efa2.31447016' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4xLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjEtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWNjODQuMzg1MzkxMTYifQ== Dockerfile_69287be809cc84.38539116' - 'docker push webdevops/php-apache:8.1-alpine' - 'docker tag webdevops/php-apache:8.1-alpine $CI_REGISTRY_IMAGE/php-apache:8.1-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.1-alpine' @@ -382,10 +432,10 @@ stages: - 'cd docker/php-apache/8.2' - 'docker build --no-cache -t webdevops/php-apache:8.2 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.2" >> Dockerfile_67b33780224f36.01642941' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780224f36.01642941' + - 'echo "FROM webdevops/php-apache:8.2" >> Dockerfile_69287be8096356.83522689' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8096356.83522689' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4yIiwiRE9DS0VSX1RBRyI6IjguMiIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyNGYzNi4wMTY0Mjk0MSJ9 Dockerfile_67b33780224f36.01642941' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4yIiwiRE9DS0VSX1RBRyI6IjguMiIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5NjM1Ni44MzUyMjY4OSJ9 Dockerfile_69287be8096356.83522689' - 'docker push webdevops/php-apache:8.2' - 'docker tag webdevops/php-apache:8.2 $CI_REGISTRY_IMAGE/php-apache:8.2' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.2' @@ -403,10 +453,10 @@ stages: - 'cd docker/php-apache/8.2-alpine' - 'docker build --no-cache -t webdevops/php-apache:8.2-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.2-alpine" >> Dockerfile_67b3378022e321.36917823' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378022e321.36917823' + - 'echo "FROM webdevops/php-apache:8.2-alpine" >> Dockerfile_69287be80902c8.44617894' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80902c8.44617894' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4yLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjItYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMmUzMjEuMzY5MTc4MjMifQ== Dockerfile_67b3378022e321.36917823' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4yLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjItYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTAyYzguNDQ2MTc4OTQifQ== Dockerfile_69287be80902c8.44617894' - 'docker push webdevops/php-apache:8.2-alpine' - 'docker tag webdevops/php-apache:8.2-alpine $CI_REGISTRY_IMAGE/php-apache:8.2-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.2-alpine' @@ -424,10 +474,10 @@ stages: - 'cd docker/php-apache/8.3' - 'docker build --no-cache -t webdevops/php-apache:8.3 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.3" >> Dockerfile_67b33780227951.29831764' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780227951.29831764' + - 'echo "FROM webdevops/php-apache:8.3" >> Dockerfile_69287be809ef34.66930314' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809ef34.66930314' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4zIiwiRE9DS0VSX1RBRyI6IjguMyIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyNzk1MS4yOTgzMTc2NCJ9 Dockerfile_67b33780227951.29831764' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4zIiwiRE9DS0VSX1RBRyI6IjguMyIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5ZWYzNC42NjkzMDMxNCJ9 Dockerfile_69287be809ef34.66930314' - 'docker push webdevops/php-apache:8.3' - 'docker tag webdevops/php-apache:8.3 $CI_REGISTRY_IMAGE/php-apache:8.3' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.3' @@ -445,10 +495,10 @@ stages: - 'cd docker/php-apache/8.3-alpine' - 'docker build --no-cache -t webdevops/php-apache:8.3-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.3-alpine" >> Dockerfile_67b33780223057.11549528' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780223057.11549528' + - 'echo "FROM webdevops/php-apache:8.3-alpine" >> Dockerfile_69287be8087379.30688170' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8087379.30688170' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4zLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjMtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjMwNTcuMTE1NDk1MjgifQ== Dockerfile_67b33780223057.11549528' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC4zLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjMtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwODczNzkuMzA2ODgxNzAifQ== Dockerfile_69287be8087379.30688170' - 'docker push webdevops/php-apache:8.3-alpine' - 'docker tag webdevops/php-apache:8.3-alpine $CI_REGISTRY_IMAGE/php-apache:8.3-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.3-alpine' @@ -466,10 +516,10 @@ stages: - 'cd docker/php-apache/8.4' - 'docker build --no-cache -t webdevops/php-apache:8.4 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.4" >> Dockerfile_67b33780241669.66363972' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780241669.66363972' + - 'echo "FROM webdevops/php-apache:8.4" >> Dockerfile_69287be809a659.15912536' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809a659.15912536' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC40IiwiRE9DS0VSX1RBRyI6IjguNCIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDI0MTY2OS42NjM2Mzk3MiJ9 Dockerfile_67b33780241669.66363972' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC40IiwiRE9DS0VSX1RBRyI6IjguNCIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5YTY1OS4xNTkxMjUzNiJ9 Dockerfile_69287be809a659.15912536' - 'docker push webdevops/php-apache:8.4' - 'docker tag webdevops/php-apache:8.4 $CI_REGISTRY_IMAGE/php-apache:8.4' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.4' @@ -487,10 +537,10 @@ stages: - 'cd docker/php-apache/8.4-alpine' - 'docker build --no-cache -t webdevops/php-apache:8.4-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache:8.4-alpine" >> Dockerfile_67b33780221375.80839496' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780221375.80839496' + - 'echo "FROM webdevops/php-apache:8.4-alpine" >> Dockerfile_69287be8091443.98815882' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8091443.98815882' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC40LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjQtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjEzNzUuODA4Mzk0OTYifQ== Dockerfile_67b33780221375.80839496' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC40LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjQtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTE0NDMuOTg4MTU4ODIifQ== Dockerfile_69287be8091443.98815882' - 'docker push webdevops/php-apache:8.4-alpine' - 'docker tag webdevops/php-apache:8.4-alpine $CI_REGISTRY_IMAGE/php-apache:8.4-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.4-alpine' @@ -498,6 +548,48 @@ stages: - aws needs: - 'webdevops/php:8.4-alpine' +'webdevops/php-apache:8.5': + stage: level3 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-apache/8.5' + - 'docker build --no-cache -t webdevops/php-apache:8.5 .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-apache:8.5" >> Dockerfile_69287be808dde1.87460582' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808dde1.87460582' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.5 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC41IiwiRE9DS0VSX1RBRyI6IjguNSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4ZGRlMS44NzQ2MDU4MiJ9 Dockerfile_69287be808dde1.87460582' + - 'docker push webdevops/php-apache:8.5' + - 'docker tag webdevops/php-apache:8.5 $CI_REGISTRY_IMAGE/php-apache:8.5' + - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.5' + tags: + - aws + needs: + - 'webdevops/php:8.5' +'webdevops/php-apache:8.5-alpine': + stage: level3 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-apache/8.5-alpine' + - 'docker build --no-cache -t webdevops/php-apache:8.5-alpine .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-apache:8.5-alpine" >> Dockerfile_69287be809de48.62884443' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809de48.62884443' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-apache_spec.rb webdevops/php-apache:8.5-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGU6OC41LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjUtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWRlNDguNjI4ODQ0NDMifQ== Dockerfile_69287be809de48.62884443' + - 'docker push webdevops/php-apache:8.5-alpine' + - 'docker tag webdevops/php-apache:8.5-alpine $CI_REGISTRY_IMAGE/php-apache:8.5-alpine' + - 'docker push $CI_REGISTRY_IMAGE/php-apache:8.5-alpine' + tags: + - aws + needs: + - 'webdevops/php:8.5-alpine' 'webdevops/php-dev:8.1': stage: level3 before_script: @@ -508,10 +600,10 @@ stages: - 'cd docker/php-dev/8.1' - 'docker build --no-cache -t webdevops/php-dev:8.1 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.1" >> Dockerfile_67b33780250158.76524197' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780250158.76524197' + - 'echo "FROM webdevops/php-dev:8.1" >> Dockerfile_69287be80865b8.08882691' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80865b8.08882691' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4xIiwiRE9DS0VSX1RBRyI6IjguMSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDI1MDE1OC43NjUyNDE5NyJ9 Dockerfile_67b33780250158.76524197' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4xIiwiRE9DS0VSX1RBRyI6IjguMSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4NjViOC4wODg4MjY5MSJ9 Dockerfile_69287be80865b8.08882691' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.1 --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.1' @@ -531,10 +623,10 @@ stages: - 'cd docker/php-dev/8.1-alpine' - 'docker build --no-cache -t webdevops/php-dev:8.1-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.1-alpine" >> Dockerfile_67b3378023e319.33479644' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378023e319.33479644' + - 'echo "FROM webdevops/php-dev:8.1-alpine" >> Dockerfile_69287be809d249.39633466' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809d249.39633466' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4xLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjEtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyM2UzMTkuMzM0Nzk2NDQifQ== Dockerfile_67b3378023e319.33479644' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4xLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjEtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWQyNDkuMzk2MzM0NjYifQ== Dockerfile_69287be809d249.39633466' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.1-alpine --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.1-alpine' @@ -554,10 +646,10 @@ stages: - 'cd docker/php-dev/8.2' - 'docker build --no-cache -t webdevops/php-dev:8.2 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.2" >> Dockerfile_67b33780224b49.67003782' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780224b49.67003782' + - 'echo "FROM webdevops/php-dev:8.2" >> Dockerfile_69287be8096a14.11893350' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8096a14.11893350' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4yIiwiRE9DS0VSX1RBRyI6IjguMiIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyNGI0OS42NzAwMzc4MiJ9 Dockerfile_67b33780224b49.67003782' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4yIiwiRE9DS0VSX1RBRyI6IjguMiIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5NmExNC4xMTg5MzM1MCJ9 Dockerfile_69287be8096a14.11893350' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.2 --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.2' @@ -577,10 +669,10 @@ stages: - 'cd docker/php-dev/8.2-alpine' - 'docker build --no-cache -t webdevops/php-dev:8.2-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.2-alpine" >> Dockerfile_67b3378022ddd1.71440200' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378022ddd1.71440200' + - 'echo "FROM webdevops/php-dev:8.2-alpine" >> Dockerfile_69287be8090975.75273771' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8090975.75273771' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4yLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjItYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMmRkZDEuNzE0NDAyMDAifQ== Dockerfile_67b3378022ddd1.71440200' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4yLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjItYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTA5NzUuNzUyNzM3NzEifQ== Dockerfile_69287be8090975.75273771' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.2-alpine --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.2-alpine' @@ -600,10 +692,10 @@ stages: - 'cd docker/php-dev/8.3' - 'docker build --no-cache -t webdevops/php-dev:8.3 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.3" >> Dockerfile_67b337802273f4.20899500' - - 'echo "COPY conf/ /" >> Dockerfile_67b337802273f4.20899500' + - 'echo "FROM webdevops/php-dev:8.3" >> Dockerfile_69287be809f618.46491550' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809f618.46491550' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4zIiwiRE9DS0VSX1RBRyI6IjguMyIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyNzNmNC4yMDg5OTUwMCJ9 Dockerfile_67b337802273f4.20899500' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4zIiwiRE9DS0VSX1RBRyI6IjguMyIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5ZjYxOC40NjQ5MTU1MCJ9 Dockerfile_69287be809f618.46491550' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.3 --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.3' @@ -623,10 +715,10 @@ stages: - 'cd docker/php-dev/8.3-alpine' - 'docker build --no-cache -t webdevops/php-dev:8.3-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.3-alpine" >> Dockerfile_67b33780222898.27776469' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780222898.27776469' + - 'echo "FROM webdevops/php-dev:8.3-alpine" >> Dockerfile_69287be80879b7.76968640' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80879b7.76968640' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4zLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjMtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjI4OTguMjc3NzY0NjkifQ== Dockerfile_67b33780222898.27776469' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC4zLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjMtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwODc5YjcuNzY5Njg2NDAifQ== Dockerfile_69287be80879b7.76968640' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.3-alpine --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.3-alpine' @@ -646,10 +738,10 @@ stages: - 'cd docker/php-dev/8.4' - 'docker build --no-cache -t webdevops/php-dev:8.4 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.4" >> Dockerfile_67b33780240cd3.25453164' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780240cd3.25453164' + - 'echo "FROM webdevops/php-dev:8.4" >> Dockerfile_69287be809acc7.13310467' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809acc7.13310467' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC40IiwiRE9DS0VSX1RBRyI6IjguNCIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDI0MGNkMy4yNTQ1MzE2NCJ9 Dockerfile_67b33780240cd3.25453164' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC40IiwiRE9DS0VSX1RBRyI6IjguNCIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5YWNjNy4xMzMxMDQ2NyJ9 Dockerfile_69287be809acc7.13310467' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.4 --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.4' @@ -669,10 +761,10 @@ stages: - 'cd docker/php-dev/8.4-alpine' - 'docker build --no-cache -t webdevops/php-dev:8.4-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-dev:8.4-alpine" >> Dockerfile_67b33780221096.32273434' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780221096.32273434' + - 'echo "FROM webdevops/php-dev:8.4-alpine" >> Dockerfile_69287be8091917.39182480' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8091917.39182480' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC40LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjQtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjEwOTYuMzIyNzM0MzQifQ== Dockerfile_67b33780221096.32273434' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC40LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjQtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTE5MTcuMzkxODI0ODAifQ== Dockerfile_69287be8091917.39182480' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.4-alpine --config php-dev/test.yaml' - 'docker push webdevops/php-dev:8.4-alpine' @@ -682,6 +774,52 @@ stages: - aws needs: - 'webdevops/php:8.4-alpine' +'webdevops/php-dev:8.5': + stage: level3 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-dev/8.5' + - 'docker build --no-cache -t webdevops/php-dev:8.5 .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-dev:8.5" >> Dockerfile_69287be808e412.80583875' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808e412.80583875' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.5 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC41IiwiRE9DS0VSX1RBRyI6IjguNSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4ZTQxMi44MDU4Mzg3NSJ9 Dockerfile_69287be808e412.80583875' + - 'cd $CI_PROJECT_DIR/tests/structure-test' + - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.5 --config php-dev/test.yaml' + - 'docker push webdevops/php-dev:8.5' + - 'docker tag webdevops/php-dev:8.5 $CI_REGISTRY_IMAGE/php-dev:8.5' + - 'docker push $CI_REGISTRY_IMAGE/php-dev:8.5' + tags: + - aws + needs: + - 'webdevops/php:8.5' +'webdevops/php-dev:8.5-alpine': + stage: level3 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-dev/8.5-alpine' + - 'docker build --no-cache -t webdevops/php-dev:8.5-alpine .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-dev:8.5-alpine" >> Dockerfile_69287be809e491.90391978' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809e491.90391978' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-dev_spec.rb webdevops/php-dev:8.5-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1kZXY6OC41LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjUtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWU0OTEuOTAzOTE5NzgifQ== Dockerfile_69287be809e491.90391978' + - 'cd $CI_PROJECT_DIR/tests/structure-test' + - '/usr/local/bin/container-structure-test test --image webdevops/php-dev:8.5-alpine --config php-dev/test.yaml' + - 'docker push webdevops/php-dev:8.5-alpine' + - 'docker tag webdevops/php-dev:8.5-alpine $CI_REGISTRY_IMAGE/php-dev:8.5-alpine' + - 'docker push $CI_REGISTRY_IMAGE/php-dev:8.5-alpine' + tags: + - aws + needs: + - 'webdevops/php:8.5-alpine' 'webdevops/php-nginx:8.1': stage: level3 before_script: @@ -692,10 +830,10 @@ stages: - 'cd docker/php-nginx/8.1' - 'docker build --no-cache -t webdevops/php-nginx:8.1 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.1" >> Dockerfile_67b33780251289.29081473' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780251289.29081473' + - 'echo "FROM webdevops/php-nginx:8.1" >> Dockerfile_69287be8086ae7.34611114' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8086ae7.34611114' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjEiLCJET0NLRVJfVEFHIjoiOC4xIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjUxMjg5LjI5MDgxNDczIn0= Dockerfile_67b33780251289.29081473' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjEiLCJET0NLRVJfVEFHIjoiOC4xIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDg2YWU3LjM0NjExMTE0In0= Dockerfile_69287be8086ae7.34611114' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.1 --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.1' @@ -715,10 +853,10 @@ stages: - 'cd docker/php-nginx/8.1-alpine' - 'docker build --no-cache -t webdevops/php-nginx:8.1-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.1-alpine" >> Dockerfile_67b3378023f6b7.58331226' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378023f6b7.58331226' + - 'echo "FROM webdevops/php-nginx:8.1-alpine" >> Dockerfile_69287be809d400.62365738' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809d400.62365738' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjEtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMS1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIzZjZiNy41ODMzMTIyNiJ9 Dockerfile_67b3378023f6b7.58331226' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjEtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMS1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5ZDQwMC42MjM2NTczOCJ9 Dockerfile_69287be809d400.62365738' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.1-alpine --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.1-alpine' @@ -738,10 +876,10 @@ stages: - 'cd docker/php-nginx/8.2' - 'docker build --no-cache -t webdevops/php-nginx:8.2 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.2" >> Dockerfile_67b33780225875.98479028' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780225875.98479028' + - 'echo "FROM webdevops/php-nginx:8.2" >> Dockerfile_69287be8096be5.07623118' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8096be5.07623118' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjIiLCJET0NLRVJfVEFHIjoiOC4yIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjI1ODc1Ljk4NDc5MDI4In0= Dockerfile_67b33780225875.98479028' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjIiLCJET0NLRVJfVEFHIjoiOC4yIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDk2YmU1LjA3NjIzMTE4In0= Dockerfile_69287be8096be5.07623118' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.2 --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.2' @@ -761,10 +899,10 @@ stages: - 'cd docker/php-nginx/8.2-alpine' - 'docker build --no-cache -t webdevops/php-nginx:8.2-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.2-alpine" >> Dockerfile_67b3378022eb39.08525303' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378022eb39.08525303' + - 'echo "FROM webdevops/php-nginx:8.2-alpine" >> Dockerfile_69287be8090af2.51704423' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8090af2.51704423' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjItYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMi1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyZWIzOS4wODUyNTMwMyJ9 Dockerfile_67b3378022eb39.08525303' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjItYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMi1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5MGFmMi41MTcwNDQyMyJ9 Dockerfile_69287be8090af2.51704423' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.2-alpine --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.2-alpine' @@ -784,10 +922,10 @@ stages: - 'cd docker/php-nginx/8.3' - 'docker build --no-cache -t webdevops/php-nginx:8.3 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.3" >> Dockerfile_67b33780228964.55110588' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780228964.55110588' + - 'echo "FROM webdevops/php-nginx:8.3" >> Dockerfile_69287be809f952.98817264' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809f952.98817264' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjMiLCJET0NLRVJfVEFHIjoiOC4zIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjI4OTY0LjU1MTEwNTg4In0= Dockerfile_67b33780228964.55110588' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjMiLCJET0NLRVJfVEFHIjoiOC4zIiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDlmOTUyLjk4ODE3MjY0In0= Dockerfile_69287be809f952.98817264' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.3 --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.3' @@ -807,10 +945,10 @@ stages: - 'cd docker/php-nginx/8.3-alpine' - 'docker build --no-cache -t webdevops/php-nginx:8.3-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.3-alpine" >> Dockerfile_67b33780223ba0.87435473' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780223ba0.87435473' + - 'echo "FROM webdevops/php-nginx:8.3-alpine" >> Dockerfile_69287be8087c69.73059488' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8087c69.73059488' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjMtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMy1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyM2JhMC44NzQzNTQ3MyJ9 Dockerfile_67b33780223ba0.87435473' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjMtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguMy1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4N2M2OS43MzA1OTQ4OCJ9 Dockerfile_69287be8087c69.73059488' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.3-alpine --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.3-alpine' @@ -830,10 +968,10 @@ stages: - 'cd docker/php-nginx/8.4' - 'docker build --no-cache -t webdevops/php-nginx:8.4 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.4" >> Dockerfile_67b33780242328.62344667' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780242328.62344667' + - 'echo "FROM webdevops/php-nginx:8.4" >> Dockerfile_69287be809b0e3.29753497' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809b0e3.29753497' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjQiLCJET0NLRVJfVEFHIjoiOC40IiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjQyMzI4LjYyMzQ0NjY3In0= Dockerfile_67b33780242328.62344667' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjQiLCJET0NLRVJfVEFHIjoiOC40IiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDliMGUzLjI5NzUzNDk3In0= Dockerfile_69287be809b0e3.29753497' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.4 --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.4' @@ -853,10 +991,10 @@ stages: - 'cd docker/php-nginx/8.4-alpine' - 'docker build --no-cache -t webdevops/php-nginx:8.4-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx:8.4-alpine" >> Dockerfile_67b337802218e8.90240500' - - 'echo "COPY conf/ /" >> Dockerfile_67b337802218e8.90240500' + - 'echo "FROM webdevops/php-nginx:8.4-alpine" >> Dockerfile_69287be8091e12.87659676' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8091e12.87659676' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjQtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguNC1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyMThlOC45MDI0MDUwMCJ9 Dockerfile_67b337802218e8.90240500' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjQtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguNC1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5MWUxMi44NzY1OTY3NiJ9 Dockerfile_69287be8091e12.87659676' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.4-alpine --config php-nginx/test.yaml' - 'docker push webdevops/php-nginx:8.4-alpine' @@ -866,6 +1004,52 @@ stages: - aws needs: - 'webdevops/php:8.4-alpine' +'webdevops/php-nginx:8.5': + stage: level3 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-nginx/8.5' + - 'docker build --no-cache -t webdevops/php-nginx:8.5 .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-nginx:8.5" >> Dockerfile_69287be808e5c3.13098686' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808e5c3.13098686' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.5 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjUiLCJET0NLRVJfVEFHIjoiOC41IiwiT1NfRkFNSUxZIjoiZGViaWFuIiwiT1NfVkVSU0lPTiI6IjEyIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDhlNWMzLjEzMDk4Njg2In0= Dockerfile_69287be808e5c3.13098686' + - 'cd $CI_PROJECT_DIR/tests/structure-test' + - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.5 --config php-nginx/test.yaml' + - 'docker push webdevops/php-nginx:8.5' + - 'docker tag webdevops/php-nginx:8.5 $CI_REGISTRY_IMAGE/php-nginx:8.5' + - 'docker push $CI_REGISTRY_IMAGE/php-nginx:8.5' + tags: + - aws + needs: + - 'webdevops/php:8.5' +'webdevops/php-nginx:8.5-alpine': + stage: level3 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-nginx/8.5-alpine' + - 'docker build --no-cache -t webdevops/php-nginx:8.5-alpine .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-nginx:8.5-alpine" >> Dockerfile_69287be809e644.29403101' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809e644.29403101' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-nginx_spec.rb webdevops/php-nginx:8.5-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueDo4LjUtYWxwaW5lIiwiRE9DS0VSX1RBRyI6IjguNS1hbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiMyIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5ZTY0NC4yOTQwMzEwMSJ9 Dockerfile_69287be809e644.29403101' + - 'cd $CI_PROJECT_DIR/tests/structure-test' + - '/usr/local/bin/container-structure-test test --image webdevops/php-nginx:8.5-alpine --config php-nginx/test.yaml' + - 'docker push webdevops/php-nginx:8.5-alpine' + - 'docker tag webdevops/php-nginx:8.5-alpine $CI_REGISTRY_IMAGE/php-nginx:8.5-alpine' + - 'docker push $CI_REGISTRY_IMAGE/php-nginx:8.5-alpine' + tags: + - aws + needs: + - 'webdevops/php:8.5-alpine' 'webdevops/apache:alpine': stage: level4 before_script: @@ -876,10 +1060,10 @@ stages: - 'cd docker/apache/alpine' - 'docker build --no-cache -t webdevops/apache:alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/apache:alpine" >> Dockerfile_67b33780217d18.60871477' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780217d18.60871477' + - 'echo "FROM webdevops/apache:alpine" >> Dockerfile_69287be80a1720.16252575' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a1720.16252575' - 'bundle install' - - 'bash serverspec.sh spec/docker/apache_spec.rb webdevops/apache:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2FwYWNoZTphbHBpbmUiLCJET0NLRVJfVEFHIjoiYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IiIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjE3ZDE4LjYwODcxNDc3In0= Dockerfile_67b33780217d18.60871477' + - 'bash serverspec.sh spec/docker/apache_spec.rb webdevops/apache:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2FwYWNoZTphbHBpbmUiLCJET0NLRVJfVEFHIjoiYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IiIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MGExNzIwLjE2MjUyNTc1In0= Dockerfile_69287be80a1720.16252575' - 'docker push webdevops/apache:alpine' - 'docker tag webdevops/apache:alpine $CI_REGISTRY_IMAGE/apache:alpine' - 'docker push $CI_REGISTRY_IMAGE/apache:alpine' @@ -897,10 +1081,10 @@ stages: - 'cd docker/base-app/alpine' - 'docker build --no-cache -t webdevops/base-app:alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/base-app:alpine" >> Dockerfile_67b337802174b9.60734934' - - 'echo "COPY conf/ /" >> Dockerfile_67b337802174b9.60734934' + - 'echo "FROM webdevops/base-app:alpine" >> Dockerfile_69287be80a1cc7.66504182' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a1cc7.66504182' - 'bundle install' - - 'bash serverspec.sh spec/docker/base-app_spec.rb webdevops/base-app:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2UtYXBwOmFscGluZSIsIkRPQ0tFUl9UQUciOiJhbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMTc0YjkuNjA3MzQ5MzQifQ== Dockerfile_67b337802174b9.60734934' + - 'bash serverspec.sh spec/docker/base-app_spec.rb webdevops/base-app:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2UtYXBwOmFscGluZSIsIkRPQ0tFUl9UQUciOiJhbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwYTFjYzcuNjY1MDQxODIifQ== Dockerfile_69287be80a1cc7.66504182' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/base-app:alpine --config base-app/test.yaml --config base-app/alpine/test.yaml' - 'docker push webdevops/base-app:alpine' @@ -920,10 +1104,10 @@ stages: - 'cd docker/base-app/ubuntu-22.04' - 'docker build --no-cache -t webdevops/base-app:ubuntu-22.04 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/base-app:ubuntu-22.04" >> Dockerfile_67b33780215755.05460809' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780215755.05460809' + - 'echo "FROM webdevops/base-app:ubuntu-22.04" >> Dockerfile_69287be80a28a2.22679327' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a28a2.22679327' - 'bundle install' - - 'bash serverspec.sh spec/docker/base-app_spec.rb webdevops/base-app:ubuntu-22.04 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2UtYXBwOnVidW50dS0yMi4wNCIsIkRPQ0tFUl9UQUciOiJ1YnVudHUtMjIuMDQiLCJPU19GQU1JTFkiOiJ1YnVudHUiLCJPU19WRVJTSU9OIjoiMjIuMDQiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIxNTc1NS4wNTQ2MDgwOSJ9 Dockerfile_67b33780215755.05460809' + - 'bash serverspec.sh spec/docker/base-app_spec.rb webdevops/base-app:ubuntu-22.04 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL2Jhc2UtYXBwOnVidW50dS0yMi4wNCIsIkRPQ0tFUl9UQUciOiJ1YnVudHUtMjIuMDQiLCJPU19GQU1JTFkiOiJ1YnVudHUiLCJPU19WRVJTSU9OIjoiMjIuMDQiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODBhMjhhMi4yMjY3OTMyNyJ9 Dockerfile_69287be80a28a2.22679327' - 'cd $CI_PROJECT_DIR/tests/structure-test' - '/usr/local/bin/container-structure-test test --image webdevops/base-app:ubuntu-22.04 --config base-app/test.yaml' - 'docker push webdevops/base-app:ubuntu-22.04' @@ -945,10 +1129,10 @@ stages: - 'cd docker/nginx/alpine' - 'docker build --no-cache -t webdevops/nginx:alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/nginx:alpine" >> Dockerfile_67b33780217a03.35196981' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780217a03.35196981' + - 'echo "FROM webdevops/nginx:alpine" >> Dockerfile_69287be80a1959.99222454' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a1959.99222454' - 'bundle install' - - 'bash serverspec.sh spec/docker/nginx_spec.rb webdevops/nginx:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL25naW54OmFscGluZSIsIkRPQ0tFUl9UQUciOiJhbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMTdhMDMuMzUxOTY5ODEifQ== Dockerfile_67b33780217a03.35196981' + - 'bash serverspec.sh spec/docker/nginx_spec.rb webdevops/nginx:alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL25naW54OmFscGluZSIsIkRPQ0tFUl9UQUciOiJhbHBpbmUiLCJPU19GQU1JTFkiOiJhbHBpbmUiLCJPU19WRVJTSU9OIjoiIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwYTE5NTkuOTkyMjI0NTQifQ== Dockerfile_69287be80a1959.99222454' - 'docker push webdevops/nginx:alpine' - 'docker tag webdevops/nginx:alpine $CI_REGISTRY_IMAGE/nginx:alpine' - 'docker push $CI_REGISTRY_IMAGE/nginx:alpine' @@ -966,10 +1150,10 @@ stages: - 'cd docker/php-apache-dev/8.1' - 'docker build --no-cache -t webdevops/php-apache-dev:8.1 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.1" >> Dockerfile_67b33780250ae3.80578672' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780250ae3.80578672' + - 'echo "FROM webdevops/php-apache-dev:8.1" >> Dockerfile_69287be80862d4.18963874' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80862d4.18963874' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMSIsIkRPQ0tFUl9UQUciOiI4LjEiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyNTBhZTMuODA1Nzg2NzIifQ== Dockerfile_67b33780250ae3.80578672' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMSIsIkRPQ0tFUl9UQUciOiI4LjEiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwODYyZDQuMTg5NjM4NzQifQ== Dockerfile_69287be80862d4.18963874' - 'docker push webdevops/php-apache-dev:8.1' - 'docker tag webdevops/php-apache-dev:8.1 $CI_REGISTRY_IMAGE/php-apache-dev:8.1' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.1' @@ -987,10 +1171,10 @@ stages: - 'cd docker/php-apache-dev/8.1-alpine' - 'docker build --no-cache -t webdevops/php-apache-dev:8.1-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.1-alpine" >> Dockerfile_67b3378023f371.12517127' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378023f371.12517127' + - 'echo "FROM webdevops/php-apache-dev:8.1-alpine" >> Dockerfile_69287be809cf75.27452479' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809cf75.27452479' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMS1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC4xLWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjNmMzcxLjEyNTE3MTI3In0= Dockerfile_67b3378023f371.12517127' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMS1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC4xLWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDljZjc1LjI3NDUyNDc5In0= Dockerfile_69287be809cf75.27452479' - 'docker push webdevops/php-apache-dev:8.1-alpine' - 'docker tag webdevops/php-apache-dev:8.1-alpine $CI_REGISTRY_IMAGE/php-apache-dev:8.1-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.1-alpine' @@ -1008,10 +1192,10 @@ stages: - 'cd docker/php-apache-dev/8.2' - 'docker build --no-cache -t webdevops/php-apache-dev:8.2 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.2" >> Dockerfile_67b33780225200.47918817' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780225200.47918817' + - 'echo "FROM webdevops/php-apache-dev:8.2" >> Dockerfile_69287be8096655.26048753' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8096655.26048753' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMiIsIkRPQ0tFUl9UQUciOiI4LjIiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjUyMDAuNDc5MTg4MTcifQ== Dockerfile_67b33780225200.47918817' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMiIsIkRPQ0tFUl9UQUciOiI4LjIiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTY2NTUuMjYwNDg3NTMifQ== Dockerfile_69287be8096655.26048753' - 'docker push webdevops/php-apache-dev:8.2' - 'docker tag webdevops/php-apache-dev:8.2 $CI_REGISTRY_IMAGE/php-apache-dev:8.2' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.2' @@ -1029,10 +1213,10 @@ stages: - 'cd docker/php-apache-dev/8.2-alpine' - 'docker build --no-cache -t webdevops/php-apache-dev:8.2-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.2-alpine" >> Dockerfile_67b3378022e691.08109699' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378022e691.08109699' + - 'echo "FROM webdevops/php-apache-dev:8.2-alpine" >> Dockerfile_69287be8090744.60854462' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8090744.60854462' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMi1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC4yLWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjJlNjkxLjA4MTA5Njk5In0= Dockerfile_67b3378022e691.08109699' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMi1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC4yLWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDkwNzQ0LjYwODU0NDYyIn0= Dockerfile_69287be8090744.60854462' - 'docker push webdevops/php-apache-dev:8.2-alpine' - 'docker tag webdevops/php-apache-dev:8.2-alpine $CI_REGISTRY_IMAGE/php-apache-dev:8.2-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.2-alpine' @@ -1050,10 +1234,10 @@ stages: - 'cd docker/php-apache-dev/8.3' - 'docker build --no-cache -t webdevops/php-apache-dev:8.3 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.3" >> Dockerfile_67b33780228158.19260488' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780228158.19260488' + - 'echo "FROM webdevops/php-apache-dev:8.3" >> Dockerfile_69287be809f289.20754057' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809f289.20754057' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMyIsIkRPQ0tFUl9UQUciOiI4LjMiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjgxNTguMTkyNjA0ODgifQ== Dockerfile_67b33780228158.19260488' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMyIsIkRPQ0tFUl9UQUciOiI4LjMiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWYyODkuMjA3NTQwNTcifQ== Dockerfile_69287be809f289.20754057' - 'docker push webdevops/php-apache-dev:8.3' - 'docker tag webdevops/php-apache-dev:8.3 $CI_REGISTRY_IMAGE/php-apache-dev:8.3' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.3' @@ -1071,10 +1255,10 @@ stages: - 'cd docker/php-apache-dev/8.3-alpine' - 'docker build --no-cache -t webdevops/php-apache-dev:8.3-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.3-alpine" >> Dockerfile_67b337802235a8.44153401' - - 'echo "COPY conf/ /" >> Dockerfile_67b337802235a8.44153401' + - 'echo "FROM webdevops/php-apache-dev:8.3-alpine" >> Dockerfile_69287be80875e2.53911766' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80875e2.53911766' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMy1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC4zLWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjIzNWE4LjQ0MTUzNDAxIn0= Dockerfile_67b337802235a8.44153401' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguMy1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC4zLWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDg3NWUyLjUzOTExNzY2In0= Dockerfile_69287be80875e2.53911766' - 'docker push webdevops/php-apache-dev:8.3-alpine' - 'docker tag webdevops/php-apache-dev:8.3-alpine $CI_REGISTRY_IMAGE/php-apache-dev:8.3-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.3-alpine' @@ -1092,10 +1276,10 @@ stages: - 'cd docker/php-apache-dev/8.4' - 'docker build --no-cache -t webdevops/php-apache-dev:8.4 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.4" >> Dockerfile_67b33780241c27.57841892' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780241c27.57841892' + - 'echo "FROM webdevops/php-apache-dev:8.4" >> Dockerfile_69287be809aa20.63977001' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809aa20.63977001' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguNCIsIkRPQ0tFUl9UQUciOiI4LjQiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyNDFjMjcuNTc4NDE4OTIifQ== Dockerfile_67b33780241c27.57841892' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguNCIsIkRPQ0tFUl9UQUciOiI4LjQiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWFhMjAuNjM5NzcwMDEifQ== Dockerfile_69287be809aa20.63977001' - 'docker push webdevops/php-apache-dev:8.4' - 'docker tag webdevops/php-apache-dev:8.4 $CI_REGISTRY_IMAGE/php-apache-dev:8.4' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.4' @@ -1113,10 +1297,10 @@ stages: - 'cd docker/php-apache-dev/8.4-alpine' - 'docker build --no-cache -t webdevops/php-apache-dev:8.4-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-apache-dev:8.4-alpine" >> Dockerfile_67b33780221629.96682056' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780221629.96682056' + - 'echo "FROM webdevops/php-apache-dev:8.4-alpine" >> Dockerfile_69287be80915b3.42372894' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80915b3.42372894' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguNC1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC40LWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY3YjMzNzgwMjIxNjI5Ljk2NjgyMDU2In0= Dockerfile_67b33780221629.96682056' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguNC1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC40LWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDkxNWIzLjQyMzcyODk0In0= Dockerfile_69287be80915b3.42372894' - 'docker push webdevops/php-apache-dev:8.4-alpine' - 'docker tag webdevops/php-apache-dev:8.4-alpine $CI_REGISTRY_IMAGE/php-apache-dev:8.4-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.4-alpine' @@ -1124,6 +1308,48 @@ stages: - aws needs: - 'webdevops/php-apache:8.4-alpine' +'webdevops/php-apache-dev:8.5': + stage: level4 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-apache-dev/8.5' + - 'docker build --no-cache -t webdevops/php-apache-dev:8.5 .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-apache-dev:8.5" >> Dockerfile_69287be808e0f1.57438701' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808e0f1.57438701' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.5 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguNSIsIkRPQ0tFUl9UQUciOiI4LjUiLCJPU19GQU1JTFkiOiJkZWJpYW4iLCJPU19WRVJTSU9OIjoiMTIiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOGUwZjEuNTc0Mzg3MDEifQ== Dockerfile_69287be808e0f1.57438701' + - 'docker push webdevops/php-apache-dev:8.5' + - 'docker tag webdevops/php-apache-dev:8.5 $CI_REGISTRY_IMAGE/php-apache-dev:8.5' + - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.5' + tags: + - aws + needs: + - 'webdevops/php-apache:8.5' +'webdevops/php-apache-dev:8.5-alpine': + stage: level4 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-apache-dev/8.5-alpine' + - 'docker build --no-cache -t webdevops/php-apache-dev:8.5-alpine .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-apache-dev:8.5-alpine" >> Dockerfile_69287be809e134.71960535' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809e134.71960535' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-apache-dev_spec.rb webdevops/php-apache-dev:8.5-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1hcGFjaGUtZGV2OjguNS1hbHBpbmUiLCJET0NLRVJfVEFHIjoiOC41LWFscGluZSIsIk9TX0ZBTUlMWSI6ImFscGluZSIsIk9TX1ZFUlNJT04iOiIzIiwiUEhQX09GRklDSUFMIjoiMSIsIkRPQ0tFUkZJTEUiOiJEb2NrZXJmaWxlXzY5Mjg3YmU4MDllMTM0LjcxOTYwNTM1In0= Dockerfile_69287be809e134.71960535' + - 'docker push webdevops/php-apache-dev:8.5-alpine' + - 'docker tag webdevops/php-apache-dev:8.5-alpine $CI_REGISTRY_IMAGE/php-apache-dev:8.5-alpine' + - 'docker push $CI_REGISTRY_IMAGE/php-apache-dev:8.5-alpine' + tags: + - aws + needs: + - 'webdevops/php-apache:8.5-alpine' 'webdevops/php-nginx-dev:8.1': stage: level4 before_script: @@ -1134,10 +1360,10 @@ stages: - 'cd docker/php-nginx-dev/8.1' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.1 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.1" >> Dockerfile_67b33780252b32.59774074' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780252b32.59774074' + - 'echo "FROM webdevops/php-nginx-dev:8.1" >> Dockerfile_69287be8086e05.96143394' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8086e05.96143394' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4xIiwiRE9DS0VSX1RBRyI6IjguMSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDI1MmIzMi41OTc3NDA3NCJ9 Dockerfile_67b33780252b32.59774074' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.1 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4xIiwiRE9DS0VSX1RBRyI6IjguMSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4NmUwNS45NjE0MzM5NCJ9 Dockerfile_69287be8086e05.96143394' - 'docker push webdevops/php-nginx-dev:8.1' - 'docker tag webdevops/php-nginx-dev:8.1 $CI_REGISTRY_IMAGE/php-nginx-dev:8.1' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.1' @@ -1155,10 +1381,10 @@ stages: - 'cd docker/php-nginx-dev/8.1-alpine' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.1-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.1-alpine" >> Dockerfile_67b3378023ff46.25105637' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378023ff46.25105637' + - 'echo "FROM webdevops/php-nginx-dev:8.1-alpine" >> Dockerfile_69287be809d6d0.26709604' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809d6d0.26709604' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4xLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjEtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyM2ZmNDYuMjUxMDU2MzcifQ== Dockerfile_67b3378023ff46.25105637' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.1-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4xLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjEtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWQ2ZDAuMjY3MDk2MDQifQ== Dockerfile_69287be809d6d0.26709604' - 'docker push webdevops/php-nginx-dev:8.1-alpine' - 'docker tag webdevops/php-nginx-dev:8.1-alpine $CI_REGISTRY_IMAGE/php-nginx-dev:8.1-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.1-alpine' @@ -1176,10 +1402,10 @@ stages: - 'cd docker/php-nginx-dev/8.2' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.2 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.2" >> Dockerfile_67b33780226136.74226750' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780226136.74226750' + - 'echo "FROM webdevops/php-nginx-dev:8.2" >> Dockerfile_69287be8096f14.33205603' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8096f14.33205603' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4yIiwiRE9DS0VSX1RBRyI6IjguMiIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyNjEzNi43NDIyNjc1MCJ9 Dockerfile_67b33780226136.74226750' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.2 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4yIiwiRE9DS0VSX1RBRyI6IjguMiIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5NmYxNC4zMzIwNTYwMyJ9 Dockerfile_69287be8096f14.33205603' - 'docker push webdevops/php-nginx-dev:8.2' - 'docker tag webdevops/php-nginx-dev:8.2 $CI_REGISTRY_IMAGE/php-nginx-dev:8.2' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.2' @@ -1197,10 +1423,10 @@ stages: - 'cd docker/php-nginx-dev/8.2-alpine' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.2-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.2-alpine" >> Dockerfile_67b3378022f051.78820010' - - 'echo "COPY conf/ /" >> Dockerfile_67b3378022f051.78820010' + - 'echo "FROM webdevops/php-nginx-dev:8.2-alpine" >> Dockerfile_69287be8090e95.27561622' + - 'echo "COPY conf/ /" >> Dockerfile_69287be8090e95.27561622' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4yLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjItYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMmYwNTEuNzg4MjAwMTAifQ== Dockerfile_67b3378022f051.78820010' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.2-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4yLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjItYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTBlOTUuMjc1NjE2MjIifQ== Dockerfile_69287be8090e95.27561622' - 'docker push webdevops/php-nginx-dev:8.2-alpine' - 'docker tag webdevops/php-nginx-dev:8.2-alpine $CI_REGISTRY_IMAGE/php-nginx-dev:8.2-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.2-alpine' @@ -1218,10 +1444,10 @@ stages: - 'cd docker/php-nginx-dev/8.3' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.3 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.3" >> Dockerfile_67b33780228f64.03329939' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780228f64.03329939' + - 'echo "FROM webdevops/php-nginx-dev:8.3" >> Dockerfile_69287be809fb00.04489363' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809fb00.04489363' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4zIiwiRE9DS0VSX1RBRyI6IjguMyIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIyOGY2NC4wMzMyOTkzOSJ9 Dockerfile_67b33780228f64.03329939' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.3 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4zIiwiRE9DS0VSX1RBRyI6IjguMyIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5ZmIwMC4wNDQ4OTM2MyJ9 Dockerfile_69287be809fb00.04489363' - 'docker push webdevops/php-nginx-dev:8.3' - 'docker tag webdevops/php-nginx-dev:8.3 $CI_REGISTRY_IMAGE/php-nginx-dev:8.3' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.3' @@ -1239,10 +1465,10 @@ stages: - 'cd docker/php-nginx-dev/8.3-alpine' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.3-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.3-alpine" >> Dockerfile_67b33780223fe6.79212619' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780223fe6.79212619' + - 'echo "FROM webdevops/php-nginx-dev:8.3-alpine" >> Dockerfile_69287be80884b6.29968463' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80884b6.29968463' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4zLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjMtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjNmZTYuNzkyMTI2MTkifQ== Dockerfile_67b33780223fe6.79212619' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.3-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC4zLWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjMtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwODg0YjYuMjk5Njg0NjMifQ== Dockerfile_69287be80884b6.29968463' - 'docker push webdevops/php-nginx-dev:8.3-alpine' - 'docker tag webdevops/php-nginx-dev:8.3-alpine $CI_REGISTRY_IMAGE/php-nginx-dev:8.3-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.3-alpine' @@ -1260,10 +1486,10 @@ stages: - 'cd docker/php-nginx-dev/8.4' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.4 .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.4" >> Dockerfile_67b33780242ab9.24601667' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780242ab9.24601667' + - 'echo "FROM webdevops/php-nginx-dev:8.4" >> Dockerfile_69287be809b396.90126433' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809b396.90126433' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC40IiwiRE9DS0VSX1RBRyI6IjguNCIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDI0MmFiOS4yNDYwMTY2NyJ9 Dockerfile_67b33780242ab9.24601667' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.4 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC40IiwiRE9DS0VSX1RBRyI6IjguNCIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA5YjM5Ni45MDEyNjQzMyJ9 Dockerfile_69287be809b396.90126433' - 'docker push webdevops/php-nginx-dev:8.4' - 'docker tag webdevops/php-nginx-dev:8.4 $CI_REGISTRY_IMAGE/php-nginx-dev:8.4' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.4' @@ -1281,10 +1507,10 @@ stages: - 'cd docker/php-nginx-dev/8.4-alpine' - 'docker build --no-cache -t webdevops/php-nginx-dev:8.4-alpine .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/php-nginx-dev:8.4-alpine" >> Dockerfile_67b33780221c39.77304607' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780221c39.77304607' + - 'echo "FROM webdevops/php-nginx-dev:8.4-alpine" >> Dockerfile_69287be80920f5.83000443' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80920f5.83000443' - 'bundle install' - - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC40LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjQtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjdiMzM3ODAyMjFjMzkuNzczMDQ2MDcifQ== Dockerfile_67b33780221c39.77304607' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.4-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC40LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjQtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOTIwZjUuODMwMDA0NDMifQ== Dockerfile_69287be80920f5.83000443' - 'docker push webdevops/php-nginx-dev:8.4-alpine' - 'docker tag webdevops/php-nginx-dev:8.4-alpine $CI_REGISTRY_IMAGE/php-nginx-dev:8.4-alpine' - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.4-alpine' @@ -1292,6 +1518,48 @@ stages: - aws needs: - 'webdevops/php-nginx:8.4-alpine' +'webdevops/php-nginx-dev:8.5': + stage: level4 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-nginx-dev/8.5' + - 'docker build --no-cache -t webdevops/php-nginx-dev:8.5 .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-nginx-dev:8.5" >> Dockerfile_69287be808e722.96804194' + - 'echo "COPY conf/ /" >> Dockerfile_69287be808e722.96804194' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.5 eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC41IiwiRE9DS0VSX1RBRyI6IjguNSIsIk9TX0ZBTUlMWSI6ImRlYmlhbiIsIk9TX1ZFUlNJT04iOiIxMiIsIlBIUF9PRkZJQ0lBTCI6IjEiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODA4ZTcyMi45NjgwNDE5NCJ9 Dockerfile_69287be808e722.96804194' + - 'docker push webdevops/php-nginx-dev:8.5' + - 'docker tag webdevops/php-nginx-dev:8.5 $CI_REGISTRY_IMAGE/php-nginx-dev:8.5' + - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.5' + tags: + - aws + needs: + - 'webdevops/php-nginx:8.5' +'webdevops/php-nginx-dev:8.5-alpine': + stage: level4 + before_script: + - 'docker login -u $DOCKER_USER -p $DOCKER_PASS' + - 'docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY' + image: webdevops/dockerfile-build-env + script: + - 'cd docker/php-nginx-dev/8.5-alpine' + - 'docker build --no-cache -t webdevops/php-nginx-dev:8.5-alpine .' + - 'cd $CI_PROJECT_DIR/tests/serverspec' + - 'echo "FROM webdevops/php-nginx-dev:8.5-alpine" >> Dockerfile_69287be809e8c8.17761246' + - 'echo "COPY conf/ /" >> Dockerfile_69287be809e8c8.17761246' + - 'bundle install' + - 'bash serverspec.sh spec/docker/php-nginx-dev_spec.rb webdevops/php-nginx-dev:8.5-alpine eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3BocC1uZ2lueC1kZXY6OC41LWFscGluZSIsIkRPQ0tFUl9UQUciOiI4LjUtYWxwaW5lIiwiT1NfRkFNSUxZIjoiYWxwaW5lIiwiT1NfVkVSU0lPTiI6IjMiLCJQSFBfT0ZGSUNJQUwiOiIxIiwiRE9DS0VSRklMRSI6IkRvY2tlcmZpbGVfNjkyODdiZTgwOWU4YzguMTc3NjEyNDYifQ== Dockerfile_69287be809e8c8.17761246' + - 'docker push webdevops/php-nginx-dev:8.5-alpine' + - 'docker tag webdevops/php-nginx-dev:8.5-alpine $CI_REGISTRY_IMAGE/php-nginx-dev:8.5-alpine' + - 'docker push $CI_REGISTRY_IMAGE/php-nginx-dev:8.5-alpine' + tags: + - aws + needs: + - 'webdevops/php-nginx:8.5-alpine' 'webdevops/vsftp:latest': stage: level4 before_script: @@ -1302,10 +1570,10 @@ stages: - 'cd docker/vsftp/latest' - 'docker build --no-cache -t webdevops/vsftp:latest .' - 'cd $CI_PROJECT_DIR/tests/serverspec' - - 'echo "FROM webdevops/vsftp:latest" >> Dockerfile_67b33780216706.35505941' - - 'echo "COPY conf/ /" >> Dockerfile_67b33780216706.35505941' + - 'echo "FROM webdevops/vsftp:latest" >> Dockerfile_69287be80a2556.99736505' + - 'echo "COPY conf/ /" >> Dockerfile_69287be80a2556.99736505' - 'bundle install' - - 'bash serverspec.sh spec/docker/vsftp_spec.rb webdevops/vsftp:latest eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3ZzZnRwOmxhdGVzdCIsIkRPQ0tFUl9UQUciOiJsYXRlc3QiLCJPU19GQU1JTFkiOiJ1YnVudHUiLCJPU19WRVJTSU9OIjoiMjIuMDQiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82N2IzMzc4MDIxNjcwNi4zNTUwNTk0MSJ9 Dockerfile_67b33780216706.35505941' + - 'bash serverspec.sh spec/docker/vsftp_spec.rb webdevops/vsftp:latest eyJET0NLRVJfSU1BR0UiOiJ3ZWJkZXZvcHNcL3ZzZnRwOmxhdGVzdCIsIkRPQ0tFUl9UQUciOiJsYXRlc3QiLCJPU19GQU1JTFkiOiJ1YnVudHUiLCJPU19WRVJTSU9OIjoiMjIuMDQiLCJET0NLRVJGSUxFIjoiRG9ja2VyZmlsZV82OTI4N2JlODBhMjU1Ni45OTczNjUwNSJ9 Dockerfile_69287be80a2556.99736505' - 'docker push webdevops/vsftp:latest' - 'docker tag webdevops/vsftp:latest $CI_REGISTRY_IMAGE/vsftp:latest' - 'docker push $CI_REGISTRY_IMAGE/vsftp:latest' diff --git a/README.md b/README.md index 07a5210e8..e89457efd 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ config files from the `provisioning` directory. We generate a multi stage Gitlab-CI configuration using PHP: ``` -docker run --rm -ti -v $PWD:/app -w /app/ci webdevops/php:8.3-alpine composer install -docker run --rm -ti -v $PWD:/app -w /app webdevops/php:8.3-alpine ci/console gitlab:generate +docker run --rm -ti -v $PWD:/app -w /app/ci webdevops/php:8.4-alpine composer install +docker run --rm -ti -v $PWD:/app -w /app webdevops/php:8.4-alpine ci/console gitlab:generate ``` Gitlab CI builds every image independent and runs serverspec and structure tests on every @@ -69,31 +69,37 @@ The following images which are currently supported are based on `php:{VER}-fpm-b * `webdevops/php:8.2` * `webdevops/php:8.3` * `webdevops/php:8.4` +* `webdevops/php:8.5` * `webdevops/php-dev:8.0` * `webdevops/php-dev:8.1` * `webdevops/php-dev:8.2` * `webdevops/php-dev:8.3` * `webdevops/php-dev:8.4` +* `webdevops/php-dev:8.5` * `webdevops/php-apache:8.0` * `webdevops/php-apache:8.1` * `webdevops/php-apache:8.2` * `webdevops/php-apache:8.3` * `webdevops/php-apache:8.4` +* `webdevops/php-apache:8.5` * `webdevops/php-apache-dev:8.0` * `webdevops/php-apache-dev:8.1` * `webdevops/php-apache-dev:8.2` * `webdevops/php-apache-dev:8.3` * `webdevops/php-apache-dev:8.4` +* `webdevops/php-apache-dev:8.5` * `webdevops/php-nginx:8.0` * `webdevops/php-nginx:8.1` * `webdevops/php-nginx:8.2` * `webdevops/php-nginx:8.3` * `webdevops/php-nginx:8.4` +* `webdevops/php-nginx:8.5` * `webdevops/php-nginx-dev:8.0` * `webdevops/php-nginx-dev:8.1` * `webdevops/php-nginx-dev:8.2` * `webdevops/php-nginx-dev:8.3` * `webdevops/php-nginx-dev:8.4` +* `webdevops/php-nginx-dev:8.5` ### Alpine PHP @@ -105,28 +111,34 @@ The following images which are currently supported are based on `php:{VER}-fpm-a * `webdevops/php:8.2-alpine` * `webdevops/php:8.3-alpine` * `webdevops/php:8.4-alpine` +* `webdevops/php:8.5-alpine` * `webdevops/php-dev:8.0-alpine` * `webdevops/php-dev:8.1-alpine` * `webdevops/php-dev:8.2-alpine` * `webdevops/php-dev:8.3-alpine` * `webdevops/php-dev:8.4-alpine` +* `webdevops/php-dev:8.5-alpine` * `webdevops/php-apache:8.0-alpine` * `webdevops/php-apache:8.1-alpine` * `webdevops/php-apache:8.2-alpine` * `webdevops/php-apache:8.3-alpine` * `webdevops/php-apache:8.4-alpine` +* `webdevops/php-apache:8.5-alpine` * `webdevops/php-apache-dev:8.0-alpine` * `webdevops/php-apache-dev:8.1-alpine` * `webdevops/php-apache-dev:8.2-alpine` * `webdevops/php-apache-dev:8.3-alpine` * `webdevops/php-apache-dev:8.4-alpine` +* `webdevops/php-apache-dev:8.5-alpine` * `webdevops/php-nginx:8.0-alpine` * `webdevops/php-nginx:8.1-alpine` * `webdevops/php-nginx:8.2-alpine` * `webdevops/php-nginx:8.3-alpine` * `webdevops/php-nginx:8.4-alpine` +* `webdevops/php-nginx:8.5-alpine` * `webdevops/php-nginx-dev:8.0-alpine` * `webdevops/php-nginx-dev:8.1-alpine` * `webdevops/php-nginx-dev:8.2-alpine` * `webdevops/php-nginx-dev:8.3-alpine` * `webdevops/php-nginx-dev:8.4-alpine` +* `webdevops/php-nginx-dev:8.5-alpine` diff --git a/build-local.sh b/build-local.sh index 89eec063c..f61a80bf3 100755 --- a/build-local.sh +++ b/build-local.sh @@ -3,7 +3,7 @@ set -exuo pipefail ROOT_DIR=$(pwd) -PHP_VERSION=8.4 +PHP_VERSION=8.5 #docker run --rm -ti -v $PWD:/app -w /app webdevops/dockerfile-build-env make provision diff --git a/conf/console.yml b/conf/console.yml index 5dce68647..e4de7f2cf 100644 --- a/conf/console.yml +++ b/conf/console.yml @@ -43,7 +43,7 @@ dockerTest: OS_FAMILY: 'debian' OS_VERSION: '9' PHP_OFFICIAL: '1' - 'php[^:]*:8.(0|1|2|3|4)': + 'php[^:]*:8.(0|1|2|3|4|5)': OS_FAMILY: 'debian' OS_VERSION: '12' PHP_OFFICIAL: '1' diff --git a/docker/php-apache-dev/8.5-alpine/Dockerfile b/docker/php-apache-dev/8.5-alpine/Dockerfile new file mode 100644 index 000000000..37e099787 --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/Dockerfile @@ -0,0 +1,41 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-apache-dev:8.5-alpine +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php-apache:8.5-alpine + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 +ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install development environment + && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ + && blackfire php:install \ + && apk-install \ + linux-headers \ + make \ + autoconf \ + g++ \ + && wget https://github.com/php/pie/releases/download/1.3.1/pie.phar -O /usr/local/bin/pie \ + && chmod +x /usr/local/bin/pie \ + && pie install xdebug/xdebug:^3.5.0@alpha \ + && rm -f /usr/local/bin/pie \ + && apk del -f --purge \ + autoconf \ + linux-headers \ + g++ \ + make \ + && docker-php-ext-enable xdebug \ + # Enable php development services + && docker-service enable syslog \ + && docker-service enable postfix \ + && docker-service enable ssh \ + && docker-run-bootstrap diff --git a/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 b/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 new file mode 100644 index 000000000..8fe68a4c7 --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 @@ -0,0 +1,11 @@ +{{ docker.from("php-apache", "8.5-alpine") }} + +{{ environment.web() }} +{{ environment.webPhp() }} +{{ environment.webDevelopment() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ php.officialDevelopmentAlpine(version="8.5") }} \ + {{ provision.runBootstrap() }} diff --git a/docker/php-apache-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh b/docker/php-apache-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-apache-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh b/docker/php-apache-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh new file mode 100644 index 000000000..95daa01ae --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_BLACKFIRE_AGENT_OPTS" ]]; then SERVICE_BLACKFIRE_AGENT_OPTS=""; fi + +source /opt/docker/bin/config.sh + +BLACKFIRE_ARGS="" + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +# blackfire.server_id +if [[ -n "${BLACKFIRE_SERVER_ID+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-id=\"${BLACKFIRE_SERVER_ID}\"" +fi + +# blackfire.server_token +if [[ -n "${BLACKFIRE_SERVER_TOKEN+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-token=\"${BLACKFIRE_SERVER_TOKEN}\"" +fi + +# create directory for unix socket +mkdir -p /var/run/blackfire + +eval exec blackfire-agent $BLACKFIRE_ARGS $SERVICE_BLACKFIRE_AGENT_OPTS diff --git a/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/conf.d/02-dev.conf b/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/conf.d/02-dev.conf new file mode 100644 index 000000000..75e5f4396 --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/conf.d/02-dev.conf @@ -0,0 +1,8 @@ +# EnableSendfile: Control whether the sendfile kernel support is +# used to deliver files (assuming that the OS supports it). +# The default is on; turn this off if you serve from NFS-mounted +# filesystems. Please see +# http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile +EnableSendfile off + +LogLevel info diff --git a/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/vhost.common.d/.gitkeep b/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/vhost.common.d/02-dev.conf b/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/vhost.common.d/02-dev.conf new file mode 100644 index 000000000..54918ec2b --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/etc/httpd/vhost.common.d/02-dev.conf @@ -0,0 +1,10 @@ +"> + FileETag None + + + Header unset ETag + Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" + Header set Pragma "no-cache" + Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" + + diff --git a/docker/php-apache-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf b/docker/php-apache-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf new file mode 100644 index 000000000..897831ddb --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf @@ -0,0 +1,14 @@ +[group:blackfire-agent] +programs=blackfire-agentd +priority=25 + +[program:blackfire-agentd] +command = /opt/docker/bin/service.d/blackfire-agent.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..852567f85 --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) + +# Configure php-fpm +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "%R - %u %t \"%m %r%Q%q\" %s %f cpu:%C%% mem:%{megabytes}M reqTime:%d"' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf + +fi diff --git a/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh new file mode 100644 index 000000000..f4ea7f72e --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable blackfire by default +rm -f \ + /etc/php5/cli/conf.d/zz-blackfire.ini \ + /etc/php5/fpm/conf.d/zz-blackfire.ini diff --git a/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh new file mode 100644 index 000000000..079e59fdf --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Configure opcache for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*opcache.memory_consumption[\s]*=' -r 'opcache.memory_consumption = 256' \ + -s '^[\s;]*opcache.validate_timestamps[\s]*=' -r 'opcache.validate_timestamps = 1' \ + -s '^[\s;]*opcache.revalidate_freq[\s]*=' -r 'opcache.revalidate_freq = 0' \ + -s '^[\s;]*opcache.interned_strings_buffer[\s]*=' -r 'opcache.interned_strings_buffer = 16' \ + -s '^[\s;]*opcache.max_accelerated_files[\s]*=' -r 'opcache.max_accelerated_files = 7963' \ + -s '^[\s;]*opcache.fast_shutdown[\s]*=' -r 'opcache.fast_shutdown = 1' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh new file mode 100644 index 000000000..e76310003 --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Alpine) + # Fix php xdebug module [Alpine family] + + if [[ -f "/etc/php5/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php5/conf.d/xdebug.ini + fi + + if [[ -f "/etc/php7/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php7/conf.d/xdebug.ini + fi + + ;; +esac + +# Configure xdebug for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*xdebug.mode[\s]*=' -r 'xdebug.mode = debug' \ + -s '^[\s;]*xdebug.discover_client_host[\s]*=' -r 'xdebug.discover_client_host = 1' \ + -s '^[\s;]*xdebug.idekey[\s]*=' -r 'xdebug.idekey = docker' \ + -s '^[\s;]*xdebug.cli_color[\s]*=' -r 'xdebug.cli_color = 1' \ + -s '^[\s;]*xdebug.max_nesting_level[\s]*=' -r 'xdebug.max_nesting_level = 1000' \ + -s '^[\s;]*xdebug.start_with_request[\s]*=' -r 'xdebug.start_with_request = trigger' \ + -s '^[\s;]*xdebug.output_dir[\s]*=' -r 'xdebug.output_dir = /tmp/debug' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-apache-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh b/docker/php-apache-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh new file mode 100644 index 000000000..7b392587c --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +################################################# +# Debugger switch +################################################# + +PHP_CONF_PATHS=" +/etc/php5/conf.d +/etc/php7/conf.d +/etc/php.d +/etc/php5/mods-available +/etc/php5/cli/conf.d +/etc/php5/cli/conf.d +/etc/php5/fpm/conf.d +/etc/php5/fpm/conf.d +/etc/php/7.0/mods-available +/etc/php/7.1/mods-available +/etc/php/7.2/mods-available +/etc/php/7.3/mods-available +/etc/php/7.4/mods-available +/etc/php/7.0/cli/conf.d +/etc/php/7.1/cli/conf.d +/etc/php/7.2/cli/conf.d +/etc/php/7.3/cli/conf.d +/etc/php/7.4/cli/conf.d +/etc/php/7.0/fpm/conf.d +/etc/php/7.1/fpm/conf.d +/etc/php/7.2/fpm/conf.d +/etc/php/7.3/fpm/conf.d +/etc/php/7.4/fpm/conf.d +/usr/local/etc/php/conf.d/" + +function phpModuleRemove() { + if [ "$#" -ne 1 ]; then + echo "You must specify the name of the PHP module which you want to disable" + exit 1 + fi + + echo " - Removing PHP module ${1}" + for CONF_PATH in $PHP_CONF_PATHS; do + rm -f "${CONF_PATH}"/*"${1}".ini + done +} + + +if [[ -n "${PHP_DEBUGGER+x}" ]]; then + case "$PHP_DEBUGGER" in + xdebug) + echo "PHP-Debugger: Xdebug enabled" + phpModuleRemove "blackfire" + ;; + + blackfire) + echo "PHP-Debugger: Blackfire enabled" + phpModuleRemove "xdebug" + docker-service-enable blackfire-agent + ;; + + none) + echo "PHP-Debugger: none" + phpModuleRemove "blackfire" + phpModuleRemove "xdebug" + ;; + esac + +else + + echo "PHP-Debugger: not specified - default is xdebug" + phpModuleRemove "blackfire" + +fi + +################################################# +# PHP debugger environment variables +################################################# + +function phpEnvironmentVariable() { + PHP_INI_KEY="$1" + PHP_ENV_NAME="$2" + + if [[ -n "${!PHP_ENV_NAME+x}" ]]; then + PHP_ENV_VALUE="${!PHP_ENV_NAME}" + echo "${PHP_INI_KEY}=\"${PHP_ENV_VALUE}\"" >> /opt/docker/etc/php/php.ini + fi +} + +################### +# XDEBUG +################### + +# xdebug3 remote debugger +phpEnvironmentVariable "xdebug.discover_client_host" "XDEBUG_DISCOVER_CLIENT_HOST" +phpEnvironmentVariable "xdebug.mode" "XDEBUG_MODE" +phpEnvironmentVariable "xdebug.start_with_request" "XDEBUG_START_WITH_REQUEST" +phpEnvironmentVariable "xdebug.client_host" "XDEBUG_CLIENT_HOST" +phpEnvironmentVariable "xdebug.client_port" "XDEBUG_CLIENT_PORT" + +# xdebug3 profiler +phpEnvironmentVariable "xdebug.trigger_value" "XDEBUG_TRIGGER_VALUE" +phpEnvironmentVariable "xdebug.output_dir" "XDEBUG_OUTPUT_DIR" + +################### +# BLACKFIRE +################### +phpEnvironmentVariable "blackfire.server_id" "BLACKFIRE_SERVER_ID" +phpEnvironmentVariable "blackfire.server_token" "BLACKFIRE_SERVER_TOKEN" diff --git a/docker/php-apache-dev/8.5-alpine/conf/provision/entrypoint.d/20-apache-dev.sh b/docker/php-apache-dev/8.5-alpine/conf/provision/entrypoint.d/20-apache-dev.sh new file mode 100644 index 000000000..a9d2c6e92 --- /dev/null +++ b/docker/php-apache-dev/8.5-alpine/conf/provision/entrypoint.d/20-apache-dev.sh @@ -0,0 +1,5 @@ +go-replace \ + -s "" -r "$WEB_NO_CACHE_PATTERN" \ + --path=/opt/docker/etc/httpd/ \ + --path-pattern='*.conf' \ + --ignore-empty diff --git a/docker/php-apache-dev/8.5/Dockerfile b/docker/php-apache-dev/8.5/Dockerfile new file mode 100644 index 000000000..6dd17f1ab --- /dev/null +++ b/docker/php-apache-dev/8.5/Dockerfile @@ -0,0 +1,32 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-apache-dev:8.5 +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php-apache:8.5 + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 +ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install development environment + && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ + && blackfire php:install \ + && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ + && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ + && apt-install tideways-php tideways-daemon \ + && pecl install xdebug \ + && docker-php-ext-enable xdebug \ + # Enable php development services + && docker-service enable syslog \ + && docker-service enable postfix \ + && docker-service enable ssh \ + && docker-run-bootstrap \ + && docker-image-cleanup diff --git a/docker/php-apache-dev/8.5/Dockerfile.jinja2 b/docker/php-apache-dev/8.5/Dockerfile.jinja2 new file mode 100644 index 000000000..9f270b4d6 --- /dev/null +++ b/docker/php-apache-dev/8.5/Dockerfile.jinja2 @@ -0,0 +1,12 @@ +{{ docker.from("php-apache", "8.5") }} + +{{ environment.web() }} +{{ environment.webPhp() }} +{{ environment.webDevelopment() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ php.officialDevelopment(version="8.5") }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} diff --git a/docker/php-apache-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh b/docker/php-apache-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-apache-dev/8.5/conf/bin/service.d/blackfire-agent.sh b/docker/php-apache-dev/8.5/conf/bin/service.d/blackfire-agent.sh new file mode 100644 index 000000000..95daa01ae --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/bin/service.d/blackfire-agent.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_BLACKFIRE_AGENT_OPTS" ]]; then SERVICE_BLACKFIRE_AGENT_OPTS=""; fi + +source /opt/docker/bin/config.sh + +BLACKFIRE_ARGS="" + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +# blackfire.server_id +if [[ -n "${BLACKFIRE_SERVER_ID+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-id=\"${BLACKFIRE_SERVER_ID}\"" +fi + +# blackfire.server_token +if [[ -n "${BLACKFIRE_SERVER_TOKEN+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-token=\"${BLACKFIRE_SERVER_TOKEN}\"" +fi + +# create directory for unix socket +mkdir -p /var/run/blackfire + +eval exec blackfire-agent $BLACKFIRE_ARGS $SERVICE_BLACKFIRE_AGENT_OPTS diff --git a/docker/php-apache-dev/8.5/conf/etc/httpd/conf.d/02-dev.conf b/docker/php-apache-dev/8.5/conf/etc/httpd/conf.d/02-dev.conf new file mode 100644 index 000000000..75e5f4396 --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/etc/httpd/conf.d/02-dev.conf @@ -0,0 +1,8 @@ +# EnableSendfile: Control whether the sendfile kernel support is +# used to deliver files (assuming that the OS supports it). +# The default is on; turn this off if you serve from NFS-mounted +# filesystems. Please see +# http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile +EnableSendfile off + +LogLevel info diff --git a/docker/php-apache-dev/8.5/conf/etc/httpd/vhost.common.d/.gitkeep b/docker/php-apache-dev/8.5/conf/etc/httpd/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache-dev/8.5/conf/etc/httpd/vhost.common.d/02-dev.conf b/docker/php-apache-dev/8.5/conf/etc/httpd/vhost.common.d/02-dev.conf new file mode 100644 index 000000000..54918ec2b --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/etc/httpd/vhost.common.d/02-dev.conf @@ -0,0 +1,10 @@ +"> + FileETag None + + + Header unset ETag + Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" + Header set Pragma "no-cache" + Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" + + diff --git a/docker/php-apache-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf b/docker/php-apache-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf new file mode 100644 index 000000000..897831ddb --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf @@ -0,0 +1,14 @@ +[group:blackfire-agent] +programs=blackfire-agentd +priority=25 + +[program:blackfire-agentd] +command = /opt/docker/bin/service.d/blackfire-agent.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/10-php.sh b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..852567f85 --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) + +# Configure php-fpm +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "%R - %u %t \"%m %r%Q%q\" %s %f cpu:%C%% mem:%{megabytes}M reqTime:%d"' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf + +fi diff --git a/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh new file mode 100644 index 000000000..f4ea7f72e --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable blackfire by default +rm -f \ + /etc/php5/cli/conf.d/zz-blackfire.ini \ + /etc/php5/fpm/conf.d/zz-blackfire.ini diff --git a/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh new file mode 100644 index 000000000..079e59fdf --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Configure opcache for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*opcache.memory_consumption[\s]*=' -r 'opcache.memory_consumption = 256' \ + -s '^[\s;]*opcache.validate_timestamps[\s]*=' -r 'opcache.validate_timestamps = 1' \ + -s '^[\s;]*opcache.revalidate_freq[\s]*=' -r 'opcache.revalidate_freq = 0' \ + -s '^[\s;]*opcache.interned_strings_buffer[\s]*=' -r 'opcache.interned_strings_buffer = 16' \ + -s '^[\s;]*opcache.max_accelerated_files[\s]*=' -r 'opcache.max_accelerated_files = 7963' \ + -s '^[\s;]*opcache.fast_shutdown[\s]*=' -r 'opcache.fast_shutdown = 1' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh new file mode 100644 index 000000000..e76310003 --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Alpine) + # Fix php xdebug module [Alpine family] + + if [[ -f "/etc/php5/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php5/conf.d/xdebug.ini + fi + + if [[ -f "/etc/php7/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php7/conf.d/xdebug.ini + fi + + ;; +esac + +# Configure xdebug for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*xdebug.mode[\s]*=' -r 'xdebug.mode = debug' \ + -s '^[\s;]*xdebug.discover_client_host[\s]*=' -r 'xdebug.discover_client_host = 1' \ + -s '^[\s;]*xdebug.idekey[\s]*=' -r 'xdebug.idekey = docker' \ + -s '^[\s;]*xdebug.cli_color[\s]*=' -r 'xdebug.cli_color = 1' \ + -s '^[\s;]*xdebug.max_nesting_level[\s]*=' -r 'xdebug.max_nesting_level = 1000' \ + -s '^[\s;]*xdebug.start_with_request[\s]*=' -r 'xdebug.start_with_request = trigger' \ + -s '^[\s;]*xdebug.output_dir[\s]*=' -r 'xdebug.output_dir = /tmp/debug' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-apache-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh b/docker/php-apache-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh new file mode 100644 index 000000000..7b392587c --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +################################################# +# Debugger switch +################################################# + +PHP_CONF_PATHS=" +/etc/php5/conf.d +/etc/php7/conf.d +/etc/php.d +/etc/php5/mods-available +/etc/php5/cli/conf.d +/etc/php5/cli/conf.d +/etc/php5/fpm/conf.d +/etc/php5/fpm/conf.d +/etc/php/7.0/mods-available +/etc/php/7.1/mods-available +/etc/php/7.2/mods-available +/etc/php/7.3/mods-available +/etc/php/7.4/mods-available +/etc/php/7.0/cli/conf.d +/etc/php/7.1/cli/conf.d +/etc/php/7.2/cli/conf.d +/etc/php/7.3/cli/conf.d +/etc/php/7.4/cli/conf.d +/etc/php/7.0/fpm/conf.d +/etc/php/7.1/fpm/conf.d +/etc/php/7.2/fpm/conf.d +/etc/php/7.3/fpm/conf.d +/etc/php/7.4/fpm/conf.d +/usr/local/etc/php/conf.d/" + +function phpModuleRemove() { + if [ "$#" -ne 1 ]; then + echo "You must specify the name of the PHP module which you want to disable" + exit 1 + fi + + echo " - Removing PHP module ${1}" + for CONF_PATH in $PHP_CONF_PATHS; do + rm -f "${CONF_PATH}"/*"${1}".ini + done +} + + +if [[ -n "${PHP_DEBUGGER+x}" ]]; then + case "$PHP_DEBUGGER" in + xdebug) + echo "PHP-Debugger: Xdebug enabled" + phpModuleRemove "blackfire" + ;; + + blackfire) + echo "PHP-Debugger: Blackfire enabled" + phpModuleRemove "xdebug" + docker-service-enable blackfire-agent + ;; + + none) + echo "PHP-Debugger: none" + phpModuleRemove "blackfire" + phpModuleRemove "xdebug" + ;; + esac + +else + + echo "PHP-Debugger: not specified - default is xdebug" + phpModuleRemove "blackfire" + +fi + +################################################# +# PHP debugger environment variables +################################################# + +function phpEnvironmentVariable() { + PHP_INI_KEY="$1" + PHP_ENV_NAME="$2" + + if [[ -n "${!PHP_ENV_NAME+x}" ]]; then + PHP_ENV_VALUE="${!PHP_ENV_NAME}" + echo "${PHP_INI_KEY}=\"${PHP_ENV_VALUE}\"" >> /opt/docker/etc/php/php.ini + fi +} + +################### +# XDEBUG +################### + +# xdebug3 remote debugger +phpEnvironmentVariable "xdebug.discover_client_host" "XDEBUG_DISCOVER_CLIENT_HOST" +phpEnvironmentVariable "xdebug.mode" "XDEBUG_MODE" +phpEnvironmentVariable "xdebug.start_with_request" "XDEBUG_START_WITH_REQUEST" +phpEnvironmentVariable "xdebug.client_host" "XDEBUG_CLIENT_HOST" +phpEnvironmentVariable "xdebug.client_port" "XDEBUG_CLIENT_PORT" + +# xdebug3 profiler +phpEnvironmentVariable "xdebug.trigger_value" "XDEBUG_TRIGGER_VALUE" +phpEnvironmentVariable "xdebug.output_dir" "XDEBUG_OUTPUT_DIR" + +################### +# BLACKFIRE +################### +phpEnvironmentVariable "blackfire.server_id" "BLACKFIRE_SERVER_ID" +phpEnvironmentVariable "blackfire.server_token" "BLACKFIRE_SERVER_TOKEN" diff --git a/docker/php-apache-dev/8.5/conf/provision/entrypoint.d/20-apache-dev.sh b/docker/php-apache-dev/8.5/conf/provision/entrypoint.d/20-apache-dev.sh new file mode 100644 index 000000000..a9d2c6e92 --- /dev/null +++ b/docker/php-apache-dev/8.5/conf/provision/entrypoint.d/20-apache-dev.sh @@ -0,0 +1,5 @@ +go-replace \ + -s "" -r "$WEB_NO_CACHE_PATTERN" \ + --path=/opt/docker/etc/httpd/ \ + --path-pattern='*.conf' \ + --ignore-empty diff --git a/docker/php-apache/8.5-alpine/Dockerfile b/docker/php-apache/8.5-alpine/Dockerfile new file mode 100644 index 000000000..de6534a9e --- /dev/null +++ b/docker/php-apache/8.5-alpine/Dockerfile @@ -0,0 +1,33 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-apache:8.5-alpine +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php:8.5-alpine + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install apache + && apk-install \ + apache2 \ + apache2-ctl \ + apache2-utils \ + apache2-proxy \ + apache2-ssl \ + # Fix issue with module loading order of lbmethod_* (see https://serverfault.com/questions/922573/apache2-fails-to-start-after-recent-update-to-2-4-34-no-clue-why) + && sed -i '2,5{H;d}; ${p;x;s/^\n//}' /etc/apache2/conf.d/proxy.conf \ + && sed -ri ' \ + s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; \ + s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g; \ + ' /etc/apache2/httpd.conf \ + && docker-run-bootstrap + +EXPOSE 80 443 diff --git a/docker/php-apache/8.5-alpine/Dockerfile.jinja2 b/docker/php-apache/8.5-alpine/Dockerfile.jinja2 new file mode 100644 index 000000000..ee9f6d967 --- /dev/null +++ b/docker/php-apache/8.5-alpine/Dockerfile.jinja2 @@ -0,0 +1,12 @@ +{{ docker.from("php", "8.5-alpine") }} + +{{ environment.web() }} +{{ environment.webPhp() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ apache.alpine() }} \ + {{ provision.runBootstrap() }} + +{{ docker.expose('80 443') }} diff --git a/docker/php-apache/8.5-alpine/conf/bin/service.d/httpd.d/10-init.sh b/docker/php-apache/8.5-alpine/conf/bin/service.d/httpd.d/10-init.sh new file mode 100644 index 000000000..4ef318a1e --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/bin/service.d/httpd.d/10-init.sh @@ -0,0 +1,6 @@ +if [[ ! -e "$WEB_DOCUMENT_ROOT" ]]; then + echo "" + echo "[WARNING] WEB_DOCUMENT_ROOT does not exists with path \"$WEB_DOCUMENT_ROOT\"!" + echo "" +fi + diff --git a/docker/php-apache/8.5-alpine/conf/bin/service.d/httpd.sh b/docker/php-apache/8.5-alpine/conf/bin/service.d/httpd.sh new file mode 100644 index 000000000..f88544c62 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/bin/service.d/httpd.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_APACHE_OPTS" ]]; then SERVICE_APACHE_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/httpd.d/" + +# Apache gets grumpy about PID files pre-existing +rm -f /var/run/httpd/httpd.pid + +exec /usr/sbin/apachectl -DFOREGROUND $SERVICE_APACHE_OPTS diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/.gitkeep b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-error-document.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-error-document.conf new file mode 100644 index 000000000..ebabf87e4 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-error-document.conf @@ -0,0 +1,15 @@ +####################################### +# Faster error documents +####################################### + + ErrorDocument 400 "400 Bad Request" + ErrorDocument 401 "401 Unauthorized" + ErrorDocument 403 "403 Forbidden" + ErrorDocument 404 "404 Not Found" + ErrorDocument 405 "405 Method Not Allowed" + + ErrorDocument 500 "500 Internal Server Error" + ErrorDocument 501 "501 Not Implemented" + ErrorDocument 502 "502 Bad Gateway" + ErrorDocument 503 "503 Service Unavailable" + diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-log.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-log.conf new file mode 100644 index 000000000..950e45105 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-log.conf @@ -0,0 +1,4 @@ +LogFormat "[httpd:access] %V:%p %{X-Forwarded-For}i - %h %l %u %t \"%r\" %>s bytesIn:%I bytesOut:%O reqTime:%T" dockerlog +LogLevel warn +CustomLog /docker.stdout dockerlog +ErrorLog /docker.stderr diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-php.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-php.conf new file mode 100644 index 000000000..cd62792e2 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-php.conf @@ -0,0 +1,37 @@ +############################# +# mod_proxy_fcgi +# official solution +# apache 2.4 and later +############################# + + + > + ProxySet connectiontimeout=5 timeout= + + + + SetHandler "proxy:fcgi://" + + + +############################# +# mod_fastcgi +# apaache 2.2 and 2.4 +############################# + + + AddHandler php-fcgi .php + Action php-fcgi /php-fcgi + Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi + FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -host "" -pass-header Authorization -idle-timeout + + + + Allow from all + + = 2.4> + Require all granted + + + + diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-server.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-server.conf new file mode 100644 index 000000000..80b971734 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/conf.d/10-server.conf @@ -0,0 +1,18 @@ +# Settings +TimeOut 1000 +ServerName "" + +DirectoryIndex +DocumentRoot "" + +"> + Options FollowSymLinks + AllowOverride All + + + Allow from all + + = 2.4> + Require all granted + + diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/global.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/global.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/global.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/main.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/main.conf new file mode 100644 index 000000000..fb04614ca --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/main.conf @@ -0,0 +1,10 @@ +Include /opt/docker/etc/httpd/global.conf +Include /opt/docker/etc/httpd/php.conf + + + Include /opt/docker/etc/httpd/conf.d/*.conf + += 2.4> + IncludeOptional /opt/docker/etc/httpd/conf.d/*.conf + +Include /opt/docker/etc/httpd/vhost.conf diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/php.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/php.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/php.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.crt b/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.crt new file mode 100644 index 000000000..6b0694907 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIE1DCCArwCCQDMMwGnSuK0tTANBgkqhkiG9w0BAQsFADAsMRswGQYDVQQKExJE +b2NrZXIgQm9pbGVycGxhdGUxDTALBgNVBAMUBCoudm0wHhcNMTUwNTA0MTcxNDQw +WhcNMjUwNTAxMTcxNDQwWjAsMRswGQYDVQQKExJEb2NrZXIgQm9pbGVycGxhdGUx +DTALBgNVBAMUBCoudm0wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK +3TIUiyDvXelWeY9VXMrpjuZtYpVSDsACLpjFUhMnsP5/iKT0VbeZyqHvmwZjAg4G +Y10d+yZDdgv/xeu0HPOFbtR6pCp10d1tdLHZto5Cyuxu7IQsAVjnD6Ko7XFwtNk7 +9o6JZfAFaGL4w5MokrVmCtspnsMZH7/7zU4f96cbF39zLopnpuXGD6t6DA8Qj3gy +0duaTjs42bYRN+rwLzVKAev99iQ4kPMJn4vV6/Xk6rtoSzC67GQyVZYaFypicD1S +NtsRmgEVvjCBDbrLOneUiRwff6qxEsZi7Hxv7BKFj4iUWnII7K/nP7T6uBHQjHO+ +FpsGkU9lCMrCeVFBe8kKz/cbhd+yLUxXwAPr6gSOPmwn232Gy4tozvqZHpbUxsgx +7sT3ej9K66h1D7J+BjNFWYM1hbnC1r7H/xS7EBzBV8qRoQCVe08Juf5xsouXFakD +clLV4+L+1cxkpwsCQDly5g3tm/TBqA2O+ZJ+YHQDHKkzMyhLs6i0X/M5qvJBiLg1 +GLTCS20rpQ5gXTEGuINqHgwXQWkUO6bhgSYqdHGX3zbZ5+qWpI4eui3dHZ1Ll0VH +6Icpb7ORTQwhc6W8KBlybssYPSlGOEBGUjYGNheoz9FpoSkxCis+P8ZNKtrmpPoq +Su0eOOGFOFHG02eOgPVxSwrDeN9MVJo7BPysGMHJmQIDAQABMA0GCSqGSIb3DQEB +CwUAA4ICAQC63g6NHmQKbiy3G6iaDkpUSbr5Mq2YgU61XnvWVyREqDcy/BXCw9oY +SJ/KUvCpqPnACNOFqjadRAmPiA9nf2WduoCgwQGV/YRFGswSuVvh/3X2TX5NWvbS +t8MQDttQg1dxpiMUjlu3rqhfohBdWJvp2lVSdpDb/MOlXBc/+p7HfOHwhqB7wwPN +NNbSKUbZqZxmD8cOf1X0hASr1yfFPj+2vST3ESaON8S0T2p63YX/sD5jvOUiEuyw +I5WcvLmiRZA07SH8nWyckLY3qWL+OlhSZrlAnolWS00b+7h5LNuRYEjKzwVgntoA +aCopyQih6wIk0+AfJO4sfhJBmQhnIrAaP/zwBH5g9zVizLf5H7U+hNXrMwgw55Sq +vjMdkZHvPKUXTvVit/rYE9H+PY3brkRWzOl4V/i/ZLJJm5805H/NyTbz9kPMJw2Q +nn+KOpfXXySD39f8iuRgSKXsYNul38hxWgcZZ6g+sOOp2n/VUmf0eZUWNnJ8i7AP +4Qif7aDKMcibOwSwsB+DKZXDvZ5XSdnMphtuLS5rPSL81rVRmWC2DMfQ2eP8j0WN +VTroSk0xedQ7Qr+9TNooi9IyzX6n1a2S1UiciEZ3ZcDbXPl/P01m+IYZyPnLv0+9 +ZeioZYh1JLv3/OKsMrMLTfh2ZCj3aXwmc2Owi/wU2LS5QUOMcHH7CQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.csr b/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.csr new file mode 100644 index 000000000..8a9909f77 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.csr @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEcTCCAlkCAQAwLDEbMBkGA1UEChMSRG9ja2VyIEJvaWxlcnBsYXRlMQ0wCwYD +VQQDFAQqLnZtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyt0yFIsg +713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik9FW3mcqh75sGYwIOBmNdHfsm +Q3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyELAFY5w+iqO1xcLTZO/aOiWXw +BWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6KZ6blxg+regwPEI94MtHbmk47 +ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEswuuxkMlWWGhcqYnA9UjbbEZoB +Fb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpyCOyv5z+0+rgR0IxzvhabBpFP +ZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9hsuLaM76mR6W1MbIMe7E93o/ +SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEAlXtPCbn+cbKLlxWpA3JS1ePi +/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMoS7OotF/zOaryQYi4NRi0wktt +K6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efqlqSOHrot3R2dS5dFR+iHKW+z +kU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEpMQorPj/GTSra5qT6KkrtHjjh +hThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEAAaAAMA0GCSqGSIb3DQEBCwUA +A4ICAQBsEBgC2YepuZq/8UqvKMZKVy/etDKXj7BB+QPb+leNiKD7p4LDxHJsZSH8 +Ku9uMPeLfiQDn5jA41k5SlGttzvObd65RdEbO3yHpqsg05EGSDDLfaE1k2Al/qmX +/o8roPZF7+2kZthgMAgkcokS54LYqEYTGqOf3J9Ss0yRIZwhaOVebfFIbIOdpw0B +JNMIJPHTMdZrcuRVI+wR1uPLIlEJzBvxTGbTrvPU25WJFtu+EajKqXO0SHdy0yx8 +uH4ykRBJRc36+oYo7nZ5D56dh7pZn3+9J64FKAOV0Q3KqMFieGy053ezuhJd70eZ +UozTgfjs3WpMzoYmKETSyl3XZSdInRe+sUlKPruTsKyg69oYxjPlrGfAmmGcCFca +TnZinT18dI92zK7OtOVkmYeYKC1lwuhftVrNMXzZuHOGpS9NNYtc4nDqDMIEOfV3 +6rCdu03WjEgJ+Z67tJs16xOx9du4/EHxS2Ijn9DPfVJvYy0TgzDi1BUpjWx0KTLx +C4OQbEZ/QTWmHVbSch/hcZhzbf7SNh5RpnW4EtmcpDFjIKMfxJmoKeiTf7qnilx0 +7uRvsZFKoDKRDOFiPfgMg5AOtLHziYsd9m0tJjC2GHvFuPjzOtzhnUUjmmvht170 +2aqKakjST4amg7jzLcs871HX0/WjOtt29NpOz140blkKf1bisg== +-----END CERTIFICATE REQUEST----- \ No newline at end of file diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.key b/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.key new file mode 100644 index 000000000..c9eec145f --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/ssl/server.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKAIBAAKCAgEAyt0yFIsg713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik +9FW3mcqh75sGYwIOBmNdHfsmQ3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyE +LAFY5w+iqO1xcLTZO/aOiWXwBWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6K +Z6blxg+regwPEI94MtHbmk47ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEsw +uuxkMlWWGhcqYnA9UjbbEZoBFb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpy +COyv5z+0+rgR0IxzvhabBpFPZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9 +hsuLaM76mR6W1MbIMe7E93o/SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEA +lXtPCbn+cbKLlxWpA3JS1ePi/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMo +S7OotF/zOaryQYi4NRi0wkttK6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efq +lqSOHrot3R2dS5dFR+iHKW+zkU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEp +MQorPj/GTSra5qT6KkrtHjjhhThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEA +AQKCAgAbZPdoUsllyZbC+LNkYZ19ILD5QIDNjfRb1xMGQmkXyQz1B+zOmeyrNfPc +OWEJabOfJTfj3pByN7SzG3US4333HNpQnW6mbmqqZ0HFFqPrXR/Ecuf+UUhCG5hp +m3bgM2vKbyccYsmg0VHcKfzrU7RvTTP/UNMjx2fThwvvwS+ttuSdF0HVcXJB5sfP +OWWnZNhkdHZlRf81VCED/jsZqCZYEh5eMyj9AoXvXL4zayPPf+tC0DSKaXW2Xlxg +tZQhqup8+a9nlxZia0Z9hu8clo6jXkiP8FuKgfCMV0cOjiCKLLHS5svTbLLsVWwJ +F2ZAdVcD6mWQ43qHOEK5NEzGvQKO14CaOLnVT2yAkMcyNohsEgoDP9oCBGDJQbBH +NmtZfpVjjtuTr9P9TEkU1FcBRo0x6Il/DkzamGbOeFAmgnaGElhJ5c/CAG7whaIf +mUfFOBGPH/wESY3gBOACDofeSh27RrlvbLaPiCGKivDUTBmhBsIuso6XqOKbvtfV +/HhhndpdRVfIj4DdE7gIrLIGN977JMVAXFCNz7KrvAWwcOXrCHCoWpklJ9repq8l +26ICY8K7VXktzDHQUmhd88ZWR+9ASURsJghUgZUOcMrEGyvci6Y8hpLhHiNVPHuQ ++ps7tpPsXSntBUqWBzhRZh74+nJlOOV6oYykl30JT2JzB6lwiQKCAQEA9ecn8N2z +20tR2UEiTv/MjVSepQtAAajegvcd1iasvvQKXnh3XLmoZHzH2tTa0lp5RIZpUQPl +lOTwko0lYTBnYblt65AJQ3FTgisNobIpoqE8BFXLm6wggz7CbabjmPGDe173lPGR +sI0YSKYvzrdn4zw8Fh6WULJyZHLi58zJYL3r0WBDiOoxpGaGA1GlmkuIWjhKHaX2 +OvF1vOuQDJ2eDyTc5TYFC0NKG76Mvanov5L/yrhNM/umbmp0SPspzHGZobAKUr20 +OazFT8S+2TA1OTxWNbiPbSimFoaZbEdqsNACGfVJWO8Sh8iqlt5RmEcSiSvGBj6L +QKprRO9Fsp2GawKCAQEA0zGhRsnux4JTNsdUSYsEJtITMj6eE+nl7CoZ9DAOwC5X +6/aSpUE4TT+pWNrt9iluXiGL0j89UJ7r/L1OcsiyzGb8ig9NU4zr1NIGTZ0DstHi +HPYINjeiBJEFIy17kOQn+9/I5c4hBUwz6ihwNoEomymVB/EsLJKAML0AudJGKg+Z +/f/qrS40eab5SAiaKgsh0MZnj+vIxyGBydt6r2HGmjfNITVbXIu6IpO+6NXDwM/e +7v10AAZ3j9+gb1RedLg2ghuIuYU90hmMhtVWsh9nVmaOkMW9/WFgOPYvt/mHH/hR +d4pePZ9kACGmqo/b9sHvHw1YEubtCt1VUiNuFxnJCwKCAQBWnxz0vkRTJY8phsY9 +KeK2jm5sGTBs5T2syLwb6ffENFdKvAjgAw6Mh2And/+1ReWd+/MxdLv03UjZdxsJ +x3FDfXx5FH4O4ebW3a+pnAcKoN1xcX+N0O6LDRqUYcue3sTAOs3gC9CUbr91KAWD +Phw8ccWAzTmKJ7IgLFA982ekyoI9eTmRC159WRgwJxy844qerWF+XC4GyXP+HsTZ +jNRW5Vdi7sqMEyIR7+fIEAhLI88zbATWIPmZv6pC4ybwO7wwtsCMMQNBpdjDprzL +6S12ggikV+U+QKlxGe0FtYqhykRTPJKf32eZqVheWOZJTA/9fgv9ux52oxGycM8O +gmsNAoIBAQC60m5uZnd5uYnPLWkcXYNgq/kbO1UvHHut/FhVMKX7z4MrU0XKNfWO +MECoP5K9bU0aq+Y6KIMe7FapjvT0iSHRu1Cu+HZY8JI2A0xcIAeDijLRl7sP6wrB +q1+2DKgANjRAlWfsEfoX658JBpitPngjOheBnRCMpVQMyUT5HE/BKWf5zwdUB0mY +S+K8nA90HcDeJIS8RcGolbVwUV0oBABhr/cf50lYhqozqCr7YQ33ZGs7Uq3oz8+4 +UARmN2YPLl3Znm3GX12em8c6B0LX8vvA7Jw06Rf2Ksup1+3Ce1PTLiEy9A4FyRf3 +Hc2HmBbnJAtZlr5QikMqlzzAmmLqwH6dAoIBAC+ryaQGJFsijCSuaDfRp/uy9xnd +DjgMdTwjl5WLBmyudChVMANl8eqCbvVO41CN84yORk03oQ4cx0eKxAZaLaSzgkb3 +W0X2nFQe7VJSYMQswCQ+1WfJvEFrIdkEKIa//uQdhqNrgUKSNVhhSTMbNEkDTIWn +ssbv2H9hvUaFt/J/vP9zCKuU5oYvNU7Oi6ZXRYezRn9atlJYanLFoJnHUBRzGms5 +K0vhdCPDXQq87z5Yudoh0jLUQF9Nx0GTWeBceQ9n5hZeRUNQWxP4AJThQX9KSPTS +mbL3Kh4XNRmAUJ2N+Njh+3dg91s+JkKvC1wcspLsmLPQe+9AxBSH9y5JE/8= +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.conf new file mode 100644 index 000000000..384696b4e --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.conf @@ -0,0 +1,7 @@ +# compatibility for PHP and TYPO3 Docker Boilerplate + + Include /opt/docker/etc/httpd/vhost.common.d/*.conf + + = 2.4> + IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf + diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.d/.gitkeep b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.d/01-boilerplate.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.d/01-boilerplate.conf new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.common.d/01-boilerplate.conf @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.conf new file mode 100644 index 000000000..c04a94318 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.conf @@ -0,0 +1,36 @@ +####################################### +# Vhost +####################################### + + + ServerName docker.vm + ServerAlias + DocumentRoot "" + + UseCanonicalName Off + + + Include /opt/docker/etc/httpd/vhost.common.d/*.conf + + = 2.4> + IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf + + + + + + ServerName docker.vm + ServerAlias + DocumentRoot "" + + UseCanonicalName Off + + + Include /opt/docker/etc/httpd/vhost.common.d/*.conf + + = 2.4> + IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf + + + Include /opt/docker/etc/httpd/vhost.ssl.conf + diff --git a/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.ssl.conf b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.ssl.conf new file mode 100644 index 000000000..cf5fbc604 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/httpd/vhost.ssl.conf @@ -0,0 +1,26 @@ + ############ + # SSL + ############ + + SSLEngine on + SSLCertificateFile /opt/docker/etc/httpd/ssl/server.crt + SSLCertificateKeyFile /opt/docker/etc/httpd/ssl/server.key + + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + + BrowserMatch "MSIE [2-6]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + # This regexp is ok with 17-9! + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + + ## SSL Hardening + SSLProtocol All -SSLv2 -SSLv3 + SSLHonorCipherOrder on + SSLCipherSuite 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA' diff --git a/docker/php-apache/8.5-alpine/conf/etc/supervisor.d/apache.conf b/docker/php-apache/8.5-alpine/conf/etc/supervisor.d/apache.conf new file mode 100644 index 000000000..12a6f86f7 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/etc/supervisor.d/apache.conf @@ -0,0 +1,14 @@ +[group:apache] +programs=apached +priority=20 + +[program:apached] +command = /opt/docker/bin/service.d/httpd.sh +process_name=%(program_name)s +startsecs = 0 +autostart = true +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/.gitkeep b/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/10-apache.sh b/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/10-apache.sh new file mode 100644 index 000000000..e9feb08b4 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/10-apache.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) +IMAGE_DISTRIBUTION=$(docker-image-info dist) +IMAGE_DISTRIBUTION_VERSION=$(docker-image-info dist-version) +IMAGE_DISTRIBUTION_VERSION_MAIN=$(echo "$IMAGE_DISTRIBUTION_VERSION" | sed 's/^\([0-9]*\).*/\1/g') + +# Collect environment variables +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + APACHE_MAIN_PATH=/etc/apache2/ + APACHE_DOCKER_VHOST=/etc/apache2/sites-enabled/10-docker.conf + ;; + + RedHat) + APACHE_MAIN_PATH=/etc/httpd/ + APACHE_DOCKER_VHOST=/etc/httpd/conf.d/zzz-docker.conf + ;; + + Alpine) + APACHE_MAIN_PATH=/etc/apache2/ + APACHE_DOCKER_VHOST=/etc/apache2/conf.d/zzz-docker.conf + ;; +esac + +# Enable apache main config +ln -sf -- /opt/docker/etc/httpd/main.conf "$APACHE_DOCKER_VHOST" + +# Ensure /var/run/apache2 exists +mkdir -p -- "/var/run/apache2" + +if [[ "$IMAGE_FAMILY" == "Alpine" ]]; then + mkdir -p -- "/run/apache2" +fi + +# Maintain lock directory +if [[ "$IMAGE_FAMILY" == "Debian" ]]; then + mkdir -p -- "/var/lock/apache2" + chmod 0750 -- "/var/lock/apache2" + chown www-data:www-data -- "/var/lock/apache2" +fi + +APACHE_CONF_FILES=$(find "$APACHE_MAIN_PATH" -type f -iname '*.conf' -o -iname 'default*' -o -iname '*log') + +# Change log to Docker stdout +go-replace --regex --regex-backrefs \ + -s '^[\s]*(CustomLog|ErrorLog|TransferLog) ([^\s]+)(.*)' -r '$1 /docker.stdout $3' \ + -s '^[\s]*(ErrorLog) ([^\s]+)(.*)' -r '$1 /docker.stderr $3' \ + --path="$APACHE_MAIN_PATH" \ + --path-regex='(.*\.conf|default.*|.*log)$' + +# Switch MPM to event +if [[ "$IMAGE_FAMILY" == "RedHat" ]]; then + go-replace --mode=line --regex --regex-backrefs \ + -s '^[\s#]*(LoadModule mpm_prefork_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule mpm_event_module.*)' -r '$1' \ + -- /etc/httpd/conf.modules.d/00-mpm.conf +fi + +if [[ "$IMAGE_DISTRIBUTION" == "Ubuntu" ]] && [[ "$IMAGE_DISTRIBUTION_VERSION_MAIN" -ge 14 ]]; then + a2enmod mpm_event +fi + +if [[ "$IMAGE_DISTRIBUTION" == "Debian" ]] && [[ "$IMAGE_DISTRIBUTION_VERSION_MAIN" -ge 8 ]]; then + a2enmod mpm_event +fi + +if [[ "$IMAGE_FAMILY" == "Alpine" ]]; then + go-replace --mode=line --regex --regex-backrefs \ + -s '^[\s#]*(LoadModule mpm_prefork_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule mpm_event_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule deflate_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule rewrite_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule logio_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule slotmem_shm_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule actions_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule expires_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule ssl_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule socache_shmcb_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_ajp_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_connect_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_balancer_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_express_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_fcgi_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_fdpass_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_ftp_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_http_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_scgi_module.*)' -r '$1' \ + -- /etc/apache2/httpd.conf \ + /etc/apache2/conf.d/ssl.conf \ + /etc/apache2/conf.d/proxy.conf + + # Remove default vhost + sed -i -e '1h;2,$H;$!d;g' -e 's//#-> removed vhost/g' /etc/apache2/conf.d/ssl.conf +fi + +# Fix rights of ssl files +chown -R root:root /opt/docker/etc/httpd/ssl +find /opt/docker/etc/httpd/ssl -type d -exec chmod 750 {} \; +find /opt/docker/etc/httpd/ssl -type f -exec chmod 640 {} \; diff --git a/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/10-php.sh b/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..c8669ca25 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Restrict php-fpm to local connection +go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 127.0.0.1:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' + diff --git a/docker/php-apache/8.5-alpine/conf/provision/entrypoint.d/.gitkeep b/docker/php-apache/8.5-alpine/conf/provision/entrypoint.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5-alpine/conf/provision/entrypoint.d/20-apache.sh b/docker/php-apache/8.5-alpine/conf/provision/entrypoint.d/20-apache.sh new file mode 100644 index 000000000..42ef48932 --- /dev/null +++ b/docker/php-apache/8.5-alpine/conf/provision/entrypoint.d/20-apache.sh @@ -0,0 +1,16 @@ +# Replace markers +go-replace \ + -s "" -r "$WEB_DOCUMENT_INDEX" \ + -s "" -r "$WEB_DOCUMENT_ROOT" \ + -s "" -r "$WEB_ALIAS_DOMAIN" \ + -s "" -r "$HOSTNAME" \ + -s "" -r "$WEB_PHP_SOCKET" \ + -s "" -r "$WEB_PHP_TIMEOUT" \ + --path=/opt/docker/etc/httpd/ \ + --path-pattern='*.conf' \ + --ignore-empty + +if [[ -z "$WEB_PHP_SOCKET" ]]; then + ## WEB_PHP_SOCKET is not set, remove PHP files + rm -f -- /opt/docker/etc/httpd/conf.d/10-php.conf +fi diff --git a/docker/php-apache/8.5/Dockerfile b/docker/php-apache/8.5/Dockerfile new file mode 100644 index 000000000..c78820cad --- /dev/null +++ b/docker/php-apache/8.5/Dockerfile @@ -0,0 +1,30 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-apache:8.5 +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php:8.5 + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install apache + && apt-install \ + apache2 \ + && sed -ri ' \ + s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; \ + s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g; \ + ' /etc/apache2/apache2.conf \ + && rm -f /etc/apache2/sites-enabled/* \ + && a2enmod actions proxy proxy_fcgi ssl rewrite headers expires \ + && docker-run-bootstrap \ + && docker-image-cleanup + +EXPOSE 80 443 diff --git a/docker/php-apache/8.5/Dockerfile.jinja2 b/docker/php-apache/8.5/Dockerfile.jinja2 new file mode 100644 index 000000000..9863f453d --- /dev/null +++ b/docker/php-apache/8.5/Dockerfile.jinja2 @@ -0,0 +1,13 @@ +{{ docker.from("php", "8.5") }} + +{{ environment.web() }} +{{ environment.webPhp() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ apache.debian12() }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} + +{{ docker.expose('80 443') }} diff --git a/docker/php-apache/8.5/conf/bin/service.d/httpd.d/10-init.sh b/docker/php-apache/8.5/conf/bin/service.d/httpd.d/10-init.sh new file mode 100644 index 000000000..4ef318a1e --- /dev/null +++ b/docker/php-apache/8.5/conf/bin/service.d/httpd.d/10-init.sh @@ -0,0 +1,6 @@ +if [[ ! -e "$WEB_DOCUMENT_ROOT" ]]; then + echo "" + echo "[WARNING] WEB_DOCUMENT_ROOT does not exists with path \"$WEB_DOCUMENT_ROOT\"!" + echo "" +fi + diff --git a/docker/php-apache/8.5/conf/bin/service.d/httpd.sh b/docker/php-apache/8.5/conf/bin/service.d/httpd.sh new file mode 100644 index 000000000..1d871e7ea --- /dev/null +++ b/docker/php-apache/8.5/conf/bin/service.d/httpd.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_APACHE_OPTS" ]]; then SERVICE_APACHE_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/httpd.d/" + +# Apache gets grumpy about PID files pre-existing +rm -f /var/run/apache2/apache2*.pid + +source /etc/apache2/envvars +exec apache2 -DFOREGROUND -DAPACHE_LOCK_DIR $SERVICE_APACHE_OPTS diff --git a/docker/php-apache/8.5/conf/etc/httpd/conf.d/.gitkeep b/docker/php-apache/8.5/conf/etc/httpd/conf.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-error-document.conf b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-error-document.conf new file mode 100644 index 000000000..ebabf87e4 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-error-document.conf @@ -0,0 +1,15 @@ +####################################### +# Faster error documents +####################################### + + ErrorDocument 400 "400 Bad Request" + ErrorDocument 401 "401 Unauthorized" + ErrorDocument 403 "403 Forbidden" + ErrorDocument 404 "404 Not Found" + ErrorDocument 405 "405 Method Not Allowed" + + ErrorDocument 500 "500 Internal Server Error" + ErrorDocument 501 "501 Not Implemented" + ErrorDocument 502 "502 Bad Gateway" + ErrorDocument 503 "503 Service Unavailable" + diff --git a/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-log.conf b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-log.conf new file mode 100644 index 000000000..950e45105 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-log.conf @@ -0,0 +1,4 @@ +LogFormat "[httpd:access] %V:%p %{X-Forwarded-For}i - %h %l %u %t \"%r\" %>s bytesIn:%I bytesOut:%O reqTime:%T" dockerlog +LogLevel warn +CustomLog /docker.stdout dockerlog +ErrorLog /docker.stderr diff --git a/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-php.conf b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-php.conf new file mode 100644 index 000000000..cd62792e2 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-php.conf @@ -0,0 +1,37 @@ +############################# +# mod_proxy_fcgi +# official solution +# apache 2.4 and later +############################# + + + > + ProxySet connectiontimeout=5 timeout= + + + + SetHandler "proxy:fcgi://" + + + +############################# +# mod_fastcgi +# apaache 2.2 and 2.4 +############################# + + + AddHandler php-fcgi .php + Action php-fcgi /php-fcgi + Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi + FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -host "" -pass-header Authorization -idle-timeout + + + + Allow from all + + = 2.4> + Require all granted + + + + diff --git a/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-server.conf b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-server.conf new file mode 100644 index 000000000..80b971734 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/conf.d/10-server.conf @@ -0,0 +1,18 @@ +# Settings +TimeOut 1000 +ServerName "" + +DirectoryIndex +DocumentRoot "" + +"> + Options FollowSymLinks + AllowOverride All + + + Allow from all + + = 2.4> + Require all granted + + diff --git a/docker/php-apache/8.5/conf/etc/httpd/global.conf b/docker/php-apache/8.5/conf/etc/httpd/global.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/global.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-apache/8.5/conf/etc/httpd/main.conf b/docker/php-apache/8.5/conf/etc/httpd/main.conf new file mode 100644 index 000000000..fb04614ca --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/main.conf @@ -0,0 +1,10 @@ +Include /opt/docker/etc/httpd/global.conf +Include /opt/docker/etc/httpd/php.conf + + + Include /opt/docker/etc/httpd/conf.d/*.conf + += 2.4> + IncludeOptional /opt/docker/etc/httpd/conf.d/*.conf + +Include /opt/docker/etc/httpd/vhost.conf diff --git a/docker/php-apache/8.5/conf/etc/httpd/php.conf b/docker/php-apache/8.5/conf/etc/httpd/php.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/php.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-apache/8.5/conf/etc/httpd/ssl/server.crt b/docker/php-apache/8.5/conf/etc/httpd/ssl/server.crt new file mode 100644 index 000000000..6b0694907 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/ssl/server.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIE1DCCArwCCQDMMwGnSuK0tTANBgkqhkiG9w0BAQsFADAsMRswGQYDVQQKExJE +b2NrZXIgQm9pbGVycGxhdGUxDTALBgNVBAMUBCoudm0wHhcNMTUwNTA0MTcxNDQw +WhcNMjUwNTAxMTcxNDQwWjAsMRswGQYDVQQKExJEb2NrZXIgQm9pbGVycGxhdGUx +DTALBgNVBAMUBCoudm0wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK +3TIUiyDvXelWeY9VXMrpjuZtYpVSDsACLpjFUhMnsP5/iKT0VbeZyqHvmwZjAg4G +Y10d+yZDdgv/xeu0HPOFbtR6pCp10d1tdLHZto5Cyuxu7IQsAVjnD6Ko7XFwtNk7 +9o6JZfAFaGL4w5MokrVmCtspnsMZH7/7zU4f96cbF39zLopnpuXGD6t6DA8Qj3gy +0duaTjs42bYRN+rwLzVKAev99iQ4kPMJn4vV6/Xk6rtoSzC67GQyVZYaFypicD1S +NtsRmgEVvjCBDbrLOneUiRwff6qxEsZi7Hxv7BKFj4iUWnII7K/nP7T6uBHQjHO+ +FpsGkU9lCMrCeVFBe8kKz/cbhd+yLUxXwAPr6gSOPmwn232Gy4tozvqZHpbUxsgx +7sT3ej9K66h1D7J+BjNFWYM1hbnC1r7H/xS7EBzBV8qRoQCVe08Juf5xsouXFakD +clLV4+L+1cxkpwsCQDly5g3tm/TBqA2O+ZJ+YHQDHKkzMyhLs6i0X/M5qvJBiLg1 +GLTCS20rpQ5gXTEGuINqHgwXQWkUO6bhgSYqdHGX3zbZ5+qWpI4eui3dHZ1Ll0VH +6Icpb7ORTQwhc6W8KBlybssYPSlGOEBGUjYGNheoz9FpoSkxCis+P8ZNKtrmpPoq +Su0eOOGFOFHG02eOgPVxSwrDeN9MVJo7BPysGMHJmQIDAQABMA0GCSqGSIb3DQEB +CwUAA4ICAQC63g6NHmQKbiy3G6iaDkpUSbr5Mq2YgU61XnvWVyREqDcy/BXCw9oY +SJ/KUvCpqPnACNOFqjadRAmPiA9nf2WduoCgwQGV/YRFGswSuVvh/3X2TX5NWvbS +t8MQDttQg1dxpiMUjlu3rqhfohBdWJvp2lVSdpDb/MOlXBc/+p7HfOHwhqB7wwPN +NNbSKUbZqZxmD8cOf1X0hASr1yfFPj+2vST3ESaON8S0T2p63YX/sD5jvOUiEuyw +I5WcvLmiRZA07SH8nWyckLY3qWL+OlhSZrlAnolWS00b+7h5LNuRYEjKzwVgntoA +aCopyQih6wIk0+AfJO4sfhJBmQhnIrAaP/zwBH5g9zVizLf5H7U+hNXrMwgw55Sq +vjMdkZHvPKUXTvVit/rYE9H+PY3brkRWzOl4V/i/ZLJJm5805H/NyTbz9kPMJw2Q +nn+KOpfXXySD39f8iuRgSKXsYNul38hxWgcZZ6g+sOOp2n/VUmf0eZUWNnJ8i7AP +4Qif7aDKMcibOwSwsB+DKZXDvZ5XSdnMphtuLS5rPSL81rVRmWC2DMfQ2eP8j0WN +VTroSk0xedQ7Qr+9TNooi9IyzX6n1a2S1UiciEZ3ZcDbXPl/P01m+IYZyPnLv0+9 +ZeioZYh1JLv3/OKsMrMLTfh2ZCj3aXwmc2Owi/wU2LS5QUOMcHH7CQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/docker/php-apache/8.5/conf/etc/httpd/ssl/server.csr b/docker/php-apache/8.5/conf/etc/httpd/ssl/server.csr new file mode 100644 index 000000000..8a9909f77 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/ssl/server.csr @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEcTCCAlkCAQAwLDEbMBkGA1UEChMSRG9ja2VyIEJvaWxlcnBsYXRlMQ0wCwYD +VQQDFAQqLnZtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyt0yFIsg +713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik9FW3mcqh75sGYwIOBmNdHfsm +Q3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyELAFY5w+iqO1xcLTZO/aOiWXw +BWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6KZ6blxg+regwPEI94MtHbmk47 +ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEswuuxkMlWWGhcqYnA9UjbbEZoB +Fb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpyCOyv5z+0+rgR0IxzvhabBpFP +ZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9hsuLaM76mR6W1MbIMe7E93o/ +SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEAlXtPCbn+cbKLlxWpA3JS1ePi +/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMoS7OotF/zOaryQYi4NRi0wktt +K6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efqlqSOHrot3R2dS5dFR+iHKW+z +kU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEpMQorPj/GTSra5qT6KkrtHjjh +hThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEAAaAAMA0GCSqGSIb3DQEBCwUA +A4ICAQBsEBgC2YepuZq/8UqvKMZKVy/etDKXj7BB+QPb+leNiKD7p4LDxHJsZSH8 +Ku9uMPeLfiQDn5jA41k5SlGttzvObd65RdEbO3yHpqsg05EGSDDLfaE1k2Al/qmX +/o8roPZF7+2kZthgMAgkcokS54LYqEYTGqOf3J9Ss0yRIZwhaOVebfFIbIOdpw0B +JNMIJPHTMdZrcuRVI+wR1uPLIlEJzBvxTGbTrvPU25WJFtu+EajKqXO0SHdy0yx8 +uH4ykRBJRc36+oYo7nZ5D56dh7pZn3+9J64FKAOV0Q3KqMFieGy053ezuhJd70eZ +UozTgfjs3WpMzoYmKETSyl3XZSdInRe+sUlKPruTsKyg69oYxjPlrGfAmmGcCFca +TnZinT18dI92zK7OtOVkmYeYKC1lwuhftVrNMXzZuHOGpS9NNYtc4nDqDMIEOfV3 +6rCdu03WjEgJ+Z67tJs16xOx9du4/EHxS2Ijn9DPfVJvYy0TgzDi1BUpjWx0KTLx +C4OQbEZ/QTWmHVbSch/hcZhzbf7SNh5RpnW4EtmcpDFjIKMfxJmoKeiTf7qnilx0 +7uRvsZFKoDKRDOFiPfgMg5AOtLHziYsd9m0tJjC2GHvFuPjzOtzhnUUjmmvht170 +2aqKakjST4amg7jzLcs871HX0/WjOtt29NpOz140blkKf1bisg== +-----END CERTIFICATE REQUEST----- \ No newline at end of file diff --git a/docker/php-apache/8.5/conf/etc/httpd/ssl/server.key b/docker/php-apache/8.5/conf/etc/httpd/ssl/server.key new file mode 100644 index 000000000..c9eec145f --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/ssl/server.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKAIBAAKCAgEAyt0yFIsg713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik +9FW3mcqh75sGYwIOBmNdHfsmQ3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyE +LAFY5w+iqO1xcLTZO/aOiWXwBWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6K +Z6blxg+regwPEI94MtHbmk47ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEsw +uuxkMlWWGhcqYnA9UjbbEZoBFb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpy +COyv5z+0+rgR0IxzvhabBpFPZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9 +hsuLaM76mR6W1MbIMe7E93o/SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEA +lXtPCbn+cbKLlxWpA3JS1ePi/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMo +S7OotF/zOaryQYi4NRi0wkttK6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efq +lqSOHrot3R2dS5dFR+iHKW+zkU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEp +MQorPj/GTSra5qT6KkrtHjjhhThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEA +AQKCAgAbZPdoUsllyZbC+LNkYZ19ILD5QIDNjfRb1xMGQmkXyQz1B+zOmeyrNfPc +OWEJabOfJTfj3pByN7SzG3US4333HNpQnW6mbmqqZ0HFFqPrXR/Ecuf+UUhCG5hp +m3bgM2vKbyccYsmg0VHcKfzrU7RvTTP/UNMjx2fThwvvwS+ttuSdF0HVcXJB5sfP +OWWnZNhkdHZlRf81VCED/jsZqCZYEh5eMyj9AoXvXL4zayPPf+tC0DSKaXW2Xlxg +tZQhqup8+a9nlxZia0Z9hu8clo6jXkiP8FuKgfCMV0cOjiCKLLHS5svTbLLsVWwJ +F2ZAdVcD6mWQ43qHOEK5NEzGvQKO14CaOLnVT2yAkMcyNohsEgoDP9oCBGDJQbBH +NmtZfpVjjtuTr9P9TEkU1FcBRo0x6Il/DkzamGbOeFAmgnaGElhJ5c/CAG7whaIf +mUfFOBGPH/wESY3gBOACDofeSh27RrlvbLaPiCGKivDUTBmhBsIuso6XqOKbvtfV +/HhhndpdRVfIj4DdE7gIrLIGN977JMVAXFCNz7KrvAWwcOXrCHCoWpklJ9repq8l +26ICY8K7VXktzDHQUmhd88ZWR+9ASURsJghUgZUOcMrEGyvci6Y8hpLhHiNVPHuQ ++ps7tpPsXSntBUqWBzhRZh74+nJlOOV6oYykl30JT2JzB6lwiQKCAQEA9ecn8N2z +20tR2UEiTv/MjVSepQtAAajegvcd1iasvvQKXnh3XLmoZHzH2tTa0lp5RIZpUQPl +lOTwko0lYTBnYblt65AJQ3FTgisNobIpoqE8BFXLm6wggz7CbabjmPGDe173lPGR +sI0YSKYvzrdn4zw8Fh6WULJyZHLi58zJYL3r0WBDiOoxpGaGA1GlmkuIWjhKHaX2 +OvF1vOuQDJ2eDyTc5TYFC0NKG76Mvanov5L/yrhNM/umbmp0SPspzHGZobAKUr20 +OazFT8S+2TA1OTxWNbiPbSimFoaZbEdqsNACGfVJWO8Sh8iqlt5RmEcSiSvGBj6L +QKprRO9Fsp2GawKCAQEA0zGhRsnux4JTNsdUSYsEJtITMj6eE+nl7CoZ9DAOwC5X +6/aSpUE4TT+pWNrt9iluXiGL0j89UJ7r/L1OcsiyzGb8ig9NU4zr1NIGTZ0DstHi +HPYINjeiBJEFIy17kOQn+9/I5c4hBUwz6ihwNoEomymVB/EsLJKAML0AudJGKg+Z +/f/qrS40eab5SAiaKgsh0MZnj+vIxyGBydt6r2HGmjfNITVbXIu6IpO+6NXDwM/e +7v10AAZ3j9+gb1RedLg2ghuIuYU90hmMhtVWsh9nVmaOkMW9/WFgOPYvt/mHH/hR +d4pePZ9kACGmqo/b9sHvHw1YEubtCt1VUiNuFxnJCwKCAQBWnxz0vkRTJY8phsY9 +KeK2jm5sGTBs5T2syLwb6ffENFdKvAjgAw6Mh2And/+1ReWd+/MxdLv03UjZdxsJ +x3FDfXx5FH4O4ebW3a+pnAcKoN1xcX+N0O6LDRqUYcue3sTAOs3gC9CUbr91KAWD +Phw8ccWAzTmKJ7IgLFA982ekyoI9eTmRC159WRgwJxy844qerWF+XC4GyXP+HsTZ +jNRW5Vdi7sqMEyIR7+fIEAhLI88zbATWIPmZv6pC4ybwO7wwtsCMMQNBpdjDprzL +6S12ggikV+U+QKlxGe0FtYqhykRTPJKf32eZqVheWOZJTA/9fgv9ux52oxGycM8O +gmsNAoIBAQC60m5uZnd5uYnPLWkcXYNgq/kbO1UvHHut/FhVMKX7z4MrU0XKNfWO +MECoP5K9bU0aq+Y6KIMe7FapjvT0iSHRu1Cu+HZY8JI2A0xcIAeDijLRl7sP6wrB +q1+2DKgANjRAlWfsEfoX658JBpitPngjOheBnRCMpVQMyUT5HE/BKWf5zwdUB0mY +S+K8nA90HcDeJIS8RcGolbVwUV0oBABhr/cf50lYhqozqCr7YQ33ZGs7Uq3oz8+4 +UARmN2YPLl3Znm3GX12em8c6B0LX8vvA7Jw06Rf2Ksup1+3Ce1PTLiEy9A4FyRf3 +Hc2HmBbnJAtZlr5QikMqlzzAmmLqwH6dAoIBAC+ryaQGJFsijCSuaDfRp/uy9xnd +DjgMdTwjl5WLBmyudChVMANl8eqCbvVO41CN84yORk03oQ4cx0eKxAZaLaSzgkb3 +W0X2nFQe7VJSYMQswCQ+1WfJvEFrIdkEKIa//uQdhqNrgUKSNVhhSTMbNEkDTIWn +ssbv2H9hvUaFt/J/vP9zCKuU5oYvNU7Oi6ZXRYezRn9atlJYanLFoJnHUBRzGms5 +K0vhdCPDXQq87z5Yudoh0jLUQF9Nx0GTWeBceQ9n5hZeRUNQWxP4AJThQX9KSPTS +mbL3Kh4XNRmAUJ2N+Njh+3dg91s+JkKvC1wcspLsmLPQe+9AxBSH9y5JE/8= +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/docker/php-apache/8.5/conf/etc/httpd/vhost.common.conf b/docker/php-apache/8.5/conf/etc/httpd/vhost.common.conf new file mode 100644 index 000000000..384696b4e --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/vhost.common.conf @@ -0,0 +1,7 @@ +# compatibility for PHP and TYPO3 Docker Boilerplate + + Include /opt/docker/etc/httpd/vhost.common.d/*.conf + + = 2.4> + IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf + diff --git a/docker/php-apache/8.5/conf/etc/httpd/vhost.common.d/.gitkeep b/docker/php-apache/8.5/conf/etc/httpd/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5/conf/etc/httpd/vhost.common.d/01-boilerplate.conf b/docker/php-apache/8.5/conf/etc/httpd/vhost.common.d/01-boilerplate.conf new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/vhost.common.d/01-boilerplate.conf @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-apache/8.5/conf/etc/httpd/vhost.conf b/docker/php-apache/8.5/conf/etc/httpd/vhost.conf new file mode 100644 index 000000000..c04a94318 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/vhost.conf @@ -0,0 +1,36 @@ +####################################### +# Vhost +####################################### + + + ServerName docker.vm + ServerAlias + DocumentRoot "" + + UseCanonicalName Off + + + Include /opt/docker/etc/httpd/vhost.common.d/*.conf + + = 2.4> + IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf + + + + + + ServerName docker.vm + ServerAlias + DocumentRoot "" + + UseCanonicalName Off + + + Include /opt/docker/etc/httpd/vhost.common.d/*.conf + + = 2.4> + IncludeOptional /opt/docker/etc/httpd/vhost.common.d/*.conf + + + Include /opt/docker/etc/httpd/vhost.ssl.conf + diff --git a/docker/php-apache/8.5/conf/etc/httpd/vhost.ssl.conf b/docker/php-apache/8.5/conf/etc/httpd/vhost.ssl.conf new file mode 100644 index 000000000..cf5fbc604 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/httpd/vhost.ssl.conf @@ -0,0 +1,26 @@ + ############ + # SSL + ############ + + SSLEngine on + SSLCertificateFile /opt/docker/etc/httpd/ssl/server.crt + SSLCertificateKeyFile /opt/docker/etc/httpd/ssl/server.key + + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + + BrowserMatch "MSIE [2-6]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + # This regexp is ok with 17-9! + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + + ## SSL Hardening + SSLProtocol All -SSLv2 -SSLv3 + SSLHonorCipherOrder on + SSLCipherSuite 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA' diff --git a/docker/php-apache/8.5/conf/etc/supervisor.d/apache.conf b/docker/php-apache/8.5/conf/etc/supervisor.d/apache.conf new file mode 100644 index 000000000..12a6f86f7 --- /dev/null +++ b/docker/php-apache/8.5/conf/etc/supervisor.d/apache.conf @@ -0,0 +1,14 @@ +[group:apache] +programs=apached +priority=20 + +[program:apached] +command = /opt/docker/bin/service.d/httpd.sh +process_name=%(program_name)s +startsecs = 0 +autostart = true +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-apache/8.5/conf/provision/bootstrap.d/.gitkeep b/docker/php-apache/8.5/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5/conf/provision/bootstrap.d/10-apache.sh b/docker/php-apache/8.5/conf/provision/bootstrap.d/10-apache.sh new file mode 100644 index 000000000..e9feb08b4 --- /dev/null +++ b/docker/php-apache/8.5/conf/provision/bootstrap.d/10-apache.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) +IMAGE_DISTRIBUTION=$(docker-image-info dist) +IMAGE_DISTRIBUTION_VERSION=$(docker-image-info dist-version) +IMAGE_DISTRIBUTION_VERSION_MAIN=$(echo "$IMAGE_DISTRIBUTION_VERSION" | sed 's/^\([0-9]*\).*/\1/g') + +# Collect environment variables +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + APACHE_MAIN_PATH=/etc/apache2/ + APACHE_DOCKER_VHOST=/etc/apache2/sites-enabled/10-docker.conf + ;; + + RedHat) + APACHE_MAIN_PATH=/etc/httpd/ + APACHE_DOCKER_VHOST=/etc/httpd/conf.d/zzz-docker.conf + ;; + + Alpine) + APACHE_MAIN_PATH=/etc/apache2/ + APACHE_DOCKER_VHOST=/etc/apache2/conf.d/zzz-docker.conf + ;; +esac + +# Enable apache main config +ln -sf -- /opt/docker/etc/httpd/main.conf "$APACHE_DOCKER_VHOST" + +# Ensure /var/run/apache2 exists +mkdir -p -- "/var/run/apache2" + +if [[ "$IMAGE_FAMILY" == "Alpine" ]]; then + mkdir -p -- "/run/apache2" +fi + +# Maintain lock directory +if [[ "$IMAGE_FAMILY" == "Debian" ]]; then + mkdir -p -- "/var/lock/apache2" + chmod 0750 -- "/var/lock/apache2" + chown www-data:www-data -- "/var/lock/apache2" +fi + +APACHE_CONF_FILES=$(find "$APACHE_MAIN_PATH" -type f -iname '*.conf' -o -iname 'default*' -o -iname '*log') + +# Change log to Docker stdout +go-replace --regex --regex-backrefs \ + -s '^[\s]*(CustomLog|ErrorLog|TransferLog) ([^\s]+)(.*)' -r '$1 /docker.stdout $3' \ + -s '^[\s]*(ErrorLog) ([^\s]+)(.*)' -r '$1 /docker.stderr $3' \ + --path="$APACHE_MAIN_PATH" \ + --path-regex='(.*\.conf|default.*|.*log)$' + +# Switch MPM to event +if [[ "$IMAGE_FAMILY" == "RedHat" ]]; then + go-replace --mode=line --regex --regex-backrefs \ + -s '^[\s#]*(LoadModule mpm_prefork_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule mpm_event_module.*)' -r '$1' \ + -- /etc/httpd/conf.modules.d/00-mpm.conf +fi + +if [[ "$IMAGE_DISTRIBUTION" == "Ubuntu" ]] && [[ "$IMAGE_DISTRIBUTION_VERSION_MAIN" -ge 14 ]]; then + a2enmod mpm_event +fi + +if [[ "$IMAGE_DISTRIBUTION" == "Debian" ]] && [[ "$IMAGE_DISTRIBUTION_VERSION_MAIN" -ge 8 ]]; then + a2enmod mpm_event +fi + +if [[ "$IMAGE_FAMILY" == "Alpine" ]]; then + go-replace --mode=line --regex --regex-backrefs \ + -s '^[\s#]*(LoadModule mpm_prefork_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule mpm_event_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule deflate_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule rewrite_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule logio_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule slotmem_shm_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule actions_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule expires_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule ssl_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule socache_shmcb_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_ajp_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_connect_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_balancer_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_express_module.*)' -r '#$1' \ + -s '^[\s#]*(LoadModule proxy_fcgi_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_fdpass_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_ftp_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_http_module.*)' -r '$1' \ + -s '^[\s#]*(LoadModule proxy_scgi_module.*)' -r '$1' \ + -- /etc/apache2/httpd.conf \ + /etc/apache2/conf.d/ssl.conf \ + /etc/apache2/conf.d/proxy.conf + + # Remove default vhost + sed -i -e '1h;2,$H;$!d;g' -e 's//#-> removed vhost/g' /etc/apache2/conf.d/ssl.conf +fi + +# Fix rights of ssl files +chown -R root:root /opt/docker/etc/httpd/ssl +find /opt/docker/etc/httpd/ssl -type d -exec chmod 750 {} \; +find /opt/docker/etc/httpd/ssl -type f -exec chmod 640 {} \; diff --git a/docker/php-apache/8.5/conf/provision/bootstrap.d/10-php.sh b/docker/php-apache/8.5/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..c8669ca25 --- /dev/null +++ b/docker/php-apache/8.5/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Restrict php-fpm to local connection +go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 127.0.0.1:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' + diff --git a/docker/php-apache/8.5/conf/provision/entrypoint.d/.gitkeep b/docker/php-apache/8.5/conf/provision/entrypoint.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-apache/8.5/conf/provision/entrypoint.d/20-apache.sh b/docker/php-apache/8.5/conf/provision/entrypoint.d/20-apache.sh new file mode 100644 index 000000000..42ef48932 --- /dev/null +++ b/docker/php-apache/8.5/conf/provision/entrypoint.d/20-apache.sh @@ -0,0 +1,16 @@ +# Replace markers +go-replace \ + -s "" -r "$WEB_DOCUMENT_INDEX" \ + -s "" -r "$WEB_DOCUMENT_ROOT" \ + -s "" -r "$WEB_ALIAS_DOMAIN" \ + -s "" -r "$HOSTNAME" \ + -s "" -r "$WEB_PHP_SOCKET" \ + -s "" -r "$WEB_PHP_TIMEOUT" \ + --path=/opt/docker/etc/httpd/ \ + --path-pattern='*.conf' \ + --ignore-empty + +if [[ -z "$WEB_PHP_SOCKET" ]]; then + ## WEB_PHP_SOCKET is not set, remove PHP files + rm -f -- /opt/docker/etc/httpd/conf.d/10-php.conf +fi diff --git a/docker/php-dev/8.5-alpine/Dockerfile b/docker/php-dev/8.5-alpine/Dockerfile new file mode 100644 index 000000000..dd401c67c --- /dev/null +++ b/docker/php-dev/8.5-alpine/Dockerfile @@ -0,0 +1,33 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-dev:8.5-alpine +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php:8.5-alpine + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install development environment + && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ + && blackfire php:install \ + && apk-install \ + linux-headers \ + make \ + autoconf \ + g++ \ + && wget https://github.com/php/pie/releases/download/1.3.1/pie.phar -O /usr/local/bin/pie \ + && chmod +x /usr/local/bin/pie \ + && pie install xdebug/xdebug:^3.5.0@alpha \ + && rm -f /usr/local/bin/pie \ + && apk del -f --purge \ + autoconf \ + linux-headers \ + g++ \ + make \ + && docker-php-ext-enable xdebug \ + # Enable php development services + && docker-service enable syslog \ + && docker-service enable postfix \ + && docker-service enable ssh \ + && docker-run-bootstrap diff --git a/docker/php-dev/8.5-alpine/Dockerfile.jinja2 b/docker/php-dev/8.5-alpine/Dockerfile.jinja2 new file mode 100644 index 000000000..48b55c891 --- /dev/null +++ b/docker/php-dev/8.5-alpine/Dockerfile.jinja2 @@ -0,0 +1,7 @@ +{{ docker.from("php", "8.5-alpine") }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ php.officialDevelopmentAlpine(version="8.5") }} \ + {{ provision.runBootstrap() }} diff --git a/docker/php-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh b/docker/php-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh b/docker/php-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh new file mode 100644 index 000000000..95daa01ae --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_BLACKFIRE_AGENT_OPTS" ]]; then SERVICE_BLACKFIRE_AGENT_OPTS=""; fi + +source /opt/docker/bin/config.sh + +BLACKFIRE_ARGS="" + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +# blackfire.server_id +if [[ -n "${BLACKFIRE_SERVER_ID+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-id=\"${BLACKFIRE_SERVER_ID}\"" +fi + +# blackfire.server_token +if [[ -n "${BLACKFIRE_SERVER_TOKEN+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-token=\"${BLACKFIRE_SERVER_TOKEN}\"" +fi + +# create directory for unix socket +mkdir -p /var/run/blackfire + +eval exec blackfire-agent $BLACKFIRE_ARGS $SERVICE_BLACKFIRE_AGENT_OPTS diff --git a/docker/php-dev/8.5-alpine/conf/bin/service.d/ssh.d/99-development.sh b/docker/php-dev/8.5-alpine/conf/bin/service.d/ssh.d/99-development.sh new file mode 100644 index 000000000..2502ab3e3 --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/bin/service.d/ssh.d/99-development.sh @@ -0,0 +1,3 @@ + +# Allow root access via ssh +go-replace --mode=lineinfile -s 'PermitRootLogin' -r 'PermitRootLogin yes' -- /etc/ssh/sshd_config diff --git a/docker/php-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf b/docker/php-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf new file mode 100644 index 000000000..897831ddb --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf @@ -0,0 +1,14 @@ +[group:blackfire-agent] +programs=blackfire-agentd +priority=25 + +[program:blackfire-agentd] +command = /opt/docker/bin/service.d/blackfire-agent.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..852567f85 --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) + +# Configure php-fpm +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "%R - %u %t \"%m %r%Q%q\" %s %f cpu:%C%% mem:%{megabytes}M reqTime:%d"' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf + +fi diff --git a/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh new file mode 100644 index 000000000..f4ea7f72e --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable blackfire by default +rm -f \ + /etc/php5/cli/conf.d/zz-blackfire.ini \ + /etc/php5/fpm/conf.d/zz-blackfire.ini diff --git a/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh new file mode 100644 index 000000000..079e59fdf --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Configure opcache for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*opcache.memory_consumption[\s]*=' -r 'opcache.memory_consumption = 256' \ + -s '^[\s;]*opcache.validate_timestamps[\s]*=' -r 'opcache.validate_timestamps = 1' \ + -s '^[\s;]*opcache.revalidate_freq[\s]*=' -r 'opcache.revalidate_freq = 0' \ + -s '^[\s;]*opcache.interned_strings_buffer[\s]*=' -r 'opcache.interned_strings_buffer = 16' \ + -s '^[\s;]*opcache.max_accelerated_files[\s]*=' -r 'opcache.max_accelerated_files = 7963' \ + -s '^[\s;]*opcache.fast_shutdown[\s]*=' -r 'opcache.fast_shutdown = 1' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh new file mode 100644 index 000000000..e76310003 --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Alpine) + # Fix php xdebug module [Alpine family] + + if [[ -f "/etc/php5/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php5/conf.d/xdebug.ini + fi + + if [[ -f "/etc/php7/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php7/conf.d/xdebug.ini + fi + + ;; +esac + +# Configure xdebug for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*xdebug.mode[\s]*=' -r 'xdebug.mode = debug' \ + -s '^[\s;]*xdebug.discover_client_host[\s]*=' -r 'xdebug.discover_client_host = 1' \ + -s '^[\s;]*xdebug.idekey[\s]*=' -r 'xdebug.idekey = docker' \ + -s '^[\s;]*xdebug.cli_color[\s]*=' -r 'xdebug.cli_color = 1' \ + -s '^[\s;]*xdebug.max_nesting_level[\s]*=' -r 'xdebug.max_nesting_level = 1000' \ + -s '^[\s;]*xdebug.start_with_request[\s]*=' -r 'xdebug.start_with_request = trigger' \ + -s '^[\s;]*xdebug.output_dir[\s]*=' -r 'xdebug.output_dir = /tmp/debug' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/99-development.sh b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/99-development.sh new file mode 100644 index 000000000..7fc8cca55 --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/provision/bootstrap.d/99-development.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Set passwords to "dev" +echo "$APPLICATION_USER":"dev" | chpasswd +echo "root":"dev" | chpasswd diff --git a/docker/php-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh b/docker/php-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh new file mode 100644 index 000000000..7b392587c --- /dev/null +++ b/docker/php-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +################################################# +# Debugger switch +################################################# + +PHP_CONF_PATHS=" +/etc/php5/conf.d +/etc/php7/conf.d +/etc/php.d +/etc/php5/mods-available +/etc/php5/cli/conf.d +/etc/php5/cli/conf.d +/etc/php5/fpm/conf.d +/etc/php5/fpm/conf.d +/etc/php/7.0/mods-available +/etc/php/7.1/mods-available +/etc/php/7.2/mods-available +/etc/php/7.3/mods-available +/etc/php/7.4/mods-available +/etc/php/7.0/cli/conf.d +/etc/php/7.1/cli/conf.d +/etc/php/7.2/cli/conf.d +/etc/php/7.3/cli/conf.d +/etc/php/7.4/cli/conf.d +/etc/php/7.0/fpm/conf.d +/etc/php/7.1/fpm/conf.d +/etc/php/7.2/fpm/conf.d +/etc/php/7.3/fpm/conf.d +/etc/php/7.4/fpm/conf.d +/usr/local/etc/php/conf.d/" + +function phpModuleRemove() { + if [ "$#" -ne 1 ]; then + echo "You must specify the name of the PHP module which you want to disable" + exit 1 + fi + + echo " - Removing PHP module ${1}" + for CONF_PATH in $PHP_CONF_PATHS; do + rm -f "${CONF_PATH}"/*"${1}".ini + done +} + + +if [[ -n "${PHP_DEBUGGER+x}" ]]; then + case "$PHP_DEBUGGER" in + xdebug) + echo "PHP-Debugger: Xdebug enabled" + phpModuleRemove "blackfire" + ;; + + blackfire) + echo "PHP-Debugger: Blackfire enabled" + phpModuleRemove "xdebug" + docker-service-enable blackfire-agent + ;; + + none) + echo "PHP-Debugger: none" + phpModuleRemove "blackfire" + phpModuleRemove "xdebug" + ;; + esac + +else + + echo "PHP-Debugger: not specified - default is xdebug" + phpModuleRemove "blackfire" + +fi + +################################################# +# PHP debugger environment variables +################################################# + +function phpEnvironmentVariable() { + PHP_INI_KEY="$1" + PHP_ENV_NAME="$2" + + if [[ -n "${!PHP_ENV_NAME+x}" ]]; then + PHP_ENV_VALUE="${!PHP_ENV_NAME}" + echo "${PHP_INI_KEY}=\"${PHP_ENV_VALUE}\"" >> /opt/docker/etc/php/php.ini + fi +} + +################### +# XDEBUG +################### + +# xdebug3 remote debugger +phpEnvironmentVariable "xdebug.discover_client_host" "XDEBUG_DISCOVER_CLIENT_HOST" +phpEnvironmentVariable "xdebug.mode" "XDEBUG_MODE" +phpEnvironmentVariable "xdebug.start_with_request" "XDEBUG_START_WITH_REQUEST" +phpEnvironmentVariable "xdebug.client_host" "XDEBUG_CLIENT_HOST" +phpEnvironmentVariable "xdebug.client_port" "XDEBUG_CLIENT_PORT" + +# xdebug3 profiler +phpEnvironmentVariable "xdebug.trigger_value" "XDEBUG_TRIGGER_VALUE" +phpEnvironmentVariable "xdebug.output_dir" "XDEBUG_OUTPUT_DIR" + +################### +# BLACKFIRE +################### +phpEnvironmentVariable "blackfire.server_id" "BLACKFIRE_SERVER_ID" +phpEnvironmentVariable "blackfire.server_token" "BLACKFIRE_SERVER_TOKEN" diff --git a/docker/php-dev/8.5/Dockerfile b/docker/php-dev/8.5/Dockerfile new file mode 100644 index 000000000..d8e74c867 --- /dev/null +++ b/docker/php-dev/8.5/Dockerfile @@ -0,0 +1,24 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-dev:8.5 +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php:8.5 + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install development environment + && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ + && blackfire php:install \ + && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ + && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ + && apt-install tideways-php tideways-daemon \ + && pecl install xdebug \ + && docker-php-ext-enable xdebug \ + # Enable php development services + && docker-service enable syslog \ + && docker-service enable postfix \ + && docker-service enable ssh \ + && docker-run-bootstrap \ + && docker-image-cleanup diff --git a/docker/php-dev/8.5/Dockerfile.jinja2 b/docker/php-dev/8.5/Dockerfile.jinja2 new file mode 100644 index 000000000..fd32f4ad6 --- /dev/null +++ b/docker/php-dev/8.5/Dockerfile.jinja2 @@ -0,0 +1,8 @@ +{{ docker.from("php", "8.5") }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ php.officialDevelopment(version="8.5") }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} diff --git a/docker/php-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh b/docker/php-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-dev/8.5/conf/bin/service.d/blackfire-agent.sh b/docker/php-dev/8.5/conf/bin/service.d/blackfire-agent.sh new file mode 100644 index 000000000..95daa01ae --- /dev/null +++ b/docker/php-dev/8.5/conf/bin/service.d/blackfire-agent.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_BLACKFIRE_AGENT_OPTS" ]]; then SERVICE_BLACKFIRE_AGENT_OPTS=""; fi + +source /opt/docker/bin/config.sh + +BLACKFIRE_ARGS="" + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +# blackfire.server_id +if [[ -n "${BLACKFIRE_SERVER_ID+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-id=\"${BLACKFIRE_SERVER_ID}\"" +fi + +# blackfire.server_token +if [[ -n "${BLACKFIRE_SERVER_TOKEN+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-token=\"${BLACKFIRE_SERVER_TOKEN}\"" +fi + +# create directory for unix socket +mkdir -p /var/run/blackfire + +eval exec blackfire-agent $BLACKFIRE_ARGS $SERVICE_BLACKFIRE_AGENT_OPTS diff --git a/docker/php-dev/8.5/conf/bin/service.d/ssh.d/99-development.sh b/docker/php-dev/8.5/conf/bin/service.d/ssh.d/99-development.sh new file mode 100644 index 000000000..2502ab3e3 --- /dev/null +++ b/docker/php-dev/8.5/conf/bin/service.d/ssh.d/99-development.sh @@ -0,0 +1,3 @@ + +# Allow root access via ssh +go-replace --mode=lineinfile -s 'PermitRootLogin' -r 'PermitRootLogin yes' -- /etc/ssh/sshd_config diff --git a/docker/php-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf b/docker/php-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf new file mode 100644 index 000000000..897831ddb --- /dev/null +++ b/docker/php-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf @@ -0,0 +1,14 @@ +[group:blackfire-agent] +programs=blackfire-agentd +priority=25 + +[program:blackfire-agentd] +command = /opt/docker/bin/service.d/blackfire-agent.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-dev/8.5/conf/provision/bootstrap.d/10-php.sh b/docker/php-dev/8.5/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..852567f85 --- /dev/null +++ b/docker/php-dev/8.5/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) + +# Configure php-fpm +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "%R - %u %t \"%m %r%Q%q\" %s %f cpu:%C%% mem:%{megabytes}M reqTime:%d"' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf + +fi diff --git a/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh b/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh new file mode 100644 index 000000000..f4ea7f72e --- /dev/null +++ b/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable blackfire by default +rm -f \ + /etc/php5/cli/conf.d/zz-blackfire.ini \ + /etc/php5/fpm/conf.d/zz-blackfire.ini diff --git a/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh b/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh new file mode 100644 index 000000000..079e59fdf --- /dev/null +++ b/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Configure opcache for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*opcache.memory_consumption[\s]*=' -r 'opcache.memory_consumption = 256' \ + -s '^[\s;]*opcache.validate_timestamps[\s]*=' -r 'opcache.validate_timestamps = 1' \ + -s '^[\s;]*opcache.revalidate_freq[\s]*=' -r 'opcache.revalidate_freq = 0' \ + -s '^[\s;]*opcache.interned_strings_buffer[\s]*=' -r 'opcache.interned_strings_buffer = 16' \ + -s '^[\s;]*opcache.max_accelerated_files[\s]*=' -r 'opcache.max_accelerated_files = 7963' \ + -s '^[\s;]*opcache.fast_shutdown[\s]*=' -r 'opcache.fast_shutdown = 1' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh b/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh new file mode 100644 index 000000000..e76310003 --- /dev/null +++ b/docker/php-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Alpine) + # Fix php xdebug module [Alpine family] + + if [[ -f "/etc/php5/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php5/conf.d/xdebug.ini + fi + + if [[ -f "/etc/php7/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php7/conf.d/xdebug.ini + fi + + ;; +esac + +# Configure xdebug for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*xdebug.mode[\s]*=' -r 'xdebug.mode = debug' \ + -s '^[\s;]*xdebug.discover_client_host[\s]*=' -r 'xdebug.discover_client_host = 1' \ + -s '^[\s;]*xdebug.idekey[\s]*=' -r 'xdebug.idekey = docker' \ + -s '^[\s;]*xdebug.cli_color[\s]*=' -r 'xdebug.cli_color = 1' \ + -s '^[\s;]*xdebug.max_nesting_level[\s]*=' -r 'xdebug.max_nesting_level = 1000' \ + -s '^[\s;]*xdebug.start_with_request[\s]*=' -r 'xdebug.start_with_request = trigger' \ + -s '^[\s;]*xdebug.output_dir[\s]*=' -r 'xdebug.output_dir = /tmp/debug' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-dev/8.5/conf/provision/bootstrap.d/99-development.sh b/docker/php-dev/8.5/conf/provision/bootstrap.d/99-development.sh new file mode 100644 index 000000000..7fc8cca55 --- /dev/null +++ b/docker/php-dev/8.5/conf/provision/bootstrap.d/99-development.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Set passwords to "dev" +echo "$APPLICATION_USER":"dev" | chpasswd +echo "root":"dev" | chpasswd diff --git a/docker/php-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh b/docker/php-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh new file mode 100644 index 000000000..7b392587c --- /dev/null +++ b/docker/php-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +################################################# +# Debugger switch +################################################# + +PHP_CONF_PATHS=" +/etc/php5/conf.d +/etc/php7/conf.d +/etc/php.d +/etc/php5/mods-available +/etc/php5/cli/conf.d +/etc/php5/cli/conf.d +/etc/php5/fpm/conf.d +/etc/php5/fpm/conf.d +/etc/php/7.0/mods-available +/etc/php/7.1/mods-available +/etc/php/7.2/mods-available +/etc/php/7.3/mods-available +/etc/php/7.4/mods-available +/etc/php/7.0/cli/conf.d +/etc/php/7.1/cli/conf.d +/etc/php/7.2/cli/conf.d +/etc/php/7.3/cli/conf.d +/etc/php/7.4/cli/conf.d +/etc/php/7.0/fpm/conf.d +/etc/php/7.1/fpm/conf.d +/etc/php/7.2/fpm/conf.d +/etc/php/7.3/fpm/conf.d +/etc/php/7.4/fpm/conf.d +/usr/local/etc/php/conf.d/" + +function phpModuleRemove() { + if [ "$#" -ne 1 ]; then + echo "You must specify the name of the PHP module which you want to disable" + exit 1 + fi + + echo " - Removing PHP module ${1}" + for CONF_PATH in $PHP_CONF_PATHS; do + rm -f "${CONF_PATH}"/*"${1}".ini + done +} + + +if [[ -n "${PHP_DEBUGGER+x}" ]]; then + case "$PHP_DEBUGGER" in + xdebug) + echo "PHP-Debugger: Xdebug enabled" + phpModuleRemove "blackfire" + ;; + + blackfire) + echo "PHP-Debugger: Blackfire enabled" + phpModuleRemove "xdebug" + docker-service-enable blackfire-agent + ;; + + none) + echo "PHP-Debugger: none" + phpModuleRemove "blackfire" + phpModuleRemove "xdebug" + ;; + esac + +else + + echo "PHP-Debugger: not specified - default is xdebug" + phpModuleRemove "blackfire" + +fi + +################################################# +# PHP debugger environment variables +################################################# + +function phpEnvironmentVariable() { + PHP_INI_KEY="$1" + PHP_ENV_NAME="$2" + + if [[ -n "${!PHP_ENV_NAME+x}" ]]; then + PHP_ENV_VALUE="${!PHP_ENV_NAME}" + echo "${PHP_INI_KEY}=\"${PHP_ENV_VALUE}\"" >> /opt/docker/etc/php/php.ini + fi +} + +################### +# XDEBUG +################### + +# xdebug3 remote debugger +phpEnvironmentVariable "xdebug.discover_client_host" "XDEBUG_DISCOVER_CLIENT_HOST" +phpEnvironmentVariable "xdebug.mode" "XDEBUG_MODE" +phpEnvironmentVariable "xdebug.start_with_request" "XDEBUG_START_WITH_REQUEST" +phpEnvironmentVariable "xdebug.client_host" "XDEBUG_CLIENT_HOST" +phpEnvironmentVariable "xdebug.client_port" "XDEBUG_CLIENT_PORT" + +# xdebug3 profiler +phpEnvironmentVariable "xdebug.trigger_value" "XDEBUG_TRIGGER_VALUE" +phpEnvironmentVariable "xdebug.output_dir" "XDEBUG_OUTPUT_DIR" + +################### +# BLACKFIRE +################### +phpEnvironmentVariable "blackfire.server_id" "BLACKFIRE_SERVER_ID" +phpEnvironmentVariable "blackfire.server_token" "BLACKFIRE_SERVER_TOKEN" diff --git a/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 index 4ae7147e4..81e512b17 100644 --- a/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 @@ -7,5 +7,5 @@ {{ docker.copy('conf/', '/opt/docker/') }} RUN set -x \ - {{ php.officialDevelopmentAlpine(version="8.2") }} \ + {{ php.officialDevelopmentAlpine(version="8.3") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 index 4170b720f..0c59288ac 100644 --- a/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 @@ -7,5 +7,5 @@ {{ docker.copy('conf/', '/opt/docker/') }} RUN set -x \ - {{ php.officialDevelopmentAlpine(version="8.2") }} \ + {{ php.officialDevelopmentAlpine(version="8.4") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.5-alpine/Dockerfile b/docker/php-nginx-dev/8.5-alpine/Dockerfile new file mode 100644 index 000000000..ba94eeecf --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/Dockerfile @@ -0,0 +1,41 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-nginx-dev:8.5-alpine +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php-nginx:8.5-alpine + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 +ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install development environment + && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ + && blackfire php:install \ + && apk-install \ + linux-headers \ + make \ + autoconf \ + g++ \ + && wget https://github.com/php/pie/releases/download/1.3.1/pie.phar -O /usr/local/bin/pie \ + && chmod +x /usr/local/bin/pie \ + && pie install xdebug/xdebug:^3.5.0@alpha \ + && rm -f /usr/local/bin/pie \ + && apk del -f --purge \ + autoconf \ + linux-headers \ + g++ \ + make \ + && docker-php-ext-enable xdebug \ + # Enable php development services + && docker-service enable syslog \ + && docker-service enable postfix \ + && docker-service enable ssh \ + && docker-run-bootstrap diff --git a/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 new file mode 100644 index 000000000..b44bb2998 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 @@ -0,0 +1,11 @@ +{{ docker.from("php-nginx", "8.5-alpine") }} + +{{ environment.web() }} +{{ environment.webPhp() }} +{{ environment.webDevelopment() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ php.officialDevelopmentAlpine(version="8.5") }} \ + {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh b/docker/php-nginx-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-nginx-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh b/docker/php-nginx-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh new file mode 100644 index 000000000..95daa01ae --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/bin/service.d/blackfire-agent.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_BLACKFIRE_AGENT_OPTS" ]]; then SERVICE_BLACKFIRE_AGENT_OPTS=""; fi + +source /opt/docker/bin/config.sh + +BLACKFIRE_ARGS="" + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +# blackfire.server_id +if [[ -n "${BLACKFIRE_SERVER_ID+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-id=\"${BLACKFIRE_SERVER_ID}\"" +fi + +# blackfire.server_token +if [[ -n "${BLACKFIRE_SERVER_TOKEN+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-token=\"${BLACKFIRE_SERVER_TOKEN}\"" +fi + +# create directory for unix socket +mkdir -p /var/run/blackfire + +eval exec blackfire-agent $BLACKFIRE_ARGS $SERVICE_BLACKFIRE_AGENT_OPTS diff --git a/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/conf.d/02-dev.conf b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/conf.d/02-dev.conf new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/conf.d/02-dev.conf @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/.gitkeep b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/02-dev.conf b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/02-dev.conf new file mode 100644 index 000000000..4f80ec9d3 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/02-dev.conf @@ -0,0 +1,6 @@ +location ~* { + expires off; + add_header Cache-Control private; + + try_files $uri $uri/ /?$query_string; +} diff --git a/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/10-log.conf b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/10-log.conf new file mode 100644 index 000000000..a2cd929e7 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/etc/nginx/vhost.common.d/10-log.conf @@ -0,0 +1,2 @@ +access_log /docker.stdout; +error_log /docker.stderr info; diff --git a/docker/php-nginx-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf b/docker/php-nginx-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf new file mode 100644 index 000000000..897831ddb --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/etc/supervisor.d/blackfire-agent.conf @@ -0,0 +1,14 @@ +[group:blackfire-agent] +programs=blackfire-agentd +priority=25 + +[program:blackfire-agentd] +command = /opt/docker/bin/service.d/blackfire-agent.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/.gitkeep b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/10-nginx.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/10-nginx.sh new file mode 100644 index 000000000..b6100c8f1 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/10-nginx.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable sendfile for nginx (eg. nfs usage) +go-replace --mode=lineinfile --regex \ + -s '^[\s#]*(sendfile)' -r 'sendfile off;' \ + -- /etc/nginx/nginx.conf diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..852567f85 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) + +# Configure php-fpm +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "%R - %u %t \"%m %r%Q%q\" %s %f cpu:%C%% mem:%{megabytes}M reqTime:%d"' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf + +fi diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh new file mode 100644 index 000000000..f4ea7f72e --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-blackfire.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable blackfire by default +rm -f \ + /etc/php5/cli/conf.d/zz-blackfire.ini \ + /etc/php5/fpm/conf.d/zz-blackfire.ini diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh new file mode 100644 index 000000000..079e59fdf --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-opcache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Configure opcache for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*opcache.memory_consumption[\s]*=' -r 'opcache.memory_consumption = 256' \ + -s '^[\s;]*opcache.validate_timestamps[\s]*=' -r 'opcache.validate_timestamps = 1' \ + -s '^[\s;]*opcache.revalidate_freq[\s]*=' -r 'opcache.revalidate_freq = 0' \ + -s '^[\s;]*opcache.interned_strings_buffer[\s]*=' -r 'opcache.interned_strings_buffer = 16' \ + -s '^[\s;]*opcache.max_accelerated_files[\s]*=' -r 'opcache.max_accelerated_files = 7963' \ + -s '^[\s;]*opcache.fast_shutdown[\s]*=' -r 'opcache.fast_shutdown = 1' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh new file mode 100644 index 000000000..e76310003 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/bootstrap.d/20-php-module-xdebug.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Alpine) + # Fix php xdebug module [Alpine family] + + if [[ -f "/etc/php5/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php5/conf.d/xdebug.ini + fi + + if [[ -f "/etc/php7/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php7/conf.d/xdebug.ini + fi + + ;; +esac + +# Configure xdebug for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*xdebug.mode[\s]*=' -r 'xdebug.mode = debug' \ + -s '^[\s;]*xdebug.discover_client_host[\s]*=' -r 'xdebug.discover_client_host = 1' \ + -s '^[\s;]*xdebug.idekey[\s]*=' -r 'xdebug.idekey = docker' \ + -s '^[\s;]*xdebug.cli_color[\s]*=' -r 'xdebug.cli_color = 1' \ + -s '^[\s;]*xdebug.max_nesting_level[\s]*=' -r 'xdebug.max_nesting_level = 1000' \ + -s '^[\s;]*xdebug.start_with_request[\s]*=' -r 'xdebug.start_with_request = trigger' \ + -s '^[\s;]*xdebug.output_dir[\s]*=' -r 'xdebug.output_dir = /tmp/debug' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh new file mode 100644 index 000000000..7b392587c --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/entrypoint.d/10-php-debugger.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +################################################# +# Debugger switch +################################################# + +PHP_CONF_PATHS=" +/etc/php5/conf.d +/etc/php7/conf.d +/etc/php.d +/etc/php5/mods-available +/etc/php5/cli/conf.d +/etc/php5/cli/conf.d +/etc/php5/fpm/conf.d +/etc/php5/fpm/conf.d +/etc/php/7.0/mods-available +/etc/php/7.1/mods-available +/etc/php/7.2/mods-available +/etc/php/7.3/mods-available +/etc/php/7.4/mods-available +/etc/php/7.0/cli/conf.d +/etc/php/7.1/cli/conf.d +/etc/php/7.2/cli/conf.d +/etc/php/7.3/cli/conf.d +/etc/php/7.4/cli/conf.d +/etc/php/7.0/fpm/conf.d +/etc/php/7.1/fpm/conf.d +/etc/php/7.2/fpm/conf.d +/etc/php/7.3/fpm/conf.d +/etc/php/7.4/fpm/conf.d +/usr/local/etc/php/conf.d/" + +function phpModuleRemove() { + if [ "$#" -ne 1 ]; then + echo "You must specify the name of the PHP module which you want to disable" + exit 1 + fi + + echo " - Removing PHP module ${1}" + for CONF_PATH in $PHP_CONF_PATHS; do + rm -f "${CONF_PATH}"/*"${1}".ini + done +} + + +if [[ -n "${PHP_DEBUGGER+x}" ]]; then + case "$PHP_DEBUGGER" in + xdebug) + echo "PHP-Debugger: Xdebug enabled" + phpModuleRemove "blackfire" + ;; + + blackfire) + echo "PHP-Debugger: Blackfire enabled" + phpModuleRemove "xdebug" + docker-service-enable blackfire-agent + ;; + + none) + echo "PHP-Debugger: none" + phpModuleRemove "blackfire" + phpModuleRemove "xdebug" + ;; + esac + +else + + echo "PHP-Debugger: not specified - default is xdebug" + phpModuleRemove "blackfire" + +fi + +################################################# +# PHP debugger environment variables +################################################# + +function phpEnvironmentVariable() { + PHP_INI_KEY="$1" + PHP_ENV_NAME="$2" + + if [[ -n "${!PHP_ENV_NAME+x}" ]]; then + PHP_ENV_VALUE="${!PHP_ENV_NAME}" + echo "${PHP_INI_KEY}=\"${PHP_ENV_VALUE}\"" >> /opt/docker/etc/php/php.ini + fi +} + +################### +# XDEBUG +################### + +# xdebug3 remote debugger +phpEnvironmentVariable "xdebug.discover_client_host" "XDEBUG_DISCOVER_CLIENT_HOST" +phpEnvironmentVariable "xdebug.mode" "XDEBUG_MODE" +phpEnvironmentVariable "xdebug.start_with_request" "XDEBUG_START_WITH_REQUEST" +phpEnvironmentVariable "xdebug.client_host" "XDEBUG_CLIENT_HOST" +phpEnvironmentVariable "xdebug.client_port" "XDEBUG_CLIENT_PORT" + +# xdebug3 profiler +phpEnvironmentVariable "xdebug.trigger_value" "XDEBUG_TRIGGER_VALUE" +phpEnvironmentVariable "xdebug.output_dir" "XDEBUG_OUTPUT_DIR" + +################### +# BLACKFIRE +################### +phpEnvironmentVariable "blackfire.server_id" "BLACKFIRE_SERVER_ID" +phpEnvironmentVariable "blackfire.server_token" "BLACKFIRE_SERVER_TOKEN" diff --git a/docker/php-nginx-dev/8.5-alpine/conf/provision/entrypoint.d/20-nginx-dev.sh b/docker/php-nginx-dev/8.5-alpine/conf/provision/entrypoint.d/20-nginx-dev.sh new file mode 100644 index 000000000..f4695f059 --- /dev/null +++ b/docker/php-nginx-dev/8.5-alpine/conf/provision/entrypoint.d/20-nginx-dev.sh @@ -0,0 +1,7 @@ +go-replace \ + -s "" \ + -r "$WEB_NO_CACHE_PATTERN" \ + --path=/opt/docker/etc/nginx/ \ + --path-pattern='*.conf' \ + --ignore-empty + diff --git a/docker/php-nginx-dev/8.5/Dockerfile b/docker/php-nginx-dev/8.5/Dockerfile new file mode 100644 index 000000000..622a121a2 --- /dev/null +++ b/docker/php-nginx-dev/8.5/Dockerfile @@ -0,0 +1,32 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-nginx-dev:8.5 +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php-nginx:8.5 + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 +ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install development environment + && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ + && blackfire php:install \ + && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ + && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ + && apt-install tideways-php tideways-daemon \ + && pecl install xdebug \ + && docker-php-ext-enable xdebug \ + # Enable php development services + && docker-service enable syslog \ + && docker-service enable postfix \ + && docker-service enable ssh \ + && docker-run-bootstrap \ + && docker-image-cleanup diff --git a/docker/php-nginx-dev/8.5/Dockerfile.jinja2 b/docker/php-nginx-dev/8.5/Dockerfile.jinja2 new file mode 100644 index 000000000..b9e413ae3 --- /dev/null +++ b/docker/php-nginx-dev/8.5/Dockerfile.jinja2 @@ -0,0 +1,12 @@ +{{ docker.from("php-nginx", "8.5") }} + +{{ environment.web() }} +{{ environment.webPhp() }} +{{ environment.webDevelopment() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ php.officialDevelopment(version="8.5") }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} diff --git a/docker/php-nginx-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh b/docker/php-nginx-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/bin/service.d/blackfire-agent.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-nginx-dev/8.5/conf/bin/service.d/blackfire-agent.sh b/docker/php-nginx-dev/8.5/conf/bin/service.d/blackfire-agent.sh new file mode 100644 index 000000000..95daa01ae --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/bin/service.d/blackfire-agent.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_BLACKFIRE_AGENT_OPTS" ]]; then SERVICE_BLACKFIRE_AGENT_OPTS=""; fi + +source /opt/docker/bin/config.sh + +BLACKFIRE_ARGS="" + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +# blackfire.server_id +if [[ -n "${BLACKFIRE_SERVER_ID+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-id=\"${BLACKFIRE_SERVER_ID}\"" +fi + +# blackfire.server_token +if [[ -n "${BLACKFIRE_SERVER_TOKEN+x}" ]]; then + BLACKFIRE_ARGS="$BLACKFIRE_ARGS --server-token=\"${BLACKFIRE_SERVER_TOKEN}\"" +fi + +# create directory for unix socket +mkdir -p /var/run/blackfire + +eval exec blackfire-agent $BLACKFIRE_ARGS $SERVICE_BLACKFIRE_AGENT_OPTS diff --git a/docker/php-nginx-dev/8.5/conf/etc/nginx/conf.d/02-dev.conf b/docker/php-nginx-dev/8.5/conf/etc/nginx/conf.d/02-dev.conf new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/etc/nginx/conf.d/02-dev.conf @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/.gitkeep b/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/02-dev.conf b/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/02-dev.conf new file mode 100644 index 000000000..4f80ec9d3 --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/02-dev.conf @@ -0,0 +1,6 @@ +location ~* { + expires off; + add_header Cache-Control private; + + try_files $uri $uri/ /?$query_string; +} diff --git a/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/10-log.conf b/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/10-log.conf new file mode 100644 index 000000000..a2cd929e7 --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/etc/nginx/vhost.common.d/10-log.conf @@ -0,0 +1,2 @@ +access_log /docker.stdout; +error_log /docker.stderr info; diff --git a/docker/php-nginx-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf b/docker/php-nginx-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf new file mode 100644 index 000000000..897831ddb --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/etc/supervisor.d/blackfire-agent.conf @@ -0,0 +1,14 @@ +[group:blackfire-agent] +programs=blackfire-agentd +priority=25 + +[program:blackfire-agentd] +command = /opt/docker/bin/service.d/blackfire-agent.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/.gitkeep b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/10-nginx.sh b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/10-nginx.sh new file mode 100644 index 000000000..b6100c8f1 --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/10-nginx.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable sendfile for nginx (eg. nfs usage) +go-replace --mode=lineinfile --regex \ + -s '^[\s#]*(sendfile)' -r 'sendfile off;' \ + -- /etc/nginx/nginx.conf diff --git a/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/10-php.sh b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..852567f85 --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) + +# Configure php-fpm +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "%R - %u %t \"%m %r%Q%q\" %s %f cpu:%C%% mem:%{megabytes}M reqTime:%d"' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf \ + /opt/docker/etc/php/fpm/php-fpm.conf + +fi diff --git a/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh new file mode 100644 index 000000000..f4ea7f72e --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-blackfire.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Disable blackfire by default +rm -f \ + /etc/php5/cli/conf.d/zz-blackfire.ini \ + /etc/php5/fpm/conf.d/zz-blackfire.ini diff --git a/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh new file mode 100644 index 000000000..079e59fdf --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-opcache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Configure opcache for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*opcache.memory_consumption[\s]*=' -r 'opcache.memory_consumption = 256' \ + -s '^[\s;]*opcache.validate_timestamps[\s]*=' -r 'opcache.validate_timestamps = 1' \ + -s '^[\s;]*opcache.revalidate_freq[\s]*=' -r 'opcache.revalidate_freq = 0' \ + -s '^[\s;]*opcache.interned_strings_buffer[\s]*=' -r 'opcache.interned_strings_buffer = 16' \ + -s '^[\s;]*opcache.max_accelerated_files[\s]*=' -r 'opcache.max_accelerated_files = 7963' \ + -s '^[\s;]*opcache.fast_shutdown[\s]*=' -r 'opcache.fast_shutdown = 1' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh new file mode 100644 index 000000000..e76310003 --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/bootstrap.d/20-php-module-xdebug.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Alpine) + # Fix php xdebug module [Alpine family] + + if [[ -f "/etc/php5/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php5/conf.d/xdebug.ini + fi + + if [[ -f "/etc/php7/conf.d/xdebug.ini" ]]; then + go-replace --mode=lineinfile \ + -s '^extension=xdebug.so' -r 'zend_extension=xdebug.so' \ + /etc/php7/conf.d/xdebug.ini + fi + + ;; +esac + +# Configure xdebug for development +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*xdebug.mode[\s]*=' -r 'xdebug.mode = debug' \ + -s '^[\s;]*xdebug.discover_client_host[\s]*=' -r 'xdebug.discover_client_host = 1' \ + -s '^[\s;]*xdebug.idekey[\s]*=' -r 'xdebug.idekey = docker' \ + -s '^[\s;]*xdebug.cli_color[\s]*=' -r 'xdebug.cli_color = 1' \ + -s '^[\s;]*xdebug.max_nesting_level[\s]*=' -r 'xdebug.max_nesting_level = 1000' \ + -s '^[\s;]*xdebug.start_with_request[\s]*=' -r 'xdebug.start_with_request = trigger' \ + -s '^[\s;]*xdebug.output_dir[\s]*=' -r 'xdebug.output_dir = /tmp/debug' \ + -- /opt/docker/etc/php/php.webdevops.ini diff --git a/docker/php-nginx-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh b/docker/php-nginx-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh new file mode 100644 index 000000000..7b392587c --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/entrypoint.d/10-php-debugger.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +################################################# +# Debugger switch +################################################# + +PHP_CONF_PATHS=" +/etc/php5/conf.d +/etc/php7/conf.d +/etc/php.d +/etc/php5/mods-available +/etc/php5/cli/conf.d +/etc/php5/cli/conf.d +/etc/php5/fpm/conf.d +/etc/php5/fpm/conf.d +/etc/php/7.0/mods-available +/etc/php/7.1/mods-available +/etc/php/7.2/mods-available +/etc/php/7.3/mods-available +/etc/php/7.4/mods-available +/etc/php/7.0/cli/conf.d +/etc/php/7.1/cli/conf.d +/etc/php/7.2/cli/conf.d +/etc/php/7.3/cli/conf.d +/etc/php/7.4/cli/conf.d +/etc/php/7.0/fpm/conf.d +/etc/php/7.1/fpm/conf.d +/etc/php/7.2/fpm/conf.d +/etc/php/7.3/fpm/conf.d +/etc/php/7.4/fpm/conf.d +/usr/local/etc/php/conf.d/" + +function phpModuleRemove() { + if [ "$#" -ne 1 ]; then + echo "You must specify the name of the PHP module which you want to disable" + exit 1 + fi + + echo " - Removing PHP module ${1}" + for CONF_PATH in $PHP_CONF_PATHS; do + rm -f "${CONF_PATH}"/*"${1}".ini + done +} + + +if [[ -n "${PHP_DEBUGGER+x}" ]]; then + case "$PHP_DEBUGGER" in + xdebug) + echo "PHP-Debugger: Xdebug enabled" + phpModuleRemove "blackfire" + ;; + + blackfire) + echo "PHP-Debugger: Blackfire enabled" + phpModuleRemove "xdebug" + docker-service-enable blackfire-agent + ;; + + none) + echo "PHP-Debugger: none" + phpModuleRemove "blackfire" + phpModuleRemove "xdebug" + ;; + esac + +else + + echo "PHP-Debugger: not specified - default is xdebug" + phpModuleRemove "blackfire" + +fi + +################################################# +# PHP debugger environment variables +################################################# + +function phpEnvironmentVariable() { + PHP_INI_KEY="$1" + PHP_ENV_NAME="$2" + + if [[ -n "${!PHP_ENV_NAME+x}" ]]; then + PHP_ENV_VALUE="${!PHP_ENV_NAME}" + echo "${PHP_INI_KEY}=\"${PHP_ENV_VALUE}\"" >> /opt/docker/etc/php/php.ini + fi +} + +################### +# XDEBUG +################### + +# xdebug3 remote debugger +phpEnvironmentVariable "xdebug.discover_client_host" "XDEBUG_DISCOVER_CLIENT_HOST" +phpEnvironmentVariable "xdebug.mode" "XDEBUG_MODE" +phpEnvironmentVariable "xdebug.start_with_request" "XDEBUG_START_WITH_REQUEST" +phpEnvironmentVariable "xdebug.client_host" "XDEBUG_CLIENT_HOST" +phpEnvironmentVariable "xdebug.client_port" "XDEBUG_CLIENT_PORT" + +# xdebug3 profiler +phpEnvironmentVariable "xdebug.trigger_value" "XDEBUG_TRIGGER_VALUE" +phpEnvironmentVariable "xdebug.output_dir" "XDEBUG_OUTPUT_DIR" + +################### +# BLACKFIRE +################### +phpEnvironmentVariable "blackfire.server_id" "BLACKFIRE_SERVER_ID" +phpEnvironmentVariable "blackfire.server_token" "BLACKFIRE_SERVER_TOKEN" diff --git a/docker/php-nginx-dev/8.5/conf/provision/entrypoint.d/20-nginx-dev.sh b/docker/php-nginx-dev/8.5/conf/provision/entrypoint.d/20-nginx-dev.sh new file mode 100644 index 000000000..f4695f059 --- /dev/null +++ b/docker/php-nginx-dev/8.5/conf/provision/entrypoint.d/20-nginx-dev.sh @@ -0,0 +1,7 @@ +go-replace \ + -s "" \ + -r "$WEB_NO_CACHE_PATTERN" \ + --path=/opt/docker/etc/nginx/ \ + --path-pattern='*.conf' \ + --ignore-empty + diff --git a/docker/php-nginx/8.5-alpine/Dockerfile b/docker/php-nginx/8.5-alpine/Dockerfile new file mode 100644 index 000000000..6c00ffcf8 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/Dockerfile @@ -0,0 +1,24 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-nginx:8.5-alpine +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php:8.5-alpine + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 +ENV SERVICE_NGINX_CLIENT_MAX_BODY_SIZE="50m" + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install nginx + && apk-install \ + nginx \ + && docker-run-bootstrap + +EXPOSE 80 443 diff --git a/docker/php-nginx/8.5-alpine/Dockerfile.jinja2 b/docker/php-nginx/8.5-alpine/Dockerfile.jinja2 new file mode 100644 index 000000000..ed91b9f30 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/Dockerfile.jinja2 @@ -0,0 +1,13 @@ +{{ docker.from("php", "8.5-alpine") }} + +{{ environment.web() }} +{{ environment.webPhp() }} +{{ environment.nginx() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ nginx.alpine() }} \ + {{ provision.runBootstrap() }} + +{{ docker.expose('80 443') }} diff --git a/docker/php-nginx/8.5-alpine/conf/bin/service.d/nginx.d/10-init.sh b/docker/php-nginx/8.5-alpine/conf/bin/service.d/nginx.d/10-init.sh new file mode 100644 index 000000000..8acb5111d --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/bin/service.d/nginx.d/10-init.sh @@ -0,0 +1,5 @@ +if [[ ! -e "$WEB_DOCUMENT_ROOT" ]]; then + echo "" + echo "[WARNING] WEB_DOCUMENT_ROOT does not exists with path \"$WEB_DOCUMENT_ROOT\"!" + echo "" +fi diff --git a/docker/php-nginx/8.5-alpine/conf/bin/service.d/nginx.sh b/docker/php-nginx/8.5-alpine/conf/bin/service.d/nginx.sh new file mode 100644 index 000000000..3517c72a5 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/bin/service.d/nginx.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_NGINX_OPTS" ]]; then SERVICE_NGINX_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/nginx.d/" + +exec /usr/sbin/nginx -g 'daemon off;' $SERVICE_NGINX_OPTS diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/conf.d/.gitkeep b/docker/php-nginx/8.5-alpine/conf/etc/nginx/conf.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/conf.d/10-php.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/conf.d/10-php.conf new file mode 100644 index 000000000..9abe45f0a --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/conf.d/10-php.conf @@ -0,0 +1,3 @@ +upstream php { + server ; +} diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/global.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/global.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/global.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/main.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/main.conf new file mode 100644 index 000000000..06de0651b --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/main.conf @@ -0,0 +1,4 @@ +include /opt/docker/etc/nginx/global.conf; +include /opt/docker/etc/nginx/php.conf; +include /opt/docker/etc/nginx/conf.d/*.conf; +include /opt/docker/etc/nginx/vhost.conf; diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/nginx.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/nginx.conf new file mode 100644 index 000000000..b9cb4ebc4 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/nginx.conf @@ -0,0 +1,34 @@ +# For more information on configuration, see: +# * Official English Documentation: http://nginx.org/en/docs/ +# * Official Russian Documentation: http://nginx.org/ru/docs/ + +user nginx; +worker_processes auto; +error_log /docker.stdout; +pid /run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + 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 /docker.stdout main; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + # Load modular configuration files from the /etc/nginx/conf.d directory. + # See http://nginx.org/en/docs/ngx_core_module.html#include + # for more information. + include /etc/nginx/conf.d/*.conf; +} diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/php.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/php.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/php.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.crt b/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.crt new file mode 100644 index 000000000..6b0694907 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIE1DCCArwCCQDMMwGnSuK0tTANBgkqhkiG9w0BAQsFADAsMRswGQYDVQQKExJE +b2NrZXIgQm9pbGVycGxhdGUxDTALBgNVBAMUBCoudm0wHhcNMTUwNTA0MTcxNDQw +WhcNMjUwNTAxMTcxNDQwWjAsMRswGQYDVQQKExJEb2NrZXIgQm9pbGVycGxhdGUx +DTALBgNVBAMUBCoudm0wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK +3TIUiyDvXelWeY9VXMrpjuZtYpVSDsACLpjFUhMnsP5/iKT0VbeZyqHvmwZjAg4G +Y10d+yZDdgv/xeu0HPOFbtR6pCp10d1tdLHZto5Cyuxu7IQsAVjnD6Ko7XFwtNk7 +9o6JZfAFaGL4w5MokrVmCtspnsMZH7/7zU4f96cbF39zLopnpuXGD6t6DA8Qj3gy +0duaTjs42bYRN+rwLzVKAev99iQ4kPMJn4vV6/Xk6rtoSzC67GQyVZYaFypicD1S +NtsRmgEVvjCBDbrLOneUiRwff6qxEsZi7Hxv7BKFj4iUWnII7K/nP7T6uBHQjHO+ +FpsGkU9lCMrCeVFBe8kKz/cbhd+yLUxXwAPr6gSOPmwn232Gy4tozvqZHpbUxsgx +7sT3ej9K66h1D7J+BjNFWYM1hbnC1r7H/xS7EBzBV8qRoQCVe08Juf5xsouXFakD +clLV4+L+1cxkpwsCQDly5g3tm/TBqA2O+ZJ+YHQDHKkzMyhLs6i0X/M5qvJBiLg1 +GLTCS20rpQ5gXTEGuINqHgwXQWkUO6bhgSYqdHGX3zbZ5+qWpI4eui3dHZ1Ll0VH +6Icpb7ORTQwhc6W8KBlybssYPSlGOEBGUjYGNheoz9FpoSkxCis+P8ZNKtrmpPoq +Su0eOOGFOFHG02eOgPVxSwrDeN9MVJo7BPysGMHJmQIDAQABMA0GCSqGSIb3DQEB +CwUAA4ICAQC63g6NHmQKbiy3G6iaDkpUSbr5Mq2YgU61XnvWVyREqDcy/BXCw9oY +SJ/KUvCpqPnACNOFqjadRAmPiA9nf2WduoCgwQGV/YRFGswSuVvh/3X2TX5NWvbS +t8MQDttQg1dxpiMUjlu3rqhfohBdWJvp2lVSdpDb/MOlXBc/+p7HfOHwhqB7wwPN +NNbSKUbZqZxmD8cOf1X0hASr1yfFPj+2vST3ESaON8S0T2p63YX/sD5jvOUiEuyw +I5WcvLmiRZA07SH8nWyckLY3qWL+OlhSZrlAnolWS00b+7h5LNuRYEjKzwVgntoA +aCopyQih6wIk0+AfJO4sfhJBmQhnIrAaP/zwBH5g9zVizLf5H7U+hNXrMwgw55Sq +vjMdkZHvPKUXTvVit/rYE9H+PY3brkRWzOl4V/i/ZLJJm5805H/NyTbz9kPMJw2Q +nn+KOpfXXySD39f8iuRgSKXsYNul38hxWgcZZ6g+sOOp2n/VUmf0eZUWNnJ8i7AP +4Qif7aDKMcibOwSwsB+DKZXDvZ5XSdnMphtuLS5rPSL81rVRmWC2DMfQ2eP8j0WN +VTroSk0xedQ7Qr+9TNooi9IyzX6n1a2S1UiciEZ3ZcDbXPl/P01m+IYZyPnLv0+9 +ZeioZYh1JLv3/OKsMrMLTfh2ZCj3aXwmc2Owi/wU2LS5QUOMcHH7CQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.csr b/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.csr new file mode 100644 index 000000000..8a9909f77 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.csr @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEcTCCAlkCAQAwLDEbMBkGA1UEChMSRG9ja2VyIEJvaWxlcnBsYXRlMQ0wCwYD +VQQDFAQqLnZtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyt0yFIsg +713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik9FW3mcqh75sGYwIOBmNdHfsm +Q3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyELAFY5w+iqO1xcLTZO/aOiWXw +BWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6KZ6blxg+regwPEI94MtHbmk47 +ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEswuuxkMlWWGhcqYnA9UjbbEZoB +Fb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpyCOyv5z+0+rgR0IxzvhabBpFP +ZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9hsuLaM76mR6W1MbIMe7E93o/ +SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEAlXtPCbn+cbKLlxWpA3JS1ePi +/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMoS7OotF/zOaryQYi4NRi0wktt +K6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efqlqSOHrot3R2dS5dFR+iHKW+z +kU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEpMQorPj/GTSra5qT6KkrtHjjh +hThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEAAaAAMA0GCSqGSIb3DQEBCwUA +A4ICAQBsEBgC2YepuZq/8UqvKMZKVy/etDKXj7BB+QPb+leNiKD7p4LDxHJsZSH8 +Ku9uMPeLfiQDn5jA41k5SlGttzvObd65RdEbO3yHpqsg05EGSDDLfaE1k2Al/qmX +/o8roPZF7+2kZthgMAgkcokS54LYqEYTGqOf3J9Ss0yRIZwhaOVebfFIbIOdpw0B +JNMIJPHTMdZrcuRVI+wR1uPLIlEJzBvxTGbTrvPU25WJFtu+EajKqXO0SHdy0yx8 +uH4ykRBJRc36+oYo7nZ5D56dh7pZn3+9J64FKAOV0Q3KqMFieGy053ezuhJd70eZ +UozTgfjs3WpMzoYmKETSyl3XZSdInRe+sUlKPruTsKyg69oYxjPlrGfAmmGcCFca +TnZinT18dI92zK7OtOVkmYeYKC1lwuhftVrNMXzZuHOGpS9NNYtc4nDqDMIEOfV3 +6rCdu03WjEgJ+Z67tJs16xOx9du4/EHxS2Ijn9DPfVJvYy0TgzDi1BUpjWx0KTLx +C4OQbEZ/QTWmHVbSch/hcZhzbf7SNh5RpnW4EtmcpDFjIKMfxJmoKeiTf7qnilx0 +7uRvsZFKoDKRDOFiPfgMg5AOtLHziYsd9m0tJjC2GHvFuPjzOtzhnUUjmmvht170 +2aqKakjST4amg7jzLcs871HX0/WjOtt29NpOz140blkKf1bisg== +-----END CERTIFICATE REQUEST----- \ No newline at end of file diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.key b/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.key new file mode 100644 index 000000000..c9eec145f --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/ssl/server.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKAIBAAKCAgEAyt0yFIsg713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik +9FW3mcqh75sGYwIOBmNdHfsmQ3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyE +LAFY5w+iqO1xcLTZO/aOiWXwBWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6K +Z6blxg+regwPEI94MtHbmk47ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEsw +uuxkMlWWGhcqYnA9UjbbEZoBFb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpy +COyv5z+0+rgR0IxzvhabBpFPZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9 +hsuLaM76mR6W1MbIMe7E93o/SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEA +lXtPCbn+cbKLlxWpA3JS1ePi/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMo +S7OotF/zOaryQYi4NRi0wkttK6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efq +lqSOHrot3R2dS5dFR+iHKW+zkU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEp +MQorPj/GTSra5qT6KkrtHjjhhThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEA +AQKCAgAbZPdoUsllyZbC+LNkYZ19ILD5QIDNjfRb1xMGQmkXyQz1B+zOmeyrNfPc +OWEJabOfJTfj3pByN7SzG3US4333HNpQnW6mbmqqZ0HFFqPrXR/Ecuf+UUhCG5hp +m3bgM2vKbyccYsmg0VHcKfzrU7RvTTP/UNMjx2fThwvvwS+ttuSdF0HVcXJB5sfP +OWWnZNhkdHZlRf81VCED/jsZqCZYEh5eMyj9AoXvXL4zayPPf+tC0DSKaXW2Xlxg +tZQhqup8+a9nlxZia0Z9hu8clo6jXkiP8FuKgfCMV0cOjiCKLLHS5svTbLLsVWwJ +F2ZAdVcD6mWQ43qHOEK5NEzGvQKO14CaOLnVT2yAkMcyNohsEgoDP9oCBGDJQbBH +NmtZfpVjjtuTr9P9TEkU1FcBRo0x6Il/DkzamGbOeFAmgnaGElhJ5c/CAG7whaIf +mUfFOBGPH/wESY3gBOACDofeSh27RrlvbLaPiCGKivDUTBmhBsIuso6XqOKbvtfV +/HhhndpdRVfIj4DdE7gIrLIGN977JMVAXFCNz7KrvAWwcOXrCHCoWpklJ9repq8l +26ICY8K7VXktzDHQUmhd88ZWR+9ASURsJghUgZUOcMrEGyvci6Y8hpLhHiNVPHuQ ++ps7tpPsXSntBUqWBzhRZh74+nJlOOV6oYykl30JT2JzB6lwiQKCAQEA9ecn8N2z +20tR2UEiTv/MjVSepQtAAajegvcd1iasvvQKXnh3XLmoZHzH2tTa0lp5RIZpUQPl +lOTwko0lYTBnYblt65AJQ3FTgisNobIpoqE8BFXLm6wggz7CbabjmPGDe173lPGR +sI0YSKYvzrdn4zw8Fh6WULJyZHLi58zJYL3r0WBDiOoxpGaGA1GlmkuIWjhKHaX2 +OvF1vOuQDJ2eDyTc5TYFC0NKG76Mvanov5L/yrhNM/umbmp0SPspzHGZobAKUr20 +OazFT8S+2TA1OTxWNbiPbSimFoaZbEdqsNACGfVJWO8Sh8iqlt5RmEcSiSvGBj6L +QKprRO9Fsp2GawKCAQEA0zGhRsnux4JTNsdUSYsEJtITMj6eE+nl7CoZ9DAOwC5X +6/aSpUE4TT+pWNrt9iluXiGL0j89UJ7r/L1OcsiyzGb8ig9NU4zr1NIGTZ0DstHi +HPYINjeiBJEFIy17kOQn+9/I5c4hBUwz6ihwNoEomymVB/EsLJKAML0AudJGKg+Z +/f/qrS40eab5SAiaKgsh0MZnj+vIxyGBydt6r2HGmjfNITVbXIu6IpO+6NXDwM/e +7v10AAZ3j9+gb1RedLg2ghuIuYU90hmMhtVWsh9nVmaOkMW9/WFgOPYvt/mHH/hR +d4pePZ9kACGmqo/b9sHvHw1YEubtCt1VUiNuFxnJCwKCAQBWnxz0vkRTJY8phsY9 +KeK2jm5sGTBs5T2syLwb6ffENFdKvAjgAw6Mh2And/+1ReWd+/MxdLv03UjZdxsJ +x3FDfXx5FH4O4ebW3a+pnAcKoN1xcX+N0O6LDRqUYcue3sTAOs3gC9CUbr91KAWD +Phw8ccWAzTmKJ7IgLFA982ekyoI9eTmRC159WRgwJxy844qerWF+XC4GyXP+HsTZ +jNRW5Vdi7sqMEyIR7+fIEAhLI88zbATWIPmZv6pC4ybwO7wwtsCMMQNBpdjDprzL +6S12ggikV+U+QKlxGe0FtYqhykRTPJKf32eZqVheWOZJTA/9fgv9ux52oxGycM8O +gmsNAoIBAQC60m5uZnd5uYnPLWkcXYNgq/kbO1UvHHut/FhVMKX7z4MrU0XKNfWO +MECoP5K9bU0aq+Y6KIMe7FapjvT0iSHRu1Cu+HZY8JI2A0xcIAeDijLRl7sP6wrB +q1+2DKgANjRAlWfsEfoX658JBpitPngjOheBnRCMpVQMyUT5HE/BKWf5zwdUB0mY +S+K8nA90HcDeJIS8RcGolbVwUV0oBABhr/cf50lYhqozqCr7YQ33ZGs7Uq3oz8+4 +UARmN2YPLl3Znm3GX12em8c6B0LX8vvA7Jw06Rf2Ksup1+3Ce1PTLiEy9A4FyRf3 +Hc2HmBbnJAtZlr5QikMqlzzAmmLqwH6dAoIBAC+ryaQGJFsijCSuaDfRp/uy9xnd +DjgMdTwjl5WLBmyudChVMANl8eqCbvVO41CN84yORk03oQ4cx0eKxAZaLaSzgkb3 +W0X2nFQe7VJSYMQswCQ+1WfJvEFrIdkEKIa//uQdhqNrgUKSNVhhSTMbNEkDTIWn +ssbv2H9hvUaFt/J/vP9zCKuU5oYvNU7Oi6ZXRYezRn9atlJYanLFoJnHUBRzGms5 +K0vhdCPDXQq87z5Yudoh0jLUQF9Nx0GTWeBceQ9n5hZeRUNQWxP4AJThQX9KSPTS +mbL3Kh4XNRmAUJ2N+Njh+3dg91s+JkKvC1wcspLsmLPQe+9AxBSH9y5JE/8= +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.conf new file mode 100644 index 000000000..a5df62ef8 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.conf @@ -0,0 +1,2 @@ +# compatibility for PHP and TYPO3 Docker Boilerplate +include /opt/docker/etc/nginx/vhost.common.d/*.conf; diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/.gitkeep b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-general.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-general.conf new file mode 100644 index 000000000..31c9bf05a --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-general.conf @@ -0,0 +1 @@ +client_max_body_size ; diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-location-root.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-location-root.conf new file mode 100644 index 000000000..28fd811bc --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-location-root.conf @@ -0,0 +1,3 @@ +location / { + try_files $uri $uri/ /?$query_string; +} diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-log.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-log.conf new file mode 100644 index 000000000..9646c6826 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-log.conf @@ -0,0 +1,2 @@ +access_log /docker.stdout; +error_log /docker.stderr warn; diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-php.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-php.conf new file mode 100644 index 000000000..22b08a50d --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.common.d/10-php.conf @@ -0,0 +1,7 @@ +location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_read_timeout ; +} diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.conf new file mode 100644 index 000000000..b4df6d710 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.conf @@ -0,0 +1,28 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + + server_name _ docker; + + root ""; + index ; + + include /opt/docker/etc/nginx/vhost.common.d/*.conf; +} + +############## +# SSL +############## + +server { + listen 443 ssl default_server; + listen [::]:443 ssl default_server; + + server_name _ docker; + + root ""; + index ; + + include /opt/docker/etc/nginx/vhost.common.d/*.conf; + include /opt/docker/etc/nginx/vhost.ssl.conf; +} diff --git a/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.ssl.conf b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.ssl.conf new file mode 100644 index 000000000..28e8aab17 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/nginx/vhost.ssl.conf @@ -0,0 +1,6 @@ +ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive +ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA'; +ssl_prefer_server_ciphers on; + +ssl_certificate /opt/docker/etc/nginx/ssl/server.crt; +ssl_certificate_key /opt/docker/etc/nginx/ssl/server.key; diff --git a/docker/php-nginx/8.5-alpine/conf/etc/supervisor.d/nginx.conf b/docker/php-nginx/8.5-alpine/conf/etc/supervisor.d/nginx.conf new file mode 100644 index 000000000..657bf499b --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/etc/supervisor.d/nginx.conf @@ -0,0 +1,14 @@ +[group:nginx] +programs=nginxd +priority=20 + +[program:nginxd] +command = /opt/docker/bin/service.d/nginx.sh +process_name=%(program_name)s +startsecs = 0 +autostart = true +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/.gitkeep b/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/10-nginx.sh b/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/10-nginx.sh new file mode 100644 index 000000000..1ba70f963 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/10-nginx.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Remove daemon statement (will be added as command line argument) +go-replace --mode=lineinfile --regex --regex-backrefs \ + -s '^[\s#]*daemon ' -r '' \ + -- /etc/nginx/nginx.conf + +go-replace --mode=line --regex --regex-backrefs \ + -s '^([ \t]*access_log)[ \t]*([^\t ;]+)(.*;)$' -r '$1 /docker.stdout $3' \ + -s '^([ \t]*error_log)[ \t]*([^\t ;]+)(.*;)$' -r '$1 /docker.stderr $3' \ + -- /etc/nginx/nginx.conf + +# Enable nginx main config +mkdir -p /etc/nginx/conf.d/ +ln -sf /opt/docker/etc/nginx/main.conf /etc/nginx/conf.d/10-docker.conf + +rm -f \ + /etc/nginx/sites-enabled/default \ + /etc/nginx/conf.d/default.conf + +if [[ "$IMAGE_FAMILY" == "RedHat" ]] || [[ "$IMAGE_FAMILY" == "Alpine" ]]; then + ln -sf /opt/docker/etc/nginx/nginx.conf /etc/nginx/nginx.conf +fi + +# Clear log dir +rm -rf /var/lib/nginx/logs +mkdir -p /var/lib/nginx/logs + +# Set log to stdout/stderr +ln -sf /var/lib/nginx/logs/access.log /docker.stdout +ln -sf /var/lib/nginx/logs/error.log /docker.stderr + +# Fix rights of ssl files +chown -R root:root /opt/docker/etc/nginx/ssl +find /opt/docker/etc/nginx/ssl -type d -exec chmod 750 {} \; +find /opt/docker/etc/nginx/ssl -type f -exec chmod 640 {} \; diff --git a/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/10-php.sh b/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..4a7d82647 --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# Restrict php-fpm to local connection +go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 127.0.0.1:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' diff --git a/docker/php-nginx/8.5-alpine/conf/provision/entrypoint.d/.gitkeep b/docker/php-nginx/8.5-alpine/conf/provision/entrypoint.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5-alpine/conf/provision/entrypoint.d/20-nginx.sh b/docker/php-nginx/8.5-alpine/conf/provision/entrypoint.d/20-nginx.sh new file mode 100644 index 000000000..0264b6c2e --- /dev/null +++ b/docker/php-nginx/8.5-alpine/conf/provision/entrypoint.d/20-nginx.sh @@ -0,0 +1,24 @@ +# Create tmp dir for nginx +mkdir -p /var/tmp/nginx/ + +# Prevent startup of nginx (ubuntu 16.04 needs it) +ln -f -s /var/lib/nginx/logs /var/log/nginx + +# Replace markers +go-replace \ + -s "" -r "$WEB_DOCUMENT_INDEX" \ + -s "" -r "$WEB_DOCUMENT_ROOT" \ + -s "" -r "$WEB_ALIAS_DOMAIN" \ + -s "" -r "$HOSTNAME" \ + -s "" -r "$WEB_PHP_SOCKET" \ + -s "" -r "$WEB_PHP_TIMEOUT" \ + -s "" -r "$SERVICE_NGINX_CLIENT_MAX_BODY_SIZE" \ + --path=/opt/docker/etc/nginx/ \ + --path-pattern='*.conf' \ + --ignore-empty + +if [[ -z "$WEB_PHP_SOCKET" ]]; then + ## WEB_PHP_SOCKET is not set, remove PHP files + rm -f -- /opt/docker/etc/nginx/conf.d/10-php.conf + rm -f -- /opt/docker/etc/nginx/vhost.common.d/10-php.conf +fi diff --git a/docker/php-nginx/8.5/Dockerfile b/docker/php-nginx/8.5/Dockerfile new file mode 100644 index 000000000..10fd51d04 --- /dev/null +++ b/docker/php-nginx/8.5/Dockerfile @@ -0,0 +1,28 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-nginx:8.5 +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + +FROM webdevops/php:8.5 + +ENV WEB_DOCUMENT_ROOT=/app \ + WEB_DOCUMENT_INDEX=index.php \ + WEB_ALIAS_DOMAIN=*.vm \ + WEB_PHP_TIMEOUT=600 \ + WEB_PHP_SOCKET="" +ENV WEB_PHP_SOCKET=127.0.0.1:9000 +ENV SERVICE_NGINX_CLIENT_MAX_BODY_SIZE="50m" + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Install nginx + && printf "deb http://nginx.org/packages/debian/ $(docker-image-info dist-codename) nginx\n deb-src http://nginx.org/packages/debian/ $(docker-image-info dist-codename) nginx" \ + >> /etc/apt/sources.list \ + && curl -L https://nginx.org/keys/nginx_signing.key | apt-key add - \ + && apt-install \ + nginx \ + && docker-run-bootstrap \ + && docker-image-cleanup + +EXPOSE 80 443 diff --git a/docker/php-nginx/8.5/Dockerfile.jinja2 b/docker/php-nginx/8.5/Dockerfile.jinja2 new file mode 100644 index 000000000..19f483fee --- /dev/null +++ b/docker/php-nginx/8.5/Dockerfile.jinja2 @@ -0,0 +1,14 @@ +{{ docker.from("php", "8.5") }} + +{{ environment.web() }} +{{ environment.webPhp() }} +{{ environment.nginx() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ nginx.debian() }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} + +{{ docker.expose('80 443') }} diff --git a/docker/php-nginx/8.5/conf/bin/service.d/nginx.d/10-init.sh b/docker/php-nginx/8.5/conf/bin/service.d/nginx.d/10-init.sh new file mode 100644 index 000000000..8acb5111d --- /dev/null +++ b/docker/php-nginx/8.5/conf/bin/service.d/nginx.d/10-init.sh @@ -0,0 +1,5 @@ +if [[ ! -e "$WEB_DOCUMENT_ROOT" ]]; then + echo "" + echo "[WARNING] WEB_DOCUMENT_ROOT does not exists with path \"$WEB_DOCUMENT_ROOT\"!" + echo "" +fi diff --git a/docker/php-nginx/8.5/conf/bin/service.d/nginx.sh b/docker/php-nginx/8.5/conf/bin/service.d/nginx.sh new file mode 100644 index 000000000..3517c72a5 --- /dev/null +++ b/docker/php-nginx/8.5/conf/bin/service.d/nginx.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_NGINX_OPTS" ]]; then SERVICE_NGINX_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/nginx.d/" + +exec /usr/sbin/nginx -g 'daemon off;' $SERVICE_NGINX_OPTS diff --git a/docker/php-nginx/8.5/conf/etc/nginx/conf.d/.gitkeep b/docker/php-nginx/8.5/conf/etc/nginx/conf.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5/conf/etc/nginx/conf.d/10-php.conf b/docker/php-nginx/8.5/conf/etc/nginx/conf.d/10-php.conf new file mode 100644 index 000000000..9abe45f0a --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/conf.d/10-php.conf @@ -0,0 +1,3 @@ +upstream php { + server ; +} diff --git a/docker/php-nginx/8.5/conf/etc/nginx/global.conf b/docker/php-nginx/8.5/conf/etc/nginx/global.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/global.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-nginx/8.5/conf/etc/nginx/main.conf b/docker/php-nginx/8.5/conf/etc/nginx/main.conf new file mode 100644 index 000000000..06de0651b --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/main.conf @@ -0,0 +1,4 @@ +include /opt/docker/etc/nginx/global.conf; +include /opt/docker/etc/nginx/php.conf; +include /opt/docker/etc/nginx/conf.d/*.conf; +include /opt/docker/etc/nginx/vhost.conf; diff --git a/docker/php-nginx/8.5/conf/etc/nginx/php.conf b/docker/php-nginx/8.5/conf/etc/nginx/php.conf new file mode 100644 index 000000000..b6141db09 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/php.conf @@ -0,0 +1 @@ +# deprecated diff --git a/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.crt b/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.crt new file mode 100644 index 000000000..6b0694907 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIE1DCCArwCCQDMMwGnSuK0tTANBgkqhkiG9w0BAQsFADAsMRswGQYDVQQKExJE +b2NrZXIgQm9pbGVycGxhdGUxDTALBgNVBAMUBCoudm0wHhcNMTUwNTA0MTcxNDQw +WhcNMjUwNTAxMTcxNDQwWjAsMRswGQYDVQQKExJEb2NrZXIgQm9pbGVycGxhdGUx +DTALBgNVBAMUBCoudm0wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK +3TIUiyDvXelWeY9VXMrpjuZtYpVSDsACLpjFUhMnsP5/iKT0VbeZyqHvmwZjAg4G +Y10d+yZDdgv/xeu0HPOFbtR6pCp10d1tdLHZto5Cyuxu7IQsAVjnD6Ko7XFwtNk7 +9o6JZfAFaGL4w5MokrVmCtspnsMZH7/7zU4f96cbF39zLopnpuXGD6t6DA8Qj3gy +0duaTjs42bYRN+rwLzVKAev99iQ4kPMJn4vV6/Xk6rtoSzC67GQyVZYaFypicD1S +NtsRmgEVvjCBDbrLOneUiRwff6qxEsZi7Hxv7BKFj4iUWnII7K/nP7T6uBHQjHO+ +FpsGkU9lCMrCeVFBe8kKz/cbhd+yLUxXwAPr6gSOPmwn232Gy4tozvqZHpbUxsgx +7sT3ej9K66h1D7J+BjNFWYM1hbnC1r7H/xS7EBzBV8qRoQCVe08Juf5xsouXFakD +clLV4+L+1cxkpwsCQDly5g3tm/TBqA2O+ZJ+YHQDHKkzMyhLs6i0X/M5qvJBiLg1 +GLTCS20rpQ5gXTEGuINqHgwXQWkUO6bhgSYqdHGX3zbZ5+qWpI4eui3dHZ1Ll0VH +6Icpb7ORTQwhc6W8KBlybssYPSlGOEBGUjYGNheoz9FpoSkxCis+P8ZNKtrmpPoq +Su0eOOGFOFHG02eOgPVxSwrDeN9MVJo7BPysGMHJmQIDAQABMA0GCSqGSIb3DQEB +CwUAA4ICAQC63g6NHmQKbiy3G6iaDkpUSbr5Mq2YgU61XnvWVyREqDcy/BXCw9oY +SJ/KUvCpqPnACNOFqjadRAmPiA9nf2WduoCgwQGV/YRFGswSuVvh/3X2TX5NWvbS +t8MQDttQg1dxpiMUjlu3rqhfohBdWJvp2lVSdpDb/MOlXBc/+p7HfOHwhqB7wwPN +NNbSKUbZqZxmD8cOf1X0hASr1yfFPj+2vST3ESaON8S0T2p63YX/sD5jvOUiEuyw +I5WcvLmiRZA07SH8nWyckLY3qWL+OlhSZrlAnolWS00b+7h5LNuRYEjKzwVgntoA +aCopyQih6wIk0+AfJO4sfhJBmQhnIrAaP/zwBH5g9zVizLf5H7U+hNXrMwgw55Sq +vjMdkZHvPKUXTvVit/rYE9H+PY3brkRWzOl4V/i/ZLJJm5805H/NyTbz9kPMJw2Q +nn+KOpfXXySD39f8iuRgSKXsYNul38hxWgcZZ6g+sOOp2n/VUmf0eZUWNnJ8i7AP +4Qif7aDKMcibOwSwsB+DKZXDvZ5XSdnMphtuLS5rPSL81rVRmWC2DMfQ2eP8j0WN +VTroSk0xedQ7Qr+9TNooi9IyzX6n1a2S1UiciEZ3ZcDbXPl/P01m+IYZyPnLv0+9 +ZeioZYh1JLv3/OKsMrMLTfh2ZCj3aXwmc2Owi/wU2LS5QUOMcHH7CQ== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.csr b/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.csr new file mode 100644 index 000000000..8a9909f77 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.csr @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEcTCCAlkCAQAwLDEbMBkGA1UEChMSRG9ja2VyIEJvaWxlcnBsYXRlMQ0wCwYD +VQQDFAQqLnZtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyt0yFIsg +713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik9FW3mcqh75sGYwIOBmNdHfsm +Q3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyELAFY5w+iqO1xcLTZO/aOiWXw +BWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6KZ6blxg+regwPEI94MtHbmk47 +ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEswuuxkMlWWGhcqYnA9UjbbEZoB +Fb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpyCOyv5z+0+rgR0IxzvhabBpFP +ZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9hsuLaM76mR6W1MbIMe7E93o/ +SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEAlXtPCbn+cbKLlxWpA3JS1ePi +/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMoS7OotF/zOaryQYi4NRi0wktt +K6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efqlqSOHrot3R2dS5dFR+iHKW+z +kU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEpMQorPj/GTSra5qT6KkrtHjjh +hThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEAAaAAMA0GCSqGSIb3DQEBCwUA +A4ICAQBsEBgC2YepuZq/8UqvKMZKVy/etDKXj7BB+QPb+leNiKD7p4LDxHJsZSH8 +Ku9uMPeLfiQDn5jA41k5SlGttzvObd65RdEbO3yHpqsg05EGSDDLfaE1k2Al/qmX +/o8roPZF7+2kZthgMAgkcokS54LYqEYTGqOf3J9Ss0yRIZwhaOVebfFIbIOdpw0B +JNMIJPHTMdZrcuRVI+wR1uPLIlEJzBvxTGbTrvPU25WJFtu+EajKqXO0SHdy0yx8 +uH4ykRBJRc36+oYo7nZ5D56dh7pZn3+9J64FKAOV0Q3KqMFieGy053ezuhJd70eZ +UozTgfjs3WpMzoYmKETSyl3XZSdInRe+sUlKPruTsKyg69oYxjPlrGfAmmGcCFca +TnZinT18dI92zK7OtOVkmYeYKC1lwuhftVrNMXzZuHOGpS9NNYtc4nDqDMIEOfV3 +6rCdu03WjEgJ+Z67tJs16xOx9du4/EHxS2Ijn9DPfVJvYy0TgzDi1BUpjWx0KTLx +C4OQbEZ/QTWmHVbSch/hcZhzbf7SNh5RpnW4EtmcpDFjIKMfxJmoKeiTf7qnilx0 +7uRvsZFKoDKRDOFiPfgMg5AOtLHziYsd9m0tJjC2GHvFuPjzOtzhnUUjmmvht170 +2aqKakjST4amg7jzLcs871HX0/WjOtt29NpOz140blkKf1bisg== +-----END CERTIFICATE REQUEST----- \ No newline at end of file diff --git a/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.key b/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.key new file mode 100644 index 000000000..c9eec145f --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/ssl/server.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKAIBAAKCAgEAyt0yFIsg713pVnmPVVzK6Y7mbWKVUg7AAi6YxVITJ7D+f4ik +9FW3mcqh75sGYwIOBmNdHfsmQ3YL/8XrtBzzhW7UeqQqddHdbXSx2baOQsrsbuyE +LAFY5w+iqO1xcLTZO/aOiWXwBWhi+MOTKJK1ZgrbKZ7DGR+/+81OH/enGxd/cy6K +Z6blxg+regwPEI94MtHbmk47ONm2ETfq8C81SgHr/fYkOJDzCZ+L1ev15Oq7aEsw +uuxkMlWWGhcqYnA9UjbbEZoBFb4wgQ26yzp3lIkcH3+qsRLGYux8b+wShY+IlFpy +COyv5z+0+rgR0IxzvhabBpFPZQjKwnlRQXvJCs/3G4Xfsi1MV8AD6+oEjj5sJ9t9 +hsuLaM76mR6W1MbIMe7E93o/SuuodQ+yfgYzRVmDNYW5wta+x/8UuxAcwVfKkaEA +lXtPCbn+cbKLlxWpA3JS1ePi/tXMZKcLAkA5cuYN7Zv0wagNjvmSfmB0AxypMzMo +S7OotF/zOaryQYi4NRi0wkttK6UOYF0xBriDah4MF0FpFDum4YEmKnRxl9822efq +lqSOHrot3R2dS5dFR+iHKW+zkU0MIXOlvCgZcm7LGD0pRjhARlI2BjYXqM/RaaEp +MQorPj/GTSra5qT6KkrtHjjhhThRxtNnjoD1cUsKw3jfTFSaOwT8rBjByZkCAwEA +AQKCAgAbZPdoUsllyZbC+LNkYZ19ILD5QIDNjfRb1xMGQmkXyQz1B+zOmeyrNfPc +OWEJabOfJTfj3pByN7SzG3US4333HNpQnW6mbmqqZ0HFFqPrXR/Ecuf+UUhCG5hp +m3bgM2vKbyccYsmg0VHcKfzrU7RvTTP/UNMjx2fThwvvwS+ttuSdF0HVcXJB5sfP +OWWnZNhkdHZlRf81VCED/jsZqCZYEh5eMyj9AoXvXL4zayPPf+tC0DSKaXW2Xlxg +tZQhqup8+a9nlxZia0Z9hu8clo6jXkiP8FuKgfCMV0cOjiCKLLHS5svTbLLsVWwJ +F2ZAdVcD6mWQ43qHOEK5NEzGvQKO14CaOLnVT2yAkMcyNohsEgoDP9oCBGDJQbBH +NmtZfpVjjtuTr9P9TEkU1FcBRo0x6Il/DkzamGbOeFAmgnaGElhJ5c/CAG7whaIf +mUfFOBGPH/wESY3gBOACDofeSh27RrlvbLaPiCGKivDUTBmhBsIuso6XqOKbvtfV +/HhhndpdRVfIj4DdE7gIrLIGN977JMVAXFCNz7KrvAWwcOXrCHCoWpklJ9repq8l +26ICY8K7VXktzDHQUmhd88ZWR+9ASURsJghUgZUOcMrEGyvci6Y8hpLhHiNVPHuQ ++ps7tpPsXSntBUqWBzhRZh74+nJlOOV6oYykl30JT2JzB6lwiQKCAQEA9ecn8N2z +20tR2UEiTv/MjVSepQtAAajegvcd1iasvvQKXnh3XLmoZHzH2tTa0lp5RIZpUQPl +lOTwko0lYTBnYblt65AJQ3FTgisNobIpoqE8BFXLm6wggz7CbabjmPGDe173lPGR +sI0YSKYvzrdn4zw8Fh6WULJyZHLi58zJYL3r0WBDiOoxpGaGA1GlmkuIWjhKHaX2 +OvF1vOuQDJ2eDyTc5TYFC0NKG76Mvanov5L/yrhNM/umbmp0SPspzHGZobAKUr20 +OazFT8S+2TA1OTxWNbiPbSimFoaZbEdqsNACGfVJWO8Sh8iqlt5RmEcSiSvGBj6L +QKprRO9Fsp2GawKCAQEA0zGhRsnux4JTNsdUSYsEJtITMj6eE+nl7CoZ9DAOwC5X +6/aSpUE4TT+pWNrt9iluXiGL0j89UJ7r/L1OcsiyzGb8ig9NU4zr1NIGTZ0DstHi +HPYINjeiBJEFIy17kOQn+9/I5c4hBUwz6ihwNoEomymVB/EsLJKAML0AudJGKg+Z +/f/qrS40eab5SAiaKgsh0MZnj+vIxyGBydt6r2HGmjfNITVbXIu6IpO+6NXDwM/e +7v10AAZ3j9+gb1RedLg2ghuIuYU90hmMhtVWsh9nVmaOkMW9/WFgOPYvt/mHH/hR +d4pePZ9kACGmqo/b9sHvHw1YEubtCt1VUiNuFxnJCwKCAQBWnxz0vkRTJY8phsY9 +KeK2jm5sGTBs5T2syLwb6ffENFdKvAjgAw6Mh2And/+1ReWd+/MxdLv03UjZdxsJ +x3FDfXx5FH4O4ebW3a+pnAcKoN1xcX+N0O6LDRqUYcue3sTAOs3gC9CUbr91KAWD +Phw8ccWAzTmKJ7IgLFA982ekyoI9eTmRC159WRgwJxy844qerWF+XC4GyXP+HsTZ +jNRW5Vdi7sqMEyIR7+fIEAhLI88zbATWIPmZv6pC4ybwO7wwtsCMMQNBpdjDprzL +6S12ggikV+U+QKlxGe0FtYqhykRTPJKf32eZqVheWOZJTA/9fgv9ux52oxGycM8O +gmsNAoIBAQC60m5uZnd5uYnPLWkcXYNgq/kbO1UvHHut/FhVMKX7z4MrU0XKNfWO +MECoP5K9bU0aq+Y6KIMe7FapjvT0iSHRu1Cu+HZY8JI2A0xcIAeDijLRl7sP6wrB +q1+2DKgANjRAlWfsEfoX658JBpitPngjOheBnRCMpVQMyUT5HE/BKWf5zwdUB0mY +S+K8nA90HcDeJIS8RcGolbVwUV0oBABhr/cf50lYhqozqCr7YQ33ZGs7Uq3oz8+4 +UARmN2YPLl3Znm3GX12em8c6B0LX8vvA7Jw06Rf2Ksup1+3Ce1PTLiEy9A4FyRf3 +Hc2HmBbnJAtZlr5QikMqlzzAmmLqwH6dAoIBAC+ryaQGJFsijCSuaDfRp/uy9xnd +DjgMdTwjl5WLBmyudChVMANl8eqCbvVO41CN84yORk03oQ4cx0eKxAZaLaSzgkb3 +W0X2nFQe7VJSYMQswCQ+1WfJvEFrIdkEKIa//uQdhqNrgUKSNVhhSTMbNEkDTIWn +ssbv2H9hvUaFt/J/vP9zCKuU5oYvNU7Oi6ZXRYezRn9atlJYanLFoJnHUBRzGms5 +K0vhdCPDXQq87z5Yudoh0jLUQF9Nx0GTWeBceQ9n5hZeRUNQWxP4AJThQX9KSPTS +mbL3Kh4XNRmAUJ2N+Njh+3dg91s+JkKvC1wcspLsmLPQe+9AxBSH9y5JE/8= +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.conf new file mode 100644 index 000000000..a5df62ef8 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.conf @@ -0,0 +1,2 @@ +# compatibility for PHP and TYPO3 Docker Boilerplate +include /opt/docker/etc/nginx/vhost.common.d/*.conf; diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/.gitkeep b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-general.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-general.conf new file mode 100644 index 000000000..31c9bf05a --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-general.conf @@ -0,0 +1 @@ +client_max_body_size ; diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-location-root.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-location-root.conf new file mode 100644 index 000000000..28fd811bc --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-location-root.conf @@ -0,0 +1,3 @@ +location / { + try_files $uri $uri/ /?$query_string; +} diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-log.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-log.conf new file mode 100644 index 000000000..9646c6826 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-log.conf @@ -0,0 +1,2 @@ +access_log /docker.stdout; +error_log /docker.stderr warn; diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-php.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-php.conf new file mode 100644 index 000000000..22b08a50d --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.common.d/10-php.conf @@ -0,0 +1,7 @@ +location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $request_filename; + fastcgi_read_timeout ; +} diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.conf new file mode 100644 index 000000000..b4df6d710 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.conf @@ -0,0 +1,28 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + + server_name _ docker; + + root ""; + index ; + + include /opt/docker/etc/nginx/vhost.common.d/*.conf; +} + +############## +# SSL +############## + +server { + listen 443 ssl default_server; + listen [::]:443 ssl default_server; + + server_name _ docker; + + root ""; + index ; + + include /opt/docker/etc/nginx/vhost.common.d/*.conf; + include /opt/docker/etc/nginx/vhost.ssl.conf; +} diff --git a/docker/php-nginx/8.5/conf/etc/nginx/vhost.ssl.conf b/docker/php-nginx/8.5/conf/etc/nginx/vhost.ssl.conf new file mode 100644 index 000000000..28e8aab17 --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/nginx/vhost.ssl.conf @@ -0,0 +1,6 @@ +ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive +ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA'; +ssl_prefer_server_ciphers on; + +ssl_certificate /opt/docker/etc/nginx/ssl/server.crt; +ssl_certificate_key /opt/docker/etc/nginx/ssl/server.key; diff --git a/docker/php-nginx/8.5/conf/etc/supervisor.d/nginx.conf b/docker/php-nginx/8.5/conf/etc/supervisor.d/nginx.conf new file mode 100644 index 000000000..657bf499b --- /dev/null +++ b/docker/php-nginx/8.5/conf/etc/supervisor.d/nginx.conf @@ -0,0 +1,14 @@ +[group:nginx] +programs=nginxd +priority=20 + +[program:nginxd] +command = /opt/docker/bin/service.d/nginx.sh +process_name=%(program_name)s +startsecs = 0 +autostart = true +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-nginx/8.5/conf/provision/bootstrap.d/.gitkeep b/docker/php-nginx/8.5/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5/conf/provision/bootstrap.d/10-nginx.sh b/docker/php-nginx/8.5/conf/provision/bootstrap.d/10-nginx.sh new file mode 100644 index 000000000..1ba70f963 --- /dev/null +++ b/docker/php-nginx/8.5/conf/provision/bootstrap.d/10-nginx.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Remove daemon statement (will be added as command line argument) +go-replace --mode=lineinfile --regex --regex-backrefs \ + -s '^[\s#]*daemon ' -r '' \ + -- /etc/nginx/nginx.conf + +go-replace --mode=line --regex --regex-backrefs \ + -s '^([ \t]*access_log)[ \t]*([^\t ;]+)(.*;)$' -r '$1 /docker.stdout $3' \ + -s '^([ \t]*error_log)[ \t]*([^\t ;]+)(.*;)$' -r '$1 /docker.stderr $3' \ + -- /etc/nginx/nginx.conf + +# Enable nginx main config +mkdir -p /etc/nginx/conf.d/ +ln -sf /opt/docker/etc/nginx/main.conf /etc/nginx/conf.d/10-docker.conf + +rm -f \ + /etc/nginx/sites-enabled/default \ + /etc/nginx/conf.d/default.conf + +if [[ "$IMAGE_FAMILY" == "RedHat" ]] || [[ "$IMAGE_FAMILY" == "Alpine" ]]; then + ln -sf /opt/docker/etc/nginx/nginx.conf /etc/nginx/nginx.conf +fi + +# Clear log dir +rm -rf /var/lib/nginx/logs +mkdir -p /var/lib/nginx/logs + +# Set log to stdout/stderr +ln -sf /var/lib/nginx/logs/access.log /docker.stdout +ln -sf /var/lib/nginx/logs/error.log /docker.stderr + +# Fix rights of ssl files +chown -R root:root /opt/docker/etc/nginx/ssl +find /opt/docker/etc/nginx/ssl -type d -exec chmod 750 {} \; +find /opt/docker/etc/nginx/ssl -type f -exec chmod 640 {} \; diff --git a/docker/php-nginx/8.5/conf/provision/bootstrap.d/10-php.sh b/docker/php-nginx/8.5/conf/provision/bootstrap.d/10-php.sh new file mode 100644 index 000000000..4a7d82647 --- /dev/null +++ b/docker/php-nginx/8.5/conf/provision/bootstrap.d/10-php.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# Restrict php-fpm to local connection +go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 127.0.0.1:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' diff --git a/docker/php-nginx/8.5/conf/provision/entrypoint.d/.gitkeep b/docker/php-nginx/8.5/conf/provision/entrypoint.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-nginx/8.5/conf/provision/entrypoint.d/20-nginx.sh b/docker/php-nginx/8.5/conf/provision/entrypoint.d/20-nginx.sh new file mode 100644 index 000000000..0264b6c2e --- /dev/null +++ b/docker/php-nginx/8.5/conf/provision/entrypoint.d/20-nginx.sh @@ -0,0 +1,24 @@ +# Create tmp dir for nginx +mkdir -p /var/tmp/nginx/ + +# Prevent startup of nginx (ubuntu 16.04 needs it) +ln -f -s /var/lib/nginx/logs /var/log/nginx + +# Replace markers +go-replace \ + -s "" -r "$WEB_DOCUMENT_INDEX" \ + -s "" -r "$WEB_DOCUMENT_ROOT" \ + -s "" -r "$WEB_ALIAS_DOMAIN" \ + -s "" -r "$HOSTNAME" \ + -s "" -r "$WEB_PHP_SOCKET" \ + -s "" -r "$WEB_PHP_TIMEOUT" \ + -s "" -r "$SERVICE_NGINX_CLIENT_MAX_BODY_SIZE" \ + --path=/opt/docker/etc/nginx/ \ + --path-pattern='*.conf' \ + --ignore-empty + +if [[ -z "$WEB_PHP_SOCKET" ]]; then + ## WEB_PHP_SOCKET is not set, remove PHP files + rm -f -- /opt/docker/etc/nginx/conf.d/10-php.conf + rm -f -- /opt/docker/etc/nginx/vhost.common.d/10-php.conf +fi diff --git a/docker/php-official/5.6/Dockerfile b/docker/php-official/5.6/Dockerfile index df945418c..1f0338312 100644 --- a/docker/php-official/5.6/Dockerfile +++ b/docker/php-official/5.6/Dockerfile @@ -142,7 +142,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -172,7 +172,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 5.x && pecl install apcu-4.0.11 \ diff --git a/docker/php-official/7.0/Dockerfile b/docker/php-official/7.0/Dockerfile index ee67b29db..c93cc525d 100644 --- a/docker/php-official/7.0/Dockerfile +++ b/docker/php-official/7.0/Dockerfile @@ -142,7 +142,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -172,7 +172,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x && pecl install apcu \ diff --git a/docker/php-official/7.1-alpine/Dockerfile b/docker/php-official/7.1-alpine/Dockerfile index 2b555bf4c..b048bdd55 100644 --- a/docker/php-official/7.1-alpine/Dockerfile +++ b/docker/php-official/7.1-alpine/Dockerfile @@ -148,7 +148,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -159,7 +159,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ hash \ pcntl \ @@ -177,7 +177,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x && printf "no --disable-memcached-sasl\n" | pecl install memcached-3.0.4 \ diff --git a/docker/php-official/7.1/Dockerfile b/docker/php-official/7.1/Dockerfile index 0670dda63..228fe7191 100644 --- a/docker/php-official/7.1/Dockerfile +++ b/docker/php-official/7.1/Dockerfile @@ -142,7 +142,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -172,7 +172,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x && pecl install apcu \ diff --git a/docker/php-official/7.2-alpine/Dockerfile b/docker/php-official/7.2-alpine/Dockerfile index 19d9e9799..9c576f6f8 100644 --- a/docker/php-official/7.2-alpine/Dockerfile +++ b/docker/php-official/7.2-alpine/Dockerfile @@ -148,7 +148,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -159,7 +159,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ hash \ pcntl \ @@ -177,7 +177,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master diff --git a/docker/php-official/7.2/Dockerfile b/docker/php-official/7.2/Dockerfile index 065378b3b..0b0fb6f14 100644 --- a/docker/php-official/7.2/Dockerfile +++ b/docker/php-official/7.2/Dockerfile @@ -142,7 +142,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -171,7 +171,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x && pecl install apcu \ diff --git a/docker/php-official/7.3-alpine/Dockerfile b/docker/php-official/7.3-alpine/Dockerfile index a8785a913..8204398a6 100644 --- a/docker/php-official/7.3-alpine/Dockerfile +++ b/docker/php-official/7.3-alpine/Dockerfile @@ -148,7 +148,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -159,7 +159,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ hash \ pcntl \ @@ -177,7 +177,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master diff --git a/docker/php-official/7.3/Dockerfile b/docker/php-official/7.3/Dockerfile index dfb574912..081ab7660 100644 --- a/docker/php-official/7.3/Dockerfile +++ b/docker/php-official/7.3/Dockerfile @@ -142,7 +142,7 @@ RUN set -x \ && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -171,7 +171,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x && pecl install apcu \ diff --git a/docker/php-official/7.4-alpine/Dockerfile b/docker/php-official/7.4-alpine/Dockerfile index aa250416b..bc0458a51 100644 --- a/docker/php-official/7.4-alpine/Dockerfile +++ b/docker/php-official/7.4-alpine/Dockerfile @@ -151,7 +151,7 @@ RUN set -x \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -165,7 +165,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ pcntl \ pdo_mysql \ @@ -182,7 +182,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master diff --git a/docker/php-official/7.4/Dockerfile b/docker/php-official/7.4/Dockerfile index 7df60f658..9db5049bc 100644 --- a/docker/php-official/7.4/Dockerfile +++ b/docker/php-official/7.4/Dockerfile @@ -142,9 +142,10 @@ RUN set -x \ && PKG_CONFIG_PATH=/usr/local docker-php-ext-configure intl \ && docker-php-ext-configure gd --with-jpeg --with-freetype --with-webp \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ + amqp \ bz2 \ calendar \ exif \ @@ -170,7 +171,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x && pecl install apcu \ diff --git a/docker/php-official/8.0-alpine/Dockerfile b/docker/php-official/8.0-alpine/Dockerfile index 452f79a7d..5667a398e 100644 --- a/docker/php-official/8.0-alpine/Dockerfile +++ b/docker/php-official/8.0-alpine/Dockerfile @@ -151,7 +151,7 @@ RUN set -x \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -165,7 +165,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ pcntl \ pdo_mysql \ @@ -181,7 +181,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master diff --git a/docker/php-official/8.0/Dockerfile b/docker/php-official/8.0/Dockerfile index b22800529..fd2e752ee 100644 --- a/docker/php-official/8.0/Dockerfile +++ b/docker/php-official/8.0/Dockerfile @@ -144,7 +144,7 @@ RUN set -x \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ amqp \ @@ -174,7 +174,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ && pecl install memcached \ && pecl install apcu \ diff --git a/docker/php-official/8.1-alpine/Dockerfile b/docker/php-official/8.1-alpine/Dockerfile index 942ed80a0..a7af18f09 100644 --- a/docker/php-official/8.1-alpine/Dockerfile +++ b/docker/php-official/8.1-alpine/Dockerfile @@ -149,7 +149,7 @@ RUN set -x \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -163,7 +163,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ pcntl \ pdo_mysql \ @@ -178,7 +178,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master diff --git a/docker/php-official/8.1/Dockerfile b/docker/php-official/8.1/Dockerfile index 7a2822bc7..d1c15bdd3 100644 --- a/docker/php-official/8.1/Dockerfile +++ b/docker/php-official/8.1/Dockerfile @@ -144,7 +144,7 @@ RUN set -x \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ amqp \ @@ -173,7 +173,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ && pecl install memcached \ && pecl install apcu \ diff --git a/docker/php-official/8.2-alpine/Dockerfile b/docker/php-official/8.2-alpine/Dockerfile index 248c74d63..8309a82fd 100644 --- a/docker/php-official/8.2-alpine/Dockerfile +++ b/docker/php-official/8.2-alpine/Dockerfile @@ -125,7 +125,7 @@ RUN set -x \ icu-dev \ postgresql-dev \ libxml2-dev \ - ldb-dev \ + samba-dev \ pcre-dev \ libxslt-dev \ libzip-dev \ @@ -149,7 +149,7 @@ RUN set -x \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -163,7 +163,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ pcntl \ pdo_mysql \ @@ -178,7 +178,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master @@ -230,7 +229,7 @@ RUN set -x \ icu-dev \ postgresql-dev \ libxml2-dev \ - ldb-dev \ + samba-dev \ pcre-dev \ libxslt-dev \ libzip-dev \ diff --git a/docker/php-official/8.2/Dockerfile b/docker/php-official/8.2/Dockerfile index 7442c7672..23b67b6cf 100644 --- a/docker/php-official/8.2/Dockerfile +++ b/docker/php-official/8.2/Dockerfile @@ -144,7 +144,7 @@ RUN set -x \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ amqp \ @@ -173,7 +173,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ && pecl install memcached \ && pecl install apcu \ diff --git a/docker/php-official/8.3-alpine/Dockerfile b/docker/php-official/8.3-alpine/Dockerfile index bd6d925ed..79aaf7bbb 100644 --- a/docker/php-official/8.3-alpine/Dockerfile +++ b/docker/php-official/8.3-alpine/Dockerfile @@ -125,7 +125,7 @@ RUN set -x \ icu-dev \ postgresql-dev \ libxml2-dev \ - ldb-dev \ + samba-dev \ pcre-dev \ libxslt-dev \ libzip-dev \ @@ -149,7 +149,7 @@ RUN set -x \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && docker-php-ext-configure ldap \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -163,7 +163,7 @@ RUN set -x \ intl \ gettext \ ldap \ - mysqli \ + mysqli \ imap \ pcntl \ pdo_mysql \ @@ -178,7 +178,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master @@ -230,7 +229,7 @@ RUN set -x \ icu-dev \ postgresql-dev \ libxml2-dev \ - ldb-dev \ + samba-dev \ pcre-dev \ libxslt-dev \ libzip-dev \ diff --git a/docker/php-official/8.3/Dockerfile b/docker/php-official/8.3/Dockerfile index aec235cf1..93c27f604 100644 --- a/docker/php-official/8.3/Dockerfile +++ b/docker/php-official/8.3/Dockerfile @@ -144,7 +144,7 @@ RUN set -x \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ - && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ && docker-php-ext-install \ bcmath \ amqp \ @@ -173,7 +173,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ && pecl install memcached \ && pecl install apcu \ diff --git a/docker/php-official/8.4-alpine/Dockerfile b/docker/php-official/8.4-alpine/Dockerfile index f79d3d0f6..9aa55af3d 100644 --- a/docker/php-official/8.4-alpine/Dockerfile +++ b/docker/php-official/8.4-alpine/Dockerfile @@ -125,7 +125,7 @@ RUN set -x \ icu-dev \ postgresql-dev \ libxml2-dev \ - ldb-dev \ + samba-dev \ pcre-dev \ libxslt-dev \ libzip-dev \ @@ -148,7 +148,7 @@ RUN set -x \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ - && docker-php-ext-configure ldap \ + && docker-php-ext-configure ldap \ && docker-php-ext-install \ bcmath \ bz2 \ @@ -176,7 +176,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ # Install extensions for PHP 7.x # Memcached for 7.3 can currently only be built from master @@ -228,7 +227,7 @@ RUN set -x \ icu-dev \ postgresql-dev \ libxml2-dev \ - ldb-dev \ + samba-dev \ pcre-dev \ libxslt-dev \ libzip-dev \ diff --git a/docker/php-official/8.4/Dockerfile b/docker/php-official/8.4/Dockerfile index f79839c03..5f607f7a7 100644 --- a/docker/php-official/8.4/Dockerfile +++ b/docker/php-official/8.4/Dockerfile @@ -143,7 +143,7 @@ RUN set -x \ && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ - && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ + && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ && docker-php-ext-install \ bcmath \ amqp \ @@ -171,7 +171,6 @@ RUN set -x \ xsl \ zip \ gd \ - gettext \ opcache \ && pecl install memcached \ && pecl install apcu \ diff --git a/docker/php-official/8.5-alpine/Dockerfile b/docker/php-official/8.5-alpine/Dockerfile new file mode 100644 index 000000000..77c16ed38 --- /dev/null +++ b/docker/php-official/8.5-alpine/Dockerfile @@ -0,0 +1,246 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-official:8.5-alpine +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + + +FROM php:8.5-fpm-alpine + +LABEL maintainer=info@webdevops.io \ + vendor=WebDevOps.io \ + io.webdevops.layout=8 \ + io.webdevops.version=1.5.0 + +ENV TERM="xterm" \ + LANG="C.UTF-8" \ + LC_ALL="C.UTF-8" +ENV DOCKER_CONF_HOME=/opt/docker/ \ + LOG_STDOUT="" \ + LOG_STDERR="" +ENV APPLICATION_USER=application \ + APPLICATION_GROUP=application \ + APPLICATION_PATH=/app \ + APPLICATION_UID=1000 \ + APPLICATION_GID=1000 +ENV PHP_SENDMAIL_PATH="/usr/sbin/sendmail -t -i" +ENV LD_PRELOAD="/usr/lib/preloadable_libiconv.so" +ENV COMPOSER_VERSION="2" + + +# Baselayout copy (from staged image) +COPY --from=webdevops/toolbox /baselayout/sbin/* /sbin/ +COPY --from=webdevops/toolbox /baselayout/usr/local/bin/* /usr/local/bin/ + + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Init bootstrap + # Add community + && echo https://dl-4.alpinelinux.org/alpine/v3.20/community/ >> /etc/apk/repositories \ + # System update + && /usr/local/bin/apk-upgrade \ + # Install base stuff + && apk-install \ + bash \ + ca-certificates \ + openssl \ + && update-ca-certificates \ + && /usr/local/bin/generate-dockerimage-info \ + ## Fix su execution (eg for tests) + && mkdir -p /etc/pam.d/ \ + && echo 'auth sufficient pam_rootok.so' >> /etc/pam.d/su + +RUN set -x \ + # Install services + && chmod +x /opt/docker/bin/* \ + && apk-install \ + supervisor \ + wget \ + curl \ + vim \ + sed \ + tzdata \ + busybox-suid \ + && chmod +s /sbin/gosu \ + && docker-run-bootstrap + +RUN set -x \ + && apk-install shadow \ + && apk-install \ + # Install common tools + zip \ + unzip \ + bzip2 \ + drill \ + ldns \ + openssh-client \ + rsync \ + patch \ + git \ + && docker-run-bootstrap + +RUN set -x \ + # Install php environment + && apk-install \ + imagemagick \ + graphicsmagick \ + ghostscript \ + jpegoptim \ + pngcrush \ + optipng \ + pngquant \ + vips \ + rabbitmq-c \ + c-client \ + # Libraries + libldap \ + icu-libs \ + libintl \ + libpq \ + libxslt \ + libgomp \ + libzip \ + libmemcached \ + yaml \ + # Build dependencies + linux-headers \ + autoconf \ + g++ \ + make \ + libtool \ + pcre-dev \ + gettext-dev \ + freetype-dev \ + gmp-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + vips-dev \ + krb5-dev \ + openssl-dev \ + imap-dev \ + imagemagick-dev \ + rabbitmq-c-dev \ + openldap-dev \ + icu-dev \ + postgresql-dev \ + libxml2-dev \ + samba-dev \ + pcre-dev \ + libxslt-dev \ + libzip-dev \ + libmemcached-dev \ + yaml-dev \ + # Install guetzli + && wget https://github.com/google/guetzli/archive/master.zip \ + && unzip master.zip \ + && make -C guetzli-master \ + && cp guetzli-master/bin/Release/guetzli /usr/local/bin/ \ + && rm -rf master.zip guetzli-master \ + # https://github.com/docker-library/php/issues/240 + && apk add gnu-libiconv --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ --allow-untrusted \ + # Install new version of ICU + && curl -sS -o /tmp/icu.tar.gz -L https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-src.tgz \ + && tar -zxf /tmp/icu.tar.gz -C /tmp && cd /tmp/icu/source && ./configure --prefix=/usr/local && make && make install && cd / && rm -rf /tmp/icu* \ + # Install extensions + && PKG_CONFIG_PATH=/usr/local docker-php-ext-configure intl \ + && docker-php-ext-configure gd --with-jpeg --with-freetype --with-webp \ + && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ + && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ + && cd /usr/src/php/ext/amqp && git submodule update --init \ + && docker-php-ext-configure ldap \ + && docker-php-ext-install \ + bcmath \ + bz2 \ + calendar \ + exif \ + ftp \ + gmp \ + ffi \ + imagick \ + intl \ + gettext \ + ldap \ + mysqli \ + pcntl \ + pdo_mysql \ + pdo_pgsql \ + pgsql \ + soap \ + sockets \ + sysvmsg \ + sysvsem \ + sysvshm \ + shmop \ + xsl \ + zip \ + gd \ + # Install extensions for PHP 7.x + # Memcached for 7.3 can currently only be built from master + && MEMCACHED="`mktemp -d`" \ + && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ + && docker-php-ext-configure $MEMCACHED \ + && docker-php-ext-install $MEMCACHED \ + && rm -rf $MEMCACHED \ + && pecl install apcu \ + && pecl install excimer \ + && pecl install opentelemetry \ + && pecl install protobuf \ + && pecl install vips \ + && pecl install yaml \ + && pecl install redis \ + && pecl install mongodb \ + && pecl install xmlrpc-1.0.0RC3 \ + && docker-php-ext-enable \ + apcu \ + excimer \ + opentelemetry \ + protobuf \ + vips \ + yaml \ + redis \ + xmlrpc \ + imagick \ + mongodb \ + # Uninstall dev and header packages + && apk del -f --purge \ + autoconf \ + linux-headers \ + g++ \ + make \ + libtool \ + pcre-dev \ + gettext-dev \ + freetype-dev \ + gmp-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + vips-dev \ + krb5-dev \ + openssl-dev \ + imap-dev \ + rabbitmq-c-dev \ + imagemagick-dev \ + openldap-dev \ + icu-dev \ + postgresql-dev \ + libxml2-dev \ + samba-dev \ + pcre-dev \ + libxslt-dev \ + libzip-dev \ + libmemcached-dev \ + yaml-dev \ + && rm -f /usr/local/etc/php-fpm.d/zz-docker.conf \ + && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer2 \ + && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer1 --1 \ + && ln -sf /usr/local/bin/composer2 /usr/local/bin/composer \ + # Enable php services + && docker-service enable syslog \ + && docker-service enable cron \ + && docker-run-bootstrap + +WORKDIR / +EXPOSE 9000 +ENTRYPOINT ["/entrypoint"] +CMD ["supervisord"] diff --git a/docker/php-official/8.5-alpine/Dockerfile.jinja2 b/docker/php-official/8.5-alpine/Dockerfile.jinja2 new file mode 100644 index 000000000..a8f0f2425 --- /dev/null +++ b/docker/php-official/8.5-alpine/Dockerfile.jinja2 @@ -0,0 +1,35 @@ + +{{ docker.fromOfficial("php", "8.5-fpm-alpine") }} + +{{ docker.version() }} + +{{ environment.general() }} +{{ environment.base() }} +{{ environment.baseApp() }} +{{ environment.phpOfficialSendmailWorkaround() }} {# Check if needed #} +{{ environment.phpAlpineIconvWorkaround() }} +{{ environment.phpComposerVersion() }} + +{{ baselayout.copy() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ bootstrap.alpine('3.20') }} + +RUN set -x \ + {{ base.alpine() }} \ + {{ provision.runBootstrap() }} + +RUN set -x \ + {{ baseapp.alpine() }} \ + {{ provision.runBootstrap() }} + +RUN set -x \ + {{ php.officialAlpine(version='8.5') }} \ + {{ provision.runBootstrap() }} + +{{ docker.workdir('/') }} +{{ docker.expose('9000') }} +{{ docker.entrypoint("/entrypoint") }} +{{ docker.cmd("supervisord") }} diff --git a/docker/php-official/8.5-alpine/conf/VERSION b/docker/php-official/8.5-alpine/conf/VERSION new file mode 100644 index 000000000..301160a93 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/VERSION @@ -0,0 +1 @@ +8 \ No newline at end of file diff --git a/docker/php-official/8.5-alpine/conf/bin/bootstrap.sh b/docker/php-official/8.5-alpine/conf/bin/bootstrap.sh new file mode 100644 index 000000000..b1b3acdbc --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/bootstrap.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec docker-run-bootstrap diff --git a/docker/php-official/8.5-alpine/conf/bin/config.sh b/docker/php-official/8.5-alpine/conf/bin/config.sh new file mode 100644 index 000000000..46265a3c0 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/config.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +shopt -s nullglob + +### + # Check if current user is root + # + ## +function rootCheck() { + # Root check + if [ "$(/usr/bin/whoami)" != "root" ]; then + echo "[ERROR] $* must be run as root" + exit 1 + fi +} + +### + # Create /docker.stdout and /docker.stderr + # + ## +function createDockerStdoutStderr() { + # link stdout from docker + if [[ -n "$LOG_STDOUT" ]]; then + echo "Log stdout redirected to $LOG_STDOUT" + else + LOG_STDOUT="/proc/$$/fd/1" + fi + + if [[ -n "$LOG_STDERR" ]]; then + echo "Log stderr redirected to $LOG_STDERR" + else + LOG_STDERR="/proc/$$/fd/2" + fi + + ln -f -s "$LOG_STDOUT" /docker.stdout + ln -f -s "$LOG_STDERR" /docker.stderr +} +### + # Include script directory text inside a file + # + # $1 -> path + # + ## +function includeScriptDir() { + if [[ -d "$1" ]]; then + for FILE in "$1"/*.sh; do + echo "-> Executing ${FILE}" + # run custom scripts, only once + . "$FILE" + done + fi +} + +### + # Show deprecation notice + # + ## +function deprecationNotice() { + echo "" + echo "###############################################################################" + echo "### THIS CALL IS DEPRECATED AND WILL BE REMOVED IN THE FUTURE" + echo "###" + echo "### $*" + echo "###" + echo "###############################################################################" + echo "" +} + +### + # Run "entrypoint" scripts + ## +function runEntrypoints() { + ############### + # Try to find entrypoint + ############### + + ENTRYPOINT_SCRIPT="/opt/docker/bin/entrypoint.d/${TASK}.sh" + + if [ -f "$ENTRYPOINT_SCRIPT" ]; then + . "$ENTRYPOINT_SCRIPT" + fi + + ############### + # Run default + ############### + if [ -f "/opt/docker/bin/entrypoint.d/default.sh" ]; then + . /opt/docker/bin/entrypoint.d/default.sh + fi + + exit 1 +} + + # Run "entrypoint" provisioning + ## +function runProvisionEntrypoint() { + includeScriptDir "/opt/docker/provision/entrypoint.d" + includeScriptDir "/entrypoint.d" +} + +### + # List environment variables (based on prefix) + ## +function envListVars() { + if [[ $# -eq 1 ]]; then + env | grep "^${1}" | cut -d= -f1 + else + env | cut -d= -f1 + fi +} + +### + # Get environment variable (even with dots in name) + # + ## +function envGetValue() { + awk "BEGIN {print ENVIRON[\"$1\"]}" +} diff --git a/docker/php-official/8.5-alpine/conf/bin/control.sh b/docker/php-official/8.5-alpine/conf/bin/control.sh new file mode 100644 index 000000000..22d189745 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/control.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +source /opt/docker/bin/config.sh + +rootCheck "$0" + +CONTROL_COMMAND="$1" +shift + +case "$CONTROL_COMMAND" in + + ## ------------------------------------------ + ## PROVISION + ## ------------------------------------------ + + ## main roles + "provision.role") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --tag entrypoint "$1" + ;; + + "provision.role.bootstrap") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap "$1" + ;; + + "provision.role.build") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag build [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag build "$1" + ;; + + "provision.role.onbuild") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag onbuild [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag onbuild "$1" + ;; + + "provision.role.entrypoint") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag entrypoint [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag entrypoint "$1" + ;; + + ## startup roles + "provision.role.startup") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --tag entrypoint --priority 50 "$1" + ;; + + "provision.role.startup.bootstrap") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --priority 50 "$1" + ;; + + "provision.role.startup.build") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag build --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag build --priority 50 "$1" + ;; + + "provision.role.startup.onbuild") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag onbuild --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag onbuild --priority 50 "$1" + ;; + + "provision.role.startup.entrypoint") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag entrypoint --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag entrypoint --priority 50 "$1" + ;; + + ## finish roles + "provision.role.finish") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --tag entrypoint --priority 200 "$1" + ;; + + "provision.role.finish.bootstrap") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --priority 200 "$1" + ;; + + "provision.role.finish.build") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag build --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag build --priority 200 "$1" + ;; + + "provision.role.finish.onbuild") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag onbuild --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag onbuild --priority 200 "$1" + ;; + + "provision.role.finish.entrypoint") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag entrypoint --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag entrypoint --priority 200 "$1" + ;; + + ## ------------------------------------------ + ## Service + ## ------------------------------------------ + + "service.enable") + deprecationNotice " Please use >>docker-service-enable [service]<<" + docker-service-enable "$1" + ;; + + "service.disable") + deprecationNotice " Please use >>docker-service-disable [service]<<" + docker-service-disable "$1" + ;; + + ## ------------------------------------------ + ## Version + ## ------------------------------------------ + + "version.get") + cat /opt/docker/VERSION + ;; + + "version.require.min") + EXPECTED_VERSION="$1" + CURRENT_VERSION="$(cat /opt/docker/VERSION)" + if [ "$CURRENT_VERSION" -lt "$EXPECTED_VERSION" ]; then + echo "-----------------------------------------------------------" + echo "--- This docker image is not up2date!" + echo "--- " + echo "--- Version expected min: $EXPECTED_VERSION" + echo "--- Version current: $CURRENT_VERSION" + echo "--- " + echo "--- Run 'docker pull ' to update image" + echo "-----------------------------------------------------------" + exit 1 + fi + ;; + + "version.require.max") + EXPECTED_VERSION="$1" + CURRENT_VERSION="$(cat /opt/docker/VERSION)" + if [ "$CURRENT_VERSION" -gt "$EXPECTED_VERSION" ]; then + echo "-----------------------------------------------------------" + echo "--- This docker image is too new!" + echo "--- " + echo "--- Version expected max: $EXPECTED_VERSION" + echo "--- Version current: $CURRENT_VERSION" + echo "-----------------------------------------------------------" + exit 1 + fi + ;; + + + "buildtime.get") + cat /opt/docker/BUILDTIME + ;; + + *) + echo "[ERROR] Invalid controll command: \"${CONTROL_COMMAND}\"" + exit 1 + ;; +esac diff --git a/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/cli.sh b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/cli.sh new file mode 100644 index 000000000..fe212a8ea --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/cli.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +############################################# +## Run CLI_SCRIPT from environment variable +############################################# + +if [ -n "${CLI_SCRIPT}" ]; then + if [ -n "$APPLICATION_USER" ]; then + # Run as EFFECTIVE_USER + shift + exec gosu "${APPLICATION_USER}" ${CLI_SCRIPT} "$@" + else + # Run as root + exec ${CLI_SCRIPT} "$@" + fi +else + echo "[ERROR] No CLI_SCRIPT in in docker environment defined" + exit 1 +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/default.sh b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/default.sh new file mode 100644 index 000000000..a1be715fe --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/default.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec "$@" diff --git a/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/noop.sh b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/noop.sh new file mode 100644 index 000000000..092d55d8b --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/noop.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +############################################# +## NOOP (no operation) +############################################# + +exec tail -f /dev/null diff --git a/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/root.sh b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/root.sh new file mode 100644 index 000000000..6fa0d063e --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/root.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +############################################# +## Root shell +############################################# + +if [ "$#" -eq 1 ]; then + ## No command, fall back to interactive shell + exec bash +else + ## Exec root command + shift + exec "$@" +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/supervisord.sh b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/supervisord.sh new file mode 100644 index 000000000..f21489667 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/entrypoint.d/supervisord.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +############################################# +## Supervisord (start daemons) +############################################# + +## Start services +exec /opt/docker/bin/service.d/supervisor.sh + diff --git a/docker/php-official/8.5-alpine/conf/bin/entrypoint.sh b/docker/php-official/8.5-alpine/conf/bin/entrypoint.sh new file mode 100644 index 000000000..0489b796c --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/entrypoint.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +if [[ -z "$CONTAINER_UID" ]]; then + export CONTAINER_UID="application" +fi + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# auto elevate privileges (if container is not started as root) +if [[ "$UID" -ne 0 ]]; then + export CONTAINER_UID="$UID" + exec gosu root "$0" "$@" +fi +# remove suid bit on gosu +chmod -s /sbin/gosu + +trap 'echo sigterm ; exit' SIGTERM +trap 'echo sigkill ; exit' SIGKILL + +# sanitize input and set task +TASK="$(echo $1| sed 's/[^-_a-zA-Z0-9]*//g')" + +source /opt/docker/bin/config.sh + +createDockerStdoutStderr + +if [[ "$UID" -eq 0 ]]; then + # Only run provision if user is root + + if [ "$TASK" == "supervisord" -o "$TASK" == "noop" ]; then + # Visible provisioning + runProvisionEntrypoint + else + # Hidden provisioning + runProvisionEntrypoint > /dev/null + fi +fi + +############################# +## COMMAND +############################# + +runEntrypoints "$@" diff --git a/docker/php-official/8.5-alpine/conf/bin/provision b/docker/php-official/8.5-alpine/conf/bin/provision new file mode 100755 index 000000000..418e81dd8 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/provision @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Install ansible if not installed +if [ -z "`which ansible-playbook`" ]; then + docker-ansible-install +fi + +exec /opt/docker/bin/provision.py "$@" diff --git a/docker/php-official/8.5-alpine/conf/bin/provision.py b/docker/php-official/8.5-alpine/conf/bin/provision.py new file mode 100755 index 000000000..d367c2812 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/provision.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python + +import os +import argparse +import json +import sys +from string import Template +from subprocess import call +import tempfile +import time + +STORAGE = '/opt/docker/etc/.registry/provision.json' +PROVISION_DIR = '/opt/docker/provision/' + +PLAYBOOK_TAGS=['bootstrap', 'build', 'onbuild', 'entrypoint'] + +PLAYBOOK = Template( +"""--- + +- hosts: all + vars_files: + - ./variables-webdevops.yml + - ./variables.yml + roles: + - $roles +""") + + + +def readJson(): + ret = {} + + # create registry directory if it doesn't exists + if not os.path.exists(os.path.dirname(STORAGE)): + os.mkdir(os.path.dirname(STORAGE)) + + # try to read file + if os.path.isfile(STORAGE): + f=open(STORAGE).read() + ret = json.loads(f) + + return ret + + + +def saveJson(data): + with open(STORAGE, 'w') as f: + json.dump(data, f) + + + +def buildRoleList(tags): + json = readJson() + roleList = {} + + # fetch roles list for each tag + for tag in tags: + if tag in json: + for role in json[tag]: + roleRow = json[tag][role] + if role not in roleList: + roleList[role] = {} + + if 'tags' not in roleList[role]: + roleList[role]['tags'] = {} + + roleList[role]['role'] = role + roleList[role]['added'] = roleRow['added'] + roleList[role]['priority'] = roleRow['priority'] + roleList[role]['tags'][tag] = tag + + return roleList + + +def buildSortedRoleList(tags): + roleList = buildRoleList(tags) + + # sort list + roleList = sorted(roleList, key=lambda x: (roleList[x]['priority'], roleList[x]['added'])) + + return roleList + + + +def buildPlaybook(roleList): + ## build playbook + ret = PLAYBOOK.substitute( + roles = "\n - ".join(roleList) + ) + + return ret + + +def buildPlaybookFromArgs(args): + roleList = [] + + ## add roles from tag (if use registry is active) + if args.useRegistry and args.tags: + roleList.extend(buildSortedRoleList(args.tags)) + + ## add roles from command arguments + if args.roles: + for role in args.roles: + roleList.extend(role.split(',')) + + if roleList: + return buildPlaybook(roleList) + else: + return False + + + +def actionRun(args): + if args.playbook: + ## predefined playbook + playbook = args.playbook + else: + ## dynamic playbook + playbookContent = buildPlaybookFromArgs(args) + + if playbookContent: + f = tempfile.NamedTemporaryFile(dir=PROVISION_DIR, prefix='playbook.', suffix='.yml', delete=False) + f.write(playbookContent) + f.close() + playbook = f.name + else: + ## nothing to do + sys.exit(0) + + ## build ansible command with args + cmd = [ + 'ansible-playbook', + playbook, + '-i', 'localhost,', + '--connection=local', + ] + + if args.tags: + cmd.extend([ + '--tags=' + ','.join(args.tags) + ]) + + if args.args: + cmd.extend(args.args) + + ## run ansible + retval = call(cmd) + + ## cleanup dynamic playbook + if not args.playbook: + os.unlink(playbook) + + sys.exit(retval) + + + +def actionPlaybook(args): + playbook = buildPlaybookFromArgs(args) + + if playbook: + print playbook + else: + sys.exit(1) + + + +def actionList(args): + json = readJson() + list = {} + + for tag in args.tags: + if tag in json: + for role in json[tag]: + print role + + + +def actionAdd(args): + json = readJson() + + for tag in args.tags: + for role in args.role: + if tag not in json: + json[tag] = {} + + json[tag][role] = { + 'name': role, + 'added': int(time.time()), + 'priority': args.priority + } + + saveJson(json) + + + +def actionSummary(args): + # list all roles in each possible tag + for tag in PLAYBOOK_TAGS: + roleList = buildRoleList([tag]) + if roleList: + maxLength = len(max(roleList.keys(), key=len)) + + print "Roles in " + tag + ":" + for role in roleList: + print ' - ' + role.ljust(maxLength, ' ') + ' [priority: ' + str(roleList[role]['priority']) + ']' + print '' + + + +def main(args): + actions = { + 'list': actionList, + 'add': actionAdd, + 'summary': actionSummary, + 'playbook': actionPlaybook, + 'run': actionRun + } + + func = actions.get(args.action, lambda: "nothing") + return func(args) + + + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers( + title='subcommands', + dest='action' + ) + + ################################### + ## SUMMARY command + summary = subparsers.add_parser('summary') + + ################################### + ## RUN command + run = subparsers.add_parser('run') + run.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + run.add_argument( + '--playbook', + dest='playbook', + help='Ansible playbook' + ) + run.add_argument( + '--use-registry', + dest='useRegistry', + action='store_true', + help='Use registred roles' + ) + run.add_argument( + '--role', + dest='roles', + action='append', + help='Ansible role' + ) + run.add_argument('args', nargs=argparse.REMAINDER) + + ################################### + ## PLAYBOOK command + playbook = subparsers.add_parser('playbook') + playbook.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + playbook.add_argument( + '--use-registry', + dest='useRegistry', + action='store_true', + help='Use registred roles' + ) + playbook.add_argument( + '--role', + dest='roles', + action='append', + help='Ansible tag' + ) + playbook.add_argument('args', nargs=argparse.REMAINDER) + + ################################### + ## LIST command + list = subparsers.add_parser('list') + list.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + list.add_argument('args', nargs=argparse.REMAINDER) + + ################################### + ## ADD command + add = subparsers.add_parser('add') + add.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + add.add_argument( + '--priority', + type=int, + default=100, + dest='priority', + help='Priority for role [default 100, 1 is most important]' + ) + add.add_argument('role', metavar='roles', nargs='+', help='Ansible roles') + + add.add_argument('args', nargs=argparse.REMAINDER) + + ## Execute + args = parser.parse_args() + main(args) diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/cron.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/cron.d/10-init.sh new file mode 100644 index 000000000..611edc9bf --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/cron.d/10-init.sh @@ -0,0 +1,16 @@ +# Install crontab files + +if [[ -d "/opt/docker/etc/cron" ]]; then + mkdir -p /etc/cron.d/ + + find /opt/docker/etc/cron -type f | while read CRONTAB_FILE; do + # fix permissions + chmod 0644 -- "$CRONTAB_FILE" + + # add newline, cron needs this + echo >> "$CRONTAB_FILE" + + # Install files + cp -a -- "$CRONTAB_FILE" "/etc/cron.d/$(basename "$CRONTAB_FILE")" + done +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/cron.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/cron.sh new file mode 100644 index 000000000..5af135768 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/cron.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_CRON_OPTS" ]]; then SERVICE_CRON_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/cron.d/" + +exec /usr/sbin/crond -f $SERVICE_CRON_OPTS diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/dnsmasq.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/dnsmasq.d/10-init.sh new file mode 100644 index 000000000..836ebe2b5 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/dnsmasq.d/10-init.sh @@ -0,0 +1,37 @@ +# Create dnsmasq.d directory if not exists +mkdir -p -- /etc/dnsmasq.d/ + +# Enable /etc/dnsmasq.d/ +go-replace --mode=lineinfile --once \ + -s 'conf-dir' -r 'conf-dir=/etc/dnsmasq.d/,*.conf' \ + -- /etc/dnsmasq.conf + +## clear dns file +echo > /etc/dnsmasq.d/webdevops.conf + +if [ ! -f /etc/resolv.conf.original ]; then + cp -a /etc/resolv.conf /etc/resolv.conf.original + + ## set forward servers + cat /etc/resolv.conf.original | grep nameserver | sed 's/nameserver /server=/' > /etc/dnsmasq.d/forward.conf + + ## set dnsmasq to main nameserver + echo "nameserver 127.0.0.1" > /etc/resolv.conf +fi + + +# Add own VIRTUAL_HOST as loopback +if [[ -n "${VIRTUAL_HOST+x}" ]]; then + # split comma by space + VIRTUAL_HOST_LIST=${VIRTUAL_HOST//,/$'\n'} + + # replace *.domain for dns specific .domain wildcard + VIRTUAL_HOST_LIST=${VIRTUAL_HOST_LIST/\*./.} + + # no support for .* + VIRTUAL_HOST_LIST=${VIRTUAL_HOST_LIST/.\*/.} + + for DOMAIN in $VIRTUAL_HOST_LIST; do + echo "address=/${DOMAIN}/127.0.0.1" >> /etc/dnsmasq.d/webdevops.conf + done +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/dnsmasq.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/dnsmasq.sh new file mode 100644 index 000000000..b8b4c12e0 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/dnsmasq.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_DNSMASQ_OPTS" ]]; then SERVICE_DNSMASQ_OPTS=""; fi +if [[ -z "$SERVICE_DNSMASQ_USER" ]]; then SERVICE_DNSMASQ_USER="root"; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/dnsmasq.d/" + +exec dnsmasq --keep-in-foreground --user="$SERVICE_DNSMASQ_USER" $SERVICE_DNSMASQ_OPTS diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.d/10-init.sh new file mode 100644 index 000000000..7d0dadad6 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.d/10-init.sh @@ -0,0 +1,12 @@ +# setup user env +FPM_POOL_CONF="/opt/docker/etc/php/fpm/pool.d/application.conf" + +## Setup container uid +if [[ -n "$CONTAINER_UID" ]]; then + echo "Setting php-fpm user to $CONTAINER_UID" + go-replace --mode=line --regex \ + -s '^[\s;]*user[\s]*=' -r "user = $CONTAINER_UID" \ + -s '^[\s;]*group[\s]*=' -r "group = $CONTAINER_UID" \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.d/11-clear-env.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.d/11-clear-env.sh new file mode 100644 index 000000000..ef6fd4016 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.d/11-clear-env.sh @@ -0,0 +1,38 @@ +# +# Workaround for old php-fpm versions which don't have clear_env setting +# + +VARIABLE_LIST="; Workaround for missing clear_env feature in PHP-FPM" + +# For each exported variable +for envVariable in $(printenv|cut -f1 -d=); do + + case "$envVariable" in + "_"|"PATH"|"PWD") + ## ignore this variables + ;; + + *) + ## get content of variable + envVariableContent="${!envVariable}" + + ## php-fpm requires that env variable has to be filled with content + if [[ -n "$envVariableContent" ]]; then + ## quote quotes + envVariableContent=${envVariableContent//\"/\\\"} + + ## add to list + VARIABLE_LIST="${VARIABLE_LIST}"$'\n'"env[${envVariable}] = \"${envVariableContent}\"" + fi + ;; + esac + +done + +# Replace ;#CLEAR_ENV_WORKAROUND# with environment variable list for all php-fpm pool files +go-replace \ + -s ";#CLEAR_ENV_WORKAROUND#" -r "$VARIABLE_LIST" \ + --path=/opt/docker/etc/php/fpm/pool.d/ \ + --path-pattern='*.conf' \ + --ignore-empty + diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.sh new file mode 100644 index 000000000..15374f566 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/php-fpm.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_PHPFPM_OPTS" ]]; then SERVICE_PHPFPM_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/php-fpm.d/" + +exec /usr/local/bin/php-fpm --nodaemonize $SERVICE_PHPFPM_OPTS diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/postfix.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/postfix.d/10-init.sh new file mode 100644 index 000000000..82574153d --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/postfix.d/10-init.sh @@ -0,0 +1,30 @@ +# force new copy of hosts there (otherwise links could be outdated) +mkdir -p /var/spool/postfix/etc +cp -f /etc/hosts /var/spool/postfix/etc/hosts +cp -f /etc/resolv.conf /var/spool/postfix/etc/resolv.conf +cp -f /etc/services /var/spool/postfix/etc/services + +go-replace --mode=line --regex -s '^[\s]*myhostname[\s]*=.*' -r "myhostname = $HOSTNAME" + +# General +go-replace --mode=lineinfile --regex \ + -s '^[\s]*myhostname[\s]*=.*.*' -r "myhostname = $HOSTNAME" \ + -s '^[\s]*inet_interfaces[\s]*=.*' -r "inet_interfaces = 127.0.0.1" \ + -- /etc/postfix/main.cf + +## REPLAYHOST +if [[ -n "${POSTFIX_RELAYHOST+x}" ]]; then + go-replace --mode=lineinfile --regex \ + -s '^[\s]*relayhost[\s]*=.*' -r "relayhost = $POSTFIX_RELAYHOST" \ + -- /etc/postfix/main.cf +fi + +## MYNETWORKS +if [[ -n "${POSTFIX_MYNETWORKS+x}" ]]; then + go-replace --mode=lineinfile --regex \ + -s '^[\s]*mynetworks[\s]*=.*' -r "mynetworks = $POSTFIX_MYNETWORKS" \ + -- /etc/postfix/main.cf +fi + +# generate aliases db +newaliases || : diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/postfix.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/postfix.sh new file mode 100644 index 000000000..b9e477bcd --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/postfix.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# postfix-wrapper.sh, version 0.1.0 +# +# You cannot start postfix in some foreground mode and +# it's more or less important that docker doesn't kill +# postfix and its chilren if you stop the container. +# +# Use this script with supervisord and it will take +# care about starting and stopping postfix correctly. +# +# supervisord config snippet for postfix-wrapper: +# +# [program:postfix] +# process_name = postfix +# command = /path/to/postfix-wrapper.sh +# startsecs = 0 +# autorestart = false +# + +# Init vars +if [[ -z "$SERVICE_POSTFIX_OPTS" ]]; then SERVICE_POSTFIX_OPTS=""; fi + +source /opt/docker/bin/config.sh + +trap "postfix stop" SIGINT +trap "postfix stop" SIGTERM +trap "postfix reload" SIGHUP + +includeScriptDir "/opt/docker/bin/service.d/postfix.d/" + +# start postfix +postfix start $SERVICE_POSTFIX_OPTS + +# lets give postfix some time to start +sleep 3 + +# wait until postfix is dead (triggered by trap) +if [[ -f /var/spool/postfix/pid/master.pid ]]; then + while kill -0 "$(cat /var/spool/postfix/pid/master.pid 2>/dev/null)" &>/dev/null; do + sleep 5 + done +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/ssh.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/ssh.d/10-init.sh new file mode 100644 index 000000000..f2b600312 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/ssh.d/10-init.sh @@ -0,0 +1,7 @@ +# Init ssh privilege separation directory +mkdir -p /var/run/sshd +chown root:root /var/run/sshd +chmod 755 /var/run/sshd + +# generate host keys +ssh-keygen -A diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/ssh.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/ssh.sh new file mode 100644 index 000000000..f01e87ab3 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/ssh.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_SSH_OPTS" ]]; then SERVICE_SSH_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/ssh.d/" + +exec /usr/sbin/sshd -D $SERVICE_SSH_OPTS diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/supervisor.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/supervisor.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/supervisor.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/supervisor.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/supervisor.sh new file mode 100644 index 000000000..5a82a13ff --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/supervisor.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_SUPERVISOR_OPTS" ]]; then SERVICE_SUPERVISOR_OPTS=""; fi +if [[ -z "$SERVICE_SUPERVISOR_USER" ]]; then SERVICE_SUPERVISOR_USER="root"; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/supervisor.d/" + +exec supervisord -c /opt/docker/etc/supervisor.conf --logfile /dev/null --pidfile /dev/null --user "$SERVICE_SUPERVISOR_USER" $SERVICE_SUPERVISOR_OPTS diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/syslog-ng.d/10-init.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/syslog-ng.d/10-init.sh new file mode 100644 index 000000000..326207e52 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/syslog-ng.d/10-init.sh @@ -0,0 +1,10 @@ +# If /dev/log is either a named pipe or it was placed there accidentally, +# e.g. because of the issue documented at https://github.com/phusion/baseimage-docker/pull/25, +# then we remove it. +if [ ! -S /dev/log ]; then rm -f /dev/log; fi +if [ ! -S /var/lib/syslog-ng/syslog-ng.ctl ]; then rm -f /var/lib/syslog-ng/syslog-ng.ctl; fi + +if [[ ! -p /docker.stdout ]]; then + # Switch to file (tty docker mode) + go-replace -s 'pipe("/docker.stdout")' -r 'file("/docker.stdout")' -- /opt/docker/etc/syslog-ng/syslog-ng.conf +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/service.d/syslog-ng.sh b/docker/php-official/8.5-alpine/conf/bin/service.d/syslog-ng.sh new file mode 100644 index 000000000..8e1358c1b --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/service.d/syslog-ng.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_SYSLOG_OPTS" ]]; then SERVICE_SYSLOG_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +exec syslog-ng -F --no-caps -p /var/run/syslog-ng.pid $SYSLOGNG_OPTS $SERVICE_SYSLOG_OPTS diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/container-file-auto-restore b/docker/php-official/8.5-alpine/conf/bin/usr-bin/container-file-auto-restore new file mode 100644 index 000000000..a41fcb3c8 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/container-file-auto-restore @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -o pipefail ## trace ERR through pipes +set -o errtrace ## trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +if [[ "$#" -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +SOURCE_FILE="$1" +BACKUP_FILE="$(dirname "$1")/.$(basename "$1").bak" + +if [[ -f "$BACKUP_FILE" ]]; then + ## Backup file exists + ## -> container was restarted + ## -> restoring configuration + cp -a -- "$BACKUP_FILE" "$SOURCE_FILE" +else + ## Backup file DOESN'T exists + ## -> container first startup + ## -> backup configuration + cp -a -- "$SOURCE_FILE" "$BACKUP_FILE" +fi diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-ansible-install b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-ansible-install new file mode 100644 index 000000000..dfb06fc7d --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-ansible-install @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install \ + python-minimal \ + python-setuptools \ + python-pip \ + python-paramiko \ + python-jinja2 \ + python-dev \ + libffi-dev \ + libssl-dev \ + build-essential + pip install --upgrade pip + hash -r + pip install --no-cache-dir ansible + # Cleanup + apt-get purge -y -f --force-yes \ + python-dev \ + build-essential \ + libssl-dev \ + libffi-dev + + chmod 750 /usr/local/bin/ansible* + ;; + + RedHat) + yum-install \ + epel-release \ + PyYAML \ + python-jinja2 \ + python-httplib2 \ + python-keyczar \ + python-paramiko \ + python-setuptools \ + python-setuptools-devel \ + libffi \ + python-devel \ + libffi-devel + easy_install pip + pip install --upgrade pip + hash -r + pip install --no-cache-dir ansible + # Cleanup + yum erase -y python-devel + + chmod 750 /usr/bin/ansible* + ;; + + Alpine) + apk-install \ + python \ + python-dev \ + py-setuptools \ + py-crypto \ + py2-pip \ + py-cparser \ + py-cryptography \ + py-markupsafe \ + py-cffi \ + py-yaml \ + py-jinja2 \ + py-paramiko + pip install --upgrade pip + hash -r + pip install --no-cache-dir ansible + # Cleanup + apk del python-dev + + chmod 750 /usr/bin/ansible* + ;; +esac +docker-image-cleanup diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-cronjob b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-cronjob new file mode 100644 index 000000000..2746c75f5 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-cronjob @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +source /opt/docker/bin/config.sh + +rootCheck "$0" + +if [[ "$#" -eq 0 ]]; then + echo "Usage: $0 ''" + exit 1 +fi + +# create crontab file +touch /etc/cron.d/webdevops-docker +chmod 0644 /etc/cron.d/webdevops-docker + +for CRONJOB_LINES in "$@"; do + echo "$CRONJOB_LINES" >> /etc/cron.d/webdevops-docker +done + +# Add required newline at end +echo >> /etc/cron.d/webdevops-docker diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-php-setting b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-php-setting new file mode 100644 index 000000000..30bbb979f --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-php-setting @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# Defaults +PHP_INI_FILE="/opt/docker/etc/php/php.ini" +PHP_VALUE_RAW=0 +PHP_KEY= +PHP_VALUE= + +for arg in "$@"; do + case "$arg" in + --raw) + PHP_VALUE_RAW=1 + shift + ;; + esac +done + +if [[ "$#" -le 2 ]]; then + echo "Usage: $(basename "$0") [--raw] " + exit 1 +fi + +PHP_SETTING_KEY=$1 +shift +PHP_SETTING_VALUE="$@" + +if [[ "$PHP_VALUE_RAW" -eq 0 ]]; then + case "$PHP_SETTING_VALUE" in + ''|*[!0-9]*) + # non numeric + PHP_SETTING_VALUE="\"${PHP_SETTING_VALUE}\"" + ;; + esac +fi + + +echo "$(basename "$0"): Setting php setting: ${PHP_SETTING_KEY} = ${PHP_SETTING_VALUE}" +echo "${PHP_SETTING_KEY} = ${PHP_SETTING_VALUE}" >> "$PHP_INI_FILE" + diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-provision b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-provision new file mode 100644 index 000000000..4ee715c64 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-provision @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# wrapper +exec /opt/docker/bin/provision "$@" diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service new file mode 100644 index 000000000..70a493767 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +if [[ "$#" -le 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +SERVICE_COMMAND=$1 +shift + +for SERVICE in "$@"; do + RUN_FILE="/opt/docker/bin/service.d/${SERVICE}.sh" + SERVICE_FILE="/opt/docker/etc/supervisor.d/${SERVICE}.conf" + PROVISION_FILE="/opt/docker/provision/service.d/${SERVICE}.sh" + + case "$SERVICE_COMMAND" in + enable) + # Run on demand installation/provisioning + if [[ -f "$PROVISION_FILE" ]]; then + echo "Running provisioning for ${SERVICE}, please wait..." + + ## execute scripts + . "$PROVISION_FILE" + + ## remove directory (one run time) + rm -f -- "$PROVISION_FILE" + fi + + ## Enable service + if [[ -f "$SERVICE_FILE" ]]; then + go-replace --mode=lineinfile \ + -s 'autostart =' -r 'autostart = true' \ + -- "$SERVICE_FILE" + else + echo "[ERROR] Service '${SERVICE}' not found (tried ${SERVICE_FILE})" + exit 1 + fi + ;; + + disable) + ## Disable service + if [[ -f "$SERVICE_FILE" ]]; then + go-replace --mode=lineinfile \ + -s 'autostart =' -r 'autostart = false' \ + -- "$SERVICE_FILE" + else + echo "[ERROR] Service '${SERVICE}' not found (tried ${SERVICE_FILE})" + exit 1 + fi + ;; + + install) + # Run on demand installation/provisioning + if [[ -f "$PROVISION_FILE" ]]; then + echo "Running provisioning for ${SERVICE}, please wait..." + + ## execute scripts + . "$PROVISION_FILE" + + ## remove directory (one run time) + rm -f -- "$PROVISION_FILE" + fi + ;; + + run) + if [[ -f "$RUN_FILE" ]]; then + exec "$RUN_FILE" + else + echo "[ERROR] Service '${SERVICE}' not found (tried ${RUN_FILE})" + exit 1 + fi + ;; + + stop|start|restart|status|pid|check) + service "${SERVICE}" "$SERVICE_COMMAND" + ;; + + *) + echo "[ERROR] $SERVICE_COMMAND is not a valid command" + exit 1 + ;; + esac +done + diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service-disable b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service-disable new file mode 100644 index 000000000..991f249c8 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service-disable @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec docker-service disable "$@" diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service-enable b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service-enable new file mode 100644 index 000000000..da99c9aeb --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/docker-service-enable @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +exec docker-service enable "$@" + diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/service b/docker/php-official/8.5-alpine/conf/bin/usr-bin/service new file mode 100755 index 000000000..69874cb80 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/service @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# Root check +if [ "$(/usr/bin/whoami)" != "root" ]; then + echo "[ERROR] Must be run as root" + exit 1 +fi + +function serviceHelp() { + echo "Usage: $(basename "$0") " +} + +function getServicePid() { + local serviceName="$1" + local servicePid=$(supervisorctl pid "${serviceName}:${serviceName}d") + + if [[ -z "$servicePid" ]] || [[ "$servicePid" == "0" ]]; then + echo "not running" + exit 1 + fi + + echo $servicePid +} + +# Param check +if [ "$#" -lt 2 ]; then + echo "[ERROR] Missing parameters" + serviceHelp + exit 1 +fi + +############################# +# Param init +############################# + +SERVICENAME="$1" +ACTION="$2" + +############################# +# Service aliases +############################# +case "$SERVICENAME" in + apache2|httpd) + SERVICENAME="apache" + ;; +esac + +############################# +# Action runner +############################# +case "$ACTION" in + stop|start|restart|status) + exec supervisorctl "$ACTION" "${SERVICENAME}:${SERVICENAME}d" + ;; + + pid) + echo $(getServicePid "${SERVICENAME}") + ;; + + check) + FIRST_PID=$(getServicePid "${SERVICENAME}") + sleep 5 + SECOND_PID=$(getServicePid "${SERVICENAME}") + + if [[ "$FIRST_PID" == "$SECOND_PID" ]]; then + echo "ok" + exit 0 + else + echo "not running" + exit 1 + fi + ;; + + + *) + echo "[ERROR] Invalid action" + serviceHelp + exit 1 + ;; + +esac diff --git a/docker/php-official/8.5-alpine/conf/bin/usr-bin/version-compare b/docker/php-official/8.5-alpine/conf/bin/usr-bin/version-compare new file mode 100644 index 000000000..ca450b0e9 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/bin/usr-bin/version-compare @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +function versionCompare () { + if [[ $1 == $2 ]] + then + echo -n '=' + return + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + echo -n '>' + return + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + echo -n '<' + return + fi + done + + echo -n '=' +} + +versionCompare "$1" "$2" diff --git a/docker/php-official/8.5-alpine/conf/etc/cron/.gitkeep b/docker/php-official/8.5-alpine/conf/etc/cron/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/etc/logrotate.d/php5-fpm b/docker/php-official/8.5-alpine/conf/etc/logrotate.d/php5-fpm new file mode 100644 index 000000000..e6ef4b123 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/logrotate.d/php5-fpm @@ -0,0 +1,12 @@ +/var/log/php5-fpm/fpm.log +/var/log/php5-fpm/access.log +/var/log/php5-fpm/slow.log +/var/log/php5-fpm/error.log { + missingok + notifempty + sharedscripts + delaycompress + postrotate + /bin/kill -SIGUSR1 `cat /var/run/php5-fpm.pid` 2>/dev/null || true + endscript +} diff --git a/docker/php-official/8.5-alpine/conf/etc/logrotate.d/syslog-ng b/docker/php-official/8.5-alpine/conf/etc/logrotate.d/syslog-ng new file mode 100644 index 000000000..4a6f9c54e --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/logrotate.d/syslog-ng @@ -0,0 +1,38 @@ +/var/log/syslog +{ + rotate 7 + daily + missingok + notifempty + delaycompress + compress + postrotate + /bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` > /dev/null + endscript +} + +/var/log/mail.info +/var/log/mail.warn +/var/log/mail.err +/var/log/mail.log +/var/log/daemon.log +/var/log/kern.log +/var/log/auth.log +/var/log/user.log +/var/log/lpr.log +/var/log/cron.log +/var/log/debug +/var/log/messages +{ + rotate 4 + weekly + missingok + notifempty + compress + delaycompress + sharedscripts + postrotate + /bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` > /dev/null + supervisorctl restart syslog-ng-stdout > /dev/null + endscript +} \ No newline at end of file diff --git a/docker/php-official/8.5-alpine/conf/etc/php/conf.d/.gitkeep b/docker/php-official/8.5-alpine/conf/etc/php/conf.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/etc/php/fpm/.gitkeep b/docker/php-official/8.5-alpine/conf/etc/php/fpm/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/etc/php/php.ini b/docker/php-official/8.5-alpine/conf/etc/php/php.ini new file mode 100644 index 000000000..447212118 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/php/php.ini @@ -0,0 +1 @@ +; placeholder diff --git a/docker/php-official/8.5-alpine/conf/etc/php/php.webdevops.ini b/docker/php-official/8.5-alpine/conf/etc/php/php.webdevops.ini new file mode 100644 index 000000000..aa1545ab8 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/php/php.webdevops.ini @@ -0,0 +1,34 @@ +; ------------------------------------- +; Docker Webdevops PHP configuration +; ------------------------------------- + +; this file will overwrite default php.ini settings + +display_errors = 0 +log_errors = 1 + +short_open_tag = Off +variables_order = 'GPCS' +request_order = 'GP' + +allow_url_fopen = On +allow_url_include = Off + +memory_limit = 512M +max_execution_time = 300 +max_input_time = 300 +post_max_size = 50M +upload_max_filesize = 50M +max_input_vars = 5000 + +expose_php = Off + +date.timezone = UTC + +mysql.default_host = mysql +mysqli.default_host = mysql + +opcache.memory_consumption = 256 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 7963 +opcache.fast_shutdown = 1 diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.conf new file mode 100644 index 000000000..479e0db08 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.conf @@ -0,0 +1,20 @@ +[supervisord] +nodaemon=true + +[unix_http_server] +file = /.supervisor.sock +chmod = 0700 +chown = root:root +username = root +password = {SHA}e982f17bcbe0f724063b708a4f76db211a999304 + +[supervisorctl] +serverurl = unix:///.supervisor.sock +username = root +password = docker + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[include] +files = /opt/docker/etc/supervisor.d/*.conf diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/.gitkeep b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/cron.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/cron.conf new file mode 100644 index 000000000..ef0a71678 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/cron.conf @@ -0,0 +1,14 @@ +[group:cron] +programs=crond +priority=25 + +[program:crond] +command = /opt/docker/bin/service.d/cron.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/dnsmasq.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/dnsmasq.conf new file mode 100644 index 000000000..9832ffca7 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/dnsmasq.conf @@ -0,0 +1,14 @@ +[group:dnsmasq] +programs=dnsmasqd +priority=15 + +[program:dnsmasqd] +command = /opt/docker/bin/service.d/dnsmasq.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/php-fpm.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/php-fpm.conf new file mode 100644 index 000000000..5781f5b0a --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/php-fpm.conf @@ -0,0 +1,15 @@ +[group:php-fpm] +programs=php-fpmd +priority=20 + +[program:php-fpmd] +command = /opt/docker/bin/service.d/php-fpm.sh +process_name=%(program_name)s +startsecs = 0 +autostart = true +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/postfix.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/postfix.conf new file mode 100644 index 000000000..b8d70bb40 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/postfix.conf @@ -0,0 +1,15 @@ +[group:postfix] +programs=postfixd +priority=30 + +[program:postfixd] +directory = /etc/postfix +command = /opt/docker/bin/service.d/postfix.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/ssh.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/ssh.conf new file mode 100644 index 000000000..0ecd798d6 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/ssh.conf @@ -0,0 +1,14 @@ +[group:ssh] +programs=sshd +priority=30 + +[program:sshd] +command = /opt/docker/bin/service.d/ssh.sh +process_name=%(program_name)s +startsecs=0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5-alpine/conf/etc/supervisor.d/syslog.conf b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/syslog.conf new file mode 100644 index 000000000..20d1e238c --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/supervisor.d/syslog.conf @@ -0,0 +1,13 @@ +[group:syslog] +programs=syslogd +priority=10 + +[program:syslogd] +command = /opt/docker/bin/service.d/syslog-ng.sh +process_name=%(program_name)s +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5-alpine/conf/etc/syslog-ng/syslog-ng.conf b/docker/php-official/8.5-alpine/conf/etc/syslog-ng/syslog-ng.conf new file mode 100644 index 000000000..c69841581 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/etc/syslog-ng/syslog-ng.conf @@ -0,0 +1,48 @@ +@version: 3.5 + +template t_isostamp { + # syslog-t_isostamp START + template("[SYSLOG] $MSGHDR$MSG\n"); + # syslog-t_isostamp END +}; + +options { + # syslog-options START + file-template(t_isostamp); + chain_hostnames(off); + flush_lines(0); + use-dns(no); + use_fqdn(no); + owner("root"); + group("adm"); + perm(0640); + stats_freq(0); + # syslog-options START +}; + +source s_src { + # syslog-s_src START + unix-stream("/dev/log"); + internal(); + # syslog-s_src END +}; + +filter f_filter { + # syslog-f_filter START + not facility(auth, authpriv); + # syslog-f_filter END +}; + +destination d_all { + # syslog-d_all START + pipe("/docker.stdout"); + # syslog-d_all END +}; + +log { + # syslog-log START + source(s_src); + filter(f_filter); + destination(d_all); + # syslog-log START +}; diff --git a/docker/php-official/8.5-alpine/conf/provision/ansible.cfg b/docker/php-official/8.5-alpine/conf/provision/ansible.cfg new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/.gitkeep b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-entrypoint.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-entrypoint.sh new file mode 100644 index 000000000..413e7b37c --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-entrypoint.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Link main entrypoint script to /entrypoint +ln -sf /opt/docker/bin/entrypoint.sh /entrypoint + +# Link entrypoint cmd shortcut conf directory to /entrypoint.cmd +ln -sf /opt/docker/bin/entrypoint.d /entrypoint.cmd + +# Create /entrypoint.d +mkdir -p /entrypoint.d +chmod 700 /entrypoint.d +chown root:root /entrypoint.d + + diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-permissions.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-permissions.sh new file mode 100644 index 000000000..20d602bdd --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-permissions.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash + diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-php-init.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-php-init.sh new file mode 100644 index 000000000..db0141b8f --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-php-init.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) +IMAGE_FAMILY=$(docker-image-info family) diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-supervisor.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-supervisor.sh new file mode 100644 index 000000000..311daee4c --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-supervisor.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Remove /usr/sbin/service (images have custom service script) +rm -rf /usr/sbin/service + +# Remove existing supervisor configuration +rm -rf -- /etc/supervisor* + +# Link supervisor configuration script +ln -sf /opt/docker/etc/supervisor.conf /etc/supervisord.conf diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-user-application.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-user-application.sh new file mode 100644 index 000000000..7a7b42f6b --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/10-user-application.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Add group +addgroup -g "$APPLICATION_GID" "$APPLICATION_GROUP" + +# Add user +adduser -D -u "$APPLICATION_UID" -h "/home/application" -s /bin/bash -G $APPLICATION_GROUP "$APPLICATION_USER" + diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/11-php-conf.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/11-php-conf.sh new file mode 100644 index 000000000..ee56ccaae --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/11-php-conf.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +PHP_CLEAR_ENV_AVAILABLE=1 + +PHP_ETC_DIR=/usr/local/etc/php +PHP_MAIN_CONF=/usr/local/etc/php-fpm.conf +PHP_POOL_CONF=www.conf +PHP_POOL_DIR=/usr/local/etc/php-fpm.d +PHP_FPM_BIN=/usr/local/sbin/php-fpm +PHP_MOD_INI_DIR=/usr/local/etc/php/conf.d diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-app.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-app.sh new file mode 100644 index 000000000..749966b67 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-app.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Create /app folder +mkdir -p /app +chown "$APPLICATION_USER":"$APPLICATION_GROUP" /app diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php-fpm-pool.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php-fpm-pool.sh new file mode 100644 index 000000000..121788e60 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php-fpm-pool.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +# Rename pool file file to application.conf +if [[ ! -f "/opt/docker/etc/php/fpm/pool.d/application.conf" ]]; then + # Move php-fpm pool directory file to /opt/docker/etc/php/ + mv -- "$PHP_POOL_DIR" /opt/docker/etc/php/fpm/pool.d + + mv -- "/opt/docker/etc/php/fpm/pool.d/${PHP_POOL_CONF}" /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +# Remove php-fpm pool directory +rm -rf -- "$PHP_POOL_DIR" + +# Symlink php-fpm pool file to original destination +ln -sf -- /opt/docker/etc/php/fpm/pool.d "$PHP_POOL_DIR" + +# Configure php-fpm pool (application.conf) +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*catch_workers_output[\s]*=' -r 'catch_workers_output = yes' \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "[php-fpm:access] %R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"' \ + -s '^[\s;]*access.log[\s]*=' -r 'access.log = /docker.stdout' \ + -s '^[\s;]*slowlog[\s]*=' -r 'slowlog = /docker.stderr' \ + -s '^[\s;]*php_admin_value\[error_log\][\s]*=' -r 'php_admin_value[error_log] = /docker.stderr' \ + -s '^[\s;]*php_admin_value\[log_errors\][\s]*=' -r 'php_admin_value[log_errors] = on' \ + -s '^[\s;]*listen.allowed_clients[\s]*=' -r ";listen.allowed_clients" \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +# Fix user setting +go-replace --mode=line --regex \ + -s '^[\s;]*user[\s]*=' -r "user = $APPLICATION_USER" \ + -s '^[\s;]*group[\s]*=' -r "group = $APPLICATION_GROUP" \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' + +if [[ "$PHP_CLEAR_ENV_AVAILABLE" -eq 1 ]]; then + # Clear env setting available, disable clearing of environment variables + go-replace --mode=lineinfile --regex \ + -s '^[\s;]*clear_env[\s]*=' -r 'clear_env = no' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + rm -f /opt/docker/bin/service.d/php-fpm.d/11-clear-env.sh +else + # Append clear env workaround in php-fpm pool (old php-fpm versions) + echo ';#CLEAR_ENV_WORKAROUND#' >> /opt/docker/etc/php/fpm/pool.d/application.conf + +fi diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php-fpm.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php-fpm.sh new file mode 100644 index 000000000..873ddf608 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php-fpm.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Link main php-fpm binary +ln -sf -- "$PHP_FPM_BIN" /usr/local/bin/php-fpm + +# Move php-fpm main file to /opt/docker/etc/php/fpm/ and create symlink +if [[ ! -f /opt/docker/etc/php/fpm/php-fpm.conf ]]; then + mv -- "$PHP_MAIN_CONF" /opt/docker/etc/php/fpm/php-fpm.conf +else + rm -f -- "PHP_MAIN_CONF" +fi +ln -sf -- /opt/docker/etc/php/fpm/php-fpm.conf "$PHP_MAIN_CONF" + +# Configure php-fpm main (all versions) +go-replace --mode=lineinfile --regex \ + --lineinfile-after='\[global\]' \ + -s '^[\s;]*error_log[\s]*=' -r 'error_log = /docker.stderr' \ + -s '^[\s;]*pid[\s]*=' -r 'pid = /var/run/php-fpm.pid' \ + -- /opt/docker/etc/php/fpm/php-fpm.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' + +fi + +if [[ "$(version-compare "$PHP_VERSION" "5.99.999")" == "<" ]]; then + # Configure php-fpm main (php 5.x) + go-replace --mode=lineinfile --regex \ + --lineinfile-after='\[global\]' \ + -s '^[\s;]*daemonize[\s]*=' -r 'daemonize = no' \ + -- /opt/docker/etc/php/fpm/php-fpm.conf +fi diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php.sh new file mode 100644 index 000000000..71caa48d3 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/20-setup-php.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +case "$IMAGE_FAMILY" in + Debian|Ubuntu|Alpine) + # Register webdevops ini + ln -sf "/opt/docker/etc/php/php.webdevops.ini" "${PHP_ETC_DIR}/conf.d/98-webdevops.ini" + + # Register custom php ini + ln -sf "/opt/docker/etc/php/php.ini" "${PHP_ETC_DIR}/conf.d/99-docker.ini" + ;; +esac diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh new file mode 100644 index 000000000..4a348a38a --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +if [ $IMAGE_FAMILY == "Alpine" ]; then + echo "Skipping ionCube installation on Alpine" + return +fi + +echo "Installing ionCube loader" + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +TMP_FILE="/tmp/ioncube_loaders.tar.gz" + +echo "Downloading ..." +curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +echo "Unpacking ..." +tar -xzf ${TMP_FILE} -C /tmp + +PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` +PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" +SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" + +echo "PHP-VERSION: ${PHP_VERSION}" +echo "PHP-EXTENSION-DIR: ${PHP_EXTENSION_DIR}" +if [[ ! -f "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ]]; then + echo "There is no ioncube available for PHP${PHP_VERSION}, skipping installation" +else + echo "Installing ${SO_FILE}" + cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + + echo "Writing module ini" + echo "[ioncube]" > ${MOD_INI} + echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} + echo "; priority=01" >> ${MOD_INI} + + echo "Cleaning up" + rm -rf $TMP_FILE + rm -rf /tmp/ioncube + + echo "Enabling ionCube PHP module" + case "$IMAGE_FAMILY" in + Debian|Ubuntu) + # Enable ionCube (if available) + if [[ -f "${PHP_ETC_DIR}/mods-available/00-ioncube.ini" ]]; then + ln -sf "${PHP_ETC_DIR}/mods-available/00-ioncube.ini" "${PHP_ETC_DIR}/cli/conf.d/00-ioncube.ini" + ln -sf "${PHP_ETC_DIR}/mods-available/00-ioncube.ini" "${PHP_ETC_DIR}/fpm/conf.d/00-ioncube.ini" + fi + ;; + esac +fi diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/90-cleanup.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/90-cleanup.sh new file mode 100644 index 000000000..3ca393da6 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/90-cleanup.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +# Remove default cronjobs +rm -f -- \ + /etc/cron.daily/logrotate \ + /etc/cron.daily/apt-compat \ + /etc/cron.daily/dpkg \ + /etc/cron.daily/passwd \ + /etc/cron.daily/0yum-daily.cron \ + /etc/cron.daily/logrotate \ + /etc/cron.hourly/0yum-hourly.cron \ + /etc/periodic/daily/logrotate diff --git a/docker/php-official/8.5-alpine/conf/provision/build.d/.gitkeep b/docker/php-official/8.5-alpine/conf/provision/build.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/build.d/10-cleanup.sh b/docker/php-official/8.5-alpine/conf/provision/build.d/10-cleanup.sh new file mode 100644 index 000000000..41031b784 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/build.d/10-cleanup.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +## remove logs (each bootstrap) +rm -rf -- /var/log/* +rm -rf -- /var/tmp/* +rm -rf -- /tmp/* +rm -rf -- /root/.profile diff --git a/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/.gitkeep b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/05-permissions.sh b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/05-permissions.sh new file mode 100644 index 000000000..6f77d8e40 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/05-permissions.sh @@ -0,0 +1,2 @@ +# Fix rights of /tmp (can be a volume) +chmod 1777 /tmp diff --git a/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/20-php-fpm.sh b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/20-php-fpm.sh new file mode 100644 index 000000000..5ab722cf7 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/20-php-fpm.sh @@ -0,0 +1,80 @@ +####################################### +### FPM MAIN +####################################### + +container-file-auto-restore "/opt/docker/etc/php/fpm/php-fpm.conf" + +echo '' >> /opt/docker/etc/php/fpm/php-fpm.conf +echo '; container env settings' >> /opt/docker/etc/php/fpm/php-fpm.conf +echo '[global]' >> /opt/docker/etc/php/fpm/php-fpm.conf + +if [[ -n "${FPM_PROCESS_MAX+x}" ]]; then + echo "process.max = ${FPM_PROCESS_MAX}" >> /opt/docker/etc/php/fpm/php-fpm.conf +fi + +# General fpm main setting +for ENV_VAR in $(envListVars "fpm\.global\."); do + env_key=${ENV_VAR#fpm.global.} + env_val=$(envGetValue "$ENV_VAR") + + echo "$env_key = ${env_val}" >> /opt/docker/etc/php/fpm/php-fpm.conf +done + +####################################### +### FPM POOL +####################################### + +container-file-auto-restore "/opt/docker/etc/php/fpm/pool.d/application.conf" + +echo '' >> /opt/docker/etc/php/fpm/pool.d/application.conf +echo '; container env settings' >> /opt/docker/etc/php/fpm/pool.d/application.conf + +# General fpm pool setting +for ENV_VAR in $(envListVars "fpm\.pool\."); do + env_key=${ENV_VAR#fpm.pool.} + env_val=$(envGetValue "$ENV_VAR") + + echo "$env_key = ${env_val}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +done + + +if [[ -n "${FPM_PM_MAX_CHILDREN+x}" ]]; then + echo "pm.max_children = ${FPM_PM_MAX_CHILDREN}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PM_START_SERVERS+x}" ]]; then + echo "pm.start_servers = ${FPM_PM_START_SERVERS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PM_MIN_SPARE_SERVERS+x}" ]]; then + echo "pm.min_spare_servers = ${FPM_PM_MIN_SPARE_SERVERS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PM_MAX_SPARE_SERVERS+x}" ]]; then + echo "pm.max_spare_servers = ${FPM_PM_MAX_SPARE_SERVERS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PROCESS_IDLE_TIMEOUT+x}" ]]; then + echo "pm.process_idle_timeout = ${FPM_PROCESS_IDLE_TIMEOUT}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_MAX_REQUESTS+x}" ]]; then + echo "pm.max_requests = ${FPM_MAX_REQUESTS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_REQUEST_TERMINATE_TIMEOUT+x}" ]]; then + echo "request_terminate_timeout = ${FPM_REQUEST_TERMINATE_TIMEOUT}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_RLIMIT_FILES+x}" ]]; then + echo "rlimit_files = ${FPM_RLIMIT_FILES}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_RLIMIT_CORE+x}" ]]; then + echo "rlimit_core = ${FPM_RLIMIT_CORE}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +# Workaround for official PHP images +if [[ -n "${PHP_SENDMAIL_PATH+x}" ]]; then + echo "php_admin_value[sendmail_path] = ${PHP_SENDMAIL_PATH}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi diff --git a/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/20-php.sh b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/20-php.sh new file mode 100644 index 000000000..2e208fb85 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/entrypoint.d/20-php.sh @@ -0,0 +1,75 @@ +container-file-auto-restore "/opt/docker/etc/php/php.webdevops.ini" + +echo '' >> /opt/docker/etc/php/php.webdevops.ini +echo '; container env settings' >> /opt/docker/etc/php/php.webdevops.ini + +# General php setting +for ENV_VAR in $(envListVars "php\."); do + env_key=${ENV_VAR#php.} + env_val=$(envGetValue "$ENV_VAR") + + echo "$env_key = ${env_val}" >> /opt/docker/etc/php/php.webdevops.ini +done + + +if [[ -n "${PHP_DATE_TIMEZONE+x}" ]]; then + echo "date.timezone = ${PHP_DATE_TIMEZONE}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_DISPLAY_ERRORS+x}" ]]; then + echo "display_errors = ${PHP_DISPLAY_ERRORS}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_MEMORY_LIMIT+x}" ]]; then + echo "memory_limit = ${PHP_MEMORY_LIMIT}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_MAX_EXECUTION_TIME+x}" ]]; then + echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_POST_MAX_SIZE+x}" ]]; then + echo "post_max_size = ${PHP_POST_MAX_SIZE}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_UPLOAD_MAX_FILESIZE+x}" ]]; then + echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_MEMORY_CONSUMPTION+x}" ]]; then + echo "opcache.memory_consumption = ${PHP_OPCACHE_MEMORY_CONSUMPTION}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_MAX_ACCELERATED_FILES+x}" ]]; then + echo "opcache.max_accelerated_files = ${PHP_OPCACHE_MAX_ACCELERATED_FILES}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_VALIDATE_TIMESTAMPS+x}" ]]; then + echo "opcache.validate_timestamps = ${PHP_OPCACHE_VALIDATE_TIMESTAMPS}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_REVALIDATE_FREQ+x}" ]]; then + echo "opcache.revalidate_freq = ${PHP_OPCACHE_REVALIDATE_FREQ}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_INTERNED_STRINGS_BUFFER+x}" ]]; then + echo "opcache.interned_strings_buffer = ${PHP_OPCACHE_INTERNED_STRINGS_BUFFER}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +# Workaround for official PHP images +if [[ -n "${PHP_SENDMAIL_PATH+x}" ]]; then + echo "sendmail_path = ${PHP_SENDMAIL_PATH}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +# Disable all PHP mods specified in PHP_DISMOD as comma separated list +if [[ -n "${PHP_DISMOD+x}" ]]; then + ini_dir_cli=$(php -i | grep 'Scan this dir for additional .ini files' | cut -c44-) + ini_dir_fpm=$(php-fpm -i | grep 'Scan this dir for additional .ini files' | cut -c44-) + for DISABLE_MOD in ${PHP_DISMOD//,/ }; do + rm -f ${ini_dir_cli}/*${DISABLE_MOD}* + rm -f ${ini_dir_fpm}/*${DISABLE_MOD}* + done +fi + +# Link composer version accordingly +ln -sf /usr/local/bin/composer${COMPOSER_VERSION:-2} /usr/local/bin/composer diff --git a/docker/php-official/8.5-alpine/conf/provision/onbuild.d/.gitkeep b/docker/php-official/8.5-alpine/conf/provision/onbuild.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/roles/.gitkeep b/docker/php-official/8.5-alpine/conf/provision/roles/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/service.d/.gitkeep b/docker/php-official/8.5-alpine/conf/provision/service.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5-alpine/conf/provision/service.d/cron.sh b/docker/php-official/8.5-alpine/conf/provision/service.d/cron.sh new file mode 100644 index 000000000..bd8a54781 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/service.d/cron.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install cron + ;; + + RedHat) + yum-install cronie + ;; +esac diff --git a/docker/php-official/8.5-alpine/conf/provision/service.d/dnsmasq.sh b/docker/php-official/8.5-alpine/conf/provision/service.d/dnsmasq.sh new file mode 100644 index 000000000..9e5c3228c --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/service.d/dnsmasq.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install dnsmasq + ;; + + RedHat) + yum-install dnsmasq + ;; + + Alpine) + apk-install dnsmasq + ;; +esac + +# Configuration +go-replace --mode=line \ + -s '^[\s]*user[\s]*=' -r 'user = root' \ + -s '^[\s]*conf-dir[\s]*=' -r 'conf-dir = /etc/dnsmasq.d' \ + -- /etc/dnsmasq.conf diff --git a/docker/php-official/8.5-alpine/conf/provision/service.d/postfix.sh b/docker/php-official/8.5-alpine/conf/provision/service.d/postfix.sh new file mode 100644 index 000000000..a8c7cc61b --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/service.d/postfix.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install postfix + ;; + + RedHat) + yum-install postfix + + # Fix mysql lib + if [[ ! -f /lib64/libmysqlclient.so.18 ]] && [[ -f /usr/lib64/mysql/libmysqlclient.so.18 ]]; then + ln -s /usr/lib64/mysql/libmysqlclient.so.18 /lib64/libmysqlclient.so.18 + fi + ;; + + Alpine) + apk-install postfix + ;; +esac + +# Configuration +go-replace --mode=line \ + -s '^[\s]*mydestination[\s]*=' -r 'mydestination = ' \ + -s '^[\s]*message_size_limit[\s]*=' -r 'message_size_limit = 15240000' \ + -s '^[\s]*smtp_use_tls[\s]*=' -r 'smtp_use_tls = yes' \ + -s '^[\s]*smtp_tls_security_level[\s]*=' -r 'smtp_tls_security_level = may' \ + -s '^[\s]*myhostname[\s]*=' -r '# myhostname' \ + -- /etc/postfix/main.cf diff --git a/docker/php-official/8.5-alpine/conf/provision/service.d/ssh.sh b/docker/php-official/8.5-alpine/conf/provision/service.d/ssh.sh new file mode 100644 index 000000000..63d7a9f3a --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/service.d/ssh.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install openssh-server + ;; + + RedHat) + yum-install openssh-server + ;; + + Alpine) + apk-install openssh + ;; +esac diff --git a/docker/php-official/8.5-alpine/conf/provision/service.d/syslog.sh b/docker/php-official/8.5-alpine/conf/provision/service.d/syslog.sh new file mode 100644 index 000000000..675d0b061 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/service.d/syslog.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install syslog-ng syslog-ng-core + ;; + + RedHat) + yum-install syslog-ng + + # remove logrotate (not needed for docker) + rm -f "/etc/cron.daily/logrotate" + ;; + + Alpine) + apk-install syslog-ng + ;; +esac + +## Configuration +SYSLOG_NG_VERSION=$(syslog-ng --version | grep -E -e '^Installer-Version:[ ]+[0-9]+\.[0-9]+' | head -n 1 | awk '{print $2}' | cut -f 1,2 -d .) + +# Disable caps inside container +if [[ -f /etc/default/syslog-ng ]]; then + go-replace --mode=lineinfile \ + -s "SYSLOGNG_OPTS" -r "SYSLOGNG_OPTS = --no-caps" \ + -- /etc/default/syslog-ng +fi + +# Symlink configuration +ln -s -f /opt/docker/etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf + +go-replace --mode=lineinfile \ + -s "@version" -r "@version: ${SYSLOG_NG_VERSION}" \ + -- /etc/syslog-ng/syslog-ng.conf + +# Ensure /var/lib/syslog-ng exists +mkdir -p /var/lib/syslog-ng diff --git a/docker/php-official/8.5-alpine/conf/provision/variables-webdevops.yml b/docker/php-official/8.5-alpine/conf/provision/variables-webdevops.yml new file mode 100644 index 000000000..0b2a21a95 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/variables-webdevops.yml @@ -0,0 +1,7 @@ +--- + +docker_image_info_family: "{{ lookup('pipe', 'docker-image-info family') }}" +docker_image_info_distribution: "{{ lookup('pipe', 'docker-image-info dist') }}" +docker_image_info_distribution_version: "{{ lookup('pipe', 'docker-image-info dist-version') }}" +docker_image_info_distribution_release: "{{ lookup('pipe', 'docker-image-info dist-release') }}" +docker_image_info_distribution_codename: "{{ lookup('pipe', 'docker-image-info dist-codename') }}" diff --git a/docker/php-official/8.5-alpine/conf/provision/variables.yml b/docker/php-official/8.5-alpine/conf/provision/variables.yml new file mode 100644 index 000000000..0b2a21a95 --- /dev/null +++ b/docker/php-official/8.5-alpine/conf/provision/variables.yml @@ -0,0 +1,7 @@ +--- + +docker_image_info_family: "{{ lookup('pipe', 'docker-image-info family') }}" +docker_image_info_distribution: "{{ lookup('pipe', 'docker-image-info dist') }}" +docker_image_info_distribution_version: "{{ lookup('pipe', 'docker-image-info dist-version') }}" +docker_image_info_distribution_release: "{{ lookup('pipe', 'docker-image-info dist-release') }}" +docker_image_info_distribution_codename: "{{ lookup('pipe', 'docker-image-info dist-codename') }}" diff --git a/docker/php-official/8.5/Dockerfile b/docker/php-official/8.5/Dockerfile new file mode 100644 index 000000000..5a407cbcd --- /dev/null +++ b/docker/php-official/8.5/Dockerfile @@ -0,0 +1,224 @@ +#+++++++++++++++++++++++++++++++++++++++ +# Dockerfile for webdevops/php-official:8.5 +# -- automatically generated -- +#+++++++++++++++++++++++++++++++++++++++ + + +FROM php:8.5-fpm-bookworm + +LABEL maintainer=info@webdevops.io \ + vendor=WebDevOps.io \ + io.webdevops.layout=8 \ + io.webdevops.version=1.5.0 + +ENV TERM="xterm" \ + LANG="C.UTF-8" \ + LC_ALL="C.UTF-8" +ENV DOCKER_CONF_HOME=/opt/docker/ \ + LOG_STDOUT="" \ + LOG_STDERR="" +ENV APPLICATION_USER=application \ + APPLICATION_GROUP=application \ + APPLICATION_PATH=/app \ + APPLICATION_UID=1000 \ + APPLICATION_GID=1000 +ENV PHP_SENDMAIL_PATH="/usr/sbin/sendmail -t -i" +ENV COMPOSER_VERSION="2" + + +# Baselayout copy (from staged image) +COPY --from=webdevops/toolbox /baselayout/sbin/* /sbin/ +COPY --from=webdevops/toolbox /baselayout/usr/local/bin/* /usr/local/bin/ + + +COPY conf/ /opt/docker/ + +RUN set -x \ + # Init bootstrap + && apt-update \ + && /usr/local/bin/generate-dockerimage-info \ + # Enable non-free + && sed -ri "s/(deb.*\/debian $(docker-image-info dist-codename) main)/\1 contrib non-free /" -- /etc/apt/sources.list.d/debian.sources \ + && apt-update \ + # System update + && /usr/local/bin/apt-upgrade \ + # Base stuff + && apt-install \ + apt-transport-https \ + ca-certificates \ + locales \ + gnupg + +RUN set -x \ + # Install packages + && chmod +x /opt/docker/bin/* \ + && apt-install \ + supervisor \ + wget \ + curl \ + vim \ + net-tools \ + tzdata \ + && chmod +s /sbin/gosu \ + && docker-run-bootstrap \ + && docker-image-cleanup + +RUN set -x \ + # Install services + && apt-install \ + # Install common tools + zip \ + unzip \ + bzip2 \ + moreutils \ + dnsutils \ + openssh-client \ + rsync \ + git \ + patch \ + && /usr/local/bin/generate-locales \ + && docker-run-bootstrap \ + && docker-image-cleanup + +RUN set -x \ + # Install php environment + && apt-install \ + # Install tools + imagemagick \ + graphicsmagick \ + ghostscript \ + jpegoptim \ + libjpeg-turbo-progs \ + pngcrush \ + optipng \ + apngopt \ + pngnq \ + pngquant \ + # Libraries + libvips42 \ + librabbitmq4 \ + libldap-2.5-0 \ + libxslt1.1 \ + libldap-common \ + zlib1g \ + libpq5 \ + libpng16-16 \ + libmcrypt4 \ + libzip4 \ + # Dev and headers + libjpeg62-turbo-dev \ + libwebp-dev \ + libfreetype6-dev \ + libbz2-dev \ + libicu-dev \ + libldap2-dev \ + libldb-dev \ + libmcrypt-dev \ + libxml2-dev \ + libxslt1-dev \ + zlib1g-dev \ + libmemcached-dev \ + libpng-dev \ + libpq-dev \ + libzip-dev \ + libc-client-dev \ + libc-client2007e-dev \ + libkrb5-dev \ + libvips-dev \ + librabbitmq-dev \ + libmagick++-dev \ + libgmp-dev \ + # Install guetzli + && wget https://github.com/google/guetzli/archive/master.zip \ + && unzip master.zip \ + && make -C guetzli-master \ + && cp guetzli-master/bin/Release/guetzli /usr/local/bin/ \ + && rm -rf master.zip guetzli-master \ + # Install new version of ICU + && curl -sS -o /tmp/icu.tar.gz -L https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-src.tgz \ + && tar -zxf /tmp/icu.tar.gz -C /tmp && cd /tmp/icu/source && ./configure --prefix=/usr/local && make && make install && cd / && rm -rf /tmp/icu* \ + # Install extensions + && PKG_CONFIG_PATH=/usr/local docker-php-ext-configure intl \ + && docker-php-ext-configure gd --with-jpeg --with-freetype --with-webp \ + && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ + && cd /usr/src/php/ext/amqp && git submodule update --init \ + && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ + && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ + && docker-php-ext-install \ + bcmath \ + imagick \ + ffi \ + bz2 \ + calendar \ + exif \ + ftp \ + gmp \ + intl \ + gettext \ + ldap \ + mysqli \ + pcntl \ + pdo_mysql \ + pdo_pgsql \ + pgsql \ + soap \ + sockets \ + sysvmsg \ + sysvsem \ + sysvshm \ + shmop \ + xsl \ + zip \ + gd \ + && pecl install memcached \ + && pecl install apcu \ + && pecl install excimer \ + && pecl install opentelemetry \ + && pecl install protobuf \ + && pecl install xmlrpc-1.0.0RC3 \ + && pecl install vips \ + && pecl install redis \ + && pecl install mongodb \ + && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ + && echo extension=excimer.so > /usr/local/etc/php/conf.d/excimer.ini \ + && echo extension=opentelemetry.so > /usr/local/etc/php/conf.d/opentelemetry.ini \ + && echo extension=protobuf.so > /usr/local/etc/php/conf.d/protobuf.ini \ + && echo extension=redis.so > /usr/local/etc/php/conf.d/redis.ini \ + && echo extension=mongodb.so > /usr/local/etc/php/conf.d/mongodb.ini \ + && echo extension=memcached.so > /usr/local/etc/php/conf.d/memcached.ini \ + && echo extension=vips.so > /usr/local/etc/php/conf.d/vips.ini \ + && echo extension=xmlrpc.so > /usr/local/etc/php/conf.d/xmlrpc.ini \ + # Uninstall dev and header packages + && apt-get purge -y -f --force-yes \ + libc-client-dev \ + libkrb5-dev \ + libbz2-dev \ + libicu-dev \ + libldap2-dev \ + libldb-dev \ + libmcrypt-dev \ + libxml2-dev \ + libxslt1-dev \ + zlib1g-dev \ + libpng-dev \ + libwebp-dev \ + libpq-dev \ + libzip-dev \ + libvips-dev \ + librabbitmq-dev \ + libmagick++-dev \ + libgmp-dev \ + && rm -f /usr/local/etc/php-fpm.d/zz-docker.conf \ + && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer2 \ + && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer1 --1 \ + && ln -sf /usr/local/bin/composer2 /usr/local/bin/composer \ + # Enable php services + && docker-service enable syslog \ + && docker-service enable cron \ + && docker-run-bootstrap \ + && docker-image-cleanup + +WORKDIR / +EXPOSE 9000 +ENTRYPOINT ["/entrypoint"] +CMD ["supervisord"] diff --git a/docker/php-official/8.5/Dockerfile.jinja2 b/docker/php-official/8.5/Dockerfile.jinja2 new file mode 100644 index 000000000..549d2056d --- /dev/null +++ b/docker/php-official/8.5/Dockerfile.jinja2 @@ -0,0 +1,37 @@ + +{{ docker.fromOfficial("php", "8.5-fpm-bookworm") }} + +{{ docker.version() }} + +{{ environment.general() }} +{{ environment.base() }} +{{ environment.baseApp() }} +{{ environment.phpOfficialSendmailWorkaround() }} +{{ environment.phpComposerVersion() }} + +{{ baselayout.copy() }} + +{{ docker.copy('conf/', '/opt/docker/') }} + +RUN set -x \ + {{ bootstrap.debian('bookworm') }} + +RUN set -x \ + {{ base.debian() }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} + +RUN set -x \ + {{ baseapp.debian() }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} + +RUN set -x \ + {{ php.official(version='8.5',distribution='bookworm') }} \ + {{ provision.runBootstrap() }} \ + {{ docker.cleanup() }} + +{{ docker.workdir('/') }} +{{ docker.expose('9000') }} +{{ docker.entrypoint("/entrypoint") }} +{{ docker.cmd("supervisord") }} diff --git a/docker/php-official/8.5/conf/VERSION b/docker/php-official/8.5/conf/VERSION new file mode 100644 index 000000000..301160a93 --- /dev/null +++ b/docker/php-official/8.5/conf/VERSION @@ -0,0 +1 @@ +8 \ No newline at end of file diff --git a/docker/php-official/8.5/conf/bin/bootstrap.sh b/docker/php-official/8.5/conf/bin/bootstrap.sh new file mode 100644 index 000000000..b1b3acdbc --- /dev/null +++ b/docker/php-official/8.5/conf/bin/bootstrap.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec docker-run-bootstrap diff --git a/docker/php-official/8.5/conf/bin/config.sh b/docker/php-official/8.5/conf/bin/config.sh new file mode 100644 index 000000000..46265a3c0 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/config.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +shopt -s nullglob + +### + # Check if current user is root + # + ## +function rootCheck() { + # Root check + if [ "$(/usr/bin/whoami)" != "root" ]; then + echo "[ERROR] $* must be run as root" + exit 1 + fi +} + +### + # Create /docker.stdout and /docker.stderr + # + ## +function createDockerStdoutStderr() { + # link stdout from docker + if [[ -n "$LOG_STDOUT" ]]; then + echo "Log stdout redirected to $LOG_STDOUT" + else + LOG_STDOUT="/proc/$$/fd/1" + fi + + if [[ -n "$LOG_STDERR" ]]; then + echo "Log stderr redirected to $LOG_STDERR" + else + LOG_STDERR="/proc/$$/fd/2" + fi + + ln -f -s "$LOG_STDOUT" /docker.stdout + ln -f -s "$LOG_STDERR" /docker.stderr +} +### + # Include script directory text inside a file + # + # $1 -> path + # + ## +function includeScriptDir() { + if [[ -d "$1" ]]; then + for FILE in "$1"/*.sh; do + echo "-> Executing ${FILE}" + # run custom scripts, only once + . "$FILE" + done + fi +} + +### + # Show deprecation notice + # + ## +function deprecationNotice() { + echo "" + echo "###############################################################################" + echo "### THIS CALL IS DEPRECATED AND WILL BE REMOVED IN THE FUTURE" + echo "###" + echo "### $*" + echo "###" + echo "###############################################################################" + echo "" +} + +### + # Run "entrypoint" scripts + ## +function runEntrypoints() { + ############### + # Try to find entrypoint + ############### + + ENTRYPOINT_SCRIPT="/opt/docker/bin/entrypoint.d/${TASK}.sh" + + if [ -f "$ENTRYPOINT_SCRIPT" ]; then + . "$ENTRYPOINT_SCRIPT" + fi + + ############### + # Run default + ############### + if [ -f "/opt/docker/bin/entrypoint.d/default.sh" ]; then + . /opt/docker/bin/entrypoint.d/default.sh + fi + + exit 1 +} + + # Run "entrypoint" provisioning + ## +function runProvisionEntrypoint() { + includeScriptDir "/opt/docker/provision/entrypoint.d" + includeScriptDir "/entrypoint.d" +} + +### + # List environment variables (based on prefix) + ## +function envListVars() { + if [[ $# -eq 1 ]]; then + env | grep "^${1}" | cut -d= -f1 + else + env | cut -d= -f1 + fi +} + +### + # Get environment variable (even with dots in name) + # + ## +function envGetValue() { + awk "BEGIN {print ENVIRON[\"$1\"]}" +} diff --git a/docker/php-official/8.5/conf/bin/control.sh b/docker/php-official/8.5/conf/bin/control.sh new file mode 100644 index 000000000..22d189745 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/control.sh @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +source /opt/docker/bin/config.sh + +rootCheck "$0" + +CONTROL_COMMAND="$1" +shift + +case "$CONTROL_COMMAND" in + + ## ------------------------------------------ + ## PROVISION + ## ------------------------------------------ + + ## main roles + "provision.role") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --tag entrypoint "$1" + ;; + + "provision.role.bootstrap") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap "$1" + ;; + + "provision.role.build") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag build [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag build "$1" + ;; + + "provision.role.onbuild") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag onbuild [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag onbuild "$1" + ;; + + "provision.role.entrypoint") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag entrypoint [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag entrypoint "$1" + ;; + + ## startup roles + "provision.role.startup") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --tag entrypoint --priority 50 "$1" + ;; + + "provision.role.startup.bootstrap") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --priority 50 "$1" + ;; + + "provision.role.startup.build") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag build --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag build --priority 50 "$1" + ;; + + "provision.role.startup.onbuild") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag onbuild --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag onbuild --priority 50 "$1" + ;; + + "provision.role.startup.entrypoint") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag entrypoint --priority 50 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag entrypoint --priority 50 "$1" + ;; + + ## finish roles + "provision.role.finish") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --tag build --tag onbuild --tag entrypoint --priority 200 "$1" + ;; + + "provision.role.finish.bootstrap") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag bootstrap --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag bootstrap --priority 200 "$1" + ;; + + "provision.role.finish.build") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag build --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag build --priority 200 "$1" + ;; + + "provision.role.finish.onbuild") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag onbuild --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag onbuild --priority 200 "$1" + ;; + + "provision.role.finish.entrypoint") + deprecationNotice " Please use >>/opt/docker/bin/provision add --tag entrypoint --priority 200 [role]<< for adding provision roles" + /opt/docker/bin/provision add --tag entrypoint --priority 200 "$1" + ;; + + ## ------------------------------------------ + ## Service + ## ------------------------------------------ + + "service.enable") + deprecationNotice " Please use >>docker-service-enable [service]<<" + docker-service-enable "$1" + ;; + + "service.disable") + deprecationNotice " Please use >>docker-service-disable [service]<<" + docker-service-disable "$1" + ;; + + ## ------------------------------------------ + ## Version + ## ------------------------------------------ + + "version.get") + cat /opt/docker/VERSION + ;; + + "version.require.min") + EXPECTED_VERSION="$1" + CURRENT_VERSION="$(cat /opt/docker/VERSION)" + if [ "$CURRENT_VERSION" -lt "$EXPECTED_VERSION" ]; then + echo "-----------------------------------------------------------" + echo "--- This docker image is not up2date!" + echo "--- " + echo "--- Version expected min: $EXPECTED_VERSION" + echo "--- Version current: $CURRENT_VERSION" + echo "--- " + echo "--- Run 'docker pull ' to update image" + echo "-----------------------------------------------------------" + exit 1 + fi + ;; + + "version.require.max") + EXPECTED_VERSION="$1" + CURRENT_VERSION="$(cat /opt/docker/VERSION)" + if [ "$CURRENT_VERSION" -gt "$EXPECTED_VERSION" ]; then + echo "-----------------------------------------------------------" + echo "--- This docker image is too new!" + echo "--- " + echo "--- Version expected max: $EXPECTED_VERSION" + echo "--- Version current: $CURRENT_VERSION" + echo "-----------------------------------------------------------" + exit 1 + fi + ;; + + + "buildtime.get") + cat /opt/docker/BUILDTIME + ;; + + *) + echo "[ERROR] Invalid controll command: \"${CONTROL_COMMAND}\"" + exit 1 + ;; +esac diff --git a/docker/php-official/8.5/conf/bin/entrypoint.d/cli.sh b/docker/php-official/8.5/conf/bin/entrypoint.d/cli.sh new file mode 100644 index 000000000..fe212a8ea --- /dev/null +++ b/docker/php-official/8.5/conf/bin/entrypoint.d/cli.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +############################################# +## Run CLI_SCRIPT from environment variable +############################################# + +if [ -n "${CLI_SCRIPT}" ]; then + if [ -n "$APPLICATION_USER" ]; then + # Run as EFFECTIVE_USER + shift + exec gosu "${APPLICATION_USER}" ${CLI_SCRIPT} "$@" + else + # Run as root + exec ${CLI_SCRIPT} "$@" + fi +else + echo "[ERROR] No CLI_SCRIPT in in docker environment defined" + exit 1 +fi diff --git a/docker/php-official/8.5/conf/bin/entrypoint.d/default.sh b/docker/php-official/8.5/conf/bin/entrypoint.d/default.sh new file mode 100644 index 000000000..a1be715fe --- /dev/null +++ b/docker/php-official/8.5/conf/bin/entrypoint.d/default.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec "$@" diff --git a/docker/php-official/8.5/conf/bin/entrypoint.d/noop.sh b/docker/php-official/8.5/conf/bin/entrypoint.d/noop.sh new file mode 100644 index 000000000..092d55d8b --- /dev/null +++ b/docker/php-official/8.5/conf/bin/entrypoint.d/noop.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +############################################# +## NOOP (no operation) +############################################# + +exec tail -f /dev/null diff --git a/docker/php-official/8.5/conf/bin/entrypoint.d/root.sh b/docker/php-official/8.5/conf/bin/entrypoint.d/root.sh new file mode 100644 index 000000000..6fa0d063e --- /dev/null +++ b/docker/php-official/8.5/conf/bin/entrypoint.d/root.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +############################################# +## Root shell +############################################# + +if [ "$#" -eq 1 ]; then + ## No command, fall back to interactive shell + exec bash +else + ## Exec root command + shift + exec "$@" +fi diff --git a/docker/php-official/8.5/conf/bin/entrypoint.d/supervisord.sh b/docker/php-official/8.5/conf/bin/entrypoint.d/supervisord.sh new file mode 100644 index 000000000..f21489667 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/entrypoint.d/supervisord.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +############################################# +## Supervisord (start daemons) +############################################# + +## Start services +exec /opt/docker/bin/service.d/supervisor.sh + diff --git a/docker/php-official/8.5/conf/bin/entrypoint.sh b/docker/php-official/8.5/conf/bin/entrypoint.sh new file mode 100644 index 000000000..0489b796c --- /dev/null +++ b/docker/php-official/8.5/conf/bin/entrypoint.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +if [[ -z "$CONTAINER_UID" ]]; then + export CONTAINER_UID="application" +fi + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# auto elevate privileges (if container is not started as root) +if [[ "$UID" -ne 0 ]]; then + export CONTAINER_UID="$UID" + exec gosu root "$0" "$@" +fi +# remove suid bit on gosu +chmod -s /sbin/gosu + +trap 'echo sigterm ; exit' SIGTERM +trap 'echo sigkill ; exit' SIGKILL + +# sanitize input and set task +TASK="$(echo $1| sed 's/[^-_a-zA-Z0-9]*//g')" + +source /opt/docker/bin/config.sh + +createDockerStdoutStderr + +if [[ "$UID" -eq 0 ]]; then + # Only run provision if user is root + + if [ "$TASK" == "supervisord" -o "$TASK" == "noop" ]; then + # Visible provisioning + runProvisionEntrypoint + else + # Hidden provisioning + runProvisionEntrypoint > /dev/null + fi +fi + +############################# +## COMMAND +############################# + +runEntrypoints "$@" diff --git a/docker/php-official/8.5/conf/bin/provision b/docker/php-official/8.5/conf/bin/provision new file mode 100755 index 000000000..418e81dd8 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/provision @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Install ansible if not installed +if [ -z "`which ansible-playbook`" ]; then + docker-ansible-install +fi + +exec /opt/docker/bin/provision.py "$@" diff --git a/docker/php-official/8.5/conf/bin/provision.py b/docker/php-official/8.5/conf/bin/provision.py new file mode 100755 index 000000000..d367c2812 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/provision.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python + +import os +import argparse +import json +import sys +from string import Template +from subprocess import call +import tempfile +import time + +STORAGE = '/opt/docker/etc/.registry/provision.json' +PROVISION_DIR = '/opt/docker/provision/' + +PLAYBOOK_TAGS=['bootstrap', 'build', 'onbuild', 'entrypoint'] + +PLAYBOOK = Template( +"""--- + +- hosts: all + vars_files: + - ./variables-webdevops.yml + - ./variables.yml + roles: + - $roles +""") + + + +def readJson(): + ret = {} + + # create registry directory if it doesn't exists + if not os.path.exists(os.path.dirname(STORAGE)): + os.mkdir(os.path.dirname(STORAGE)) + + # try to read file + if os.path.isfile(STORAGE): + f=open(STORAGE).read() + ret = json.loads(f) + + return ret + + + +def saveJson(data): + with open(STORAGE, 'w') as f: + json.dump(data, f) + + + +def buildRoleList(tags): + json = readJson() + roleList = {} + + # fetch roles list for each tag + for tag in tags: + if tag in json: + for role in json[tag]: + roleRow = json[tag][role] + if role not in roleList: + roleList[role] = {} + + if 'tags' not in roleList[role]: + roleList[role]['tags'] = {} + + roleList[role]['role'] = role + roleList[role]['added'] = roleRow['added'] + roleList[role]['priority'] = roleRow['priority'] + roleList[role]['tags'][tag] = tag + + return roleList + + +def buildSortedRoleList(tags): + roleList = buildRoleList(tags) + + # sort list + roleList = sorted(roleList, key=lambda x: (roleList[x]['priority'], roleList[x]['added'])) + + return roleList + + + +def buildPlaybook(roleList): + ## build playbook + ret = PLAYBOOK.substitute( + roles = "\n - ".join(roleList) + ) + + return ret + + +def buildPlaybookFromArgs(args): + roleList = [] + + ## add roles from tag (if use registry is active) + if args.useRegistry and args.tags: + roleList.extend(buildSortedRoleList(args.tags)) + + ## add roles from command arguments + if args.roles: + for role in args.roles: + roleList.extend(role.split(',')) + + if roleList: + return buildPlaybook(roleList) + else: + return False + + + +def actionRun(args): + if args.playbook: + ## predefined playbook + playbook = args.playbook + else: + ## dynamic playbook + playbookContent = buildPlaybookFromArgs(args) + + if playbookContent: + f = tempfile.NamedTemporaryFile(dir=PROVISION_DIR, prefix='playbook.', suffix='.yml', delete=False) + f.write(playbookContent) + f.close() + playbook = f.name + else: + ## nothing to do + sys.exit(0) + + ## build ansible command with args + cmd = [ + 'ansible-playbook', + playbook, + '-i', 'localhost,', + '--connection=local', + ] + + if args.tags: + cmd.extend([ + '--tags=' + ','.join(args.tags) + ]) + + if args.args: + cmd.extend(args.args) + + ## run ansible + retval = call(cmd) + + ## cleanup dynamic playbook + if not args.playbook: + os.unlink(playbook) + + sys.exit(retval) + + + +def actionPlaybook(args): + playbook = buildPlaybookFromArgs(args) + + if playbook: + print playbook + else: + sys.exit(1) + + + +def actionList(args): + json = readJson() + list = {} + + for tag in args.tags: + if tag in json: + for role in json[tag]: + print role + + + +def actionAdd(args): + json = readJson() + + for tag in args.tags: + for role in args.role: + if tag not in json: + json[tag] = {} + + json[tag][role] = { + 'name': role, + 'added': int(time.time()), + 'priority': args.priority + } + + saveJson(json) + + + +def actionSummary(args): + # list all roles in each possible tag + for tag in PLAYBOOK_TAGS: + roleList = buildRoleList([tag]) + if roleList: + maxLength = len(max(roleList.keys(), key=len)) + + print "Roles in " + tag + ":" + for role in roleList: + print ' - ' + role.ljust(maxLength, ' ') + ' [priority: ' + str(roleList[role]['priority']) + ']' + print '' + + + +def main(args): + actions = { + 'list': actionList, + 'add': actionAdd, + 'summary': actionSummary, + 'playbook': actionPlaybook, + 'run': actionRun + } + + func = actions.get(args.action, lambda: "nothing") + return func(args) + + + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers( + title='subcommands', + dest='action' + ) + + ################################### + ## SUMMARY command + summary = subparsers.add_parser('summary') + + ################################### + ## RUN command + run = subparsers.add_parser('run') + run.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + run.add_argument( + '--playbook', + dest='playbook', + help='Ansible playbook' + ) + run.add_argument( + '--use-registry', + dest='useRegistry', + action='store_true', + help='Use registred roles' + ) + run.add_argument( + '--role', + dest='roles', + action='append', + help='Ansible role' + ) + run.add_argument('args', nargs=argparse.REMAINDER) + + ################################### + ## PLAYBOOK command + playbook = subparsers.add_parser('playbook') + playbook.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + playbook.add_argument( + '--use-registry', + dest='useRegistry', + action='store_true', + help='Use registred roles' + ) + playbook.add_argument( + '--role', + dest='roles', + action='append', + help='Ansible tag' + ) + playbook.add_argument('args', nargs=argparse.REMAINDER) + + ################################### + ## LIST command + list = subparsers.add_parser('list') + list.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + list.add_argument('args', nargs=argparse.REMAINDER) + + ################################### + ## ADD command + add = subparsers.add_parser('add') + add.add_argument( + '--tag', + dest='tags', + choices=PLAYBOOK_TAGS, + required=True, + action='append', + help='Ansible tag' + ) + add.add_argument( + '--priority', + type=int, + default=100, + dest='priority', + help='Priority for role [default 100, 1 is most important]' + ) + add.add_argument('role', metavar='roles', nargs='+', help='Ansible roles') + + add.add_argument('args', nargs=argparse.REMAINDER) + + ## Execute + args = parser.parse_args() + main(args) diff --git a/docker/php-official/8.5/conf/bin/service.d/cron.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/cron.d/10-init.sh new file mode 100644 index 000000000..611edc9bf --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/cron.d/10-init.sh @@ -0,0 +1,16 @@ +# Install crontab files + +if [[ -d "/opt/docker/etc/cron" ]]; then + mkdir -p /etc/cron.d/ + + find /opt/docker/etc/cron -type f | while read CRONTAB_FILE; do + # fix permissions + chmod 0644 -- "$CRONTAB_FILE" + + # add newline, cron needs this + echo >> "$CRONTAB_FILE" + + # Install files + cp -a -- "$CRONTAB_FILE" "/etc/cron.d/$(basename "$CRONTAB_FILE")" + done +fi diff --git a/docker/php-official/8.5/conf/bin/service.d/cron.sh b/docker/php-official/8.5/conf/bin/service.d/cron.sh new file mode 100644 index 000000000..b5fa80dd3 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/cron.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_CRON_OPTS" ]]; then SERVICE_CRON_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/cron.d/" + +exec /usr/sbin/cron -f $SERVICE_CRON_OPTS diff --git a/docker/php-official/8.5/conf/bin/service.d/dnsmasq.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/dnsmasq.d/10-init.sh new file mode 100644 index 000000000..836ebe2b5 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/dnsmasq.d/10-init.sh @@ -0,0 +1,37 @@ +# Create dnsmasq.d directory if not exists +mkdir -p -- /etc/dnsmasq.d/ + +# Enable /etc/dnsmasq.d/ +go-replace --mode=lineinfile --once \ + -s 'conf-dir' -r 'conf-dir=/etc/dnsmasq.d/,*.conf' \ + -- /etc/dnsmasq.conf + +## clear dns file +echo > /etc/dnsmasq.d/webdevops.conf + +if [ ! -f /etc/resolv.conf.original ]; then + cp -a /etc/resolv.conf /etc/resolv.conf.original + + ## set forward servers + cat /etc/resolv.conf.original | grep nameserver | sed 's/nameserver /server=/' > /etc/dnsmasq.d/forward.conf + + ## set dnsmasq to main nameserver + echo "nameserver 127.0.0.1" > /etc/resolv.conf +fi + + +# Add own VIRTUAL_HOST as loopback +if [[ -n "${VIRTUAL_HOST+x}" ]]; then + # split comma by space + VIRTUAL_HOST_LIST=${VIRTUAL_HOST//,/$'\n'} + + # replace *.domain for dns specific .domain wildcard + VIRTUAL_HOST_LIST=${VIRTUAL_HOST_LIST/\*./.} + + # no support for .* + VIRTUAL_HOST_LIST=${VIRTUAL_HOST_LIST/.\*/.} + + for DOMAIN in $VIRTUAL_HOST_LIST; do + echo "address=/${DOMAIN}/127.0.0.1" >> /etc/dnsmasq.d/webdevops.conf + done +fi diff --git a/docker/php-official/8.5/conf/bin/service.d/dnsmasq.sh b/docker/php-official/8.5/conf/bin/service.d/dnsmasq.sh new file mode 100644 index 000000000..b8b4c12e0 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/dnsmasq.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_DNSMASQ_OPTS" ]]; then SERVICE_DNSMASQ_OPTS=""; fi +if [[ -z "$SERVICE_DNSMASQ_USER" ]]; then SERVICE_DNSMASQ_USER="root"; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/dnsmasq.d/" + +exec dnsmasq --keep-in-foreground --user="$SERVICE_DNSMASQ_USER" $SERVICE_DNSMASQ_OPTS diff --git a/docker/php-official/8.5/conf/bin/service.d/php-fpm.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/php-fpm.d/10-init.sh new file mode 100644 index 000000000..7d0dadad6 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/php-fpm.d/10-init.sh @@ -0,0 +1,12 @@ +# setup user env +FPM_POOL_CONF="/opt/docker/etc/php/fpm/pool.d/application.conf" + +## Setup container uid +if [[ -n "$CONTAINER_UID" ]]; then + echo "Setting php-fpm user to $CONTAINER_UID" + go-replace --mode=line --regex \ + -s '^[\s;]*user[\s]*=' -r "user = $CONTAINER_UID" \ + -s '^[\s;]*group[\s]*=' -r "group = $CONTAINER_UID" \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' +fi diff --git a/docker/php-official/8.5/conf/bin/service.d/php-fpm.d/11-clear-env.sh b/docker/php-official/8.5/conf/bin/service.d/php-fpm.d/11-clear-env.sh new file mode 100644 index 000000000..ef6fd4016 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/php-fpm.d/11-clear-env.sh @@ -0,0 +1,38 @@ +# +# Workaround for old php-fpm versions which don't have clear_env setting +# + +VARIABLE_LIST="; Workaround for missing clear_env feature in PHP-FPM" + +# For each exported variable +for envVariable in $(printenv|cut -f1 -d=); do + + case "$envVariable" in + "_"|"PATH"|"PWD") + ## ignore this variables + ;; + + *) + ## get content of variable + envVariableContent="${!envVariable}" + + ## php-fpm requires that env variable has to be filled with content + if [[ -n "$envVariableContent" ]]; then + ## quote quotes + envVariableContent=${envVariableContent//\"/\\\"} + + ## add to list + VARIABLE_LIST="${VARIABLE_LIST}"$'\n'"env[${envVariable}] = \"${envVariableContent}\"" + fi + ;; + esac + +done + +# Replace ;#CLEAR_ENV_WORKAROUND# with environment variable list for all php-fpm pool files +go-replace \ + -s ";#CLEAR_ENV_WORKAROUND#" -r "$VARIABLE_LIST" \ + --path=/opt/docker/etc/php/fpm/pool.d/ \ + --path-pattern='*.conf' \ + --ignore-empty + diff --git a/docker/php-official/8.5/conf/bin/service.d/php-fpm.sh b/docker/php-official/8.5/conf/bin/service.d/php-fpm.sh new file mode 100644 index 000000000..15374f566 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/php-fpm.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_PHPFPM_OPTS" ]]; then SERVICE_PHPFPM_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/php-fpm.d/" + +exec /usr/local/bin/php-fpm --nodaemonize $SERVICE_PHPFPM_OPTS diff --git a/docker/php-official/8.5/conf/bin/service.d/postfix.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/postfix.d/10-init.sh new file mode 100644 index 000000000..82574153d --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/postfix.d/10-init.sh @@ -0,0 +1,30 @@ +# force new copy of hosts there (otherwise links could be outdated) +mkdir -p /var/spool/postfix/etc +cp -f /etc/hosts /var/spool/postfix/etc/hosts +cp -f /etc/resolv.conf /var/spool/postfix/etc/resolv.conf +cp -f /etc/services /var/spool/postfix/etc/services + +go-replace --mode=line --regex -s '^[\s]*myhostname[\s]*=.*' -r "myhostname = $HOSTNAME" + +# General +go-replace --mode=lineinfile --regex \ + -s '^[\s]*myhostname[\s]*=.*.*' -r "myhostname = $HOSTNAME" \ + -s '^[\s]*inet_interfaces[\s]*=.*' -r "inet_interfaces = 127.0.0.1" \ + -- /etc/postfix/main.cf + +## REPLAYHOST +if [[ -n "${POSTFIX_RELAYHOST+x}" ]]; then + go-replace --mode=lineinfile --regex \ + -s '^[\s]*relayhost[\s]*=.*' -r "relayhost = $POSTFIX_RELAYHOST" \ + -- /etc/postfix/main.cf +fi + +## MYNETWORKS +if [[ -n "${POSTFIX_MYNETWORKS+x}" ]]; then + go-replace --mode=lineinfile --regex \ + -s '^[\s]*mynetworks[\s]*=.*' -r "mynetworks = $POSTFIX_MYNETWORKS" \ + -- /etc/postfix/main.cf +fi + +# generate aliases db +newaliases || : diff --git a/docker/php-official/8.5/conf/bin/service.d/postfix.sh b/docker/php-official/8.5/conf/bin/service.d/postfix.sh new file mode 100644 index 000000000..b9e477bcd --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/postfix.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# postfix-wrapper.sh, version 0.1.0 +# +# You cannot start postfix in some foreground mode and +# it's more or less important that docker doesn't kill +# postfix and its chilren if you stop the container. +# +# Use this script with supervisord and it will take +# care about starting and stopping postfix correctly. +# +# supervisord config snippet for postfix-wrapper: +# +# [program:postfix] +# process_name = postfix +# command = /path/to/postfix-wrapper.sh +# startsecs = 0 +# autorestart = false +# + +# Init vars +if [[ -z "$SERVICE_POSTFIX_OPTS" ]]; then SERVICE_POSTFIX_OPTS=""; fi + +source /opt/docker/bin/config.sh + +trap "postfix stop" SIGINT +trap "postfix stop" SIGTERM +trap "postfix reload" SIGHUP + +includeScriptDir "/opt/docker/bin/service.d/postfix.d/" + +# start postfix +postfix start $SERVICE_POSTFIX_OPTS + +# lets give postfix some time to start +sleep 3 + +# wait until postfix is dead (triggered by trap) +if [[ -f /var/spool/postfix/pid/master.pid ]]; then + while kill -0 "$(cat /var/spool/postfix/pid/master.pid 2>/dev/null)" &>/dev/null; do + sleep 5 + done +fi diff --git a/docker/php-official/8.5/conf/bin/service.d/ssh.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/ssh.d/10-init.sh new file mode 100644 index 000000000..f2b600312 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/ssh.d/10-init.sh @@ -0,0 +1,7 @@ +# Init ssh privilege separation directory +mkdir -p /var/run/sshd +chown root:root /var/run/sshd +chmod 755 /var/run/sshd + +# generate host keys +ssh-keygen -A diff --git a/docker/php-official/8.5/conf/bin/service.d/ssh.sh b/docker/php-official/8.5/conf/bin/service.d/ssh.sh new file mode 100644 index 000000000..f01e87ab3 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/ssh.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_SSH_OPTS" ]]; then SERVICE_SSH_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/ssh.d/" + +exec /usr/sbin/sshd -D $SERVICE_SSH_OPTS diff --git a/docker/php-official/8.5/conf/bin/service.d/supervisor.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/supervisor.d/10-init.sh new file mode 100644 index 000000000..fdffa2a0f --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/supervisor.d/10-init.sh @@ -0,0 +1 @@ +# placeholder diff --git a/docker/php-official/8.5/conf/bin/service.d/supervisor.sh b/docker/php-official/8.5/conf/bin/service.d/supervisor.sh new file mode 100644 index 000000000..5a82a13ff --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/supervisor.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_SUPERVISOR_OPTS" ]]; then SERVICE_SUPERVISOR_OPTS=""; fi +if [[ -z "$SERVICE_SUPERVISOR_USER" ]]; then SERVICE_SUPERVISOR_USER="root"; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/supervisor.d/" + +exec supervisord -c /opt/docker/etc/supervisor.conf --logfile /dev/null --pidfile /dev/null --user "$SERVICE_SUPERVISOR_USER" $SERVICE_SUPERVISOR_OPTS diff --git a/docker/php-official/8.5/conf/bin/service.d/syslog-ng.d/10-init.sh b/docker/php-official/8.5/conf/bin/service.d/syslog-ng.d/10-init.sh new file mode 100644 index 000000000..326207e52 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/syslog-ng.d/10-init.sh @@ -0,0 +1,10 @@ +# If /dev/log is either a named pipe or it was placed there accidentally, +# e.g. because of the issue documented at https://github.com/phusion/baseimage-docker/pull/25, +# then we remove it. +if [ ! -S /dev/log ]; then rm -f /dev/log; fi +if [ ! -S /var/lib/syslog-ng/syslog-ng.ctl ]; then rm -f /var/lib/syslog-ng/syslog-ng.ctl; fi + +if [[ ! -p /docker.stdout ]]; then + # Switch to file (tty docker mode) + go-replace -s 'pipe("/docker.stdout")' -r 'file("/docker.stdout")' -- /opt/docker/etc/syslog-ng/syslog-ng.conf +fi diff --git a/docker/php-official/8.5/conf/bin/service.d/syslog-ng.sh b/docker/php-official/8.5/conf/bin/service.d/syslog-ng.sh new file mode 100644 index 000000000..8e1358c1b --- /dev/null +++ b/docker/php-official/8.5/conf/bin/service.d/syslog-ng.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Init vars +if [[ -z "$SERVICE_SYSLOG_OPTS" ]]; then SERVICE_SYSLOG_OPTS=""; fi + +source /opt/docker/bin/config.sh + +includeScriptDir "/opt/docker/bin/service.d/syslog-ng.d/" + +exec syslog-ng -F --no-caps -p /var/run/syslog-ng.pid $SYSLOGNG_OPTS $SERVICE_SYSLOG_OPTS diff --git a/docker/php-official/8.5/conf/bin/usr-bin/container-file-auto-restore b/docker/php-official/8.5/conf/bin/usr-bin/container-file-auto-restore new file mode 100644 index 000000000..a41fcb3c8 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/container-file-auto-restore @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -o pipefail ## trace ERR through pipes +set -o errtrace ## trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +if [[ "$#" -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +SOURCE_FILE="$1" +BACKUP_FILE="$(dirname "$1")/.$(basename "$1").bak" + +if [[ -f "$BACKUP_FILE" ]]; then + ## Backup file exists + ## -> container was restarted + ## -> restoring configuration + cp -a -- "$BACKUP_FILE" "$SOURCE_FILE" +else + ## Backup file DOESN'T exists + ## -> container first startup + ## -> backup configuration + cp -a -- "$SOURCE_FILE" "$BACKUP_FILE" +fi diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-ansible-install b/docker/php-official/8.5/conf/bin/usr-bin/docker-ansible-install new file mode 100644 index 000000000..dfb06fc7d --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-ansible-install @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install \ + python-minimal \ + python-setuptools \ + python-pip \ + python-paramiko \ + python-jinja2 \ + python-dev \ + libffi-dev \ + libssl-dev \ + build-essential + pip install --upgrade pip + hash -r + pip install --no-cache-dir ansible + # Cleanup + apt-get purge -y -f --force-yes \ + python-dev \ + build-essential \ + libssl-dev \ + libffi-dev + + chmod 750 /usr/local/bin/ansible* + ;; + + RedHat) + yum-install \ + epel-release \ + PyYAML \ + python-jinja2 \ + python-httplib2 \ + python-keyczar \ + python-paramiko \ + python-setuptools \ + python-setuptools-devel \ + libffi \ + python-devel \ + libffi-devel + easy_install pip + pip install --upgrade pip + hash -r + pip install --no-cache-dir ansible + # Cleanup + yum erase -y python-devel + + chmod 750 /usr/bin/ansible* + ;; + + Alpine) + apk-install \ + python \ + python-dev \ + py-setuptools \ + py-crypto \ + py2-pip \ + py-cparser \ + py-cryptography \ + py-markupsafe \ + py-cffi \ + py-yaml \ + py-jinja2 \ + py-paramiko + pip install --upgrade pip + hash -r + pip install --no-cache-dir ansible + # Cleanup + apk del python-dev + + chmod 750 /usr/bin/ansible* + ;; +esac +docker-image-cleanup diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-cronjob b/docker/php-official/8.5/conf/bin/usr-bin/docker-cronjob new file mode 100644 index 000000000..2746c75f5 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-cronjob @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +source /opt/docker/bin/config.sh + +rootCheck "$0" + +if [[ "$#" -eq 0 ]]; then + echo "Usage: $0 ''" + exit 1 +fi + +# create crontab file +touch /etc/cron.d/webdevops-docker +chmod 0644 /etc/cron.d/webdevops-docker + +for CRONJOB_LINES in "$@"; do + echo "$CRONJOB_LINES" >> /etc/cron.d/webdevops-docker +done + +# Add required newline at end +echo >> /etc/cron.d/webdevops-docker diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-php-setting b/docker/php-official/8.5/conf/bin/usr-bin/docker-php-setting new file mode 100644 index 000000000..30bbb979f --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-php-setting @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# Defaults +PHP_INI_FILE="/opt/docker/etc/php/php.ini" +PHP_VALUE_RAW=0 +PHP_KEY= +PHP_VALUE= + +for arg in "$@"; do + case "$arg" in + --raw) + PHP_VALUE_RAW=1 + shift + ;; + esac +done + +if [[ "$#" -le 2 ]]; then + echo "Usage: $(basename "$0") [--raw] " + exit 1 +fi + +PHP_SETTING_KEY=$1 +shift +PHP_SETTING_VALUE="$@" + +if [[ "$PHP_VALUE_RAW" -eq 0 ]]; then + case "$PHP_SETTING_VALUE" in + ''|*[!0-9]*) + # non numeric + PHP_SETTING_VALUE="\"${PHP_SETTING_VALUE}\"" + ;; + esac +fi + + +echo "$(basename "$0"): Setting php setting: ${PHP_SETTING_KEY} = ${PHP_SETTING_VALUE}" +echo "${PHP_SETTING_KEY} = ${PHP_SETTING_VALUE}" >> "$PHP_INI_FILE" + diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-provision b/docker/php-official/8.5/conf/bin/usr-bin/docker-provision new file mode 100644 index 000000000..4ee715c64 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-provision @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# wrapper +exec /opt/docker/bin/provision "$@" diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-service b/docker/php-official/8.5/conf/bin/usr-bin/docker-service new file mode 100644 index 000000000..70a493767 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-service @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +if [[ "$#" -le 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +SERVICE_COMMAND=$1 +shift + +for SERVICE in "$@"; do + RUN_FILE="/opt/docker/bin/service.d/${SERVICE}.sh" + SERVICE_FILE="/opt/docker/etc/supervisor.d/${SERVICE}.conf" + PROVISION_FILE="/opt/docker/provision/service.d/${SERVICE}.sh" + + case "$SERVICE_COMMAND" in + enable) + # Run on demand installation/provisioning + if [[ -f "$PROVISION_FILE" ]]; then + echo "Running provisioning for ${SERVICE}, please wait..." + + ## execute scripts + . "$PROVISION_FILE" + + ## remove directory (one run time) + rm -f -- "$PROVISION_FILE" + fi + + ## Enable service + if [[ -f "$SERVICE_FILE" ]]; then + go-replace --mode=lineinfile \ + -s 'autostart =' -r 'autostart = true' \ + -- "$SERVICE_FILE" + else + echo "[ERROR] Service '${SERVICE}' not found (tried ${SERVICE_FILE})" + exit 1 + fi + ;; + + disable) + ## Disable service + if [[ -f "$SERVICE_FILE" ]]; then + go-replace --mode=lineinfile \ + -s 'autostart =' -r 'autostart = false' \ + -- "$SERVICE_FILE" + else + echo "[ERROR] Service '${SERVICE}' not found (tried ${SERVICE_FILE})" + exit 1 + fi + ;; + + install) + # Run on demand installation/provisioning + if [[ -f "$PROVISION_FILE" ]]; then + echo "Running provisioning for ${SERVICE}, please wait..." + + ## execute scripts + . "$PROVISION_FILE" + + ## remove directory (one run time) + rm -f -- "$PROVISION_FILE" + fi + ;; + + run) + if [[ -f "$RUN_FILE" ]]; then + exec "$RUN_FILE" + else + echo "[ERROR] Service '${SERVICE}' not found (tried ${RUN_FILE})" + exit 1 + fi + ;; + + stop|start|restart|status|pid|check) + service "${SERVICE}" "$SERVICE_COMMAND" + ;; + + *) + echo "[ERROR] $SERVICE_COMMAND is not a valid command" + exit 1 + ;; + esac +done + diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-service-disable b/docker/php-official/8.5/conf/bin/usr-bin/docker-service-disable new file mode 100644 index 000000000..991f249c8 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-service-disable @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec docker-service disable "$@" diff --git a/docker/php-official/8.5/conf/bin/usr-bin/docker-service-enable b/docker/php-official/8.5/conf/bin/usr-bin/docker-service-enable new file mode 100644 index 000000000..da99c9aeb --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/docker-service-enable @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +exec docker-service enable "$@" + diff --git a/docker/php-official/8.5/conf/bin/usr-bin/service b/docker/php-official/8.5/conf/bin/usr-bin/service new file mode 100755 index 000000000..69874cb80 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/service @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +# Root check +if [ "$(/usr/bin/whoami)" != "root" ]; then + echo "[ERROR] Must be run as root" + exit 1 +fi + +function serviceHelp() { + echo "Usage: $(basename "$0") " +} + +function getServicePid() { + local serviceName="$1" + local servicePid=$(supervisorctl pid "${serviceName}:${serviceName}d") + + if [[ -z "$servicePid" ]] || [[ "$servicePid" == "0" ]]; then + echo "not running" + exit 1 + fi + + echo $servicePid +} + +# Param check +if [ "$#" -lt 2 ]; then + echo "[ERROR] Missing parameters" + serviceHelp + exit 1 +fi + +############################# +# Param init +############################# + +SERVICENAME="$1" +ACTION="$2" + +############################# +# Service aliases +############################# +case "$SERVICENAME" in + apache2|httpd) + SERVICENAME="apache" + ;; +esac + +############################# +# Action runner +############################# +case "$ACTION" in + stop|start|restart|status) + exec supervisorctl "$ACTION" "${SERVICENAME}:${SERVICENAME}d" + ;; + + pid) + echo $(getServicePid "${SERVICENAME}") + ;; + + check) + FIRST_PID=$(getServicePid "${SERVICENAME}") + sleep 5 + SECOND_PID=$(getServicePid "${SERVICENAME}") + + if [[ "$FIRST_PID" == "$SECOND_PID" ]]; then + echo "ok" + exit 0 + else + echo "not running" + exit 1 + fi + ;; + + + *) + echo "[ERROR] Invalid action" + serviceHelp + exit 1 + ;; + +esac diff --git a/docker/php-official/8.5/conf/bin/usr-bin/version-compare b/docker/php-official/8.5/conf/bin/usr-bin/version-compare new file mode 100644 index 000000000..ca450b0e9 --- /dev/null +++ b/docker/php-official/8.5/conf/bin/usr-bin/version-compare @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -o pipefail # trace ERR through pipes +set -o errtrace # trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value + +function versionCompare () { + if [[ $1 == $2 ]] + then + echo -n '=' + return + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + echo -n '>' + return + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + echo -n '<' + return + fi + done + + echo -n '=' +} + +versionCompare "$1" "$2" diff --git a/docker/php-official/8.5/conf/etc/cron/.gitkeep b/docker/php-official/8.5/conf/etc/cron/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/etc/logrotate.d/php5-fpm b/docker/php-official/8.5/conf/etc/logrotate.d/php5-fpm new file mode 100644 index 000000000..e6ef4b123 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/logrotate.d/php5-fpm @@ -0,0 +1,12 @@ +/var/log/php5-fpm/fpm.log +/var/log/php5-fpm/access.log +/var/log/php5-fpm/slow.log +/var/log/php5-fpm/error.log { + missingok + notifempty + sharedscripts + delaycompress + postrotate + /bin/kill -SIGUSR1 `cat /var/run/php5-fpm.pid` 2>/dev/null || true + endscript +} diff --git a/docker/php-official/8.5/conf/etc/logrotate.d/syslog-ng b/docker/php-official/8.5/conf/etc/logrotate.d/syslog-ng new file mode 100644 index 000000000..4a6f9c54e --- /dev/null +++ b/docker/php-official/8.5/conf/etc/logrotate.d/syslog-ng @@ -0,0 +1,38 @@ +/var/log/syslog +{ + rotate 7 + daily + missingok + notifempty + delaycompress + compress + postrotate + /bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` > /dev/null + endscript +} + +/var/log/mail.info +/var/log/mail.warn +/var/log/mail.err +/var/log/mail.log +/var/log/daemon.log +/var/log/kern.log +/var/log/auth.log +/var/log/user.log +/var/log/lpr.log +/var/log/cron.log +/var/log/debug +/var/log/messages +{ + rotate 4 + weekly + missingok + notifempty + compress + delaycompress + sharedscripts + postrotate + /bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` > /dev/null + supervisorctl restart syslog-ng-stdout > /dev/null + endscript +} \ No newline at end of file diff --git a/docker/php-official/8.5/conf/etc/php/conf.d/.gitkeep b/docker/php-official/8.5/conf/etc/php/conf.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/etc/php/fpm/.gitkeep b/docker/php-official/8.5/conf/etc/php/fpm/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/etc/php/php.ini b/docker/php-official/8.5/conf/etc/php/php.ini new file mode 100644 index 000000000..447212118 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/php/php.ini @@ -0,0 +1 @@ +; placeholder diff --git a/docker/php-official/8.5/conf/etc/php/php.webdevops.ini b/docker/php-official/8.5/conf/etc/php/php.webdevops.ini new file mode 100644 index 000000000..aa1545ab8 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/php/php.webdevops.ini @@ -0,0 +1,34 @@ +; ------------------------------------- +; Docker Webdevops PHP configuration +; ------------------------------------- + +; this file will overwrite default php.ini settings + +display_errors = 0 +log_errors = 1 + +short_open_tag = Off +variables_order = 'GPCS' +request_order = 'GP' + +allow_url_fopen = On +allow_url_include = Off + +memory_limit = 512M +max_execution_time = 300 +max_input_time = 300 +post_max_size = 50M +upload_max_filesize = 50M +max_input_vars = 5000 + +expose_php = Off + +date.timezone = UTC + +mysql.default_host = mysql +mysqli.default_host = mysql + +opcache.memory_consumption = 256 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 7963 +opcache.fast_shutdown = 1 diff --git a/docker/php-official/8.5/conf/etc/supervisor.conf b/docker/php-official/8.5/conf/etc/supervisor.conf new file mode 100644 index 000000000..479e0db08 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.conf @@ -0,0 +1,20 @@ +[supervisord] +nodaemon=true + +[unix_http_server] +file = /.supervisor.sock +chmod = 0700 +chown = root:root +username = root +password = {SHA}e982f17bcbe0f724063b708a4f76db211a999304 + +[supervisorctl] +serverurl = unix:///.supervisor.sock +username = root +password = docker + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[include] +files = /opt/docker/etc/supervisor.d/*.conf diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/.gitkeep b/docker/php-official/8.5/conf/etc/supervisor.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/cron.conf b/docker/php-official/8.5/conf/etc/supervisor.d/cron.conf new file mode 100644 index 000000000..ef0a71678 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.d/cron.conf @@ -0,0 +1,14 @@ +[group:cron] +programs=crond +priority=25 + +[program:crond] +command = /opt/docker/bin/service.d/cron.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/dnsmasq.conf b/docker/php-official/8.5/conf/etc/supervisor.d/dnsmasq.conf new file mode 100644 index 000000000..9832ffca7 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.d/dnsmasq.conf @@ -0,0 +1,14 @@ +[group:dnsmasq] +programs=dnsmasqd +priority=15 + +[program:dnsmasqd] +command = /opt/docker/bin/service.d/dnsmasq.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/php-fpm.conf b/docker/php-official/8.5/conf/etc/supervisor.d/php-fpm.conf new file mode 100644 index 000000000..5781f5b0a --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.d/php-fpm.conf @@ -0,0 +1,15 @@ +[group:php-fpm] +programs=php-fpmd +priority=20 + +[program:php-fpmd] +command = /opt/docker/bin/service.d/php-fpm.sh +process_name=%(program_name)s +startsecs = 0 +autostart = true +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/postfix.conf b/docker/php-official/8.5/conf/etc/supervisor.d/postfix.conf new file mode 100644 index 000000000..b8d70bb40 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.d/postfix.conf @@ -0,0 +1,15 @@ +[group:postfix] +programs=postfixd +priority=30 + +[program:postfixd] +directory = /etc/postfix +command = /opt/docker/bin/service.d/postfix.sh +process_name=%(program_name)s +startsecs = 0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/ssh.conf b/docker/php-official/8.5/conf/etc/supervisor.d/ssh.conf new file mode 100644 index 000000000..0ecd798d6 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.d/ssh.conf @@ -0,0 +1,14 @@ +[group:ssh] +programs=sshd +priority=30 + +[program:sshd] +command = /opt/docker/bin/service.d/ssh.sh +process_name=%(program_name)s +startsecs=0 +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5/conf/etc/supervisor.d/syslog.conf b/docker/php-official/8.5/conf/etc/supervisor.d/syslog.conf new file mode 100644 index 000000000..20d1e238c --- /dev/null +++ b/docker/php-official/8.5/conf/etc/supervisor.d/syslog.conf @@ -0,0 +1,13 @@ +[group:syslog] +programs=syslogd +priority=10 + +[program:syslogd] +command = /opt/docker/bin/service.d/syslog-ng.sh +process_name=%(program_name)s +autostart = false +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/php-official/8.5/conf/etc/syslog-ng/syslog-ng.conf b/docker/php-official/8.5/conf/etc/syslog-ng/syslog-ng.conf new file mode 100644 index 000000000..c69841581 --- /dev/null +++ b/docker/php-official/8.5/conf/etc/syslog-ng/syslog-ng.conf @@ -0,0 +1,48 @@ +@version: 3.5 + +template t_isostamp { + # syslog-t_isostamp START + template("[SYSLOG] $MSGHDR$MSG\n"); + # syslog-t_isostamp END +}; + +options { + # syslog-options START + file-template(t_isostamp); + chain_hostnames(off); + flush_lines(0); + use-dns(no); + use_fqdn(no); + owner("root"); + group("adm"); + perm(0640); + stats_freq(0); + # syslog-options START +}; + +source s_src { + # syslog-s_src START + unix-stream("/dev/log"); + internal(); + # syslog-s_src END +}; + +filter f_filter { + # syslog-f_filter START + not facility(auth, authpriv); + # syslog-f_filter END +}; + +destination d_all { + # syslog-d_all START + pipe("/docker.stdout"); + # syslog-d_all END +}; + +log { + # syslog-log START + source(s_src); + filter(f_filter); + destination(d_all); + # syslog-log START +}; diff --git a/docker/php-official/8.5/conf/provision/ansible.cfg b/docker/php-official/8.5/conf/provision/ansible.cfg new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/.gitkeep b/docker/php-official/8.5/conf/provision/bootstrap.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/10-entrypoint.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/10-entrypoint.sh new file mode 100644 index 000000000..413e7b37c --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/10-entrypoint.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Link main entrypoint script to /entrypoint +ln -sf /opt/docker/bin/entrypoint.sh /entrypoint + +# Link entrypoint cmd shortcut conf directory to /entrypoint.cmd +ln -sf /opt/docker/bin/entrypoint.d /entrypoint.cmd + +# Create /entrypoint.d +mkdir -p /entrypoint.d +chmod 700 /entrypoint.d +chown root:root /entrypoint.d + + diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/10-permissions.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/10-permissions.sh new file mode 100644 index 000000000..20d602bdd --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/10-permissions.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash + diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/10-php-init.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/10-php-init.sh new file mode 100644 index 000000000..db0141b8f --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/10-php-init.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +PHP_VERSION=$(php -r 'echo phpversion();' | cut -d '-' -f 1) +IMAGE_FAMILY=$(docker-image-info family) diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/10-supervisor.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/10-supervisor.sh new file mode 100644 index 000000000..311daee4c --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/10-supervisor.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Remove /usr/sbin/service (images have custom service script) +rm -rf /usr/sbin/service + +# Remove existing supervisor configuration +rm -rf -- /etc/supervisor* + +# Link supervisor configuration script +ln -sf /opt/docker/etc/supervisor.conf /etc/supervisord.conf diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/10-user-application.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/10-user-application.sh new file mode 100644 index 000000000..5bc865e80 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/10-user-application.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Add group +groupadd -g "$APPLICATION_GID" "$APPLICATION_GROUP" + +# Add user +useradd -u "$APPLICATION_UID" --home "/home/application" --create-home --shell /bin/bash --no-user-group "$APPLICATION_USER" + +# Assign user to group +usermod -g "$APPLICATION_GROUP" "$APPLICATION_USER" diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/11-php-conf.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/11-php-conf.sh new file mode 100644 index 000000000..ee56ccaae --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/11-php-conf.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +PHP_CLEAR_ENV_AVAILABLE=1 + +PHP_ETC_DIR=/usr/local/etc/php +PHP_MAIN_CONF=/usr/local/etc/php-fpm.conf +PHP_POOL_CONF=www.conf +PHP_POOL_DIR=/usr/local/etc/php-fpm.d +PHP_FPM_BIN=/usr/local/sbin/php-fpm +PHP_MOD_INI_DIR=/usr/local/etc/php/conf.d diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/20-app.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/20-app.sh new file mode 100644 index 000000000..749966b67 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/20-app.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Create /app folder +mkdir -p /app +chown "$APPLICATION_USER":"$APPLICATION_GROUP" /app diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php-fpm-pool.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php-fpm-pool.sh new file mode 100644 index 000000000..121788e60 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php-fpm-pool.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +# Rename pool file file to application.conf +if [[ ! -f "/opt/docker/etc/php/fpm/pool.d/application.conf" ]]; then + # Move php-fpm pool directory file to /opt/docker/etc/php/ + mv -- "$PHP_POOL_DIR" /opt/docker/etc/php/fpm/pool.d + + mv -- "/opt/docker/etc/php/fpm/pool.d/${PHP_POOL_CONF}" /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +# Remove php-fpm pool directory +rm -rf -- "$PHP_POOL_DIR" + +# Symlink php-fpm pool file to original destination +ln -sf -- /opt/docker/etc/php/fpm/pool.d "$PHP_POOL_DIR" + +# Configure php-fpm pool (application.conf) +go-replace --mode=lineinfile --regex \ + -s '^[\s;]*catch_workers_output[\s]*=' -r 'catch_workers_output = yes' \ + -s '^[\s;]*access.format[\s]*=' -r 'access.format = "[php-fpm:access] %R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"' \ + -s '^[\s;]*access.log[\s]*=' -r 'access.log = /docker.stdout' \ + -s '^[\s;]*slowlog[\s]*=' -r 'slowlog = /docker.stderr' \ + -s '^[\s;]*php_admin_value\[error_log\][\s]*=' -r 'php_admin_value[error_log] = /docker.stderr' \ + -s '^[\s;]*php_admin_value\[log_errors\][\s]*=' -r 'php_admin_value[log_errors] = on' \ + -s '^[\s;]*listen.allowed_clients[\s]*=' -r ";listen.allowed_clients" \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + +# Fix user setting +go-replace --mode=line --regex \ + -s '^[\s;]*user[\s]*=' -r "user = $APPLICATION_USER" \ + -s '^[\s;]*group[\s]*=' -r "group = $APPLICATION_GROUP" \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' + +if [[ "$PHP_CLEAR_ENV_AVAILABLE" -eq 1 ]]; then + # Clear env setting available, disable clearing of environment variables + go-replace --mode=lineinfile --regex \ + -s '^[\s;]*clear_env[\s]*=' -r 'clear_env = no' \ + -- /opt/docker/etc/php/fpm/pool.d/application.conf + rm -f /opt/docker/bin/service.d/php-fpm.d/11-clear-env.sh +else + # Append clear env workaround in php-fpm pool (old php-fpm versions) + echo ';#CLEAR_ENV_WORKAROUND#' >> /opt/docker/etc/php/fpm/pool.d/application.conf + +fi diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php-fpm.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php-fpm.sh new file mode 100644 index 000000000..873ddf608 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php-fpm.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Link main php-fpm binary +ln -sf -- "$PHP_FPM_BIN" /usr/local/bin/php-fpm + +# Move php-fpm main file to /opt/docker/etc/php/fpm/ and create symlink +if [[ ! -f /opt/docker/etc/php/fpm/php-fpm.conf ]]; then + mv -- "$PHP_MAIN_CONF" /opt/docker/etc/php/fpm/php-fpm.conf +else + rm -f -- "PHP_MAIN_CONF" +fi +ln -sf -- /opt/docker/etc/php/fpm/php-fpm.conf "$PHP_MAIN_CONF" + +# Configure php-fpm main (all versions) +go-replace --mode=lineinfile --regex \ + --lineinfile-after='\[global\]' \ + -s '^[\s;]*error_log[\s]*=' -r 'error_log = /docker.stderr' \ + -s '^[\s;]*pid[\s]*=' -r 'pid = /var/run/php-fpm.pid' \ + -- /opt/docker/etc/php/fpm/php-fpm.conf + +if [[ "$(version-compare "$PHP_VERSION" "5.5.999")" == "<" ]]; then + # listen on public IPv4 port + # no ipv6 sockets available for old php version + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = 0.0.0.0:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' +else + # listen on public IPv6 port + go-replace --mode=line --regex \ + -s '^[\s;]*listen[\s]*=' -r 'listen = [::]:9000' \ + --path=/opt/docker/etc/php/fpm/ \ + --path-pattern='*.conf' + +fi + +if [[ "$(version-compare "$PHP_VERSION" "5.99.999")" == "<" ]]; then + # Configure php-fpm main (php 5.x) + go-replace --mode=lineinfile --regex \ + --lineinfile-after='\[global\]' \ + -s '^[\s;]*daemonize[\s]*=' -r 'daemonize = no' \ + -- /opt/docker/etc/php/fpm/php-fpm.conf +fi diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php.sh new file mode 100644 index 000000000..c1e716300 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/20-setup-php.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + # Register webdevops ini + ln -sf "/opt/docker/etc/php/php.webdevops.ini" "${PHP_ETC_DIR}/conf.d/98-webdevops.ini" + + # Register custom php ini + ln -sf "/opt/docker/etc/php/php.ini" "${PHP_ETC_DIR}/conf.d/99-docker.ini" + ;; +esac diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh new file mode 100644 index 000000000..4a348a38a --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +if [ $IMAGE_FAMILY == "Alpine" ]; then + echo "Skipping ionCube installation on Alpine" + return +fi + +echo "Installing ionCube loader" + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +TMP_FILE="/tmp/ioncube_loaders.tar.gz" + +echo "Downloading ..." +curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +echo "Unpacking ..." +tar -xzf ${TMP_FILE} -C /tmp + +PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` +PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" +SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" + +echo "PHP-VERSION: ${PHP_VERSION}" +echo "PHP-EXTENSION-DIR: ${PHP_EXTENSION_DIR}" +if [[ ! -f "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ]]; then + echo "There is no ioncube available for PHP${PHP_VERSION}, skipping installation" +else + echo "Installing ${SO_FILE}" + cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + + echo "Writing module ini" + echo "[ioncube]" > ${MOD_INI} + echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} + echo "; priority=01" >> ${MOD_INI} + + echo "Cleaning up" + rm -rf $TMP_FILE + rm -rf /tmp/ioncube + + echo "Enabling ionCube PHP module" + case "$IMAGE_FAMILY" in + Debian|Ubuntu) + # Enable ionCube (if available) + if [[ -f "${PHP_ETC_DIR}/mods-available/00-ioncube.ini" ]]; then + ln -sf "${PHP_ETC_DIR}/mods-available/00-ioncube.ini" "${PHP_ETC_DIR}/cli/conf.d/00-ioncube.ini" + ln -sf "${PHP_ETC_DIR}/mods-available/00-ioncube.ini" "${PHP_ETC_DIR}/fpm/conf.d/00-ioncube.ini" + fi + ;; + esac +fi diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/90-cleanup.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/90-cleanup.sh new file mode 100644 index 000000000..3ca393da6 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/90-cleanup.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +# Remove default cronjobs +rm -f -- \ + /etc/cron.daily/logrotate \ + /etc/cron.daily/apt-compat \ + /etc/cron.daily/dpkg \ + /etc/cron.daily/passwd \ + /etc/cron.daily/0yum-daily.cron \ + /etc/cron.daily/logrotate \ + /etc/cron.hourly/0yum-hourly.cron \ + /etc/periodic/daily/logrotate diff --git a/docker/php-official/8.5/conf/provision/build.d/.gitkeep b/docker/php-official/8.5/conf/provision/build.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/build.d/10-cleanup.sh b/docker/php-official/8.5/conf/provision/build.d/10-cleanup.sh new file mode 100644 index 000000000..41031b784 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/build.d/10-cleanup.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +## remove logs (each bootstrap) +rm -rf -- /var/log/* +rm -rf -- /var/tmp/* +rm -rf -- /tmp/* +rm -rf -- /root/.profile diff --git a/docker/php-official/8.5/conf/provision/entrypoint.d/.gitkeep b/docker/php-official/8.5/conf/provision/entrypoint.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/entrypoint.d/05-permissions.sh b/docker/php-official/8.5/conf/provision/entrypoint.d/05-permissions.sh new file mode 100644 index 000000000..6f77d8e40 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/entrypoint.d/05-permissions.sh @@ -0,0 +1,2 @@ +# Fix rights of /tmp (can be a volume) +chmod 1777 /tmp diff --git a/docker/php-official/8.5/conf/provision/entrypoint.d/20-php-fpm.sh b/docker/php-official/8.5/conf/provision/entrypoint.d/20-php-fpm.sh new file mode 100644 index 000000000..5ab722cf7 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/entrypoint.d/20-php-fpm.sh @@ -0,0 +1,80 @@ +####################################### +### FPM MAIN +####################################### + +container-file-auto-restore "/opt/docker/etc/php/fpm/php-fpm.conf" + +echo '' >> /opt/docker/etc/php/fpm/php-fpm.conf +echo '; container env settings' >> /opt/docker/etc/php/fpm/php-fpm.conf +echo '[global]' >> /opt/docker/etc/php/fpm/php-fpm.conf + +if [[ -n "${FPM_PROCESS_MAX+x}" ]]; then + echo "process.max = ${FPM_PROCESS_MAX}" >> /opt/docker/etc/php/fpm/php-fpm.conf +fi + +# General fpm main setting +for ENV_VAR in $(envListVars "fpm\.global\."); do + env_key=${ENV_VAR#fpm.global.} + env_val=$(envGetValue "$ENV_VAR") + + echo "$env_key = ${env_val}" >> /opt/docker/etc/php/fpm/php-fpm.conf +done + +####################################### +### FPM POOL +####################################### + +container-file-auto-restore "/opt/docker/etc/php/fpm/pool.d/application.conf" + +echo '' >> /opt/docker/etc/php/fpm/pool.d/application.conf +echo '; container env settings' >> /opt/docker/etc/php/fpm/pool.d/application.conf + +# General fpm pool setting +for ENV_VAR in $(envListVars "fpm\.pool\."); do + env_key=${ENV_VAR#fpm.pool.} + env_val=$(envGetValue "$ENV_VAR") + + echo "$env_key = ${env_val}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +done + + +if [[ -n "${FPM_PM_MAX_CHILDREN+x}" ]]; then + echo "pm.max_children = ${FPM_PM_MAX_CHILDREN}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PM_START_SERVERS+x}" ]]; then + echo "pm.start_servers = ${FPM_PM_START_SERVERS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PM_MIN_SPARE_SERVERS+x}" ]]; then + echo "pm.min_spare_servers = ${FPM_PM_MIN_SPARE_SERVERS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PM_MAX_SPARE_SERVERS+x}" ]]; then + echo "pm.max_spare_servers = ${FPM_PM_MAX_SPARE_SERVERS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_PROCESS_IDLE_TIMEOUT+x}" ]]; then + echo "pm.process_idle_timeout = ${FPM_PROCESS_IDLE_TIMEOUT}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_MAX_REQUESTS+x}" ]]; then + echo "pm.max_requests = ${FPM_MAX_REQUESTS}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_REQUEST_TERMINATE_TIMEOUT+x}" ]]; then + echo "request_terminate_timeout = ${FPM_REQUEST_TERMINATE_TIMEOUT}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_RLIMIT_FILES+x}" ]]; then + echo "rlimit_files = ${FPM_RLIMIT_FILES}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +if [[ -n "${FPM_RLIMIT_CORE+x}" ]]; then + echo "rlimit_core = ${FPM_RLIMIT_CORE}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi + +# Workaround for official PHP images +if [[ -n "${PHP_SENDMAIL_PATH+x}" ]]; then + echo "php_admin_value[sendmail_path] = ${PHP_SENDMAIL_PATH}" >> /opt/docker/etc/php/fpm/pool.d/application.conf +fi diff --git a/docker/php-official/8.5/conf/provision/entrypoint.d/20-php.sh b/docker/php-official/8.5/conf/provision/entrypoint.d/20-php.sh new file mode 100644 index 000000000..2e208fb85 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/entrypoint.d/20-php.sh @@ -0,0 +1,75 @@ +container-file-auto-restore "/opt/docker/etc/php/php.webdevops.ini" + +echo '' >> /opt/docker/etc/php/php.webdevops.ini +echo '; container env settings' >> /opt/docker/etc/php/php.webdevops.ini + +# General php setting +for ENV_VAR in $(envListVars "php\."); do + env_key=${ENV_VAR#php.} + env_val=$(envGetValue "$ENV_VAR") + + echo "$env_key = ${env_val}" >> /opt/docker/etc/php/php.webdevops.ini +done + + +if [[ -n "${PHP_DATE_TIMEZONE+x}" ]]; then + echo "date.timezone = ${PHP_DATE_TIMEZONE}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_DISPLAY_ERRORS+x}" ]]; then + echo "display_errors = ${PHP_DISPLAY_ERRORS}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_MEMORY_LIMIT+x}" ]]; then + echo "memory_limit = ${PHP_MEMORY_LIMIT}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_MAX_EXECUTION_TIME+x}" ]]; then + echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_POST_MAX_SIZE+x}" ]]; then + echo "post_max_size = ${PHP_POST_MAX_SIZE}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_UPLOAD_MAX_FILESIZE+x}" ]]; then + echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_MEMORY_CONSUMPTION+x}" ]]; then + echo "opcache.memory_consumption = ${PHP_OPCACHE_MEMORY_CONSUMPTION}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_MAX_ACCELERATED_FILES+x}" ]]; then + echo "opcache.max_accelerated_files = ${PHP_OPCACHE_MAX_ACCELERATED_FILES}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_VALIDATE_TIMESTAMPS+x}" ]]; then + echo "opcache.validate_timestamps = ${PHP_OPCACHE_VALIDATE_TIMESTAMPS}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_REVALIDATE_FREQ+x}" ]]; then + echo "opcache.revalidate_freq = ${PHP_OPCACHE_REVALIDATE_FREQ}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +if [[ -n "${PHP_OPCACHE_INTERNED_STRINGS_BUFFER+x}" ]]; then + echo "opcache.interned_strings_buffer = ${PHP_OPCACHE_INTERNED_STRINGS_BUFFER}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +# Workaround for official PHP images +if [[ -n "${PHP_SENDMAIL_PATH+x}" ]]; then + echo "sendmail_path = ${PHP_SENDMAIL_PATH}" >> /opt/docker/etc/php/php.webdevops.ini +fi + +# Disable all PHP mods specified in PHP_DISMOD as comma separated list +if [[ -n "${PHP_DISMOD+x}" ]]; then + ini_dir_cli=$(php -i | grep 'Scan this dir for additional .ini files' | cut -c44-) + ini_dir_fpm=$(php-fpm -i | grep 'Scan this dir for additional .ini files' | cut -c44-) + for DISABLE_MOD in ${PHP_DISMOD//,/ }; do + rm -f ${ini_dir_cli}/*${DISABLE_MOD}* + rm -f ${ini_dir_fpm}/*${DISABLE_MOD}* + done +fi + +# Link composer version accordingly +ln -sf /usr/local/bin/composer${COMPOSER_VERSION:-2} /usr/local/bin/composer diff --git a/docker/php-official/8.5/conf/provision/onbuild.d/.gitkeep b/docker/php-official/8.5/conf/provision/onbuild.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/roles/.gitkeep b/docker/php-official/8.5/conf/provision/roles/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/service.d/.gitkeep b/docker/php-official/8.5/conf/provision/service.d/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docker/php-official/8.5/conf/provision/service.d/cron.sh b/docker/php-official/8.5/conf/provision/service.d/cron.sh new file mode 100644 index 000000000..bd8a54781 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/service.d/cron.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install cron + ;; + + RedHat) + yum-install cronie + ;; +esac diff --git a/docker/php-official/8.5/conf/provision/service.d/dnsmasq.sh b/docker/php-official/8.5/conf/provision/service.d/dnsmasq.sh new file mode 100644 index 000000000..9e5c3228c --- /dev/null +++ b/docker/php-official/8.5/conf/provision/service.d/dnsmasq.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install dnsmasq + ;; + + RedHat) + yum-install dnsmasq + ;; + + Alpine) + apk-install dnsmasq + ;; +esac + +# Configuration +go-replace --mode=line \ + -s '^[\s]*user[\s]*=' -r 'user = root' \ + -s '^[\s]*conf-dir[\s]*=' -r 'conf-dir = /etc/dnsmasq.d' \ + -- /etc/dnsmasq.conf diff --git a/docker/php-official/8.5/conf/provision/service.d/postfix.sh b/docker/php-official/8.5/conf/provision/service.d/postfix.sh new file mode 100644 index 000000000..a8c7cc61b --- /dev/null +++ b/docker/php-official/8.5/conf/provision/service.d/postfix.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install postfix + ;; + + RedHat) + yum-install postfix + + # Fix mysql lib + if [[ ! -f /lib64/libmysqlclient.so.18 ]] && [[ -f /usr/lib64/mysql/libmysqlclient.so.18 ]]; then + ln -s /usr/lib64/mysql/libmysqlclient.so.18 /lib64/libmysqlclient.so.18 + fi + ;; + + Alpine) + apk-install postfix + ;; +esac + +# Configuration +go-replace --mode=line \ + -s '^[\s]*mydestination[\s]*=' -r 'mydestination = ' \ + -s '^[\s]*message_size_limit[\s]*=' -r 'message_size_limit = 15240000' \ + -s '^[\s]*smtp_use_tls[\s]*=' -r 'smtp_use_tls = yes' \ + -s '^[\s]*smtp_tls_security_level[\s]*=' -r 'smtp_tls_security_level = may' \ + -s '^[\s]*myhostname[\s]*=' -r '# myhostname' \ + -- /etc/postfix/main.cf diff --git a/docker/php-official/8.5/conf/provision/service.d/ssh.sh b/docker/php-official/8.5/conf/provision/service.d/ssh.sh new file mode 100644 index 000000000..63d7a9f3a --- /dev/null +++ b/docker/php-official/8.5/conf/provision/service.d/ssh.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install openssh-server + ;; + + RedHat) + yum-install openssh-server + ;; + + Alpine) + apk-install openssh + ;; +esac diff --git a/docker/php-official/8.5/conf/provision/service.d/syslog.sh b/docker/php-official/8.5/conf/provision/service.d/syslog.sh new file mode 100644 index 000000000..675d0b061 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/service.d/syslog.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +IMAGE_FAMILY=$(docker-image-info family) + +# Installation +case "$IMAGE_FAMILY" in + Debian|Ubuntu) + apt-install syslog-ng syslog-ng-core + ;; + + RedHat) + yum-install syslog-ng + + # remove logrotate (not needed for docker) + rm -f "/etc/cron.daily/logrotate" + ;; + + Alpine) + apk-install syslog-ng + ;; +esac + +## Configuration +SYSLOG_NG_VERSION=$(syslog-ng --version | grep -E -e '^Installer-Version:[ ]+[0-9]+\.[0-9]+' | head -n 1 | awk '{print $2}' | cut -f 1,2 -d .) + +# Disable caps inside container +if [[ -f /etc/default/syslog-ng ]]; then + go-replace --mode=lineinfile \ + -s "SYSLOGNG_OPTS" -r "SYSLOGNG_OPTS = --no-caps" \ + -- /etc/default/syslog-ng +fi + +# Symlink configuration +ln -s -f /opt/docker/etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf + +go-replace --mode=lineinfile \ + -s "@version" -r "@version: ${SYSLOG_NG_VERSION}" \ + -- /etc/syslog-ng/syslog-ng.conf + +# Ensure /var/lib/syslog-ng exists +mkdir -p /var/lib/syslog-ng diff --git a/docker/php-official/8.5/conf/provision/variables-webdevops.yml b/docker/php-official/8.5/conf/provision/variables-webdevops.yml new file mode 100644 index 000000000..0b2a21a95 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/variables-webdevops.yml @@ -0,0 +1,7 @@ +--- + +docker_image_info_family: "{{ lookup('pipe', 'docker-image-info family') }}" +docker_image_info_distribution: "{{ lookup('pipe', 'docker-image-info dist') }}" +docker_image_info_distribution_version: "{{ lookup('pipe', 'docker-image-info dist-version') }}" +docker_image_info_distribution_release: "{{ lookup('pipe', 'docker-image-info dist-release') }}" +docker_image_info_distribution_codename: "{{ lookup('pipe', 'docker-image-info dist-codename') }}" diff --git a/docker/php-official/8.5/conf/provision/variables.yml b/docker/php-official/8.5/conf/provision/variables.yml new file mode 100644 index 000000000..0b2a21a95 --- /dev/null +++ b/docker/php-official/8.5/conf/provision/variables.yml @@ -0,0 +1,7 @@ +--- + +docker_image_info_family: "{{ lookup('pipe', 'docker-image-info family') }}" +docker_image_info_distribution: "{{ lookup('pipe', 'docker-image-info dist') }}" +docker_image_info_distribution_version: "{{ lookup('pipe', 'docker-image-info dist-version') }}" +docker_image_info_distribution_release: "{{ lookup('pipe', 'docker-image-info dist-release') }}" +docker_image_info_distribution_codename: "{{ lookup('pipe', 'docker-image-info dist-codename') }}" diff --git a/docker/php/8.5 b/docker/php/8.5 new file mode 120000 index 000000000..a0754b593 --- /dev/null +++ b/docker/php/8.5 @@ -0,0 +1 @@ +../php-official/8.5 \ No newline at end of file diff --git a/docker/php/8.5-alpine b/docker/php/8.5-alpine new file mode 120000 index 000000000..d3fc8eeba --- /dev/null +++ b/docker/php/8.5-alpine @@ -0,0 +1 @@ +../php-official/8.5-alpine \ No newline at end of file diff --git a/documentation/docs/content/DockerImages/dockerfiles/include/image-tag-php.rst b/documentation/docs/content/DockerImages/dockerfiles/include/image-tag-php.rst index a7f2bb797..c010499b2 100644 --- a/documentation/docs/content/DockerImages/dockerfiles/include/image-tag-php.rst +++ b/documentation/docs/content/DockerImages/dockerfiles/include/image-tag-php.rst @@ -12,6 +12,7 @@ Tag Distribution name PHP Version ``8.2`` *customized official php image* PHP 8.2 ``8.3`` *customized official php image* PHP 8.3 ``8.4`` *customized official php image* PHP 8.4 +``8.5`` *customized official php image* PHP 8.5 ``7.1-alpine`` *deprecated* PHP 7.1 ``7.2-alpine`` *deprecated* PHP 7.2 ``7.3-alpine`` *deprecated* PHP 7.3 @@ -21,6 +22,7 @@ Tag Distribution name PHP Version ``8.2-alpine`` *customized official php image* PHP 8.2 ``8.3-alpine`` *customized official php image* PHP 8.3 ``8.4-alpine`` *customized official php image* PHP 8.4 +``8.5-alpine`` *customized official php image* PHP 8.5 ``alpine`` *deprecated* PHP 7.x ``alpine-php7`` *deprecated* PHP 7.x ``alpine-php5`` *deprecated* PHP 5.6 diff --git a/template/Dockerfile/images/php.jinja2 b/template/Dockerfile/images/php.jinja2 index 87f6501ae..f4f57bb32 100644 --- a/template/Dockerfile/images/php.jinja2 +++ b/template/Dockerfile/images/php.jinja2 @@ -65,26 +65,28 @@ && curl -sS -o /tmp/icu.tar.gz -L https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-src.tgz \ && tar -zxf /tmp/icu.tar.gz -C /tmp && cd /tmp/icu/source && ./configure --prefix=/usr/local && make && make install && cd / && rm -rf /tmp/icu* \ # Install extensions -{%- if version != '7.4' and version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- if version != '7.4' and version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} && docker-php-ext-configure intl --with-icu-dir=/usr/local \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ {%- else %} && PKG_CONFIG_PATH=/usr/local docker-php-ext-configure intl \ && docker-php-ext-configure gd --with-jpeg --with-freetype --with-webp \ {%- endif %} -{%- if version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} +{%- if version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} && git clone --branch latest --depth 1 https://github.com/php-amqp/php-amqp.git /usr/src/php/ext/amqp \ && cd /usr/src/php/ext/amqp && git submodule update --init \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ {%- endif %} && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ -{%- if version != '8.4' %} +{%- if version != '8.4' and version != '8.5' %} && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ -{%- endif %} +{%- endif %} && docker-php-ext-install \ bcmath \ -{%- if version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} +{%- if version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} amqp \ +{%- endif %} +{%- if version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} imagick \ ffi \ {%- endif %} @@ -100,10 +102,10 @@ {%- if version|int == 5 or version == '7.0' or version == '7.1' %} mcrypt \ {%- endif %} -{%- if version != '8.4' %} +{%- if version != '8.4' and version != '8.5' %} imap \ {%- endif %} -{%- if version != '7.4' and version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- if version != '7.4' and version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} hash \ {%- endif %} pcntl \ @@ -112,21 +114,22 @@ pgsql \ soap \ sockets \ -{%- if version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- if version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} tokenizer \ {%- endif %} sysvmsg \ sysvsem \ sysvshm \ shmop \ -{%- if version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- if version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} xmlrpc \ {%- endif %} xsl \ zip \ gd \ - gettext \ +{%- if version != '8.5' %} opcache \ +{%- endif %} {%- if version|int == 5 %} # Install extensions for PHP 5.x && pecl install apcu-4.0.11 \ @@ -139,7 +142,7 @@ && echo extension=imagick.so > /usr/local/etc/php/conf.d/imagick.ini \ && echo extension=mongodb.so > /usr/local/etc/php/conf.d/mongodb.ini \ && echo extension=memcached.so > /usr/local/etc/php/conf.d/memcached.ini \ -{%- elif version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} +{%- elif version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} && pecl install memcached \ && pecl install apcu \ && pecl install excimer \ @@ -248,7 +251,11 @@ icu-dev \ postgresql-dev \ libxml2-dev \ + {%- if version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} + samba-dev \ + {%- else %} ldb-dev \ + {%- endif %} pcre-dev \ libxslt-dev \ libzip-dev \ @@ -266,7 +273,7 @@ && curl -sS -o /tmp/icu.tar.gz -L https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-src.tgz \ && tar -zxf /tmp/icu.tar.gz -C /tmp && cd /tmp/icu/source && ./configure --prefix=/usr/local && make && make install && cd / && rm -rf /tmp/icu* \ # Install extensions -{%- if version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} +{%- if version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} && PKG_CONFIG_PATH=/usr/local docker-php-ext-configure intl \ && docker-php-ext-configure gd --with-jpeg --with-freetype --with-webp \ && git clone --branch master --depth 1 https://github.com/Imagick/imagick.git /usr/src/php/ext/imagick \ @@ -277,9 +284,9 @@ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \ {%- endif %} && docker-php-ext-configure ldap \ -{%- if version != '8.4' %} +{%- if version != '8.4' and version != '8.5' %} && PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ -{%- endif %} +{%- endif %} && docker-php-ext-install \ bcmath \ bz2 \ @@ -287,19 +294,21 @@ exif \ ftp \ gmp \ -{%- if version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} +{%- if version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} ffi \ imagick \ +{%- endif %} +{%- if version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} amqp \ {%- endif %} intl \ gettext \ ldap \ mysqli \ -{%- if version != '8.4' %} +{%- if version != '8.4' and version != '8.5' %} imap \ -{%- endif %} -{%- if version != '7.4' and version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- endif %} +{%- if version != '7.4' and version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} hash \ {%- endif %} pcntl \ @@ -308,23 +317,24 @@ pgsql \ soap \ sockets \ -{%- if version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- if version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} tokenizer \ {%- endif %} sysvmsg \ sysvsem \ sysvshm \ shmop \ -{%- if version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' %} +{%- if version != '8.0' and version != '8.1' and version != '8.2' and version != '8.3' and version != '8.4' and version != '8.5' %} xmlrpc \ {%- endif %} xsl \ zip \ gd \ - gettext \ +{%- if version != '8.5' %} opcache \ +{%- endif %} # Install extensions for PHP 7.x - {%- if version == '7.3' or version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} + {%- if version == '7.3' or version == '7.4' or version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} # Memcached for 7.3 can currently only be built from master && MEMCACHED="`mktemp -d`" \ && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ @@ -335,7 +345,7 @@ && printf "no --disable-memcached-sasl\n" | pecl install memcached-3.0.4 \ && docker-php-ext-enable memcached \ {%- endif %} -{%- if version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} +{%- if version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} && pecl install apcu \ && pecl install excimer \ && pecl install opentelemetry \ @@ -398,7 +408,11 @@ icu-dev \ postgresql-dev \ libxml2-dev \ + {%- if version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} + samba-dev \ + {%- else %} ldb-dev \ + {%- endif %} pcre-dev \ libxslt-dev \ libzip-dev \ @@ -420,7 +434,7 @@ && apt-install tideways-php tideways-daemon \ {%- if version|int == 5 %} && pecl install xdebug-2.5.5 \ - {%- elif version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' %} + {%- elif version == '8.0' or version == '8.1' or version == '8.2' or version == '8.3' or version == '8.4' or version == '8.5' %} && pecl install xdebug \ {%- elif version == '7.0' or version == '7.1' %} && pecl install xdebug-2.8.1 \ @@ -446,6 +460,11 @@ && pecl install xdebug-2.5.5 \ {%- elif version == '7.0' or version == '7.1' %} && pecl install xdebug-2.8.1 \ + {%- elif version == '8.5' %} + && wget https://github.com/php/pie/releases/download/1.3.1/pie.phar -O /usr/local/bin/pie \ + && chmod +x /usr/local/bin/pie \ + && pie install xdebug/xdebug:^3.5.0@alpha \ + && rm -f /usr/local/bin/pie \ {%- elif version == '7.4' %} && pecl install xdebug-3.1.6 \ {%- else %}