Skip to content

Commit e78c2db

Browse files
committed
Fix docker compose and made it work
1 parent da4ae24 commit e78c2db

15 files changed

+337
-210
lines changed

.gitignore

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,18 @@ dist-ssr
1818
*.local
1919

2020
.env
21-
docs
21+
*docs
22+
23+
24+
backend/node_modules
25+
frontend/node_modules
26+
27+
backend/dist
28+
frontend/dist
29+
30+
backend/.vscode
31+
frontend/.vscode
32+
frontend/docs
33+
34+
backend/.idea
35+
frontend/.idea

backend/Dockerfile

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
1-
FROM node:20.11-alpine
1+
FROM node:18
22

3-
WORKDIR /app
3+
WORKDIR /backend
44

55
COPY package.json .
6+
COPY package*.json ./
7+
COPY tsconfig*.json ./
68

79
RUN npm install -g pnpm
810
RUN pnpm install
911

1012
COPY . .
1113

14+
COPY ./waitForIt.sh ./
15+
COPY ./migratePrisma.sh ./
1216

13-
#RUN pnpm run build
14-
EXPOSE 8888
17+
# run prisma
18+
RUN npx prisma generate
19+
RUN chmod +x waitForIt.sh
20+
RUN chmod +x migratePrisma.sh
21+
22+
23+
# RUN pnpm run build
24+
EXPOSE $NODE_DOCKER_PORT
25+
26+
27+
CMD ["./waitForIt.sh", "db:3306", "--", "./migratePrisma.sh"]
28+
CMD ["npx","prisma", "migrate", "dev"]
1529

16-
#CMD ["node","dist/main.js"]
1730
CMD ["pnpm", "run", "start"]
31+
#CMD ["node","dist/main.js"]

backend/Dockerfile.prod

Lines changed: 0 additions & 10 deletions
This file was deleted.

