2020-02-06 20:42:46 -05:00
ARG ALPINE_VERSION = 3 .11
2020-03-18 01:04:44 +00:00
ARG GO_VERSION = 1 .14
2020-02-06 20:42:46 -05:00
FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION } AS builder
RUN apk --update add git
ENV CGO_ENABLED = 0
2020-05-17 17:49:40 -04:00
ARG GOLANGCI_LINT_VERSION = v1.27.0
2020-04-12 20:05:28 +00:00
RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s ${ GOLANGCI_LINT_VERSION }
WORKDIR /tmp/gobuild
COPY .golangci.yml .
2020-02-06 20:42:46 -05:00
COPY go.mod go.sum ./
RUN go mod download 2>& 1
2020-05-28 23:59:35 +00:00
COPY cmd/gluetun/main.go .
2020-02-22 17:07:06 +00:00
COPY internal/ ./internal/
2020-02-06 20:42:46 -05:00
RUN go test ./...
2020-04-12 20:05:28 +00:00
RUN golangci-lint run --timeout= 10m
2020-02-06 20:42:46 -05:00
RUN go build -ldflags= "-s -w" -o entrypoint main.go
FROM alpine:${ALPINE_VERSION }
ARG VERSION
ARG BUILD_DATE
ARG VCS_REF
ENV VERSION = $VERSION \
BUILD_DATE = $BUILD_DATE \
VCS_REF = $VCS_REF
LABEL \
org.opencontainers.image.authors= "quentin.mcgaw@gmail.com" \
org.opencontainers.image.created= $BUILD_DATE \
org.opencontainers.image.version= $VERSION \
org.opencontainers.image.revision= $VCS_REF \
org.opencontainers.image.url= "https://github.com/qdm12/private-internet-access-docker" \
org.opencontainers.image.documentation= "https://github.com/qdm12/private-internet-access-docker" \
org.opencontainers.image.source= "https://github.com/qdm12/private-internet-access-docker" \
2020-06-03 02:11:35 +00:00
org.opencontainers.image.title= "VPN client for PIA, Mullvad, Windscribe, Surfshark and Cyberghost" \
org.opencontainers.image.description= "VPN client to tunnel to PIA, Mullvad, Windscribe, Surfshark and Cyberghost servers using OpenVPN, IPtables, DNS over TLS and Alpine Linux"
ENV VPNSP = pia \
2020-02-06 20:42:46 -05:00
PROTOCOL = udp \
2020-02-22 15:48:09 +00:00
OPENVPN_VERBOSITY = 1 \
2020-03-18 23:05:47 +00:00
OPENVPN_ROOT = no \
2020-03-18 23:49:40 +00:00
OPENVPN_TARGET_IP = \
2020-02-16 20:30:29 +00:00
TZ = \
2020-03-29 19:52:49 -04:00
UID = 1000 \
GID = 1000 \
2020-04-12 08:55:13 -04:00
IP_STATUS_FILE = "/ip" \
2020-06-13 10:43:47 -04:00
# PIA, Windscribe, Surfshark and Cyberghost only
2020-05-29 00:03:10 +00:00
USER = \
2020-02-16 20:30:29 +00:00
PASSWORD = \
2020-03-29 16:42:06 -04:00
REGION = "Austria" \
2020-05-29 00:03:10 +00:00
# PIA only
2020-03-26 08:11:50 -04:00
PIA_ENCRYPTION = strong \
2020-02-16 20:30:29 +00:00
PORT_FORWARDING = off \
PORT_FORWARDING_STATUS_FILE = "/forwarded_port" \
# Mullvad only
COUNTRY = Sweden \
CITY = \
ISP = \
2020-03-29 16:42:06 -04:00
# Mullvad and Windscribe only
2020-02-16 20:30:29 +00:00
PORT = \
2020-06-13 10:43:47 -04:00
# Cyberghost only
CYBERGHOST_GROUP = "Premium UDP Europe" \
2020-05-29 00:03:10 +00:00
# Openvpn
OPENVPN_CIPHER = \
OPENVPN_AUTH = \
2020-02-16 20:30:29 +00:00
# DNS over TLS
2020-02-06 20:42:46 -05:00
DOT = on \
DOT_PROVIDERS = cloudflare \
2020-02-08 21:28:33 +00:00
DOT_PRIVATE_ADDRESS = 127.0.0.1/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,::1/128,fc00::/7,fe80::/10,::ffff:0:0/96 \
2020-02-08 21:08:49 +00:00
DOT_VERBOSITY = 1 \
DOT_VERBOSITY_DETAILS = 0 \
DOT_VALIDATION_LOGLEVEL = 0 \
2020-02-08 21:28:03 +00:00
DOT_CACHING = on \
2020-05-02 15:40:40 +00:00
DOT_IPV6 = off \
2020-02-06 20:42:46 -05:00
BLOCK_MALICIOUS = on \
BLOCK_SURVEILLANCE = off \
BLOCK_ADS = off \
UNBLOCK = \
2020-05-05 18:00:56 +00:00
DNS_UPDATE_PERIOD = 24h \
2020-02-16 20:30:29 +00:00
# Firewall
2020-06-12 17:11:21 +00:00
FIREWALL = on \
2020-02-06 20:42:46 -05:00
EXTRA_SUBNETS = \
2020-02-16 20:30:29 +00:00
# Tinyproxy
2020-02-06 20:42:46 -05:00
TINYPROXY = off \
TINYPROXY_LOG = Info \
TINYPROXY_PORT = 8888 \
TINYPROXY_USER = \
TINYPROXY_PASSWORD = \
2020-02-16 20:30:29 +00:00
# Shadowsocks
2020-02-06 20:42:46 -05:00
SHADOWSOCKS = off \
2020-02-22 17:43:17 +00:00
SHADOWSOCKS_LOG = off \
2020-02-06 20:42:46 -05:00
SHADOWSOCKS_PORT = 8388 \
2020-03-29 20:06:27 -04:00
SHADOWSOCKS_PASSWORD = \
SHADOWSOCKS_METHOD = chacha20-ietf-poly1305
2020-02-06 20:42:46 -05:00
ENTRYPOINT /entrypoint
2020-04-30 23:41:57 +00:00
EXPOSE 8000/tcp 8888/tcp 8388/tcp 8388/udp
2020-06-03 21:52:44 -04:00
HEALTHCHECK --interval= 10m --timeout= 10s --start-period= 30s --retries= 2 CMD /entrypoint healthcheck
2020-05-04 12:27:15 +00:00
RUN apk add -q --progress --no-cache --update openvpn ca-certificates iptables ip6tables unbound tinyproxy tzdata && \
2020-02-06 20:42:46 -05:00
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
apk add -q --progress --no-cache --update shadowsocks-libev && \
2020-03-29 19:52:49 -04:00
rm -rf /var/cache/apk/* /etc/unbound/* /usr/sbin/unbound-* /etc/tinyproxy/tinyproxy.conf && \
deluser openvpn && \
deluser tinyproxy && \
deluser unbound
COPY --from= builder /tmp/gobuild/entrypoint /entrypoint