Skip to content
This repository was archived by the owner on Jun 28, 2025. It is now read-only.

Commit 3d8a4bf

Browse files
committed
chore: add first containerized version of app and cms, also supply docker-compose for development
1 parent 2c59015 commit 3d8a4bf

File tree

10 files changed

+255
-5
lines changed

10 files changed

+255
-5
lines changed

.development.docker-compose.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
version: "3"
2+
services:
3+
app:
4+
container_name: app
5+
environment:
6+
- CMS_API=http://cms:1337/api
7+
build:
8+
context: ./app
9+
dockerfile: Dockerfile
10+
volumes:
11+
- ./app/src/app:/opt/app/src/app
12+
ports:
13+
- 3000:3000
14+
networks:
15+
- vim_network
16+
17+
db:
18+
container_name: db
19+
restart: unless-stopped
20+
image: mysql:8
21+
environment:
22+
- MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
23+
- MYSQL_USER=${DATABASE_USERNAME}
24+
- MYSQL_PASSWORD=${DATABASE_PASSWORD}
25+
- MYSQL_DATABASE=${DATABASE_NAME}
26+
volumes:
27+
- vim-cms-data:/var/lib/mysql
28+
ports:
29+
- "3306:3306"
30+
networks:
31+
- vim_network
32+
33+
cms:
34+
container_name: strapi
35+
build:
36+
context: ./cms
37+
dockerfile: Dockerfile
38+
restart: unless-stopped
39+
env_file: ./cms/.env
40+
environment:
41+
DATABASE_CLIENT: ${DATABASE_CLIENT}
42+
DATABASE_HOST: db
43+
DATABASE_PORT: ${DATABASE_PORT}
44+
DATABASE_NAME: ${DATABASE_NAME}
45+
DATABASE_USERNAME: ${DATABASE_USERNAME}
46+
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
47+
JWT_SECRET: ${JWT_SECRET}
48+
ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET}
49+
APP_KEYS: ${APP_KEYS}
50+
NODE_ENV: ${NODE_ENV}
51+
volumes:
52+
- ./cms/config:/opt/app/config
53+
- ./cms/src:/opt/app/src
54+
- ./cms/package.json:/opt/package.json
55+
- ./cms/.env:/opt/app/.env
56+
- ./cms/public/uploads:/opt/app/public/uploads
57+
ports:
58+
- 1337:1337
59+
networks:
60+
- vim_network
61+
depends_on:
62+
- db
63+
64+
volumes:
65+
vim-cms-data:
66+
67+
networks:
68+
vim_network:
69+
name: vim_network
70+
driver: bridge

.env.example

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
DATABASE_CLIENT=mysql2
2+
DATABASE_HOST=127.0.0.1
3+
DATABASE_PORT=3306
4+
DATABASE_NAME=db
5+
DATABASE_USERNAME=vim
6+
DATABASE_PASSWORD=super-secret
7+
DATABASE_SSL=false
8+
HOST=0.0.0.0
9+
PORT=1337
10+
APP_KEYS=testkey1,testkey2
11+
API_TOKEN_SALT=testtoken
12+
ADMIN_JWT_SECRET=testsecret
13+
JWT_SECRET=testsecret
14+
TRANSFER_TOKEN_SALT=testtoken
15+
NODE_ENV=development

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.env

app/.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules
2+
.next

app/Dockerfile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
FROM node:18-alpine
2+
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev git
3+
ARG NODE_ENV=development
4+
ENV NODE_ENV=${NODE_ENV}
5+
6+
WORKDIR /opt/
7+
COPY package.json package-lock.json ./
8+
RUN npm install
9+
ENV PATH /opt/node_modules/.bin:$PATH
10+
11+
WORKDIR /opt/app
12+
COPY . .
13+
RUN chown -R node:node /opt/app
14+
USER node
15+
EXPOSE 3000
16+
CMD ["npm", "run", "dev"]

cms/.dockerignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
node_modules
2+
dist
3+
build

cms/Dockerfile

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM node:18-alpine
2+
# Installing libvips-dev for sharp Compatibility
3+
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev git
4+
ARG NODE_ENV=development
5+
ENV NODE_ENV=${NODE_ENV}
6+
7+
WORKDIR /opt/
8+
COPY package.json package-lock.json ./
9+
RUN npm install -g node-gyp
10+
RUN npm config set fetch-retry-maxtimeout 600000 -g && npm install
11+
ENV PATH /opt/node_modules/.bin:$PATH
12+
13+
WORKDIR /opt/app
14+
COPY . .
15+
RUN chown -R node:node /opt/app
16+
USER node
17+
RUN ["npm", "run", "build"]
18+
EXPOSE 1337
19+
CMD ["npm", "run", "develop"]

cms/Dockerfile.prod

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FROM node:18-alpine as build
2+
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev git > /dev/null 2>&1
3+
ARG NODE_ENV=production
4+
ENV NODE_ENV=${NODE_ENV}
5+
6+
WORKDIR /opt/
7+
COPY package.json package-lock.json ./
8+
RUN npm install -g node-gyp
9+
RUN npm config set fetch-retry-maxtimeout 600000 -g && npm install --only=production
10+
ENV PATH /opt/node_modules/.bin:$PATH
11+
WORKDIR /opt/app
12+
COPY . .
13+
RUN npm run build
14+
15+
FROM node:18-alpine
16+
RUN apk add --no-cache vips-dev
17+
ARG NODE_ENV=production
18+
ENV NODE_ENV=${NODE_ENV}
19+
WORKDIR /opt/
20+
COPY --from=build /opt/node_modules ./node_modules
21+
WORKDIR /opt/app
22+
COPY --from=build /opt/app ./
23+
ENV PATH /opt/node_modules/.bin:$PATH
24+
25+
RUN chown -R node:node /opt/app
26+
USER node
27+
EXPOSE 1337
28+
CMD ["npm", "run", "start"]

cms/package-lock.json

Lines changed: 97 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cms/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
"build": "strapi build",
1010
"strapi": "strapi"
1111
},
12-
"devDependencies": {},
1312
"dependencies": {
14-
"@strapi/strapi": "4.14.5",
15-
"@strapi/plugin-users-permissions": "4.14.5",
1613
"@strapi/plugin-i18n": "4.14.5",
17-
"mysql": "2.18.1"
14+
"@strapi/plugin-users-permissions": "4.14.5",
15+
"@strapi/strapi": "4.14.5",
16+
"mysql": "2.18.1",
17+
"mysql2": "^3.6.2"
1818
},
1919
"author": {
2020
"name": "A Strapi developer"

0 commit comments

Comments
 (0)