From 157b06ea4ba653d6cedee7cdc40dd2b826b070bf Mon Sep 17 00:00:00 2001 From: Maieul BOYER Date: Tue, 29 Jul 2025 14:01:01 +0200 Subject: [PATCH] feat(infra): reworked everything so that a single docker builds all + made sure everything works --- docker-compose.yml | 6 +----- nginx/Dockerfile | 4 +++- nginx/conf/default.conf | 2 +- nginx/conf/locations/icons.conf | 4 +++- src/Dockerfile | 7 +++++-- src/icons/Dockerfile | 6 ++++-- src/icons/src/routes/set/index.ts | 8 ++++++-- 7 files changed, 23 insertions(+), 14 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d4d0eaf..130a6cc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,11 +28,7 @@ services: # - write icons to shared volume allowing nginx to serve them (does it better than if we did it in the service) icons: # build is a bit strange: it has two parts - build: - # the dockerfile to use - dockerfile: ./src/icons/Dockerfile - # the current working directory. This means `.` in Dockerfile - context: . + build: ./src/icons/ container_name: icons restart: always networks: diff --git a/nginx/Dockerfile b/nginx/Dockerfile index 7c0518f..9d384f9 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -6,7 +6,7 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2025/06/12 16:42:38 by maiboyer #+# #+# # -# Updated: 2025/06/16 21:21:16 by maiboyer ### ########.fr # +# Updated: 2025/07/29 13:58:39 by maiboyer ### ########.fr # # # # **************************************************************************** # @@ -22,6 +22,8 @@ RUN \ -keyout /etc/ssl/private/nginx-selfsigned.key \ -out /etc/ssl/certs/nginx-selfsigned.crt \ -subj "/C=FR/OU=student/CN=${NGINX_DOMAIN}" + COPY ./15-local-resolvers.envsh /docker-entrypoint.d/ COPY ./17-add-template-prefix.sh /docker-entrypoint.d/ + COPY ./conf /etc/nginx/templates diff --git a/nginx/conf/default.conf b/nginx/conf/default.conf index 1ced253..5a4794f 100644 --- a/nginx/conf/default.conf +++ b/nginx/conf/default.conf @@ -18,8 +18,8 @@ server { charset UTF-8; listen [::]:443 ssl; listen 443 ssl; - server_name $NGINX_DOMAIN; resolver $NGINX_RESOLVERS; + server_name $NGINX_DOMAIN; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; diff --git a/nginx/conf/locations/icons.conf b/nginx/conf/locations/icons.conf index 2f24928..e56177a 100644 --- a/nginx/conf/locations/icons.conf +++ b/nginx/conf/locations/icons.conf @@ -1,8 +1,10 @@ +#forward the post request to the microservice location /api/icons/set/ { rewrite ^/api/icons/set/(.*) $1 break; - proxy_pass http://icons-service/set/$uri; + proxy_pass http://icons/set/$uri; } +#handle the get request with nginx, since it does this well location /api/icons/get/ { rewrite ^/api/icons/get/(.*) /$1 break; root /volumes/icons; diff --git a/src/Dockerfile b/src/Dockerfile index 7486674..087d709 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -6,18 +6,21 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2025/07/28 16:33:09 by maiboyer #+# #+# # -# Updated: 2025/07/28 17:46:49 by maiboyer ### ########.fr # +# Updated: 2025/07/29 13:54:54 by maiboyer ### ########.fr # # # # **************************************************************************** # # this file will be used to build everything at once # then all the other Dockerfiles will just copy from this one... # -# it'll always be tagged as `ft_transcendance_global` +# it'll always be tagged as `trans_builder` # this is VERY UGLY # I didn't find really a lot of other ways to do this thought... # so yeah have mercy :P + +# please do not touch this file unless you know what you are doing :) + FROM node:24-alpine RUN apk add python3; diff --git a/src/icons/Dockerfile b/src/icons/Dockerfile index 2362d07..7af396b 100644 --- a/src/icons/Dockerfile +++ b/src/icons/Dockerfile @@ -6,11 +6,13 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2025/06/16 14:57:11 by maiboyer #+# #+# # -# Updated: 2025/07/28 17:59:09 by maiboyer ### ########.fr # +# Updated: 2025/07/29 13:53:21 by maiboyer ### ########.fr # # # # **************************************************************************** # FROM trans_builder -CMD ["node", "/src/icons/run.js"] +# do extra stuff that is specific for this service here ! + +CMD ["node", "/src/icons/dist/run.js"] diff --git a/src/icons/src/routes/set/index.ts b/src/icons/src/routes/set/index.ts index db5795c..047d905 100644 --- a/src/icons/src/routes/set/index.ts +++ b/src/icons/src/routes/set/index.ts @@ -6,14 +6,14 @@ import sharp from 'sharp' const example: FastifyPluginAsync = async (fastify, opts): Promise => { // await fastify.register(authMethod, {}); - + // here we register plugins that will be active for the current fastify instance (aka everything in this function) await fastify.register(fastifyRawBody, { encoding: false }); // we register a route handler for: `/` // it sets some configuration options, and set the actual function that will handle the request fastify.post('/:userid', { config: { rawBody: true, encoding: false } }, async function(request, reply) { - + // this is how we get the `:userid` part of things const userid: string | undefined = (request.params as any)['userid']; if (userid === undefined) { @@ -21,6 +21,10 @@ const example: FastifyPluginAsync = async (fastify, opts): Promise => { } const image_store: string = fastify.getDecorator('image_store') const image_path = join(image_store, userid) + + //let raw_image_file = await open(image_path + ".raw", "w", 0o666) + //await raw_image_file.write(request.rawBody as Buffer); + //await raw_image_file.close() try { let img = sharp(request.rawBody as Buffer); img.resize({