====== KingCon 4.0 - Node im Container ======
**Der "Invoice-Manager".**
Eine Nodeanwendung, die eine moderen Bedieneroberfläche fürs KingCon-4.0 bietet.
Aktuell ist es so, dass für jedes neue Event/Indico ein neuer Container aufgesetzt wird.
===== neuer Container bei neuem Event / Indico =====
Beispiel-URL: **https://event.eec-2024.com/** \\
Beispiel-Port: **15165** (ist so in der Config-Datei des nginx eingetragen) \\
Beispiel-Projekt: **eec**
cd ~/dev/indico/invoice-manager
cp -r docker/production docker/production-eec
cp .env.sampl .env.eec.production
==== env.eec.production ====
DATABASE_URL=
SHADOW_DATABASE_URL=
DEFAULT_LANGUAGE=en
NEXT_PUBLIC_BASE_URL=https://event.eec-2024.com/
NEXT_PUBLIC_DEFAULT_LANGUAGE=en_GB
==== docker/production-eec/docker-compose.yml ====
version: '3'
services:
eec-production:
build:
context: ../../
dockerfile: docker/production-eec/Dockerfile
image: eec-production
ports:
- '15165:3000'
==== docker/production-eec/Dockerfile ====
Nur an einer Stelle steht "eec"!
# 1. Install dependencies only when needed
FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
# HOTFIX: CVE-2022-3996
RUN apk upgrade libssl3 libcrypto3
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \
else echo "Lockfile not found." && exit 1; \
fi
# 2. Rebuild the source code only when needed
FROM node:16-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# This will do the trick, use the corresponding env file for each environment.
COPY .env.eec.production .env.production
RUN yarn next telemetry disable
RUN yarn build
# 3. Production image, copy all the files and run next
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
COPY --from=builder /app/public ./public
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]
==== dann weiter ====
Wir sind immer noch in **''~/dev/indico/invoice-manager''**.
Das Makefile erweitern
.PHONY: build-production-eec
build-production-eec: ## Build the production docker image.
docker compose -f docker/production-eec/docker-compose.yml build --no-cache
Jetzt fiel auf, dass docker auf dem lokalen PC noch fehlte ... Installiert, mit WSL-Einbindung.
sudo make build-production-eec
sudo docker save eec-production > eec-production-230613.tar
scp eec-production-230613.tar root@193.254.190.30:/opt/eec/container
Das **''scp''** funktioniert, da auf dem Indico-Server schon das "klassische" Indico für **eec** eingerichtet ist und es die Ordner gibt.
==== auf dem Indico-Server ====
... geht es dann [[https://brain.tema-hosting.de/projekte/kingcon_register-me.org/kingcon_4.0_-_neues_event_aufsetzen#start_services_and_create_default_user|so weiter]].
===== Zusatzinformationen =====
===== Unterprojekte =====
{{indexmenu>projekte:indico:kingcon_4.0_-_node_im_container#2| js doku}}
\\
Neues Projekt anlegen: {{NEWPAGE>projekte:indico:kingcon_4.0_-_node_im_container}}
===== Kommentare =====