# SyspanelLamp - Ubuntu 24.04 + Apache + PHP 8.3 + MySQL 8.0 + PHPMyAdmin + Adminer + Redis # Author: Marco Costa & Syspanel (www.syspanel.com.br) # Creation date: 05/09/2026 # License: MIT ARG PHP_VERSION=8.3 ARG DB_ROOT_PASS=admin123 FROM ubuntu:24.04 AS base SHELL ["/bin/bash", "-lc"] ENV DEBIAN_FRONTEND=noninteractive \ TZ=America/Sao_Paulo \ APACHE_RUN_USER=www-data \ APACHE_RUN_GROUP=www-data \ APACHE_LOG_DIR=/var/log/apache2 \ APACHE_LOCK_DIR=/var/lock/apache2 \ APACHE_PID_FILE=/var/run/apache2/apache2.pid # ------------------------------------------------------------------------- # Install base system packages # ------------------------------------------------------------------------- RUN apt-get update && apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ curl \ wget \ git \ unzip \ zip \ gnupg2 \ lsb-release \ software-properties-common \ locales \ && locale-gen en_US.UTF-8 && locale-gen pt_BR.UTF-8 \ && update-locale LANG=en_US.UTF-8 \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone \ && rm -rf /var/lib/apt/lists/* ENV LANG=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8 # ------------------------------------------------------------------------- # Install PHP 8.3 (Ubuntu 24.04 native) # ------------------------------------------------------------------------- RUN apt-get update && apt-get install -y --no-install-recommends \ apache2 \ php8.3 \ php8.3-cli \ php8.3-common \ php8.3-curl \ php8.3-mbstring \ php8.3-mysql \ php8.3-pdo \ php8.3-pdo-mysql \ php8.3-xml \ php8.3-zip \ php8.3-gd \ php8.3-imagick \ php8.3-intl \ php8.3-bcmath \ php8.3-soap \ php8.3-redis \ php8.3-opcache \ php8.3-readline \ php8.3-memcached \ libapache2-mod-php8.3 \ redis-server \ && rm -rf /var/lib/apt/lists/* # Enable Apache PHP module and required modules RUN a2enmod php8.3 && a2enmod rewrite && a2enmod headers # ------------------------------------------------------------------------- # Environment variables to configure PHP # ------------------------------------------------------------------------- ENV TZ=America/Sao_Paulo ENV PHP_UPLOAD_MAX_FILESIZE=2048M ENV PHP_POST_MAX_SIZE=2048M # Configure PHP settings (apache2 + cli) — shared config COPY configs/php/php.ini /etc/php/8.3/apache2/php.ini COPY configs/php/php.ini /etc/php/8.3/cli/php.ini # ------------------------------------------------------------------------- # Install MySQL 8.0 # ------------------------------------------------------------------------- ARG DB_ROOT_PASS RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ gnupg \ && mkdir -p /etc/apt/keyrings && \ echo "deb [trusted=yes] http://repo.mysql.com/apt/ubuntu $(lsb_release -cs) mysql-8.0" > /etc/apt/sources.list.d/mysql.list && \ echo "mysql-community-server mysql-community-server/root-pass password ${DB_ROOT_PASS}" | debconf-set-selections && \ echo "mysql-community-server mysql-community-server/re-root-pass password ${DB_ROOT_PASS}" | debconf-set-selections && \ apt-get update && apt-get install -y --no-install-recommends \ mysql-community-client \ mysql-community-server \ && rm -rf /var/lib/apt/lists/* # Prepare MySQL runtime directories RUN mkdir -p /var/run/mysqld /var/lib/mysql && \ chown -R mysql:mysql /var/run/mysqld /var/lib/mysql # Wipe any build-time MySQL init so entrypoint always boots fresh RUN rm -rf /var/lib/mysql/* # ------------------------------------------------------------------------- # Install Adminer (latest stable - v6.0.1) # ------------------------------------------------------------------------- RUN mkdir -p /var/www/adminer && \ curl -fsSL -o /var/www/adminer/index.php https://github.com/vrana/adminer/releases/download/v6.0.1/adminer-6.0.1.php # ------------------------------------------------------------------------- # Install PHPMyAdmin (5.2.1) # ------------------------------------------------------------------------- RUN mkdir -p /var/www/phpmyadmin && \ curl -fsSL -o /tmp/phpmyadmin.tar.gz https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz && \ tar -xzf /tmp/phpmyadmin.tar.gz -C /tmp && \ cp -r /tmp/phpMyAdmin-5.2.1-all-languages/* /var/www/phpmyadmin/ && \ rm -rf /tmp/phpmyadmin.tar.gz /tmp/phpMyAdmin-5.2.1-all-languages # ------------------------------------------------------------------------- # Apache site configuration # ------------------------------------------------------------------------- COPY configs/apache/apache_default /etc/apache2/sites-available/000-default.conf COPY configs/apache/apache_envvars.sh /etc/apache2/envvars # ------------------------------------------------------------------------- # MySQL configuration # ------------------------------------------------------------------------- COPY configs/mysql/my.cnf /etc/mysql/my.cnf COPY configs/mysql/init.sql /docker-entrypoint-initdb.d/init.sql # ------------------------------------------------------------------------- # Entrypoint script # ------------------------------------------------------------------------- COPY configs/scripts/entrypoint-mysql.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh EXPOSE 80 3306 6379 5050 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] CMD ["apache2ctl", "-D", "FOREGROUND"]