Skip to content

Commit 6a75533

Browse files
feat: TT-511 create build and docker image for production
1 parent c01e80c commit 6a75533

File tree

4 files changed

+72
-23
lines changed

4 files changed

+72
-23
lines changed

.dockerignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,5 @@ dist
44
coverage
55
Makefile
66
.gitignore
7-
.env
87
src/environments/keys.ts
98
src/environments/.keys.json

Dockerfile

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ ENV HOME /home/${USERNAME}
66
RUN useradd -ms /bin/bash ${USERNAME}
77

88
WORKDIR ${HOME}/time-tracker-ui
9+
COPY [^.env]* . .
910
RUN chown ${USERNAME}:${USERNAME} -R ${HOME}
10-
COPY --chown=${USERNAME}:${USERNAME} . .
1111

1212
USER ${USERNAME}
1313
RUN npm cache clean --force && npm install
@@ -17,18 +17,29 @@ CMD npm run config && ${HOME}/time-tracker-ui/node_modules/.bin/ng serve --host
1717

1818

1919

20-
FROM node:14 AS production
20+
FROM node:14 AS build
2121

22-
ENV USERNAME timetracker
23-
ENV HOME /home/${USERNAME}
22+
WORKDIR /usr/local/app
23+
COPY ./ /usr/local/app/
2424

25-
RUN useradd -m -d ${HOME} -s /bin/bash ${USERNAME}
25+
RUN npm install
26+
RUN npm run build
2627

27-
WORKDIR ${HOME}/time-tracker-ui
28-
RUN chown ${USERNAME}:${USERNAME} -R ${HOME}
29-
COPY --chown=${USERNAME}:${USERNAME} . .
28+
29+
30+
FROM nginx:1.21 AS production
31+
32+
ENV USERNAME nginx
33+
34+
COPY nginx.conf /etc/nginx/conf.d/
35+
COPY nginx.conf /etc/nginx/conf.d/default.conf
36+
COPY --from=build /usr/local/app/dist/time-tracker /usr/share/nginx/html
37+
38+
RUN chown -R ${USERNAME}:${USERNAME} /var/cache/nginx && \
39+
chown -R ${USERNAME}:${USERNAME} /var/log/nginx && \
40+
chown -R ${USERNAME}:${USERNAME} /etc/nginx/conf.d
41+
RUN touch /var/run/nginx.pid && chown -R ${USERNAME}:${USERNAME} /var/run/nginx.pid
3042

3143
USER ${USERNAME}
32-
RUN npm cache clean --force && npm install
33-
EXPOSE 4200
34-
CMD npm run config && /time-tracker-ui/node_modules/.bin/ng serve --host 0.0.0.0 --disableHostCheck --prod
44+
45+
EXPOSE 4200

Makefile

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
.PHONY: help
22
help:
33
@echo "---------------HELP-----------------"
4-
@echo "- make build --> Create docker image with dependencies needed"
4+
5+
@echo "- make build --> Create docker image with dependencies needed for development"
56
@echo "- make run --> Execute timetracker_ui docker container"
6-
@echo "- make stop --> Stop container"
7-
@echo "- make remove --> Restart container"
8-
@echo "- make remove --> Delete container"
9-
@echo "- make test --> Run all tests on docker container"
7+
@echo "- make stop --> Stop container timetracker_ui"
8+
@echo "- make restart --> Restart container timetracker_ui"
9+
@echo "- make remove --> Delete container timetracker_ui"
10+
@echo "- make test --> Run all tests on docker container timetracker_ui"
11+
@echo "- make publish --> Publish the container image timetracker_ui"
12+
13+
@echo "- make build_prod --> Create docker image with dependencies needed for production"
14+
@echo "- make run_prod --> Execute timetracker_ui_prod docker container"
15+
@echo "- make remove_prod --> Delete container timetracker_ui_prod"
16+
@echo "- make publish_prod --> Publish the container image timetracker_ui_prod"
17+
1018
@echo "- make login --> Login in respository of docker images"
11-
@echo "- make publish --> Publish the container image"
1219
@echo "------------------------------------"
1320

1421
.PHONY: build
@@ -38,13 +45,33 @@ remove:
3845
.PHONY: test
3946
test:
4047
docker-compose --env-file ./.env up -d
41-
docker exec -it timetracker_ui bash -c "npm test"
42-
43-
.PHONY: login
44-
login:
45-
az acr login --name timetrackerdevregistry
48+
docker exec -it timetracker_ui bash -c "npm run test"
4649

4750
.PHONY: publish
4851
publish:
4952
docker tag timetracker_ui:latest timetrackerdevregistry.azurecr.io/timetracker_ui:latest
5053
docker push timetrackerdevregistry.azurecr.io/timetracker_ui:latest
54+
55+
.PHONY: build_prod
56+
build_prod:
57+
-docker rmi timetracker_ui_prod
58+
docker build --target production -t timetracker_ui_prod -f Dockerfile .
59+
60+
.PHONY: run_prod
61+
run_prod:
62+
docker run -d -p 4200:4200 --name timetracker_ui_prod timetracker_ui_prod
63+
docker logs -f timetracker_ui_prod
64+
65+
.PHONY: remove_prod
66+
remove_prod:
67+
docker stop timetracker_ui_prod
68+
docker rm timetracker_ui_prod
69+
70+
.PHONY: publish_prod
71+
publish_prod:
72+
docker tag timetracker_ui_prod:latest timetrackerdevregistry.azurecr.io/timetracker_ui_prod:latest
73+
docker push timetrackerdevregistry.azurecr.io/timetracker_ui_prod:latest
74+
75+
.PHONY: login
76+
login:
77+
az acr login --name timetrackerdevregistry

nginx.conf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
server {
2+
listen 4200;
3+
4+
root /usr/share/nginx/html;
5+
index index.html;
6+
7+
server_name _;
8+
9+
location / {
10+
try_files $uri /index.html;
11+
}
12+
}

0 commit comments

Comments
 (0)