From eaf25ef23afcc07d27d6fc0800252fe2ceceac46 Mon Sep 17 00:00:00 2001 From: tnp Date: Sat, 16 Oct 2021 14:29:41 +0900 Subject: [PATCH] Add Dockerfile --- .dockerignore | 3 +++ Dockerfile | 41 ++++++++++++++++++++++++++++++++++++++++ README.md | 20 ++++++++++++++++++++ script/docker_entrypoint | 4 ++++ 4 files changed, 68 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100755 script/docker_entrypoint diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..18457d4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.git +Dockerfile +config/watch.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1af6ec5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM node:alpine as node_build +WORKDIR /tmp_build + +COPY package.json . +COPY yarn.lock . +RUN yarn install --no-progress --frozen-lockfile + +COPY webpack.mix.js . +COPY src ./src +RUN yarn prod + +FROM crystallang/crystal:1.0.0-alpine as lucky_build +ENV SKIP_LUCKY_TASK_PRECOMPILATION="1" +RUN apk add yaml-static +WORKDIR /tmp_build +COPY shard.* ./ +RUN shards install --production +COPY . . +COPY --from=node_build /tmp_build/public/mix-manifest.json public/mix-manifest.json +RUN crystal build --static src/start_server.cr +RUN crystal build --static tasks.cr -o run_task + +FROM alpine + +ARG PUID=1000 +ARG PGID=1000 + +RUN addgroup -g ${PGID} -S lucky && \ + adduser -u ${PUID} -S lucky -G lucky +WORKDIR /home/lucky/app + +COPY --chown=lucky:lucky --from=node_build /tmp_build/public public +COPY --chown=lucky:lucky --from=lucky_build /tmp_build/start_server start_server +COPY --chown=lucky:lucky --from=lucky_build /tmp_build/run_task run_task +COPY --chown=lucky:lucky ./script/docker_entrypoint ./ + +RUN mkdir ./config +RUN chown -R lucky /home/lucky +USER lucky + +CMD ["/home/lucky/app/docker_entrypoint"] diff --git a/README.md b/README.md index 01f5b9a..44a8d21 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,26 @@ One thing to note is that this app doesn't currently use a database. Any instruc Hopefully a more comprehensive guide will be written at some point, but for now feel free to reach out if you have any questions. My contact info can be found on [my website](https://edwardloveall.com). +### Docker + +A Dockerfile is included to build and run your own OCI images. To build: + +``` +$ docker build [--build-arg PUID=1000] [--build-arg PGID=1000] -t scribe:latest -f ./Dockerfile . +``` + +To run (generating a base config from environment variables): + +``` +$ docker run -it --rm -p 8080:8080 -e SCRIBE_PORT=8080 -e SCRIBE_HOST=0.0.0.0 -e SCRIBE_DB=postgres://does@not/matter scribe:latest +``` + +To run with mounted config from local fs: + +``` +$ docker run -it --rm -v `pwd`/config/watch.yml:/app/config/watch.yml -p 8080:8080 scribe:latest +``` + ## Contributing 1. Install required dependencies (see sub-sections below) diff --git a/script/docker_entrypoint b/script/docker_entrypoint new file mode 100755 index 0000000..718a309 --- /dev/null +++ b/script/docker_entrypoint @@ -0,0 +1,4 @@ +#!/bin/sh + +echo -e "port: ${SCRIBE_PORT}\nhost: ${SCRIBE_HOST}\ndatabase: ${SCRIBE_DB}" > ./config/watch.yml +./start_server