FROM ubuntu:24.04 ENV DEBIAN_FRONTEND=noninteractive # Install system dependencies RUN apt-get update -y && \ apt-get install -y --no-install-recommends \ curl \ git \ python3 \ nano \ gcc \ wget \ gosu \ build-essential \ ca-certificates \ gnupg \ nginx \ openssl \ unzip \ mariadb-client \ netcat-openbsd \ supervisor \ libcap2-bin \ libpng-dev \ dnsutils \ librsvg2-bin \ fswatch \ apt-transport-https \ fontconfig \ libxrender1 \ xfonts-75dpi \ xfonts-base \ libfontenc1 x11-common xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Install wkhtmltopdf 0.12.6.1 (patched Qt) - architecture-aware RUN ARCH=$(dpkg --print-architecture) && \ curl -sSL -o /tmp/wkhtmltox.deb "https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_${ARCH}.deb" && \ dpkg -i /tmp/wkhtmltox.deb && \ apt-get update -y && \ apt-get install -y -f && \ dpkg -i /tmp/wkhtmltox.deb &&\ rm /tmp/wkhtmltox.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Install Node.js 22.x and PHP 8.4 RUN mkdir -p /etc/apt/keyrings && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" \ > /etc/apt/sources.list.d/nodesource.list && \ curl -fsSL -o /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb && \ dpkg -i /tmp/debsuryorg-archive-keyring.deb && \ rm /tmp/debsuryorg-archive-keyring.deb && \ echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ noble main" \ > /etc/apt/sources.list.d/php.list && \ apt-get update -y && \ apt-get install -y --no-install-recommends \ php8.4-cli php8.4-dev php8.4-fpm \ php8.4-pgsql php8.4-sqlite3 php8.4-gd php8.4-imagick \ php8.4-curl \ php8.4-imap php8.4-mysql php8.4-mbstring \ php8.4-xml php8.4-zip php8.4-bcmath php8.4-soap \ php8.4-intl php8.4-readline \ php8.4-ldap \ php8.4-msgpack php8.4-igbinary php8.4-redis php8.4-swoole \ php8.4-memcached php8.4-pcov \ nodejs \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /var/www/html && \ mkdir -p /var/log/supervisor WORKDIR /var/www/html # Copy entrypoint script first (from meta repo) COPY dockerfiles/entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh COPY dockerfiles/php.ini /etc/php/8.4/fpm/conf.d/99-custom.ini COPY dockerfiles/nginx.conf /etc/nginx/nginx.conf # Copy only the artwork application (not the meta repository files) COPY --chown=www-data:www-data . /var/www/html/ # Ensure composer is available (dependencies are installed at container start via entrypoint) RUN if ! command -v composer &>/dev/null; then \ curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer; \ fi # Configure nginx RUN cp -rf dockerfiles/artwork-php.84.vhost.conf /etc/nginx/sites-available/default # Set permissions on writable directories only RUN chmod -R 755 /var/www/html/storage /var/www/html/bootstrap/cache EXPOSE 80 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] CMD ["sh", "-c", "php-fpm8.4 -F & nginx -g 'daemon off;'"]