commit
55648e8155
|
@ -0,0 +1,9 @@
|
||||||
|
CREDENTIALS=/data/secure/aws-credentials.env
|
||||||
|
CONF=seldon
|
||||||
|
NAME=caddy
|
||||||
|
# just base alpine image unless used here
|
||||||
|
BASE_IMAGE=ucommandit/alpine
|
||||||
|
BUILD_SRC=./src
|
||||||
|
NAME=caddy
|
||||||
|
# version is latest unless used here
|
||||||
|
# TAG=2.1.5
|
|
@ -0,0 +1,4 @@
|
||||||
|
archive/
|
||||||
|
config/
|
||||||
|
data/
|
||||||
|
logs/
|
|
@ -0,0 +1,8 @@
|
||||||
|
build=${UDBUILD:-$(command -v udbuild)}
|
||||||
|
if [[ $build ]];then
|
||||||
|
echo copying conf directory into image source before build
|
||||||
|
/bin/cp -R -p conf/. src/init/opt/caddy/conf
|
||||||
|
$build -a "$@"
|
||||||
|
else
|
||||||
|
echo can not find UCI Docker Build script, run ./install from the uci-docker-build repo
|
||||||
|
fi
|
|
@ -0,0 +1,13 @@
|
||||||
|
*.mydomain.net {
|
||||||
|
|
||||||
|
tls email@gmail.com {
|
||||||
|
dns route53 {
|
||||||
|
max_retries 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@portainerr host docker.mydomain.net
|
||||||
|
handle @portainer {
|
||||||
|
reverse_proxy 10.0.0.5:9000
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
github.com/caddy-dns/route53
|
||||||
|
# comment lines are ignored thus a way to disable a package on build
|
||||||
|
# github.com/greenpau/caddy-security
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/bash
|
||||||
|
build=${UDBUILD:-$(command -v udbuild)}
|
||||||
|
if [[ $build ]];then
|
||||||
|
DIR=$(dirname "$(realpath "$BASH_SOURCE")")
|
||||||
|
$build -t dev -e $DIR/build.env "$@"
|
||||||
|
else
|
||||||
|
echo can not find UCI Docker Build script, run ./install from the uci-docker-build repo
|
||||||
|
fi
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
BASE_IMAGE=ucommandit/alpine
|
||||||
|
BUILD_SRC=../src
|
||||||
|
RUSER=ucommandit
|
||||||
|
NAME=caddy
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
DIR=$(dirname "$(realpath "$BASH_SOURCE")")
|
||||||
|
$DIR/build -t deploy
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
udbuild try -e aws-credentials.env -m opt/caddy -h mnt/caddy -k ucommandit/caddy "$@"
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Example usage
|
||||||
|
|
||||||
|
services:
|
||||||
|
caddy:
|
||||||
|
container_name: ${NAME:-caddy}
|
||||||
|
image: ${IMAGE:-caddy}
|
||||||
|
# if no $CONF is given then Caddyfile in ${PWD}/conf:/opt/caddy/conf will be used
|
||||||
|
command: /opt/caddy/caddy run $CONF
|
||||||
|
env_file:
|
||||||
|
- $CREDENTIALS
|
||||||
|
volumes:
|
||||||
|
- data:/opt/caddy/data
|
||||||
|
- config:/opt/caddy/config
|
||||||
|
- conf:/opt/caddy/conf
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
- 443:443
|
||||||
|
- 2019:2019
|
||||||
|
volumes:
|
||||||
|
data:
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: ${PWD}/data
|
||||||
|
o: bind
|
||||||
|
config:
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: ${PWD}/config
|
||||||
|
o: bind
|
||||||
|
conf:
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: ${PWD}/conf
|
||||||
|
o: bind
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
clone repo
|
||||||
|
in conf folder edit Caddyfile (or create your own conf) and edit caddy.pkgs
|
||||||
|
|
||||||
|
edit .env accordingly
|
||||||
|
You can use an image from a repository or build your own locally
|
||||||
|
echo now execute the .run-log script to make sure caddy runs ok.
|
||||||
|
then execute the the start script for detached container
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# set -eu
|
||||||
|
echo -e "*************************"
|
||||||
|
/bin/cp -R -p opt/. /opt
|
||||||
|
chown -R 1000:1000 /opt
|
||||||
|
# ls -la /opt
|
||||||
|
# ls -la /opt/caddy
|
||||||
|
echo -e "*************************"
|
||||||
|
source /opt/caddy/caddy.env
|
||||||
|
# || { echo no file /opt/caddy/caddy.env; exit 1; }
|
||||||
|
source $CADDY_LIB
|
||||||
|
caddy_install_bin
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
caddy () {
|
||||||
|
|
||||||
|
if [[ ! $CADDY_HOME ]]; then
|
||||||
|
if [[ -f /opt/caddy/caddy.env ]]; then
|
||||||
|
source /opt/caddy/caddy.env
|
||||||
|
else
|
||||||
|
echo default environment can not be sourced at /opt/caddy/caddy.env
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ ! $CADDY_BIN ]] && CADDY_BIN is not set unable to find caddy binary
|
||||||
|
[ ! -f "$CADDY_BIN" ] && echo caddy binary file at $CADDY_BIN does not exist && return 1
|
||||||
|
[ ! -x "$CADDY_BIN" ] && echo caddy binary file $CADDY_BIN is not executable && return 1
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
shell)
|
||||||
|
/bin/bash -c "cd $CADDY_HOME; exec bash -l"
|
||||||
|
;;
|
||||||
|
run)
|
||||||
|
shift 1
|
||||||
|
local conf
|
||||||
|
cd $CADDY_CONF || { echo could not enter conf directory in container; return 2; }
|
||||||
|
if [[ $1 ]];then
|
||||||
|
[[ -f $1 ]] && conf=$1 || conf=$1.conf
|
||||||
|
else
|
||||||
|
conf=Caddyfile
|
||||||
|
fi
|
||||||
|
if [[ -f $conf ]]; then
|
||||||
|
echo running: $CADDY_BIN run --config $conf --adapter caddyfile
|
||||||
|
$CADDY_BIN run --config $conf --adapter caddyfile
|
||||||
|
else
|
||||||
|
echo no configuration file found at $conf in the container
|
||||||
|
echo make sure you have mounted one from the host into /opt/caddy/conf
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
$CADDY_BIN/caddy "$@"
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# # if script was executed then call the function
|
||||||
|
(return 0 2>/dev/null) || caddy "$@"
|
|
@ -0,0 +1,6 @@
|
||||||
|
export CADDY_HOME="$(realpath $(dirname ${BASH_SOURCE[0]}))"
|
||||||
|
export XDG_CONFIG_HOME=$CADDY_HOME/config
|
||||||
|
export XDG_DATA_HOME=$CADDY_HOME/data
|
||||||
|
export CADDY_CONF=$CADDY_HOME/conf
|
||||||
|
export CADDY_BIN=$CADDY_HOME/bin/caddy
|
||||||
|
export CADDY_LIB=$CADDY_HOME/caddy.lib
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
caddy_add_packages () {
|
||||||
|
local bin; local repos; local pkgs; local pkg
|
||||||
|
[[ ! -f $1 ]] && echo "cannot find file $1 of packages, nothing to add" && return 0
|
||||||
|
bin=${2:-$CADDY_BIN}
|
||||||
|
bin=${bin:-$(command -v caddy)}
|
||||||
|
[[ ! $bin ]] && echo no caddy binary found && return 1
|
||||||
|
pkgs=$(sed '/^[[:space:]]*#[^!]/d; /#$/d' $1)
|
||||||
|
echo caddy pkgs to be added:
|
||||||
|
echo $pkgs
|
||||||
|
if ! $bin add-package $pkgs >/dev/null 2>&1; then
|
||||||
|
echo Error: Aborting further package installs and reverting to last good binary
|
||||||
|
return 2
|
||||||
|
else
|
||||||
|
echo packages added successfully
|
||||||
|
$bin list-modules | grep -E -A15 "Standard modules:"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
caddy_checksum () {
|
||||||
|
echo "verifying checksum of $2"
|
||||||
|
source /opt/scripts/github.lib
|
||||||
|
local download=$(github_asset caddyserver caddy $1 caddy_$(echo ${1})_checksums.txt)
|
||||||
|
echo checksum file to download: $download
|
||||||
|
wget -q -O /tmp/caddy_checksum $download
|
||||||
|
# cat /tmp/caddy_checksum
|
||||||
|
local sha=$(grep $2 /tmp/caddy_checksum | cut -d " " -f1)
|
||||||
|
# echo $sha
|
||||||
|
# sha512sum $3
|
||||||
|
# must have TWO spaces in echo command!
|
||||||
|
echo "$sha $3" | sha512sum -c >/dev/null 2>&1;
|
||||||
|
ret=$?
|
||||||
|
rm -r /tmp/caddy_checksum
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
caddy_install_bin () {
|
||||||
|
|
||||||
|
source /opt/scripts/github.lib
|
||||||
|
arch=$(/opt/scripts/getarch.sh)
|
||||||
|
ver=${CADDY_VER:-$(github_latest caddyserver caddy | sed 's/^v//')}
|
||||||
|
caddytar="caddy_${ver}_linux_${arch}.tar.gz"
|
||||||
|
download=$(github_asset caddyserver caddy $ver $caddytar)
|
||||||
|
# echo "github_asset caddyserver caddy $ver $caddytar"
|
||||||
|
echo caddy version: $ver
|
||||||
|
echo caddy tarball: $caddytar
|
||||||
|
echo getting tarball from: $download
|
||||||
|
wget -q -O /tmp/caddy.tar.gz $download
|
||||||
|
if caddy_checksum $ver $caddytar /tmp/caddy.tar.gz; then
|
||||||
|
echo download tarball verified
|
||||||
|
tar x -z -f /tmp/caddy.tar.gz -C $CADDY_HOME/bin caddy
|
||||||
|
rm -f /tmp/caddy.tar.gz
|
||||||
|
chmod +x $CADDY_BIN
|
||||||
|
setcap cap_net_bind_service=+ep $CADDY_BIN
|
||||||
|
chmod +x $CADDY_BIN
|
||||||
|
$CADDY_BIN version
|
||||||
|
if ! caddy_add_packages $CADDY_CONF/caddy.pkgs; then
|
||||||
|
return 4
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
*.mydomain.net {
|
||||||
|
|
||||||
|
tls email@gmail.com {
|
||||||
|
dns route53 {
|
||||||
|
max_retries 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@portainerr host docker.mydomain.net
|
||||||
|
handle @portainer {
|
||||||
|
reverse_proxy 10.0.0.5:9000
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
github.com/caddy-dns/route53
|
||||||
|
# comment lines are ignored thus a way to disable a package on build
|
||||||
|
# github.com/greenpau/caddy-security
|
|
@ -0,0 +1,13 @@
|
||||||
|
*.seldon.kebler.net {
|
||||||
|
|
||||||
|
tls kebler.net@gmail.com {
|
||||||
|
dns route53 {
|
||||||
|
max_retries 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@docker host docker.seldon.kebler.net
|
||||||
|
handle @docker {
|
||||||
|
reverse_proxy seldon.kebler.net:9016
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
export SCRIPTS_DIR="$(dirname $(realpath "${BASH_SOURCE:-$0}"))"
|
||||||
|
# echo arguments in entry $@
|
||||||
|
# execute the start script in a login shell so that the uci shell will be sourced
|
||||||
|
# see https://stackoverflow.com/a/1711985/4695378 passing $@
|
||||||
|
/bin/bash -l -c '${SCRIPTS_DIR}/start.sh $@' $0 "$@"
|
|
@ -0,0 +1,17 @@
|
||||||
|
get_arch () {
|
||||||
|
local apkArch="$(apk --print-arch)"
|
||||||
|
case "$apkArch" in
|
||||||
|
x86_64) binArch='amd64' ;;
|
||||||
|
armhf) binArch='armv6' ;;
|
||||||
|
armv7) binArch='armv7' ;;
|
||||||
|
aarch64) binArch='arm64' ;;
|
||||||
|
ppc64el|ppc64le) binArch='ppc64le' ;;
|
||||||
|
s390x) binArch='s390x';;
|
||||||
|
*) return 1 ;;\
|
||||||
|
esac;
|
||||||
|
echo $binArch
|
||||||
|
}
|
||||||
|
|
||||||
|
(return 0 2>/dev/null) || get_arch $@
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export GITHUB_REPOS=https://api.github.com/repos
|
||||||
|
|
||||||
|
github_latest() {
|
||||||
|
local endpoint=$GITHUB_REPOS/$1/$2/releases/latest
|
||||||
|
local auth; local res
|
||||||
|
[[ $GITHUB_TOKEN ]] && auth="-u $GITHUB_USER:$GITHUB_TOKEN"
|
||||||
|
if ! res=$(curl $auth -s $endpoint); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo $res| jq .name -r
|
||||||
|
}
|
||||||
|
|
||||||
|
github_asset () {
|
||||||
|
# user repo version asset
|
||||||
|
|
||||||
|
asset_url=$(curl -s "$GITHUB_REPOS/$1/$2/releases/tags/v$3" \
|
||||||
|
| jq --arg aname "$4" -r '.assets[] | select(.name == $aname).browser_download_url' \
|
||||||
|
| head -1)
|
||||||
|
|
||||||
|
if [ -z "${asset_url}" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $asset_url
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# echo arguments in start script: "$@"
|
||||||
|
source /opt/caddy/caddy.env
|
||||||
|
case "$1" in
|
||||||
|
shell)
|
||||||
|
/bin/bash -c "cd $CADDY_HOME; exec bash -l"
|
||||||
|
;;
|
||||||
|
run)
|
||||||
|
shift 1
|
||||||
|
$CADDY_BIN run --config $CADDY_CONF/$1 --adapter caddyfile
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
$CADDY_BIN/caddy "$@"
|
||||||
|
|
||||||
|
esac
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
echo install packages for alpine caddy
|
||||||
|
apk update; apk upgrade;
|
||||||
|
apk add --no-cache ca-certificates libcap mailcap git jq bash curl
|
||||||
|
# wget -O /etc/caddy/Caddyfile "https://github.com/caddyserver/dist/raw/{{ .config.dist_commit }}/config/Caddyfile"; \
|
||||||
|
# wget -O /usr/share/caddy/index.html "https://github.com/caddyserver/dist/raw/{{ .config.dist_commit }}/welcome/index.html"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue