Skip to content
Snippets Groups Projects
Unverified Commit 2885ed3a authored by BITARD Michaël's avatar BITARD Michaël Committed by GitHub
Browse files

fix(infra): l'utilisateur git est utilisé dans l'image docker pour éviter les...

fix(infra): l'utilisateur git est utilisé dans l'image docker pour éviter les problèmes de droit (#119)
parent b95aa6dd
No related branches found
No related tags found
No related merge requests found
...@@ -20,21 +20,26 @@ RUN npm run build -w packages/api && \ ...@@ -20,21 +20,26 @@ RUN npm run build -w packages/api && \
FROM node:17.8-alpine as production-stage FROM node:17.8-alpine as production-stage
# redirige les logs sur le collecteur de logs docker # TODO 2022-07-13 : on profite que
# cf le Dockerfile de nginx # - l'utilisateur a le même id sur toutes les machines
# https://github.com/nginxinc/docker-nginx/blob/8921999083def7ba43a06fabd5f80e4406651353/mainline/jessie/Dockerfile#L21-L23 # - ansible crée les dossiers avec les bons droits
RUN ln -sf /dev/stdout ./app.log RUN adduser -u 1002 -D nonroot
COPY --from=build-stage /app/package.json ./ USER nonroot
COPY --from=build-stage /app/packages/api/package.json ./packages/api/
COPY --from=build-stage /app/packages/common/package.json ./packages/common/ COPY --chown=nonroot:nonroot --from=build-stage /app/package.json ./
COPY --from=build-stage /app/packages/api/dist/ ./packages/api/dist/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/api/package.json ./packages/api/
COPY --from=build-stage /app/node_modules ./node_modules/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/common/package.json ./packages/common/
COPY --from=build-stage /app/packages/api/node_modules ./node_modules/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/api/dist/ ./packages/api/dist/
COPY --chown=nonroot:nonroot --from=build-stage /app/node_modules ./node_modules/
COPY --chown=nonroot:nonroot --from=build-stage /app/packages/api/node_modules ./node_modules/
# nous avons besoin des sources pour lancer certains scripts manuellement # nous avons besoin des sources pour lancer certains scripts manuellement
COPY --from=build-stage /app/packages/api/src ./packages/api/src/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/api/src ./packages/api/src/
COPY --from=build-stage /app/packages/api/tsconfig.json ./packages/api/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/api/tsconfig.json ./packages/api/
COPY --from=build-stage /app/packages/common/src ./packages/common/src/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/common/src ./packages/common/src/
COPY --from=build-stage /app/packages/common/tsconfig.json ./packages/common/ COPY --chown=nonroot:nonroot --from=build-stage /app/packages/common/tsconfig.json ./packages/common/
# Ce n'est pas nécessaire pour les environnements de prod (le dossier est crée par ansible et monté) mais est plus correct pour pouvoir utiliser l'image sans problème de droit au démarrage
RUN mkdir -p /packages/api/files
CMD ["npm", "start", "-w", "packages/api"] CMD ["npm", "start", "-w", "packages/api"]
...@@ -22,7 +22,6 @@ services: ...@@ -22,7 +22,6 @@ services:
volumes: volumes:
- ./files:/packages/api/files - ./files:/packages/api/files
- ./.env:/.env - ./.env:/.env
- ./app.log:/app.log
networks: networks:
- default - default
- nginx-proxy - nginx-proxy
......
...@@ -6,12 +6,8 @@ ...@@ -6,12 +6,8 @@
name: rsync name: rsync
state: present state: present
become: True become: True
- file:
path: /srv/www/camino/files
group: users
mode: u=rwx,g=rwx,o=r
become: True
roles: roles:
- role: user
- role: nginx - role: nginx
- role: camino - role: camino
- role: devAndPreprod - role: devAndPreprod
......
---
# TODO 2022-07-13: gérer l'accés des développeurs ici (nom, uid et clé publique ssh)
- name: ajoute le groupe "git"
ansible.builtin.group:
name: git
state: present
gid: 1002
become: True
- name: ajoute l'utilisateur 'git'
ansible.builtin.user:
name: git
comment: Git
# L'UID doit être le même que dans le Dockerfile.api
uid: 1002
groups: git, users, docker
become: True
- file:
path: /srv/www/camino/files
group: users
state: directory
recurse: True
owner: git
mode: u=rwx,g=rwx,o=r
become: True
\ No newline at end of file
...@@ -30,6 +30,5 @@ node_modules ...@@ -30,6 +30,5 @@ node_modules
/files /files
/docs /docs
/dev/tmp /dev/tmp
app.log
cron.log cron.log
.eslintcache .eslintcache
...@@ -27,6 +27,7 @@ const utilFormat = { ...@@ -27,6 +27,7 @@ const utilFormat = {
} }
} }
// TODO 2022-07-13 : supprime winston et utilise console.log classique (avec des couleurs si on veut être fancy, mais pas besoin de cette dépendance (et encore moins des sous dépendances))
const consoleOverride = (logger: winston.Logger) => { const consoleOverride = (logger: winston.Logger) => {
console.info = (...args) => logger.info('', ...args) console.info = (...args) => logger.info('', ...args)
console.warn = (...args) => logger.warn('', ...args) console.warn = (...args) => logger.warn('', ...args)
...@@ -42,32 +43,8 @@ const appLogger = createLogger({ ...@@ -42,32 +43,8 @@ const appLogger = createLogger({
transports: [consoleTransport] transports: [consoleTransport]
}) })
// Si nous sommes en production, alors on met aussi les logs dans un fichier
if (process.env.NODE_ENV === 'production') {
appLogger.add(
new transports.File({
filename: 'app.log',
format: combine(timestampFormat, utilFormat, printFormat)
})
)
}
const htmlFormat = printf(({ level, message, timestamp }) => {
if (!message || !message.length) {
return ''
}
return `<div>${timestamp} [${level}]: ${message}</div>`
})
const cronLogger = createLogger({ const cronLogger = createLogger({
transports: [ transports: [consoleTransport]
consoleTransport,
new transports.File({
filename: 'cron.log',
format: combine(timestampFormat, utilFormat, htmlFormat)
})
]
}) })
export { consoleOverride, appLogger, cronLogger } export { consoleOverride, appLogger, cronLogger }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment