Use Docker to build app & docker-compose

This commit is contained in:
José C. Paiva 2019-10-17 18:06:38 +01:00
parent edb7b4dc17
commit 4f2cd97ae6
3 changed files with 87 additions and 4 deletions

1
.gitignore vendored
View File

@ -5,6 +5,7 @@ _old
rice-box.go rice-box.go
.idea/ .idea/
filebrowser filebrowser
.docker/sysroot/*
.DS_Store .DS_Store
node_modules node_modules

View File

@ -1,13 +1,70 @@
FROM alpine:latest as certs # Build the frontend
FROM node:latest AS frontend-builder
# Set the Current Working Directory inside the container
WORKDIR /app
# Copy the source from the current directory to the Working Directory inside the container
COPY . .
# Remove old build files (if present)
RUN rm -rf frontend/dist && \
rm -f http/rice-box.go
# Set the Current Working Directory inside the container
WORKDIR /app/frontend
# Install dependencies
RUN npm install
# Build the frontend
RUN npm run build
# Build the binary
FROM golang:alpine as binary-builder
# Set the Current Working Directory inside the container
WORKDIR /app
# Install requirements
RUN apk add --no-cache gcc musl-dev
# Copy go mod and sum files
COPY go.mod go.sum ./
# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed
RUN go mod download
# Copy the source from the current directory to the Working Directory inside the container
COPY --from=frontend-builder /app .
# Install dependencies
RUN go install github.com/GeertJohan/go.rice/rice
RUN cd /app/http && \
rm -rf rice-box.go && \
rice embed-go && \
cd /app
# Build the Go app
RUN go build -a -o filebrowser -ldflags "-s -w"
# Add CA certificates
FROM alpine:latest AS certifier
# Install CA certificates
RUN apk --update add ca-certificates RUN apk --update add ca-certificates
FROM scratch
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt # Serve app
FROM alpine
COPY --from=certifier /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=binary-builder /app/filebrowser /filebrowser
VOLUME /srv VOLUME /srv
EXPOSE 80 EXPOSE 80
COPY .docker.json /.filebrowser.json COPY .docker.json /.filebrowser.json
COPY filebrowser /filebrowser
ENTRYPOINT [ "/filebrowser" ] ENTRYPOINT [ "/filebrowser" ]

25
docker-compose.yml Normal file
View File

@ -0,0 +1,25 @@
version: "3.7"
services:
filebrowser:
build:
context: .
dockerfile: Dockerfile
ports:
- "5001:80"
networks:
- filebrowser-nw
volumes:
- "./.docker/database/database.db:/database.db"
- "./.docker/sysroot:/srv"
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
networks:
filebrowser-nw: