Add caddy proxy

This commit is contained in:
Arnie
2018-04-18 07:01:49 +02:00
parent ef03f3e0f7
commit f59387dbae
8 changed files with 209 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
FROM alpine:3.6
LABEL maintainer="Nikita Sobolev <sobolevn@wemake.services>"
ARG CADDY_VERSION="0.10.10"
ARG FOREGO_VERSION="0.16.1"
ARG DOCKER_GEN_VERSION="0.7.3"
ENV CADDYPATH="/etc/caddy"
ENV DOCKER_HOST unix:///tmp/docker.sock
# Install wget and install/updates certificates
RUN apk update && apk upgrade \
&& apk add --no-cache bash openssh-client git \
&& apk add --no-cache --virtual .build-dependencies curl wget tar
# Install Forego
RUN wget --quiet "https://github.com/jwilder/forego/releases/download/v${FOREGO_VERSION}/forego" \
&& mv ./forego /usr/bin/forego \
&& chmod u+x /usr/bin/forego
# Install docker-gen
RUN wget --quiet "https://github.com/jwilder/docker-gen/releases/download/$DOCKER_GEN_VERSION/docker-gen-alpine-linux-amd64-$DOCKER_GEN_VERSION.tar.gz" \
&& tar -C /usr/bin -xvzf "docker-gen-alpine-linux-amd64-$DOCKER_GEN_VERSION.tar.gz" \
&& rm "/docker-gen-alpine-linux-amd64-$DOCKER_GEN_VERSION.tar.gz"
# Install Caddy
RUN curl --silent --show-error --fail --location \
--header "Accept: application/tar+gzip, application/x-gzip, application/octet-stream" -o - \
"https://github.com/mholt/caddy/releases/download/v${CADDY_VERSION}/caddy_v${CADDY_VERSION}_linux_amd64.tar.gz" \
| tar --no-same-owner -C /usr/bin -xz \
&& chmod 0755 /usr/bin/caddy \
&& /usr/bin/caddy -version \
&& apk del .build-dependencies
EXPOSE 80 443 2015
VOLUME /etc/caddy
# Starting app:
ADD . /code
WORKDIR /code
ENTRYPOINT ["sh", "/code/docker-entrypoint.sh"]
CMD ["/usr/bin/forego", "start", "-r"]
+2
View File
@@ -0,0 +1,2 @@
dockergen: docker-gen -watch -notify "pkill -USR1 caddy" -config /code/docker-gen/config/docker-gen.cfg
caddy: caddy --conf /etc/caddy/Caddyfile --log stdout
+10
View File
@@ -0,0 +1,10 @@
#!/bin/sh
set -o errexit
set -o nounset
# Create initial configuration:
docker-gen /code/docker-gen/templates/Caddyfile.tmpl /etc/caddy/Caddyfile
# Execute passed command:
exec "$@"
@@ -0,0 +1,6 @@
[[config]]
template = "/code/docker-gen/templates/Caddyfile.tmpl"
dest = "/etc/caddy/Caddyfile"
onlyexposed = false
watch = true
wait = "500ms:2s"
@@ -0,0 +1,47 @@
{{ $CurrentContainer := where $ "ID" .Docker.CurrentContainerID | first }}
{{ $hosts := groupByMulti $ "Env.VIRTUAL_HOST" "," }}
{{ if not $hosts }}
127.0.0.1:2015
log stdout
errors stderr
{{ else }}
{{ range $host, $containers := $hosts }}
{{ $c := first $containers }}
{{ $tlsOff := trim (index $c.Env "VIRTUAL_DISABLE_TLS") }}
{{ $port := coalesce $c.Env.VIRTUAL_PORT "80" }}
http://{{ $host }}, https://{{ $host }} {
tls self_signed
proxy / {
policy round_robin
transparent
header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Proto {scheme}
{{ range $i, $container := $containers }}
{{ $addrLen := len $container.Addresses }}
{{ range $knownNetwork := $CurrentContainer.Networks }}
{{ range $containerNetwork := $container.Networks }}
{{ if (and (and (ne $containerNetwork.Name "ingress") (ne $containerNetwork.Name "bridge")) (or (eq $knownNetwork.Name $containerNetwork.Name) (eq $knownNetwork.Name "host"))) }}
## Can be connected with "{{ $containerNetwork.Name }}" network
upstream {{ $containerNetwork.IP }}:{{ $port }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
}
gzip
log stdout
errors stderr
}
{{ end }}
{{ end }}