backend/README.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,6 @@ npx prisma generate
6868
docker system prune -a
6969
```
7070

71-
## Support
72-
73-
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
74-
75-
## Stay in touch
76-
77-
- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com)
78-
- Website - [https://nestjs.com](https://nestjs.com/)
79-
- Twitter - [@nestframework](https://twitter.com/nestframework)
80-
8171
## License
8272

8373
Nest is [MIT licensed](LICENSE).

backend/docker-compose.yaml

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
1+
version: '3.9'
2+
13
services:
2-
mysql:
3-
image: mysql
4-
env_file:
5-
- .env
4+
db:
5+
image: mysql:8.0
6+
restart: always
67
ports:
78
- '3306:3306'
9+
environment:
10+
MYSQL_ROOT_PASSWORD: password
11+
MYSQL_DATABASE: cedb
12+
13+
14+
backend:
15+
build: .
16+
depends_on:
17+
- db
18+
ports:
19+
- '8888:8888'
20+
volumes:
21+
- .:/app
22+
environment:
23+
DATABASE_URL: mysql://root:password@db:3306/cedb
24+

backend/migratePrisma.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/usr/bin/env bash
2+
npx prisma generate
3+

backend/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
2020
"test:e2e": "jest --config ./test/jest-e2e.json",
2121
"docker:build": "docker build -f Dockerfile -t app .",
22-
"docker:run": "docker run -it -p 80:80 app"
22+
"docker:run": "docker run -it -p 80:80 app",
23+
"docker:prune": "docker system prune -a"
2324
},
2425
"dependencies": {
2526
"@nestjs/common": "^10.0.0",
2627
"@nestjs/core": "^10.0.0",
2728
"@nestjs/mapped-types": "*",
2829
"@nestjs/platform-express": "^10.0.0",
29-
"@prisma/client": "5.4.2",
30+
"@prisma/client": "5.7.1",
3031
"reflect-metadata": "^0.1.13",
3132
"rxjs": "^7.8.1"
3233
},
@@ -45,7 +46,7 @@
4546
"eslint-plugin-prettier": "^5.0.0",
4647
"jest": "^29.5.0",
4748
"prettier": "^3.0.0",
48-
"prisma": "^5.4.2",
49+
"prisma": "^5.7.1",
4950
"source-map-support": "^0.5.21",
5051
"supertest": "^6.3.3",
5152
"ts-jest": "^29.1.0",

backend/prisma/schema.prisma

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
// This is your Prisma schema file,
2-
// learn more about it in the docs: https://pris.ly/d/prisma-schema
3-
41
generator client {
5-
provider = "prisma-client-js"
2+
provider = "prisma-client-js"
3+
binaryTargets = ["native", "debian-openssl-3.0.x"]
4+
// binaryTargets = ["native", "darwin", "debian-openssl-1.1.x"]
5+
// binaryTargets = ["native", "linux-musl-openssl-3.0.0"]
66
}
77

88
datasource db {
99
provider = "mysql"
10-
url = "mysql://root:123456@127.0.0.1:3306/cafe_employee_db" // env("DATABASE_URL")
10+
url = env("DATABASE_URL")
1111
}
1212

1313
model Product {

backend/waitForIt.sh

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
#!/usr/bin/env bash
2+
# Use this script to test if a given TCP host/port are available
3+
4+
WAITFORIT_cmdname=${0##*/}
5+
6+
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
7+
8+
usage()
9+
{
10+
cat << USAGE >&2
11+
Usage:
12+
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
13+
-h HOST | --host=HOST Host or IP under test
14+
-p PORT | --port=PORT TCP port under test
15+
Alternatively, you specify the host and port as host:port
16+
-s | --strict Only execute subcommand if the test succeeds
17+
-q | --quiet Don't output any status messages
18+
-t TIMEOUT | --timeout=TIMEOUT
19+
Timeout in seconds, zero for no timeout
20+
-- COMMAND ARGS Execute command with args after the test finishes
21+
USAGE
22+
exit 1
23+
}
24+
25+
wait_for()
26+
{
27+
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
28+
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
29+
else
30+
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
31+
fi
32+
WAITFORIT_start_ts=$(date +%s)
33+
while :
34+
do
35+
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
36+
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
37+
WAITFORIT_result=$?
38+
else
39+
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
40+
WAITFORIT_result=$?
41+
fi
42+
if [[ $WAITFORIT_result -eq 0 ]]; then
43+
WAITFORIT_end_ts=$(date +%s)
44+
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
45+
break
46+
fi
47+
sleep 1
48+
done
49+
return $WAITFORIT_result
50+
}
51+
52+
wait_for_wrapper()
53+
{
54+
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
55+
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
56+
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
57+
else
58+
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
59+
fi
60+
WAITFORIT_PID=$!
61+
trap "kill -INT -$WAITFORIT_PID" INT
62+
wait $WAITFORIT_PID
63+
WAITFORIT_RESULT=$?
64+
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
65+
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
66+
fi
67+
return $WAITFORIT_RESULT
68+
}
69+
70+
# process arguments
71+
while [[ $# -gt 0 ]]
72+
do
73+
case "$1" in
74+
*:* )
75+
WAITFORIT_hostport=(${1//:/ })
76+
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
77+
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
78+
shift 1
79+
;;
80+
--child)
81+
WAITFORIT_CHILD=1
82+
shift 1
83+
;;
84+
-q | --quiet)
85+
WAITFORIT_QUIET=1
86+
shift 1
87+
;;
88+
-s | --strict)
89+
WAITFORIT_STRICT=1
90+
shift 1
91+
;;
92+
-h)
93+
WAITFORIT_HOST="$2"
94+
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
95+
shift 2
96+
;;
97+
--host=*)
98+
WAITFORIT_HOST="${1#*=}"
99+
shift 1
100+
;;
101+
-p)
102+
WAITFORIT_PORT="$2"
103+
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
104+
shift 2
105+
;;
106+
--port=*)
107+
WAITFORIT_PORT="${1#*=}"
108+
shift 1
109+
;;
110+
-t)
111+
WAITFORIT_TIMEOUT="$2"
112+
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
113+
shift 2
114+
;;
115+
--timeout=*)
116+
WAITFORIT_TIMEOUT="${1#*=}"
117+
shift 1
118+
;;
119+
--)
120+
shift
121+
WAITFORIT_CLI=("$@")
122+
break
123+
;;
124+
--help)
125+
usage
126+
;;
127+
*)
128+
echoerr "Unknown argument: $1"
129+
usage
130+
;;
131+
esac
132+
done
133+
134+
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
135+
echoerr "Error: you need to provide a host and port to test."
136+
usage
137+
fi
138+
139+
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
140+
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
141+
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
142+
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
143+
144+
# Check to see if timeout is from busybox?
145+
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
146+
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
147+
148+
WAITFORIT_BUSYTIMEFLAG=""
149+
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
150+
WAITFORIT_ISBUSY=1
151+
# Check if busybox timeout uses -t flag
152+
# (recent Alpine versions don't support -t anymore)
153+
if timeout &>/dev/stdout | grep -q -e '-t '; then
154+
WAITFORIT_BUSYTIMEFLAG="-t"
155+
fi
156+
else
157+
WAITFORIT_ISBUSY=0
158+
fi
159+
160+
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
161+
wait_for
162+
WAITFORIT_RESULT=$?
163+
exit $WAITFORIT_RESULT
164+
else
165+
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
166+
wait_for_wrapper
167+
WAITFORIT_RESULT=$?
168+
else
169+
wait_for
170+
WAITFORIT_RESULT=$?
171+
fi
172+
fi
173+
174+
if [[ $WAITFORIT_CLI != "" ]]; then
175+
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
176+
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
177+
exit $WAITFORIT_RESULT
178+
fi
179+
exec "${WAITFORIT_CLI[@]}"
180+
else
181+
exit $WAITFORIT_RESULT
182+
fi

0 commit comments

Comments
 (0)