diff --git a/README.md b/README.md index 968dedf09..a18e45500 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ It means that composer will look at `master` branch of repository configured und ### 2023-10-19 - Removed usage of deprecated `redis->getKeys()` in favor of `redis->keys()`. +- Added docker-compose setup to run tests locally. ### 2023-09-18 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..dcfce7b27 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,54 @@ +services: + web: + build: ./docker/web + environment: + PHP_IDE_CONFIG: "serverName=localhost" + volumes: + - ./:/var/www/html:cached + working_dir: /var/www/html + ports: + - "8000:80" + depends_on: + - mysql + - pgsql + - memcached + - redis + mysql: + image: mysql:5.6 + platform: linux/amd64 + command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: cakephp_test + MYSQL_USER: cakephp_test + MYSQL_PASSWORD: secret + volumes: + - ./docker/mysql:/docker-entrypoint-initdb.d:cached + - mysql-data:/var/lib/mysql + ports: + - "3306:3306" + pgsql: + image: postgres:9.4 + platform: linux/amd64 + environment: + POSTGRES_DB: cakephp_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + volumes: + - ./docker/pgsql:/docker-entrypoint-initdb.d:cached + - pgsql-data:/var/lib/postgresql/data + ports: + - "5432:5432" + memcached: + image: memcached:latest + hostname: memcached + ports: + - "11211:11211" + redis: + image: "redis:latest" + hostname: redis + ports: + - "6379:6379" +volumes: + mysql-data: + pgsql-data: diff --git a/docker/mysql/1_initialize_database.sql b/docker/mysql/1_initialize_database.sql new file mode 100644 index 000000000..7dc8de16a --- /dev/null +++ b/docker/mysql/1_initialize_database.sql @@ -0,0 +1,7 @@ +CREATE DATABASE IF NOT EXISTS cakephp_test ; +GRANT ALL ON cakephp_test.* TO 'cakephp_test'@'%' ; +CREATE DATABASE IF NOT EXISTS cakephp_test2 ; +GRANT ALL ON cakephp_test2.* TO 'cakephp_test'@'%' ; +CREATE DATABASE IF NOT EXISTS cakephp_test3 ; +GRANT ALL ON cakephp_test3.* TO 'cakephp_test'@'%' ; +FLUSH PRIVILEGES ; diff --git a/docker/pgsql/1_initialize_database.sql b/docker/pgsql/1_initialize_database.sql new file mode 100644 index 000000000..c41574370 --- /dev/null +++ b/docker/pgsql/1_initialize_database.sql @@ -0,0 +1,4 @@ +\c cakephp_test + +CREATE SCHEMA test2; +CREATE SCHEMA test3; diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile new file mode 100644 index 000000000..d9c90b56e --- /dev/null +++ b/docker/web/Dockerfile @@ -0,0 +1,25 @@ +FROM php:8.2-apache + +RUN apt-get update && apt-get install -y --no-install-recommends \ + && apt-get install -y libpq-dev libzip-dev unzip openssl libmcrypt-dev libmemcached-dev locales \ + && rm -rf /var/lib/apt/lists/* + +RUN docker-php-ext-install pdo_mysql pdo_pgsql zip \ + && pecl install apcu redis memcached mcrypt xdebug \ + && docker-php-ext-enable redis memcached mcrypt \ + && docker-php-ext-enable xdebug \ + && echo "extension=apcu.so" >> /usr/local/etc/php/php.ini \ + && echo "apc.enable_cli = 1" >> /usr/local/etc/php/php.ini + +COPY --from=composer /usr/bin/composer /usr/local/bin/composer + +RUN sed -i '/de_DE /s/^# //g' /etc/locale.gen \ + && sed -i '/es_ES /s/^# //g' /etc/locale.gen \ + && locale-gen + +ENV APACHE_DOCUMENT_ROOT /var/www/html/app/webroot + +RUN a2enmod rewrite + +RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf +RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf