From 963a25a14fcea521302f1487713b82a537771cae Mon Sep 17 00:00:00 2001 From: Zaid Masri Date: Thu, 11 Dec 2025 18:46:32 -0500 Subject: [PATCH 1/3] feat(infra): init simple docker --- .gitignore | 2 ++ Dockerfile | 54 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 28 ++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.gitignore b/.gitignore index b5d2236a57..0d26bc266e 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ var/* # Ignore node_modules folder node_modules + +.phpactor.json diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..3082f5bbdc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,54 @@ +FROM php:8.2-apache + +# 1. Install System Dependencies (Minimal required for Gibbon) +# TODO: Pin version in apt get install +RUN apt-get update && apt-get install -y \ + git \ + unzip \ + libicu-dev \ + libzip-dev \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + libxml2-dev \ + gettext \ + && rm -rf /var/lib/apt/lists/* + +# 2. Install PHP Extensions +RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j"$(nproc)" \ + mysqli \ + pdo_mysql \ + gd \ + zip \ + intl \ + xml \ + gettext \ + bcmath + +# Enable Apache mod_rewrite +RUN a2enmod rewrite + +# 3. Install Composer +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +WORKDIR /var/www/html + +# 4. Clone Gibbon v31 (Latest Stable) +RUN git clone --depth 1 --branch v31.0.00 https://github.com/GibbonEdu/core.git . \ + && rm -rf .git + +# 5. Install PHP Dependencies +RUN composer install --no-dev --optimize-autoloader + +# 6. Configure PHP for Gibbon (Upload limits, etc.) +RUN echo "upload_max_filesize = 50M" > /usr/local/etc/php/conf.d/gibbon.ini \ + && echo "post_max_size = 50M" >> /usr/local/etc/php/conf.d/gibbon.ini \ + && echo "max_input_vars = 5000" >> /usr/local/etc/php/conf.d/gibbon.ini \ + && echo "memory_limit = 256M" >> /usr/local/etc/php/conf.d/gibbon.ini + +# 7. Permissions (Crucial for the Web Installer to work) +RUN chown -R www-data:www-data /var/www/html \ + && chmod -R 755 /var/www/html + +CMD ["apache2-foreground"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..0847954039 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3.8" + +services: + app: + build: . + container_name: gibbon_app + ports: + - "8080:80" + depends_on: + - db + restart: always + + db: + image: mysql:8.0 + container_name: gibbon_db + environment: + - MYSQL_DATABASE=gibbon + - MYSQL_USER=gibbon + - MYSQL_PASSWORD=gibbonpass + - MYSQL_ROOT_PASSWORD=rootpass + volumes: + - gibbon_db_data:/var/lib/mysql + # Native password plugin ensures PHP can connect easily + command: --default-authentication-plugin=mysql_native_password + restart: always + +volumes: + gibbon_db_data: From 886e936954b6f6cb52088c2e790c29c9db2ba312 Mon Sep 17 00:00:00 2001 From: Zaid Masri Date: Fri, 12 Dec 2025 00:42:16 -0500 Subject: [PATCH 2/3] refactor(docker): create a development and base docker compose file --- docker-compose.dev.yaml | 6 ++++++ docker-compose.yaml | 28 ++++++++++++++++++++++++++++ docker-compose.yml | 28 ---------------------------- 3 files changed, 34 insertions(+), 28 deletions(-) create mode 100644 docker-compose.dev.yaml create mode 100644 docker-compose.yaml delete mode 100644 docker-compose.yml diff --git a/docker-compose.dev.yaml b/docker-compose.dev.yaml new file mode 100644 index 0000000000..bcad5f2681 --- /dev/null +++ b/docker-compose.dev.yaml @@ -0,0 +1,6 @@ +version: "3.8" + +services: + app: + ports: + - "8080:80" diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000..a101f66bcf --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,28 @@ +version: "3.8" + +services: + app: + build: . + container_name: gibbon_app + # ports: + # - "8080:80" + depends_on: + - db + restart: always + + db: + image: mysql:8.0 + container_name: gibbon_db + environment: + - MYSQL_DATABASE=${MYSQL_DATABASE:-gibbon} + - MYSQL_USER=${MYSQL_USER:-gibbon} + - MYSQL_PASSWORD=${MYSQL_PASSWORD:-gibbonpass} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-rootpass} + volumes: + - gibbon_db_data:/var/lib/mysql + # Native password plugin ensures PHP can connect easily + command: --default-authentication-plugin=mysql_native_password + restart: always + +volumes: + gibbon_db_data: diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 0847954039..0000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,28 +0,0 @@ -version: "3.8" - -services: - app: - build: . - container_name: gibbon_app - ports: - - "8080:80" - depends_on: - - db - restart: always - - db: - image: mysql:8.0 - container_name: gibbon_db - environment: - - MYSQL_DATABASE=gibbon - - MYSQL_USER=gibbon - - MYSQL_PASSWORD=gibbonpass - - MYSQL_ROOT_PASSWORD=rootpass - volumes: - - gibbon_db_data:/var/lib/mysql - # Native password plugin ensures PHP can connect easily - command: --default-authentication-plugin=mysql_native_password - restart: always - -volumes: - gibbon_db_data: From d0e9fac4a19d49b17ac9e5a88b25e3b709c22558 Mon Sep 17 00:00:00 2001 From: Zaid Masri Date: Fri, 12 Dec 2025 01:46:20 -0500 Subject: [PATCH 3/3] refactor(docker): pass default env vars for DB --- docker-compose.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index a101f66bcf..895dd1f79d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,8 +4,6 @@ services: app: build: . container_name: gibbon_app - # ports: - # - "8080:80" depends_on: - db restart: always