wip: Arch, devcontainer + dist, supervisord

Co-Authored-By: jonathan-irvin <jonathan-irvin@users.noreply.github.com>
This commit is contained in:
jamesread 2024-09-09 02:45:41 +01:00
parent b233abaa11
commit 260b281cb4
10 changed files with 127 additions and 36 deletions

View File

@ -0,0 +1,14 @@
{
"name": "Postiz Dev Container",
"image": "localhost/postiz-devcontainer",
"features": {},
"customizations": {
"vscode": {
"settings": {},
"extensions": []
}
},
"forwardPorts": ["4200:4200", "3000:3000"],
"mounts": ["source=/apps,destination=/apps/dist/,type=bind,consistency=cached"]
}

6
.dockerignore Normal file
View File

@ -0,0 +1,6 @@
# We want the docker builds to be clean, and as fast as possible. Don't send
# any half-built stuff in the build context as a pre-caution (also saves copying
# 180k files in node_modules that isn't used!).
node_modules
dist
.nx

View File

@ -1,43 +1,52 @@
# Foundation image # Base image
FROM registry.fedoraproject.org/fedora-minimal:40 AS foundation FROM docker.io/node:20.17-alpine3.19 AS base
RUN microdnf install --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 -y \ ENV NPM_CONFIG_UPDATE_NOTIFIER=false
npm \ ENV NEXT_TELEMETRY_DISABLED=1
node \
&& microdnf clean all
# Builder image RUN apk add --no-cache \
FROM foundation AS builder bash=5.2.21-r0 \
supervisor=4.2.5-r4
RUN mkdir /src WORKDIR /app
COPY . /src
WORKDIR /src
RUN npx nx reset
RUN npm run build
# Output image
FROM foundation AS dist
LABEL org.opencontainers.image.source=https://github.com/gitroomhq/postiz-app
LABEL org.opencontainers.image.title="Postiz App"
RUN mkdir -p /config /app
VOLUME /config
COPY --from=builder /src/dist /app/dist/
COPY --from=builder /src/package.json /app/
COPY --from=builder /src/nx.json /app/
COPY .env.example /config/.env
COPY var/docker-entrypoint.sh /app/entrypoint.sh
EXPOSE 4200 EXPOSE 4200
EXPOSE 3000 EXPOSE 3000
WORKDIR /app RUN mkdir -p /config
COPY .env.example /config/.env
VOLUME /config
LABEL org.opencontainers.image.source=https://github.com/gitroomhq/postiz-app
# Builder image
FROM base AS devcontainer
COPY nx.json tsconfig.base.json package.json package-lock.json /app/
COPY apps /app/apps/
COPY libraries /app/libraries/
RUN npm ci --no-fund && npm run build
COPY var/docker/entrypoint.sh /app/entrypoint.sh
COPY var/docker/supervisord/* /app/supervisord_configs/
LABEL org.opencontainers.image.title="Postiz App (DevContainer)"
ENTRYPOINT ["/app/entrypoint.sh"]
# Output image
FROM base AS dist
COPY --from=devcontainer /app/node_modules/ /app/node_modules/
COPY --from=devcontainer /app/dist/ /app/dist/
COPY package.json nx.json /app/
COPY var/docker/entrypoint.sh /app/entrypoint.sh
## Labels at the bottom, because CI will eventially add dates, commit hashes, etc.
LABEL org.opencontainers.image.title="Postiz App (Production)"
ENTRYPOINT ["/app/entrypoint.sh"] ENTRYPOINT ["/app/entrypoint.sh"]

View File

@ -20,8 +20,8 @@
"prisma-generate": "cd ./libraries/nestjs-libraries/src/database/prisma && npx prisma generate", "prisma-generate": "cd ./libraries/nestjs-libraries/src/database/prisma && npx prisma generate",
"prisma-db-push": "cd ./libraries/nestjs-libraries/src/database/prisma && npx prisma db push", "prisma-db-push": "cd ./libraries/nestjs-libraries/src/database/prisma && npx prisma db push",
"prisma-reset": "cd ./libraries/nestjs-libraries/src/database/prisma && npx prisma db push --force-reset && npx prisma db push", "prisma-reset": "cd ./libraries/nestjs-libraries/src/database/prisma && npx prisma db push --force-reset && npx prisma db push",
"docker-build": "docker rmi localhost/postiz || true && docker build -t localhost/postiz . ", "docker-build": "docker rmi localhost/postiz || true && docker build --target dist -t localhost/postiz -f Dockerfile . && docker build --target devcontainer -t localhost/postiz-devcontainer -f Dockerfile .",
"docker-create": "docker kill postiz || true && docker rm postiz || true && docker create --name postiz -p 3000:3000 -p 4200:4200 localhost/postiz", "docker-create": "docker kill postiz || true && docker rm postiz || true && docker create --name postiz -p 3000:3000 -p 4200:4200 localhost/postiz",
"postinstall": "npm run prisma-generate" "postinstall": "npm run prisma-generate"
}, },
"private": true, "private": true,

36
var/docker/entrypoint.sh Executable file
View File

@ -0,0 +1,36 @@
#!/bin/bash
if [[ "$SKIP_CONFIG_CHECK" -ne "true" ]]; then
if [ ! -f /config/.env ]; then
echo "ERROR: No .env file found in /config/.env"
fi
ln -s /config/env /app/.env
fi
if [[ "$POSTIZ_APPS" -eq "" ]]; then
echo "POSTIZ_APPS is not set, starting everything!"
POSTIZ_APPS="frontend workers cron"
fi
mkdir -p /etc/supervisor.d/
cp /app/supervisord_configs/base.conf /etc/supervisor.d/
if [[ "$POSTIZ_APPS" == *"frontend"* ]]; then
cp /app/supervisord_configs/frontend.conf /etc/supervisor.d/
fi
if [[ $POSTIZ_APPS == *"workers"* ]]; then
cp /app/supervisord_configs/workers.conf /etc/supervisor.d/
fi
if [[ $POSTIZ_APPS == *"cron"* ]]; then
cp /app/supervisord_configs/cron.conf /etc/supervisor.d/
fi
if [[ $POSTIZ_APPS == *"backend"* ]]; then
cp /app/supervisord_configs/backend.conf /etc/supervisor.d/
fi
/usr/bin/supervisord

View File

@ -0,0 +1,5 @@
[program:backend]
directory=/app
command=npm run start:prod
autostart=true
autorestart=false

View File

@ -0,0 +1,6 @@
[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0

View File

@ -0,0 +1,5 @@
[program:cron]
directory=/app
command=npm run start:prod:cron
autostart=true
autorestart=false

View File

@ -0,0 +1,5 @@
[program:frontend]
directory=/app
command=npm run start:prod:frontend
autostart=true
autorestart=false

View File

@ -0,0 +1,5 @@
[program:workers]
directory=/app
command=npm run start:prod:workers
autostart=true
autorestart=false