FROM hardcoreeng/account:latest AS account FROM hardcoreeng/workspace:latest AS workspace FROM hardcoreeng/transactor:latest AS transactor FROM hardcoreeng/collaborator:latest AS collaborator FROM hardcoreeng/front:latest AS front FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive ENV PORT=7860 # 1. System deps + MongoDB 7.0 RUN apt-get update && apt-get install -y curl gnupg supervisor nginx redis-server ca-certificates xz-utils && \ curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg && \ echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-7.0.list && \ apt-get update && apt-get install -y mongodb-org && \ rm -rf /var/lib/apt/lists/* # 2. Node.js 20 RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt-get install -y nodejs # 3. CockroachDB RUN curl -fsSL https://binaries.cockroachdb.com/cockroach-v23.1.10.linux-amd64.tgz | tar -xz && \ cp cockroach-v23.1.10.linux-amd64/cockroach /usr/local/bin/ && \ rm -rf cockroach-v23.1.10.linux-amd64 # 4. MinIO (required by Huly for file storage) RUN curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio && \ chmod +x /usr/local/bin/minio # 5. Create directories RUN mkdir -p /app/services/account /app/services/workspace /app/services/transactor \ /app/services/collaborator /app/services/front \ /data/mongodb /data/cockroach /data/minio # 6. Copy services COPY --from=account . /app/services/account COPY --from=workspace . /app/services/workspace COPY --from=transactor . /app/services/transactor COPY --from=collaborator . /app/services/collaborator COPY --from=front . /app/services/front # 7. Config + permissions COPY nginx.conf /etc/nginx/sites-available/default COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY entrypoint.sh /app/entrypoint.sh COPY start-service.sh /app/start-service.sh COPY inspect.sh /app/inspect.sh RUN chmod +x /app/entrypoint.sh /app/start-service.sh /app/inspect.sh && \ useradd -m -u 1000 huly-user || true && \ chown -R 1000:1000 /app /data /var/lib/nginx /var/log/nginx /run USER 1000 WORKDIR /app EXPOSE 7860 CMD ["/app/entrypoint.sh"]