diff --git a/.dockerignore b/.dockerignore index fa83e261b..ee49320d6 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,7 @@ CHANGELOG.md README.md +node_modules .github/ mac/ win-wpf/ diff --git a/Makefile b/Makefile index 294f9e105..891efb2bf 100644 --- a/Makefile +++ b/Makefile @@ -65,6 +65,11 @@ server-linux: setup-go-work ## Build server for Linux. $(eval LDFLAGS += -X "github.com/mattermost/focalboard/server/model.Edition=linux") cd server; env GOOS=linux GOARCH=amd64 go build -ldflags '$(LDFLAGS)' -tags '$(BUILD_TAGS)' -o ../bin/linux/focalboard-server ./main +server-docker: setup-go-work ## Build server for Docker Architectures. + mkdir -p bin/docker + $(eval LDFLAGS += -X "github.com/mattermost/focalboard/server/model.Edition=linux") + cd server; env GOOS=$(os) GOARCH=$(arch) go build -ldflags '$(LDFLAGS)' -tags '$(BUILD_TAGS)' -o ../bin/docker/focalboard-server ./main + server-win: setup-go-work ## Build server for Windows. $(eval LDFLAGS += -X "github.com/mattermost/focalboard/server/model.Edition=win") cd server; env GOOS=windows GOARCH=amd64 go build -ldflags '$(LDFLAGS)' -tags '$(BUILD_TAGS)' -o ../bin/win/focalboard-server.exe ./main diff --git a/docker/Dockerfile b/docker/Dockerfile index 1a92cac80..e6f529be6 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,9 @@ FROM node:16.3.0@sha256:ca6daf1543242acb0ca59ff425509eab7defb9452f6ae07c156893db WORKDIR /webapp ADD webapp/ /webapp -RUN npm install --no-optional && \ +### 'CPPFLAGS="-DPNG_ARM_NEON_OPT=0"' Needed To Avoid Bug Described in: https://github.com/imagemin/optipng-bin/issues/118#issuecomment-1019838562 +### Can be Removed when Ticket will be Closed +RUN CPPFLAGS="-DPNG_ARM_NEON_OPT=0" npm install --no-optional && \ npm run pack ### Go build @@ -13,7 +15,11 @@ FROM golang:1.18.3@sha256:b203dc573d81da7b3176264bfa447bd7c10c9347689be405403818 WORKDIR /go/src/focalboard ADD . /go/src/focalboard -RUN EXCLUDE_PLUGIN=true EXCLUDE_SERVER=true EXCLUDE_ENTERPRISE=true make server-linux +# Get target architecture +ARG TARGETOS +ARG TARGETARCH + +RUN EXCLUDE_PLUGIN=true EXCLUDE_SERVER=true EXCLUDE_ENTERPRISE=true make server-docker os=${TARGETOS} arch=${TARGETARCH} ## Final image FROM debian:buster-slim@sha256:5b0b1a9a54651bbe9d4d3ee96bbda2b2a1da3d2fa198ddebbced46dfdca7f216 @@ -24,7 +30,7 @@ RUN chown -R nobody:nogroup /opt/focalboard WORKDIR /opt/focalboard COPY --from=nodebuild --chown=nobody:nogroup /webapp/pack pack/ -COPY --from=gobuild --chown=nobody:nogroup /go/src/focalboard/bin/linux/focalboard-server bin/ +COPY --from=gobuild --chown=nobody:nogroup /go/src/focalboard/bin/docker/focalboard-server bin/ COPY --from=gobuild --chown=nobody:nogroup /go/src/focalboard/LICENSE.txt LICENSE.txt COPY --from=gobuild --chown=nobody:nogroup /go/src/focalboard/docker/server_config.json config.json diff --git a/docker/README.md b/docker/README.md index 5f1e52873..d8c8fe2af 100644 --- a/docker/README.md +++ b/docker/README.md @@ -2,7 +2,7 @@ ## Docker -The Dockerfile gives a quick and easy way to pull the latest Focalboard server and deploy it locally. In the example below, +The Dockerfile gives a quick and easy way to build the latest Focalboard server and deploy it locally. In the example below, the Focalboard database and files will be persisted in a named volumed called `fbdata`. From the Focalboard project root directory: @@ -14,6 +14,15 @@ docker run -it -v "fbdata:/opt/focalboard/data" -p 80:8000 focalboard Open a browser to [localhost](http://localhost) to start +## Alternative architectures + +From the Focalboard project root directory: + +```bash +docker build -f docker/Dockerfile --platform linux/arm64 -t focalboard . +docker run -it -v "fbdata:/opt/focalboard/data" -p 80:8000 focalboard +``` + ## Docker-Compose Docker-Compose provides the option to automate the build and run step, or even include some of the steps from the [personal server setup](https://www.focalboard.com/download/personal-edition/ubuntu/).