Public-cloud deployment of a single-user expense tracker: - 4-container stack: Caddy (HTTPS via Let's Encrypt), nginx (React/Vite SPA), Express API, Postgres 16 - Repeatable deployment via prepare-app.sh using only OCI CLI (no web console) - Persistent Postgres volume, auto-restart policies, healthchecks, backup + restore scripts - DuckDNS dynamic DNS for the public hostname; secrets isolated to gitignored .env Author: Gigi Saji Live URL: https://savesave.duckdns.org
17 lines
231 B
Docker
17 lines
231 B
Docker
FROM node:20-alpine
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json ./
|
|
RUN npm install --omit=dev --no-audit --no-fund \
|
|
&& apk add --no-cache wget
|
|
|
|
COPY src ./src
|
|
|
|
ENV NODE_ENV=production
|
|
EXPOSE 3000
|
|
|
|
USER node
|
|
|
|
CMD ["node", "src/index.js"]
|