Docker: add Debian based image

This commit is contained in:
Nicola Murino 2020-10-08 21:43:13 +02:00
parent 5048d54d32
commit d126c5736a
No known key found for this signature in database
GPG key ID: 2F1FB59433D5A8CB
3 changed files with 105 additions and 17 deletions

View file

@ -2,7 +2,7 @@ name: Docker
on:
schedule:
- cron: '0 4 * * *' # everyday at 4 am UTC
- cron: '0 4 * * *' # everyday at 4:00 AM UTC
push:
branches:
- master
@ -13,7 +13,12 @@ on:
jobs:
build:
name: Build
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
docker_pkg: [debian, alpine]
steps:
- name: Checkout
uses: actions/checkout@v2
@ -31,6 +36,7 @@ jobs:
run: |
DOCKER_IMAGE=ghcr.io/drakkan/sftpgo
VERSION=noop
DOCKERFILE=Dockerfile
if [ "${{ github.event_name }}" = "schedule" ]; then
VERSION=nightly
elif [[ $GITHUB_REF == refs/tags/* ]]; then
@ -43,14 +49,25 @@ jobs:
elif [[ $GITHUB_REF == refs/pull/* ]]; then
VERSION=pr-${{ github.event.number }}
fi
if [[ $DOCKER_PKG == alpine ]]; then
VERSION="$VERSION-alpine"
DOCKERFILE=Dockerfile.alpine
fi
TAGS="${DOCKER_IMAGE}:${VERSION}"
if [[ $GITHUB_REF == refs/tags/* ]]; then
if [[ $DOCKER_PKG == debian ]]; then
TAGS="$TAGS,${DOCKER_IMAGE}:latest"
else
TAGS="$TAGS,${DOCKER_IMAGE}:alpine"
fi
fi
echo ::set-output name=dockerfile::${DOCKERFILE}
echo ::set-output name=version::${VERSION}
echo ::set-output name=tags::${TAGS}
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
echo ::set-output name=sha::${GITHUB_SHA::8}
env:
DOCKER_PKG: ${{ matrix.docker_pkg }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
@ -69,11 +86,12 @@ jobs:
- name: Build and push
uses: docker/build-push-action@v2
with:
file: ./${{ steps.info.outputs.dockerfile }}
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.info.outputs.tags }}
build-args: |
COMMIT_SHA=${{ steps.info.outputs.sha }}
platforms: linux/amd64,linux/arm64
labels: |
org.opencontainers.image.title=${{ fromJson(steps.repo.outputs.result).name }}
org.opencontainers.image.description=Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support

View file

@ -1,9 +1,7 @@
FROM golang:1.15-alpine AS builder
FROM golang:1.15 as builder
ENV GOFLAGS="-mod=readonly"
RUN apk add --update --no-cache bash ca-certificates curl git gcc g++
RUN mkdir -p /workspace
WORKDIR /workspace
@ -25,24 +23,21 @@ RUN set -xe && \
export COMMIT_SHA=${COMMIT_SHA:-$(git describe --always --dirty)} && \
go build $(if [ -n "${FEATURES}" ]; then echo "-tags ${FEATURES}"; fi) -ldflags "-s -w -X github.com/drakkan/sftpgo/version.commit=${COMMIT_SHA} -X github.com/drakkan/sftpgo/version.date=`date -u +%FT%TZ`" -v -o sftpgo
FROM debian:buster-slim
FROM alpine:3.12
RUN apk add --update --no-cache ca-certificates tzdata bash mailcap
RUN apt-get update && apt-get install --no-install-recommends -y ca-certificates mime-support && apt-get clean
SHELL ["/bin/bash", "-c"]
# set up nsswitch.conf for Go's "netgo" implementation
# https://github.com/gliderlabs/docker-alpine/issues/367#issuecomment-424546457
RUN test ! -e /etc/nsswitch.conf && echo 'hosts: files dns' > /etc/nsswitch.conf
RUN mkdir -p /etc/sftpgo /var/lib/sftpgo /usr/share/sftpgo
RUN addgroup -g 1000 -S sftpgo
RUN adduser -u 1000 -h /var/lib/sftpgo -s /sbin/nologin -G sftpgo -S -D -H sftpgo
RUN groupadd --system -g 1000 sftpgo
RUN useradd --system --gid sftpgo --no-create-home \
--home-dir /var/lib/sftpgo --shell /usr/sbin/nologin \
--comment "SFTPGo user" --uid 1000 sftpgo
# Install some optional packages used by SFTPGo features
RUN apk add --update --no-cache rsync git
RUN apt-get update && apt-get install --no-install-recommends -y git rsync && apt-get clean
# Override some configuration details
ENV SFTPGO_CONFIG_DIR=/etc/sftpgo

75
Dockerfile.alpine Normal file
View file

@ -0,0 +1,75 @@
FROM golang:1.15-alpine AS builder
ENV GOFLAGS="-mod=readonly"
RUN apk add --update --no-cache bash ca-certificates curl git gcc g++
RUN mkdir -p /workspace
WORKDIR /workspace
ARG GOPROXY
COPY go.mod go.sum ./
RUN go mod download
ARG COMMIT_SHA
# This ARG allows to disable some optional features and it might be useful if you build the image yourself.
# For example you can disable S3 and GCS support like this:
# --build-arg FEATURES=nos3,nogcs
ARG FEATURES
COPY . .
RUN set -xe && \
export COMMIT_SHA=${COMMIT_SHA:-$(git describe --always --dirty)} && \
go build $(if [ -n "${FEATURES}" ]; then echo "-tags ${FEATURES}"; fi) -ldflags "-s -w -X github.com/drakkan/sftpgo/version.commit=${COMMIT_SHA} -X github.com/drakkan/sftpgo/version.date=`date -u +%FT%TZ`" -v -o sftpgo
FROM alpine:3.12
RUN apk add --update --no-cache ca-certificates tzdata bash mailcap
SHELL ["/bin/bash", "-c"]
# set up nsswitch.conf for Go's "netgo" implementation
# https://github.com/gliderlabs/docker-alpine/issues/367#issuecomment-424546457
RUN test ! -e /etc/nsswitch.conf && echo 'hosts: files dns' > /etc/nsswitch.conf
RUN mkdir -p /etc/sftpgo /var/lib/sftpgo /usr/share/sftpgo
RUN addgroup -g 1000 -S sftpgo
RUN adduser -u 1000 -h /var/lib/sftpgo -s /sbin/nologin -G sftpgo -S -D -H sftpgo
# Install some optional packages used by SFTPGo features
RUN apk add --update --no-cache rsync git
# Override some configuration details
ENV SFTPGO_CONFIG_DIR=/etc/sftpgo
ENV SFTPGO_LOG_FILE_PATH=""
ENV SFTPGO_HTTPD__TEMPLATES_PATH=/usr/share/sftpgo/templates
ENV SFTPGO_HTTPD__STATIC_FILES_PATH=/usr/share/sftpgo/static
# Sane defaults, but users should still be able to override this from env vars
ENV SFTPGO_DATA_PROVIDER__USERS_BASE_DIR=/var/lib/sftpgo/users
ENV SFTPGO_DATA_PROVIDER__CREDENTIALS_PATH=/var/lib/sftpgo/credentials
ENV SFTPGO_HTTPD__BACKUPS_PATH=/var/lib/sftpgo/backups
ENV SFTPGO_SFTPD__HOST_KEYS=/var/lib/sftpgo/host_keys/id_rsa,/var/lib/sftpgo/host_keys/id_ecdsa
ENV SFTPGO_HTTPD__BIND_ADDRESS=""
COPY --from=builder /workspace/sftpgo.json /etc/sftpgo/sftpgo.json
COPY --from=builder /workspace/templates /usr/share/sftpgo/templates
COPY --from=builder /workspace/static /usr/share/sftpgo/static
COPY --from=builder /workspace/sftpgo /usr/local/bin/
RUN sed -i "s|sftpgo.db|/var/lib/sftpgo/sftpgo.db|" /etc/sftpgo/sftpgo.json
RUN chown -R sftpgo:sftpgo /etc/sftpgo && chown sftpgo:sftpgo /var/lib/sftpgo && \
chmod 640 /etc/sftpgo/sftpgo.json && \
chmod 750 /etc/sftpgo /var/lib/sftpgo
USER sftpgo
VOLUME /var/lib/sftpgo
CMD sftpgo serve