Skip to content

Commit 2e5cc23

Browse files
Run most docker commands as nonroot
1 parent 1ad1a31 commit 2e5cc23

File tree

5 files changed

+35
-11
lines changed

5 files changed

+35
-11
lines changed

Makefile

+10-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ MAKEFLAGS += --no-builtin-rules
99

1010
DB_CONTAINER=rmap-mysql
1111

12+
HOST_UID=$(shell id -u)
13+
HOST_GID=$(shell id -g)
14+
1215
DOCKER_IMAGE_NAME = quay.io/reconmap/rest-api
1316
DOCKER_DEFAULT_TAG = $(DOCKER_IMAGE_NAME)
1417

@@ -22,13 +25,17 @@ endif
2225
prepare-config:
2326
[ -f config.json ] || cp config-template.json config.json
2427

28+
.PHONY: prepare-dirs
29+
prepare-dirs:
30+
mkdir -p vendor logs data-mysql data-redis
31+
2532
.PHONY: prepare
26-
prepare: prepare-config build
27-
docker-compose run --rm -w /var/www/webapp --entrypoint composer api install
33+
prepare: prepare-config prepare-dirs build
34+
docker-compose run --rm --user reconmapper -w /var/www/webapp --entrypoint composer api install
2835

2936
.PHONY: build
3037
build:
31-
docker-compose build --no-cache
38+
docker-compose build --no-cache --build-arg HOST_UID=$(HOST_UID) --build-arg HOST_GID=$(HOST_GID)
3239

3340
.PHONY: tests
3441
tests: start validate

docker/api/Dockerfile

+15-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
FROM debian:bookworm-slim
22

33
ARG PHP_VERSION=8.3
4-
54
ARG DEBIAN_FRONTEND=noninteractive
65

6+
ARG HOST_UID
7+
ARG HOST_GID
8+
9+
RUN groupadd -g ${HOST_GID} reconmappers && \
10+
useradd -u ${HOST_UID} -g ${HOST_GID} -m -s /bin/bash reconmapper
11+
712
RUN apt-get update && apt-get upgrade -y --fix-missing
813
RUN apt-get install -y wget unzip lsb-release
914
RUN wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
@@ -21,7 +26,7 @@ RUN wget --no-verbose https://getcomposer.org/installer -O - -q | php -- --insta
2126

2227
RUN apt-get install -y cron
2328
COPY docker/api/crontab.txt /tmp/crontab
24-
RUN crontab /tmp/crontab && rm /tmp/crontab
29+
RUN crontab -u reconmapper /tmp/crontab && rm /tmp/crontab
2530

2631
RUN sed -i "s/;clear_env = no/clear_env = no/" /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf
2732
RUN rm /etc/nginx/sites-enabled/default
@@ -30,13 +35,15 @@ COPY docker/api/nginx/sites-enabled/* /etc/nginx/sites-enabled/
3035
RUN sed -i 's/upload_max_filesize = [[:digit:]]\+M/upload_max_filesize = 20M/' /etc/php/${PHP_VERSION}/fpm/php.ini
3136
RUN sed -i 's/post_max_size = [[:digit:]]\+M/post_max_size = 28M/' /etc/php/${PHP_VERSION}/fpm/php.ini
3237

38+
RUN mkdir -p /var/www/webapp /var/www/webapp/data/vendor /var/www/webapp/data/attachments /var/www/webapp/logs && \
39+
chown -R reconmapper:reconmappers /var/www/webapp
40+
41+
RUN chmod -R a+w /var/www/webapp/logs
42+
3343
WORKDIR /var/www/webapp
34-
COPY composer.json /var/www/webapp
35-
COPY composer.lock /var/www/webapp
36-
RUN composer install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader
3744

38-
RUN mkdir -p data/attachments && chown www-data data/attachments
39-
RUN mkdir logs && chown www-data logs && chmod a+w logs
45+
COPY composer.json composer.lock /var/www/webapp/
46+
RUN composer install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader
4047

4148
COPY public /var/www/webapp/public
4249
COPY database/ /var/www/webapp/database/
@@ -47,5 +54,6 @@ COPY src/ /var/www/webapp/src/
4754
VOLUME /var/www/webapp
4855

4956
COPY docker/api/entrypoint.sh /entrypoint
57+
5058
ENTRYPOINT ["/entrypoint"]
5159
CMD nginx -g 'daemon off;' && bash

docker/api/crontab.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
SHELL=/bin/bash
2+
BASH_ENV=/home/reconmapper/crontab.env
23

34
# .---------------- minute (0 - 59)
45
# | .------------- hour (0 - 23)

docker/api/entrypoint.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22

3-
printenv | grep "REDIS_" > /etc/environment
3+
printenv | grep "REDIS_" > /home/reconmapper/crontab.env
44
service cron start
55

66
# 'service php-fpm start' does not pass env variables to process.

docker/mysql/Dockerfile

+8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ LABEL maintainer="Reconmap engineering" \
88
org.opencontainers.image.licenses="GPL" \
99
org.opencontainers.image.url="https://github.com/reconmap/rest-api"
1010

11+
ARG HOST_UID
12+
ARG HOST_GID
13+
14+
RUN groupadd -g ${HOST_GID} reconmappers && \
15+
useradd -r -u ${HOST_UID} -g reconmappers reconmapper
16+
1117
COPY database/ /docker-entrypoint-initdb.d/
1218
COPY docker/mysql/overrides.cnf /etc/mysql/conf.d/overrides.cnf
1319

20+
USER reconmapper
21+

0 commit comments

Comments
 (0)