Updated monorepo building, dockerized

This commit is contained in:
Dmitriy Shishkov 2023-09-23 03:44:50 +03:00
parent b2603d385d
commit 6ab1de4420
Signed by: dm1sh
GPG Key ID: 027994B0AA357688
17 changed files with 2507 additions and 55 deletions

5
.dockerignore Normal file
View File

@ -0,0 +1,5 @@
node_modules/
dist/
*.log
*.md
media/

1
.gitignore vendored
View File

@ -1,4 +1,3 @@
pnpm-lock.yaml
node_modules/
dist/
*.log

23
Dockerfile Normal file
View File

@ -0,0 +1,23 @@
FROM node:20-slim AS builder
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
COPY . /app
WORKDIR /app
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
ARG VITE_WS_URL
RUN pnpm run -r build
FROM builder as back_pruned
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm --filter back --prod deploy pruned
FROM nginx:alpine-slim as front
WORKDIR /usr/share/nginx/html
RUN rm -rf ./*
COPY --from=builder /app/apps/front/dist .
FROM node:20-slim as back
WORKDIR /app
ENV NODE_ENV=production
COPY --from=back_pruned /app/pruned .
CMD [ "npm", "start" ]

View File

@ -8,32 +8,22 @@
Web application for distribution of free classrooms. [Description](./description.md)
## Deploy
## Build instruction
Clone repo
Production:
```bash
git clone https://git.dm1sh.ru/dm1sh/roomruler.git
cd roomruler
docker build . --build-arg "VITE_WS_URL=<Backend url>" --target front --tag roomruler_front
docker build . --build-arg "VITE_WS_URL=<Backend url>" --target back --tag roomruler_back
docker run -d -e "DATABASE_URL=<CockroachDB connection string>" -p "<Backend public port>:8081" --name roomruler_back roomruler_back
docker run -d --name roomruler_front -p "<Frontend public port>:80" roomruler_front
```
Put [CockroachDB](https://www.cockroachlabs.com) certificate to `apps/back/certs`. Copy `apps/back/.env.example` and fill it in. So do with `apps/back/src/db/config.example.ts`
Development:
```bash
mkdir apps/back/certs/
cp ../cc-ca.crt apps/back/certs/
cp apps/back/.env.example apps/back/.env
$EDITOR apps/back/.env
cp apps/back/src/db/config.example.ts apps/back/src/db/config.ts
$EDITOR apps/back/src/db/config.ts
```
Install dependencies, build and run
```bash
npx pnpm i
npx pnpm build
npx pnpm start
npx pnpm install
npx pnpm -r run build
npx pnpm -r run dev
```

View File

@ -1,2 +0,0 @@
DATABASE_URL="postgresql://"
PORT=8081

View File

@ -3,7 +3,6 @@
"version": "0.0.0",
"scripts": {
"build": "tsc && rollup --config rollup.config.js",
"prestart": "[[ -d dist ]] || pnpm run build",
"start": "node dist/index.js",
"dev": "rollup --config rollup.config.dev.js --watch"
},
@ -16,8 +15,8 @@
"typescript": "^4.4.2"
},
"dependencies": {
"@roomruler/logger": "workspace:^0.0.0",
"@roomruler/messages": "workspace:^0.0.0",
"@roomruler/logger": "*",
"@roomruler/messages": "*",
"pg": "^8.7.1",
"reflect-metadata": "^0.1.13",
"typeorm": "^0.2.37",

View File

@ -1,6 +0,0 @@
export const config = {
host: "",
username: "",
password: "",
database: "",
};

View File

@ -1,19 +1,14 @@
import { Connection, createConnection } from "typeorm";
import fs from "fs";
import { Room } from "./model";
import { config } from "./config";
export { Room };
export const connect = () =>
createConnection({
...config,
url: process.env.DATABASE_URL,
type: "cockroachdb",
port: 26257,
ssl: {
ca: fs.readFileSync("certs/cc-ca.crt").toString(),
},
ssl: true,
synchronize: true,
logging: false,
entities: [Room],

View File

@ -4,7 +4,6 @@
"scripts": {
"dev": "vite",
"start": "serve -s dist",
"prestart": "[[ -d dist ]] || pnpm run build",
"build": "vite build"
},
"devDependencies": {
@ -16,7 +15,7 @@
},
"dependencies": {
"@material-ui/core": "^4.12.3",
"@roomruler/messages": "workspace:^0.0.0",
"@roomruler/messages": "*",
"immer": "^9.0.6",
"react": "^17.0.2",
"react-dom": "^17.0.2"

View File

@ -1 +0,0 @@
export const WS_URL = "ws://localhost:8081";

View File

@ -10,12 +10,11 @@ import {
isUpdateMessage,
UpdateMessage,
} from "@roomruler/messages";
import { WS_URL } from "./config";
import { RoomDisplay, RoomState } from "./types/room";
const Context = createContext<ContextValue | undefined>(undefined);
const ws = new WebSocket(WS_URL);
const ws = new WebSocket(import.meta.env.VITE_WS_URL || "ws://localhost:8081");
export const RoomContextProvider: FC = ({ children }) => {
const [state, setState] = useState<ContextData>(defaultState);

View File

@ -3,11 +3,7 @@
"version": "1.0.0",
"description": "Web application for distribution of free classrooms",
"scripts": {
"start": "pnpm start -r",
"build": "pnpm run build -r",
"dev": "pnpm run dev -r",
"preinstall": "npx -y only-allow pnpm",
"clean": "rm -rf node_modules apps/back/node_modules apps/front/node_modules packages/messages/node_modules packages/logger/node_modules apps/back/dist apps/front/dist packages/messages/dist packages/logger/dist pnpm-lock.yaml"
"clean": "rm -rf node_modules apps/back/node_modules apps/front/node_modules packages/messages/node_modules packages/logger/node_modules apps/back/dist apps/front/dist packages/messages/dist packages/logger/dist"
},
"author": "dm1sh",
"license": "MIT",

View File

@ -5,7 +5,6 @@
"types": "dist/src/index.d.ts",
"type": "module",
"scripts": {
"postinstall": "pnpm run build",
"build": "tsc --build"
},
"devDependencies": {

View File

@ -5,8 +5,7 @@
"types": "dist/src/index.d.ts",
"type": "module",
"scripts": {
"build": "tsc --build",
"postinstall": "pnpm run build"
"build": "tsc --build"
},
"devDependencies": {
"typescript": "^4.4.2"

2455
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
packages:
- "apps/**"
- "packages/**"
- 'packages/*'
- 'apps/*'

View File

@ -25,6 +25,9 @@
},
{
"path": "./packages/messages/"
},
{
"path": "./packages/logger/"
}
]
}