aboutsummaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/Dockerfile27
-rw-r--r--backend/config.ts7
-rw-r--r--backend/index.ts6
-rw-r--r--backend/shared-types.ts3
4 files changed, 40 insertions, 3 deletions
diff --git a/backend/Dockerfile b/backend/Dockerfile
new file mode 100644
index 0000000..1301b25
--- /dev/null
+++ b/backend/Dockerfile
@@ -0,0 +1,27 @@
+# Install dependencies only when needed
+FROM node: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
+WORKDIR /app
+COPY package.json package-lock.json ./
+RUN npm ci --only-prod
+
+# Rebuild the source code only when needed
+FROM node:alpine AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+ENV PORT 4000
+
+RUN addgroup -g 1001 -S nodejs
+RUN adduser -S server -u 1001
+
+COPY --from=deps /app/package.json ./package.json
+COPY --from=deps /app/node_modules ./node_modules
+
+USER server
+
+EXPOSE 4000
+
+COPY *.ts *.json ./
+CMD ["npm", "start]
diff --git a/backend/config.ts b/backend/config.ts
index 2585736..ae2462e 100644
--- a/backend/config.ts
+++ b/backend/config.ts
@@ -3,4 +3,11 @@ if (!process.env.POSTGRES_CONNECTION_STRING) {
}
export const postgresConnectionString = process.env.POSTGRES_CONNECTION_STRING;
+
+if (!process.env.FRONTEND_URL) {
+ throw new Error("FRONTEND_URL env var is not defined!");
+}
+
+export const frontendUrl = process.env.FRONTEND_URL;
+
export const port = process.env.PORT || 4000;
diff --git a/backend/index.ts b/backend/index.ts
index 5a974d6..9efec62 100644
--- a/backend/index.ts
+++ b/backend/index.ts
@@ -8,15 +8,15 @@ import {
sql,
} from "slonik";
import * as config from "./config";
-import { ValueRecord } from "../shared-types";
-import { Server as SocketIOServer, Socket } from "socket.io";
+import { ValueRecord } from "./shared-types";
+import { Server as SocketIOServer } from "socket.io";
const app = express();
const httpServer = http.createServer(app);
const io = new SocketIOServer(httpServer, {
cors: {
- origin: "*",
+ origin: config.frontendUrl,
},
});
diff --git a/backend/shared-types.ts b/backend/shared-types.ts
new file mode 100644
index 0000000..51f3281
--- /dev/null
+++ b/backend/shared-types.ts
@@ -0,0 +1,3 @@
+export interface ValueRecord {
+ value: number;
+}