Add Dockerfile

This commit is contained in:
tnp 2021-10-16 14:29:41 +09:00 committed by Edward Loveall
parent 0c018a898a
commit eaf25ef23a
No known key found for this signature in database
GPG Key ID: A7606DFEC2BA731F
4 changed files with 68 additions and 0 deletions

3
.dockerignore Normal file
View File

@ -0,0 +1,3 @@
.git
Dockerfile
config/watch.yml

41
Dockerfile Normal file
View File

@ -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"]

View File

@ -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)

4
script/docker_entrypoint Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
echo -e "port: ${SCRIBE_PORT}\nhost: ${SCRIBE_HOST}\ndatabase: ${SCRIBE_DB}" > ./config/watch.yml
./start_server