From f031809f13de4d8b8888bb4f45858485b92e7199 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Fri, 25 Oct 2019 23:19:30 +0200 Subject: [PATCH] Refactor and automate caddy image build and update process --- caddy_docker_custom_user/Dockerfile | 2 +- caddy_docker_custom_user/builder/Dockerfile | 7 + caddy_docker_custom_user/builder/builder.sh | 168 ++++++++++++++++++ caddy_docker_custom_user/create.sh | 7 +- ...eate_docker_container.sh => run_idelya.sh} | 0 caddy_docker_custom_user/update.sh | 30 ++++ 6 files changed, 212 insertions(+), 2 deletions(-) create mode 100644 caddy_docker_custom_user/builder/Dockerfile create mode 100644 caddy_docker_custom_user/builder/builder.sh rename caddy_docker_custom_user/{create_docker_container.sh => run_idelya.sh} (100%) create mode 100755 caddy_docker_custom_user/update.sh diff --git a/caddy_docker_custom_user/Dockerfile b/caddy_docker_custom_user/Dockerfile index 72213d6..f25b83d 100644 --- a/caddy_docker_custom_user/Dockerfile +++ b/caddy_docker_custom_user/Dockerfile @@ -1,7 +1,7 @@ # # Builder # -FROM abiosoft/caddy:builder as builder +FROM caddy-builder as builder ARG version="1.0.3" ARG plugins="git,cors,realip,expires,cache,cloudflare,ovh" diff --git a/caddy_docker_custom_user/builder/Dockerfile b/caddy_docker_custom_user/builder/Dockerfile new file mode 100644 index 0000000..7b39e9d --- /dev/null +++ b/caddy_docker_custom_user/builder/Dockerfile @@ -0,0 +1,7 @@ +FROM golang:1.13-alpine + +RUN apk add --no-cache git gcc musl-dev + +COPY builder.sh /usr/bin/builder.sh + +CMD ["/bin/sh", "/usr/bin/builder.sh"] diff --git a/caddy_docker_custom_user/builder/builder.sh b/caddy_docker_custom_user/builder/builder.sh new file mode 100644 index 0000000..3ab339f --- /dev/null +++ b/caddy_docker_custom_user/builder/builder.sh @@ -0,0 +1,168 @@ +#!/bin/sh + +VERSION=${VERSION:-"1.0.3"} +TELEMETRY=${ENABLE_TELEMETRY:-"true"} +IMPORT="github.com/caddyserver/caddy" + +# version <1.0.1 needs to use old import path +new_import=true +if [ "$(echo $VERSION | cut -c1)" -eq 0 ] 2>/dev/null || [ "$VERSION" = "1.0.0" ]; then + IMPORT="github.com/mholt/caddy" && new_import=false +fi + +# add `v` prefix for version numbers +[ "$(echo $VERSION | cut -c1)" -ge 0 ] 2>/dev/null && VERSION="v$VERSION" + +stage() { + STAGE="$1" + echo + echo starting stage: $STAGE +} + +end_stage() { + if [ $? -ne 0 ]; then + >&2 echo error at \'$STAGE\' + exit 1 + fi + echo finished stage: $STAGE ✓ + echo +} + +use_new_import() ( + cd $1 + find . -name '*.go' | while read -r f; do + sed -i.bak 's/\/mholt\/caddy/\/caddyserver\/caddy/g' $f && rm $f.bak + done +) + +get_package() { + # go module require special dns handling + if $go_mod && [ -f /dnsproviders/$1/$1.go ]; then + mkdir -p /caddy/dnsproviders/$1 + cp -r /dnsproviders/$1/$1.go /caddy/dnsproviders/$1/$1.go + echo "caddy/dnsproviders/$1" + else + GO111MODULE=off GOOS=linux GOARCH=amd64 caddyplug package $1 2> /dev/null + fi +} + +dns_plugins() { + git clone https://github.com/caddyserver/dnsproviders /dnsproviders + # temp hack for repo rename + if $new_import; then use_new_import /dnsproviders; fi +} + +plugins() { + mkdir -p /plugins + for plugin in $(echo $PLUGINS | tr "," " "); do \ + import_package=$(get_package $plugin) + $go_mod || go get -v "$import_package" ; # not needed for modules + $go_mod && package="main" || package="caddyhttp" + printf "package $package\nimport _ \"$import_package\"" > \ + /plugins/$plugin.go ; \ + done +} + +module() { + mkdir -p /caddy + cd /caddy # build dir + + # setup module + go mod init caddy + go get -v $IMPORT@$VERSION + + # plugins + cp -r /plugins/. . + + # temp hack for repo rename + go get -v -d # download possible plugin deps + if $new_import; then use_new_import /go/pkg/mod; fi + + # main and telemetry + cat > main.go < "$run_file.disablestats.go" < " + exit +fi + +./create.sh $1 $2 + +if [ $? -ne 0 ]; then + echo "Couldn't build caddy-custom image" + exit +fi + +HOST=$(hostname) +RUN_SCRIPT="run_$HOST.sh" + +if [ ! -f $RUN_SCRIPT ]; then + echo "$RUN_SCRIPT doesn't exist" + exit +fi + +docker container stop caddy && docker container rm caddy + +if [ $? -ne 0 ]; then + echo "Couldn't stop and rm caddy container" + exit +fi + +./$RUN_SCRIPT caddy-custom