115 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
# syntax=docker/dockerfile:1
 | 
						|
 | 
						|
ARG ENTE_GIT_REF=main
 | 
						|
 | 
						|
FROM debian:bookworm AS ente-source
 | 
						|
ARG ENTE_GIT_REF
 | 
						|
RUN apt-get update && \
 | 
						|
    apt-get install -y --no-install-recommends ca-certificates git && \
 | 
						|
    git clone --depth=1 --branch "${ENTE_GIT_REF}" https://github.com/ente-io/ente.git /src && \
 | 
						|
    rm -rf /var/lib/apt/lists/*
 | 
						|
 | 
						|
FROM golang:1.24-bookworm AS museum-builder
 | 
						|
COPY --from=ente-source /src /ente
 | 
						|
WORKDIR /ente/server
 | 
						|
RUN apt-get update && \
 | 
						|
    apt-get install -y --no-install-recommends build-essential pkg-config libsodium-dev && \
 | 
						|
    rm -rf /var/lib/apt/lists/*
 | 
						|
RUN mkdir -p /build/museum && \
 | 
						|
    CGO_ENABLED=1 GOOS=linux go build -o /build/museum/museum ./cmd/museum && \
 | 
						|
    for dir in migrations web-templates mail-templates assets; do \
 | 
						|
      rm -rf "/build/museum/$dir"; \
 | 
						|
      if [ -d "$dir" ]; then \
 | 
						|
        cp -r "$dir" "/build/museum/$dir"; \
 | 
						|
      else \
 | 
						|
        mkdir -p "/build/museum/$dir"; \
 | 
						|
      fi; \
 | 
						|
    done
 | 
						|
 | 
						|
FROM golang:1.24-bookworm AS cli-builder
 | 
						|
COPY --from=ente-source /src /ente
 | 
						|
WORKDIR /ente/cli
 | 
						|
RUN go build -o /build/ente .
 | 
						|
 | 
						|
FROM node:20-bookworm-slim AS web-builder
 | 
						|
ENV NEXT_PUBLIC_ENTE_ENDPOINT=ENTE_API_ORIGIN_PLACEHOLDER
 | 
						|
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://albums.localhost.invalid
 | 
						|
COPY --from=ente-source /src /ente
 | 
						|
WORKDIR /ente/web
 | 
						|
RUN apt-get update && \
 | 
						|
    apt-get install -y --no-install-recommends build-essential python3 && \
 | 
						|
    rm -rf /var/lib/apt/lists/*
 | 
						|
RUN corepack enable
 | 
						|
RUN yarn install --network-timeout 1000000
 | 
						|
RUN mkdir -p /build/web/photos /build/web/accounts /build/web/auth /build/web/cast /build/web/albums /build/web/family
 | 
						|
RUN set -e; \
 | 
						|
    yarn build:photos; \
 | 
						|
    yarn build:accounts; \
 | 
						|
    yarn build:auth; \
 | 
						|
    yarn build:cast
 | 
						|
RUN if [ -d "apps" ]; then \
 | 
						|
      for app in photos accounts auth cast; do \
 | 
						|
        if [ -d "apps/${app}/out" ]; then \
 | 
						|
          rm -rf "/build/web/${app}"; \
 | 
						|
          mkdir -p "/build/web/${app}"; \
 | 
						|
          cp -r "apps/${app}/out/." "/build/web/${app}/"; \
 | 
						|
        else \
 | 
						|
          printf 'Missing build output for %s\n' "${app}"; \
 | 
						|
          printf '<html><body><h1>Ente %s</h1><p>Build output missing.</p></body></html>\n' "${app}" > "/build/web/${app}/index.html"; \
 | 
						|
        fi; \
 | 
						|
      done; \
 | 
						|
    else \
 | 
						|
      for app in photos accounts auth cast; do \
 | 
						|
        printf '<html><body><h1>Ente %s</h1><p>Build output missing.</p></body></html>\n' "${app}" > "/build/web/${app}/index.html"; \
 | 
						|
      done; \
 | 
						|
    fi && \
 | 
						|
    rm -rf /build/web/albums /build/web/family && \
 | 
						|
    cp -r /build/web/photos /build/web/albums && \
 | 
						|
    cp -r /build/web/photos /build/web/family
 | 
						|
 | 
						|
FROM cloudron/base:5.0.0@sha256:04fd70dbd8ad6149c19de39e35718e024417c3e01dc9c6637eaf4a41ec4e596c
 | 
						|
 | 
						|
ENV APP_DIR=/app/code \
 | 
						|
    DATA_DIR=/app/data \
 | 
						|
    HOME=/app/data/home
 | 
						|
 | 
						|
RUN apt-get update && \
 | 
						|
    apt-get install -y --no-install-recommends ca-certificates curl jq libsodium23 pkg-config postgresql-client caddy openssl && \
 | 
						|
    rm -rf /var/lib/apt/lists/*
 | 
						|
 | 
						|
RUN mkdir -p /app/pkg /app/web "$HOME" && chown -R cloudron:cloudron /app /app/web "$HOME"
 | 
						|
 | 
						|
COPY --from=ente-source /src ${APP_DIR}
 | 
						|
RUN rm -rf ${APP_DIR}/.git
 | 
						|
 | 
						|
RUN mkdir -p /app/museum-bin
 | 
						|
COPY --from=museum-builder /build/museum/museum /app/museum-bin/museum
 | 
						|
COPY --from=museum-builder /build/museum/migrations ${APP_DIR}/server/migrations
 | 
						|
COPY --from=museum-builder /build/museum/web-templates ${APP_DIR}/server/web-templates
 | 
						|
COPY --from=museum-builder /build/museum/mail-templates ${APP_DIR}/server/mail-templates
 | 
						|
COPY --from=museum-builder /build/museum/assets ${APP_DIR}/server/assets
 | 
						|
RUN chmod +x /app/museum-bin/museum
 | 
						|
 | 
						|
COPY --from=cli-builder /build/ente /app/code/ente
 | 
						|
RUN ln -sf /app/code/ente /usr/local/bin/ente && chmod +x /app/code/ente
 | 
						|
 | 
						|
COPY --from=web-builder /build/web/photos /app/web/photos
 | 
						|
COPY --from=web-builder /build/web/accounts /app/web/accounts
 | 
						|
COPY --from=web-builder /build/web/auth /app/web/auth
 | 
						|
COPY --from=web-builder /build/web/cast /app/web/cast
 | 
						|
COPY --from=web-builder /build/web/albums /app/web/albums
 | 
						|
COPY --from=web-builder /build/web/family /app/web/family
 | 
						|
 | 
						|
COPY start.sh /app/pkg/start.sh
 | 
						|
COPY admin-helper.sh /app/pkg/admin-helper.sh
 | 
						|
COPY admin-helper-direct.sh /app/pkg/admin-helper-direct.sh
 | 
						|
 | 
						|
RUN chmod +x /app/pkg/start.sh /app/pkg/admin-helper.sh /app/pkg/admin-helper-direct.sh
 | 
						|
RUN ln -s /app/data/cli-data /cli-data && \
 | 
						|
    rm -rf /home/cloudron && \
 | 
						|
    ln -s /app/data/home /home/cloudron
 | 
						|
 | 
						|
EXPOSE 3080 8080
 | 
						|
 | 
						|
CMD ["/app/pkg/start.sh"]
 |