From d57ea1ac670e93029442ede8eac3873c88b69d1e Mon Sep 17 00:00:00 2001 From: Joao P Dubas Date: Thu, 6 Mar 2025 23:13:34 -0300 Subject: [PATCH] wip: add strapi --- services/strapi/Dockerfile | 50 +++++++++++++++++++++++++++++++ services/strapi/compose.yml | 59 +++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 services/strapi/Dockerfile create mode 100644 services/strapi/compose.yml diff --git a/services/strapi/Dockerfile b/services/strapi/Dockerfile new file mode 100644 index 0000000..033ab92 --- /dev/null +++ b/services/strapi/Dockerfile @@ -0,0 +1,50 @@ +FROM node:18-alpine3.18 AS development +# Installing libvips-dev for sharp Compatibility +RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev git +ARG NODE_ENV=development +ENV NODE_ENV=${NODE_ENV} + +WORKDIR /opt/ +COPY package.json yarn.lock ./ +RUN yarn global add node-gyp +RUN yarn config set network-timeout 600000 -g && yarn install +ENV PATH /opt/node_modules/.bin:$PATH + +WORKDIR /opt/app +COPY . . +RUN chown -R node:node /opt/app +USER node +RUN ["yarn", "build"] +EXPOSE 1337 +CMD ["yarn", "develop"] + +# Creating multi-stage build for production +FROM node:18-alpine as build +RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev git > /dev/null 2>&1 +ENV NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} + +WORKDIR /opt/ +COPY package.json yarn.lock ./ +RUN yarn global add node-gyp +RUN yarn config set network-timeout 600000 -g && yarn install --production +ENV PATH /opt/node_modules/.bin:$PATH +WORKDIR /opt/app +COPY . . +RUN yarn build + +# Creating final production image +FROM node:18-alpine +RUN apk add --no-cache vips-dev +ENV NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} +WORKDIR /opt/ +COPY --from=build /opt/node_modules ./node_modules +WORKDIR /opt/app +COPY --from=build /opt/app ./ +ENV PATH /opt/node_modules/.bin:$PATH + +RUN chown -R node:node /opt/app +USER node +EXPOSE 1337 +CMD ["yarn", "start"] diff --git a/services/strapi/compose.yml b/services/strapi/compose.yml new file mode 100644 index 0000000..019af81 --- /dev/null +++ b/services/strapi/compose.yml @@ -0,0 +1,59 @@ +--- +services: + strapi: + container_name: strapi + build: . + image: strapi:latest + restart: unless-stopped + env_file: .env + environment: + DATABASE_CLIENT: ${DATABASE_CLIENT} + DATABASE_HOST: strapiDB + DATABASE_PORT: ${DATABASE_PORT} + DATABASE_NAME: ${DATABASE_NAME} + DATABASE_USERNAME: ${DATABASE_USERNAME} + DATABASE_PASSWORD: ${DATABASE_PASSWORD} + JWT_SECRET: ${JWT_SECRET} + ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET} + APP_KEYS: ${APP_KEYS} + NODE_ENV: ${NODE_ENV} + volumes: + - ./config:/opt/app/config + - ./src:/opt/app/src + - ./package.json:/opt/package.json + - ./yarn.lock:/opt/yarn.lock + - ./.env:/opt/app/.env + - ./public/uploads:/opt/app/public/uploads + ports: + - "1337:1337" + networks: + - strapi + depends_on: + - strapiDB + + strapiDB: + container_name: strapiDB + platform: linux/amd64 #for platform error on Apple M1 chips + restart: unless-stopped + env_file: .env + image: postgres:12.0-alpine + environment: + POSTGRES_USER: ${DATABASE_USERNAME} + POSTGRES_PASSWORD: ${DATABASE_PASSWORD} + POSTGRES_DB: ${DATABASE_NAME} + volumes: + - strapi-data:/var/lib/postgresql/data/ #using a volume + #- ./data:/var/lib/postgresql/data/ # if you want to use a bind folder + + ports: + - "5432:5432" + networks: + - strapi + +volumes: + strapi-data: + +networks: + strapi: + name: Strapi + driver: bridge