mirror of
https://github.com/tiennm99/coolify.git
synced 2026-08-20 04:23:34 +00:00
Move V5 source, migrations, UI, scripts, and tests into documentation, then remove V5 routes, models, jobs, configuration, dependencies, and application hooks.
108 lines
4.4 KiB
Docker
108 lines
4.4 KiB
Docker
# Versions
|
|
# https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx-alpine
|
|
ARG SERVERSIDEUP_PHP_VERSION=8.4-fpm-nginx-alpine
|
|
# https://github.com/minio/mc/releases
|
|
ARG MINIO_VERSION=RELEASE.2025-08-13T08-35-41Z
|
|
# https://github.com/cloudflare/cloudflared/releases
|
|
ARG CLOUDFLARED_VERSION=2025.7.0
|
|
# https://www.postgresql.org/support/versioning/
|
|
# Note: We are using version 18 of the postgres client (while still using postgres 15 for the postgres server) as version 15 has been removed from Alpine 3.23+ https://pkgs.alpinelinux.org/packages?name=postgresql*-client&branch=v3.23&repo=&arch=x86_64&origin=&flagged=&maintainer=
|
|
ARG POSTGRES_VERSION=18
|
|
# https://nginx.org/en/linux_packages.html
|
|
ARG NGINX_VERSION=1.31.2-r1
|
|
|
|
# =================================================================
|
|
# Get MinIO client
|
|
# =================================================================
|
|
FROM minio/mc:${MINIO_VERSION} AS minio-client
|
|
|
|
# =================================================================
|
|
# Final Stage: Production image
|
|
# =================================================================
|
|
FROM serversideup/php:${SERVERSIDEUP_PHP_VERSION}
|
|
|
|
ARG USER_ID
|
|
ARG GROUP_ID
|
|
ARG TARGETPLATFORM
|
|
ARG TARGETARCH
|
|
ARG POSTGRES_VERSION
|
|
ARG CLOUDFLARED_VERSION
|
|
ARG NGINX_VERSION
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
USER root
|
|
|
|
# Install patched Nginx from the official nginx.org Alpine repository
|
|
RUN set -eux; \
|
|
apk add --no-cache ca-certificates curl; \
|
|
NGINX_ALPINE_VERSION="$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)"; \
|
|
NGINX_REPOSITORY="https://nginx.org/packages/mainline/alpine/v${NGINX_ALPINE_VERSION}/main"; \
|
|
sed -i 's|http://nginx.org/packages|https://nginx.org/packages|g' /etc/apk/repositories; \
|
|
grep -qxF "@nginx ${NGINX_REPOSITORY}" /etc/apk/repositories || echo "@nginx ${NGINX_REPOSITORY}" >> /etc/apk/repositories; \
|
|
curl -fsSL https://nginx.org/keys/nginx_signing.rsa.pub -o /etc/apk/keys/nginx_signing.rsa.pub; \
|
|
apk add --no-cache --upgrade "nginx@nginx=${NGINX_VERSION}"; \
|
|
rm -f /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf; \
|
|
nginx -v
|
|
|
|
RUN docker-php-serversideup-set-id www-data $USER_ID:$GROUP_ID && \
|
|
docker-php-serversideup-set-file-permissions --owner $USER_ID:$GROUP_ID --service nginx
|
|
|
|
# Install PostgreSQL repository and keys
|
|
RUN apk upgrade --no-cache && \
|
|
apk add --no-cache gnupg && \
|
|
mkdir -p /usr/share/keyrings && \
|
|
curl -fSsL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > /usr/share/keyrings/postgresql.gpg
|
|
|
|
|
|
# Install system dependencies
|
|
RUN apk add --no-cache \
|
|
postgresql${POSTGRES_VERSION}-client \
|
|
openssh-client \
|
|
openssl \
|
|
git \
|
|
git-lfs \
|
|
jq \
|
|
lsof \
|
|
vim
|
|
|
|
# Install PHP extensions
|
|
RUN install-php-extensions sockets
|
|
|
|
# Configure shell aliases
|
|
RUN echo "alias ll='ls -al'" >> /etc/profile && \
|
|
echo "alias a='php artisan'" >> /etc/profile && \
|
|
echo "alias logs='tail -f storage/logs/laravel.log'" >> /etc/profile
|
|
|
|
# Install Cloudflared based on architecture
|
|
RUN mkdir -p /usr/local/bin && \
|
|
if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
|
|
curl -sSL "https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-amd64" -o /usr/local/bin/cloudflared; \
|
|
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
|
|
curl -sSL "https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64" -o /usr/local/bin/cloudflared; \
|
|
fi && \
|
|
chmod +x /usr/local/bin/cloudflared
|
|
|
|
# Configure PHP
|
|
COPY docker/development/etc/php/conf.d/zzz-custom-php.ini /usr/local/etc/php/conf.d/zzz-custom-php.ini
|
|
ENV PHP_OPCACHE_ENABLE=0
|
|
|
|
# Configure Nginx and S6 overlay
|
|
COPY docker/development/etc/nginx/conf.d/custom.conf /etc/nginx/conf.d/custom.conf
|
|
COPY docker/development/etc/nginx/site-opts.d/http.conf /etc/nginx/site-opts.d/http.conf
|
|
COPY --chmod=755 docker/development/etc/s6-overlay/ /etc/s6-overlay/
|
|
|
|
RUN mkdir -p /etc/nginx/conf.d && \
|
|
chown -R www-data:www-data /etc/nginx && \
|
|
chmod -R 755 /etc/nginx
|
|
|
|
# Install MinIO client
|
|
COPY --from=minio-client /usr/bin/mc /usr/bin/mc
|
|
RUN chmod +x /usr/bin/mc
|
|
|
|
# Stay as root for s6 init so bind-mounted workspaces work even when the host
|
|
# tree is root-owned (CI, Jean, rootful Docker). PHP-FPM/nginx still run as
|
|
# www-data via their service configs. Do NOT set USER www-data here — that
|
|
# makes init-setup (composer install) fail with "vendor could not be created".
|
|
USER root
|