From 94658d4379fe7569456bac00fce2e5c67e8a4413 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 18 Sep 2023 15:03:44 +0200 Subject: [PATCH] Add static assets to nginx --- back/package.json | 4 ++-- docker-compose.dev.yml | 19 ++++++++++++++++++- docker-compose.yml | 6 +----- front/Dockerfile | 5 +++-- front/assets/metronome.mp3 | Bin 0 -> 19226 bytes front/components/Metronome.tsx | 13 +++++++++++++ front/nginx.conf.template | 4 ++++ front/nginx.conf.template.dev | 29 +++++++++++++++++++++++++++++ front/views/PlayView.tsx | 3 +++ 9 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 front/assets/metronome.mp3 create mode 100644 front/components/Metronome.tsx create mode 100644 front/nginx.conf.template.dev diff --git a/back/package.json b/back/package.json index 0ce3f9f..c94bd38 100644 --- a/back/package.json +++ b/back/package.json @@ -10,8 +10,8 @@ "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", - "start:dev": "nest start --watch", - "start:debug": "nest start --debug --watch", + "start:dev": "nest start --watch --preserveWatchOutput", + "start:debug": "nest start --debug --watch --preserveWatchOutput", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index f4b8398..57c2455 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -40,13 +40,14 @@ services: retries: 5 ports: - "5432:5432" + front: build: context: ./front dockerfile: Dockerfile.dev environment: - SCOROMETER_URL=http://scorometer:6543/ - - NGINX_PORT=80 + - NGINX_PORT=4567 ports: - "19006:19006" volumes: @@ -55,3 +56,19 @@ services: - "back" env_file: - .env + + nginx: + image: nginx + environment: + - API_URL=http://back:3000 + - SCOROMETER_URL=http://scorometer:6543 + - FRONT_URL=http://front:19006 + - PORT=4567 + depends_on: + - back + - front + volumes: + - "./front/assets:/assets:ro" + - "./front/nginx.conf.template.dev:/etc/nginx/templates/default.conf.template:ro" + ports: + - "4567:4567" diff --git a/docker-compose.yml b/docker-compose.yml index af5e44b..eb054e8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,11 +35,7 @@ services: retries: 5 front: - build: - context: ./front - args: - - API_URL=${API_URL} - - SCORO_URL=${SCORO_URL} + build: ./front environment: - API_URL=http://back:3000/ - SCOROMETER_URL=http://scorometer:6543/ diff --git a/front/Dockerfile b/front/Dockerfile index 34b510e..c219a27 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -22,6 +22,7 @@ RUN yarn tsc && expo build:web # Serve the app FROM nginx:1.21-alpine COPY --from=build /app/web-build /usr/share/nginx/html -COPY nginx.conf.template /etc/nginx/conf.d/default.conf.template +COPY ./assets/ /usr/share/nginx/html/assets/ +COPY nginx.conf.template /etc/nginx/templates/default.conf.template -CMD envsubst '$API_URL $SCOROMETER_URL $NGINX_PORT' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;' +CMD nginx -g 'daemon off;' diff --git a/front/assets/metronome.mp3 b/front/assets/metronome.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..dfdf644b8831fdf73affcdca76c955a4e6e7ee45 GIT binary patch literal 19226 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 { + const ref = useRef(null); + useEffect(() => { + const int = setInterval(() => { + if (!ref.current) ref.current = new Audio("/assets/metronome.mp3"); + ref.current.play(); + }, 60000 / bpm); + return () => clearInterval(int); + }, []); + return null; +}; diff --git a/front/nginx.conf.template b/front/nginx.conf.template index 9baf3ed..fc5af83 100644 --- a/front/nginx.conf.template +++ b/front/nginx.conf.template @@ -4,6 +4,10 @@ server { index index.html; + location /assets { + alias ./assets; + } + location / { try_files $uri $uri/ /index.html; } diff --git a/front/nginx.conf.template.dev b/front/nginx.conf.template.dev new file mode 100644 index 0000000..b7caf3b --- /dev/null +++ b/front/nginx.conf.template.dev @@ -0,0 +1,29 @@ +server { + listen ${PORT}; + root /usr/share/nginx/html; + + index index.html; + + location /assets { + alias /assets; + } + + location / { + proxy_pass ${FRONT_URL}/; + } + + location /api/ { + proxy_pass ${API_URL}/; + } + + location /ws { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass ${SCOROMETER_URL}; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_http_version 1.1; + } +} diff --git a/front/views/PlayView.tsx b/front/views/PlayView.tsx index 790a556..962e05b 100644 --- a/front/views/PlayView.tsx +++ b/front/views/PlayView.tsx @@ -33,6 +33,7 @@ import { MIDIAccess, MIDIMessageEvent, requestMIDIAccess } from '@motiz88/react- import * as Linking from 'expo-linking'; import url from 'url'; import { PianoCanvasContext, PianoCanvasMsg, NoteTiming } from '../models/PianoGame'; +import { Metronome } from '../components/Metronome'; type PlayViewProps = { songId: number; @@ -357,6 +358,8 @@ const PlayView = ({ songId, type, route }: RouteProps) => { {!partitionRendered && } + +