Updated monorepo building, dockerized
This commit is contained in:
parent
b2603d385d
commit
6ab1de4420
5
.dockerignore
Normal file
5
.dockerignore
Normal file
@ -0,0 +1,5 @@
|
||||
node_modules/
|
||||
dist/
|
||||
*.log
|
||||
*.md
|
||||
media/
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
pnpm-lock.yaml
|
||||
node_modules/
|
||||
dist/
|
||||
*.log
|
23
Dockerfile
Normal file
23
Dockerfile
Normal 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" ]
|
32
README.md
32
README.md
@ -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
|
||||
```
|
||||
|
@ -1,2 +0,0 @@
|
||||
DATABASE_URL="postgresql://"
|
||||
PORT=8081
|
@ -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",
|
||||
|
@ -1,6 +0,0 @@
|
||||
export const config = {
|
||||
host: "",
|
||||
username: "",
|
||||
password: "",
|
||||
database: "",
|
||||
};
|
@ -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],
|
||||
|
@ -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"
|
||||
|
@ -1 +0,0 @@
|
||||
export const WS_URL = "ws://localhost:8081";
|
@ -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);
|
||||
|
@ -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",
|
||||
|
@ -5,7 +5,6 @@
|
||||
"types": "dist/src/index.d.ts",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"postinstall": "pnpm run build",
|
||||
"build": "tsc --build"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -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
2455
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,3 @@
|
||||
packages:
|
||||
- "apps/**"
|
||||
- "packages/**"
|
||||
- 'packages/*'
|
||||
- 'apps/*'
|
@ -25,6 +25,9 @@
|
||||
},
|
||||
{
|
||||
"path": "./packages/messages/"
|
||||
},
|
||||
{
|
||||
"path": "./packages/logger/"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user