mirror of
https://github.com/invoiceninja/dockerfiles.git
synced 2025-12-31 19:47:25 +01:00
185 lines
5.2 KiB
Docker
185 lines
5.2 KiB
Docker
FROM php:8.2-fpm AS base
|
|
ARG saxon=12.5.0
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
git \
|
|
curl \
|
|
libpng-dev \
|
|
libonig-dev \
|
|
libxml2-dev \
|
|
zip \
|
|
unzip \
|
|
gosu \
|
|
default-mysql-client \
|
|
supervisor \
|
|
fonts-liberation \
|
|
libasound2 \
|
|
libatk-bridge2.0-0 \
|
|
libatk1.0-0 \
|
|
libatspi2.0-0 \
|
|
libcups2 \
|
|
libdbus-1-3 \
|
|
libdrm2 \
|
|
libgbm1 \
|
|
libgtk-3-0 \
|
|
libnspr4 \
|
|
libnss3 \
|
|
libwayland-client0 \
|
|
libxcomposite1 \
|
|
libxdamage1 \
|
|
libxfixes3 \
|
|
libxkbcommon0 \
|
|
libxrandr2 \
|
|
xdg-utils \
|
|
fonts-noto-cjk \
|
|
fonts-noto-cjk-extra \
|
|
fonts-wqy-microhei \
|
|
fonts-wqy-zenhei \
|
|
xfonts-wqy \
|
|
wget \
|
|
gnupg2 \
|
|
&& if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
|
|
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
|
|
&& echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \
|
|
&& apt-get update \
|
|
&& apt-get install -y google-chrome-stable; \
|
|
fi \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set permissions for www-data to execute
|
|
RUN mkdir -p /var/www/.chrome/chrome-profile \
|
|
&& chown -R www-data:www-data /var/www/.chrome \
|
|
&& chmod -R 755 /var/www/.chrome \
|
|
&& if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
|
|
chown root:root /usr/bin/google-chrome \
|
|
&& chmod 4755 /usr/bin/google-chrome \
|
|
&& chown -R root:root /opt/google/chrome \
|
|
&& chmod -R 755 /opt/google/chrome; \
|
|
fi \
|
|
&& chown -R www-data:www-data /var/www
|
|
|
|
# Create required directories with proper permissions
|
|
RUN mkdir -p /tmp/chrome \
|
|
&& if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
|
|
chown -R www-data:www-data /tmp/chrome \
|
|
&& chmod -R 755 /tmp/chrome; \
|
|
fi
|
|
|
|
# Copy Install PHP extensions installer
|
|
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
|
|
|
|
# Install Required PHP extensions.
|
|
RUN install-php-extensions \
|
|
pdo_mysql \
|
|
mysqli \
|
|
mbstring \
|
|
exif \
|
|
pcntl \
|
|
bcmath \
|
|
gd \
|
|
opcache \
|
|
redis \
|
|
soap \
|
|
imagick \
|
|
curl \
|
|
gmp \
|
|
zip \
|
|
@composer
|
|
|
|
# Configure PHP
|
|
COPY php/php.ini /usr/local/etc/php/conf.d/app.ini
|
|
COPY php/php-fpm.conf /usr/local/etc/php-fpm.d/www.conf
|
|
|
|
# Configure Saxon
|
|
WORKDIR /opt
|
|
|
|
RUN if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
|
|
curl https://downloads.saxonica.com/SaxonC/HE/12/libsaxon-HEC-linux-x86_64-v${saxon}.zip --output saxon.zip \
|
|
&& unzip saxon.zip -d saxon \
|
|
&& cp saxon/libsaxon-HEC-linux-amd64-v${saxon}/libs/nix/libsaxon-hec-${saxon}.so /usr/lib/ \
|
|
&& cd /opt/saxon/libsaxon-HEC-linux-amd64-v${saxon}/Saxon.C.API \
|
|
&& phpize \
|
|
&& ./configure --enable-saxon \
|
|
&& make \
|
|
&& make install \
|
|
&& echo 'extension=saxon.so' > "/usr/local/etc/php/conf.d/app.ini"; \
|
|
fi
|
|
|
|
# Copy scripts
|
|
COPY rootfs /
|
|
|
|
# Set working directory
|
|
WORKDIR /var/www/html
|
|
|
|
# Download and extract application
|
|
RUN set -eux; \
|
|
DOWNLOAD_URL=$(curl -s "https://api.github.com/repos/invoiceninja/invoiceninja/releases/latest" | \
|
|
grep -o '"browser_download_url": "[^"]*invoiceninja.tar"' | cut -d '"' -f 4) && \
|
|
echo "Downloading from: $DOWNLOAD_URL" && \
|
|
# Download and save the tar
|
|
curl -L "$DOWNLOAD_URL" -o /tmp/ninja.tar && \
|
|
# Try extraction
|
|
cd /var/www/html && \
|
|
tar --strip-components=1 -xf /tmp/ninja.tar && \
|
|
# List what was extracted
|
|
rm -f /tmp/ninja.tar && \
|
|
chown -R www-data:www-data /var/www/html
|
|
|
|
# Install dependencies
|
|
RUN composer install --no-dev --no-scripts --no-autoloader
|
|
|
|
# Generate optimized autoloader and clear cache
|
|
RUN composer dump-autoload --optimize \
|
|
&& php artisan optimize \
|
|
&& php artisan view:cache \
|
|
&& php artisan config:cache \
|
|
&& php artisan route:cache
|
|
|
|
# Setup supervisor
|
|
COPY supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
|
|
# Add initialization script
|
|
COPY scripts/init.sh /usr/local/bin/init.sh
|
|
|
|
# Make executable
|
|
RUN chmod +x /usr/local/bin/init.sh
|
|
|
|
# Configure PHP-FPM
|
|
RUN sed -i "s/user = www-data/user = www-data/g" /usr/local/etc/php-fpm.d/www.conf \
|
|
&& sed -i "s/group = www-data/group = www-data/g" /usr/local/etc/php-fpm.d/www.conf
|
|
|
|
# Create volume directories
|
|
RUN mkdir -p \
|
|
/var/www/html/storage/app/public \
|
|
/var/www/html/storage/framework/cache \
|
|
/var/www/html/storage/framework/sessions \
|
|
/var/www/html/storage/framework/views \
|
|
/var/www/html/storage/logs \
|
|
/var/www/html/public/uploads \
|
|
/var/run \
|
|
/var/log/supervisor
|
|
|
|
# Set permissions
|
|
RUN chown -R www-data:www-data \
|
|
/var/www/html/storage \
|
|
/var/www/html/bootstrap/cache \
|
|
/var/www/html/public/uploads \
|
|
/var/run \
|
|
/var/log/supervisor \
|
|
&& chmod -R 775 \
|
|
/var/www/html/public/uploads \
|
|
/var/www/html/storage \
|
|
/var/www/html/bootstrap/cache \
|
|
/var/run \
|
|
/var/log/supervisor
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
|
|
CMD php -v || exit 1
|
|
|
|
EXPOSE 9000
|
|
|
|
ENTRYPOINT ["/usr/local/bin/init.sh"]
|
|
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] |