-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathDockerfile
138 lines (107 loc) · 4.15 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
ARG CADDY_VERSION="2.4.3"
ARG GOLANG_IMAGE_VERSION="1.16.5-alpine"
ARG ALPINE_IMAGE_VERSION="3.14"
ARG TROJAN_GO_IMAGE_VERSION="0.10.4"
#
# caddy stage
#
FROM caddy:${CADDY_VERSION}-alpine as caddy-builder
#
# go stage
#
FROM golang:${GOLANG_IMAGE_VERSION} as go-builder
RUN go get -v github.com/abiosoft/parent
#
# trojan-go stage
#
FROM teddysun/trojan-go:${TROJAN_GO_IMAGE_VERSION} as trojan-go-builder
#
# final stage
#
FROM alpine:${ALPINE_IMAGE_VERSION}
ARG LOCAL_MODE
ENV LOCAL_MODE=${LOCAL_MODE:-"false"}
RUN if [ "${LOCAL_MODE}" = "true" ]; then sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories; fi
ARG CADDY_VERSION
ENV CADDY_INSTALL_VERSION=${CADDY_VERSION:-"2.4.3"}
ARG GOLANG_IMAGE_VERSION
ENV GOLANG_IMAGE_VERSION="$GOLANG_IMAGE_VERSION"
ARG ALPINE_IMAGE_VERSION
ENV ALPINE_IMAGE_VERSION="$ALPINE_IMAGE_VERSION"
ARG TROJAN_GO_IMAGE_VERSION
ENV TROJAN_GO_IMAGE_VERSION="$TROJAN_GO_IMAGE_VERSION"
# v2ray
ARG V2RAY_VERSION
ENV V2RAY_INSTALL_VERSION=${V2RAY_VERSION:-"4.40.1"}
ARG V2RAY_GITHUB="https://github.com/v2fly/v2ray-core/releases/download/v${V2RAY_INSTALL_VERSION}/v2ray-linux-64.zip"
ARG V2RAY_FAST_GIT="https://download.fastgit.org/v2fly/v2ray-core/releases/download/v${V2RAY_INSTALL_VERSION}/v2ray-linux-64.zip"
# xray
ARG XRAY_VERSION
ENV XRAY_INSTALL_VERSION=${XRAY_VERSION:-"1.4.2"}
ARG XRAY_GITHUB="https://github.com/XTLS/Xray-core/releases/download/v${XRAY_INSTALL_VERSION}/Xray-linux-64.zip"
ARG XRAY_FAST_GIT="https://download.fastgit.org/XTLS/Xray-core/releases/download/v${XRAY_INSTALL_VERSION}/Xray-linux-64.zip"
# geosite
ARG GEOSITE_GITHUB="https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat"
ARG GEOSITE_FAST_GIT="https://hub.fastgit.org/v2fly/domain-list-community/releases/latest/download/dlc.dat"
# geoip
ARG GEOIP_GITHUB="https://github.com/v2fly/geoip/releases/latest/download/geoip.dat"
ARG GEOIP_FAST_GIT="https://hub.fastgit.org/v2fly/geoip/releases/latest/download/geoip.dat"
ARG TIME_ZONE
ENV SYSTEM_TIME_ZONE=${TIME_ZONE:-"Asia/Shanghai"}
# install v2ray and xray
RUN apk upgrade --update \
&& apk add \
bash \
tzdata \
util-linux \
nodejs \
npm \
ca-certificates \
git \
mailcap \
openssh-client \
&& mkdir -p \
/etc/v2ray/ \
/tmp/v2ray \
/etc/xray/ \
/tmp/xray \
&& if [ "$LOCAL_MODE" = "false" ]; then wget --no-cache -O /tmp/v2ray/v2ray.zip ${V2RAY_GITHUB}; else wget --no-cache -O /tmp/v2ray/v2ray.zip ${V2RAY_FAST_GIT}; fi \
&& if [ "$LOCAL_MODE" = "false" ]; then wget --no-cache -O /tmp/xray/xray.zip ${XRAY_GITHUB}; else wget --no-cache -O /tmp/xray/xray.zip ${XRAY_FAST_GIT}; fi \
&& pwd \
&& unzip /tmp/v2ray/v2ray.zip -d /tmp/v2ray/ \
&& mv /tmp/v2ray/v2ray /usr/bin \
&& mv /tmp/v2ray/v2ctl /usr/bin \
&& mv /tmp/v2ray/vpoint_vmess_freedom.json /etc/v2ray/config.json \
&& chmod +x /usr/bin/v2ray \
&& chmod +x /usr/bin/v2ctl \
&& unzip /tmp/xray/xray.zip -d /tmp/xray/ \
&& mv /tmp/xray/xray /usr/bin \
&& if [ "$LOCAL_MODE" = "false" ]; then wget --no-cache -O /usr/bin/geosite.dat ${GEOSITE_GITHUB}; else wget --no-cache -O /usr/bin/geosite.dat ${GEOSITE_FAST_GIT}; fi \
&& if [ "$LOCAL_MODE" = "false" ]; then wget --no-cache -O /usr/bin/geoip.dat ${GEOIP_GITHUB}; else wget --no-cache -O /usr/bin/geoip.dat ${GEOIP_FAST_GIT}; fi \
&& chmod +x /usr/bin/xray \
&& ln -sf /usr/share/zoneinfo/${SYSTEM_TIME_ZONE} /etc/localtime \
&& echo ${SYSTEM_TIME_ZONE} > /etc/timezone \
&& rm -rf /tmp/v2ray /tmp/xray /var/cache/apk/*
WORKDIR /srv
# copy qrcode files
COPY package.json /srv/package.json
RUN npm install
COPY link-qrcode.js /srv/link-qrcode.js
# copy trojan-go
COPY --from=trojan-go-builder /usr/bin/trojan-go /usr/bin/trojan-go
# validate trojan-go
RUN /usr/bin/trojan-go -version
# copy caddy
COPY --from=caddy-builder /usr/bin/caddy /usr/bin/caddy
# validate caddy
RUN /usr/bin/caddy version
# copy caddy other files
COPY Caddyfile /etc/Caddyfile
COPY index.html /srv/index.html
VOLUME /root/.caddy /srv
# install process wrapper
COPY --from=go-builder /go/bin/parent /bin/parent
ADD caddy.sh /caddy.sh
RUN ["chmod", "+x", "/caddy.sh"]
EXPOSE 443 80
ENTRYPOINT ["/caddy.sh"]