From bbb35d21385fd58571a3bbbb856a03073ca622ea Mon Sep 17 00:00:00 2001
From: jonny <475634114@qq.com>
Date: Tue, 30 Mar 2021 15:47:40 +0800
Subject: [PATCH 1/5] Create docker_entrypoint.sh

---
 docker/docker_entrypoint.sh | 41 +++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 docker/docker_entrypoint.sh

diff --git a/docker/docker_entrypoint.sh b/docker/docker_entrypoint.sh
new file mode 100644
index 0000000..1ddfe54
--- /dev/null
+++ b/docker/docker_entrypoint.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+USER="admin"
+MM=$(pwgen -1s)
+CREATE_USER=1
+CONFIG_FILE='/app/conf/server.toml'
+
+if [ $CREATE_USER -eq 1 ]; then
+  if [ ! -e $CREATE_USER ]; then
+	    MM=$(pwgen -1s)
+            touch $CREATE_USER
+	    bash /app/generate-certs.sh
+            cd /app/conf/ && cp *.crt  /usr/local/share/ca-certificates/
+	    update-ca-certificates --fresh
+            userpass=$(/app/anylink -passwd "${MM}"| cut -d : -f2)
+	    echo "${userpass}"
+            jwttoken=$(/app/anylink -secret | cut -d : -f2)
+            echo "-- First container startup --user:${USER} pwd:${MM}"
+            sed -i "s/admin/${USER}/g" /app/server-example.toml
+            sed -i "s/123456/${MM}/g" /app/server-example.toml
+            sed -i "s#usertoken#${userpass}#g" /app/server-example.toml
+            sed -i "s/jwttoken/${jwttoken}/g" /app/server-example.toml
+            else
+                        echo "-- Not first container startup --"
+  fi
+
+else
+                echo "user switch not create"
+
+fi
+
+if [ ! -f $CONFIG_FILE ]; then
+echo "#####Generating configuration file#####"
+cp /app/server-example.toml /app/conf/server.toml
+else
+        echo "#####Configuration file already exists#####"
+fi
+
+rtaddr=$(grep "cidr" /app/conf/server.toml |awk -F \" '{print $2}')
+sysctl -w net.ipv4.ip_forward=1
+iptables -t nat -A POSTROUTING -s "${rtaddr}" -o eth0+ -j MASQUERADE
+/app/anylink -conf="/app/conf/server.toml"

From 656eca93a7a86bc23e7ba7ed79af21d50af6ebc3 Mon Sep 17 00:00:00 2001
From: jonny <475634114@qq.com>
Date: Tue, 30 Mar 2021 15:49:09 +0800
Subject: [PATCH 2/5] Create generate-certs.sh

---
 docker/generate-certs.sh | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 docker/generate-certs.sh

diff --git a/docker/generate-certs.sh b/docker/generate-certs.sh
new file mode 100644
index 0000000..1ef944e
--- /dev/null
+++ b/docker/generate-certs.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+mkdir -p ssl
+
+OUTPUT_FILENAME="example.com"
+
+printf "[req]
+prompt                  = no
+default_bits            = 4096
+default_md              = sha256
+encrypt_key             = no
+string_mask             = utf8only
+
+distinguished_name      = cert_distinguished_name
+req_extensions          = req_x509v3_extensions
+x509_extensions         = req_x509v3_extensions
+
+[ cert_distinguished_name ]
+C  = CN
+ST = BJ
+L  = BJ
+O  = example.com
+OU = example.com
+CN = example.com
+
+[req_x509v3_extensions]
+basicConstraints        = critical,CA:true
+subjectKeyIdentifier    = hash
+keyUsage                = critical,digitalSignature,keyCertSign,cRLSign #,keyEncipherment
+extendedKeyUsage        = critical,serverAuth #, clientAuth
+subjectAltName          = @alt_names
+
+[alt_names]
+DNS.1 = example.com
+DNS.2 = *.example.com
+
+">ssl/${OUTPUT_FILENAME}.conf
+
+openssl req -x509 -newkey rsa:2048 -keyout /app/conf/$OUTPUT_FILENAME.key -out /app/conf/$OUTPUT_FILENAME.crt -days 3600 -nodes -config ssl/${OUTPUT_FILENAME}.conf

From ac412ea6c76d52b4ead93fe5b5036eed83e4bc5f Mon Sep 17 00:00:00 2001
From: jonny <475634114@qq.com>
Date: Tue, 30 Mar 2021 15:50:24 +0800
Subject: [PATCH 3/5] Create server-example.toml

---
 docker/server-example.toml | 61 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 docker/server-example.toml

diff --git a/docker/server-example.toml b/docker/server-example.toml
new file mode 100644
index 0000000..6b53f4b
--- /dev/null
+++ b/docker/server-example.toml
@@ -0,0 +1,61 @@
+#服务配置信息
+
+#其他配置文件,可以使用绝对路径
+#或者相对于server.toml的路径
+
+#数据文件
+db_file = "./data.db"
+#证书文件
+cert_file = "./example.com.crt"
+cert_key = "./example.com.key"
+ui_path = "../ui"
+files_path = "../files"
+#日志目录,为空写入标准输出
+#log_path = "../log"
+log_path = ""
+log_level = "info"
+
+#系统名称
+issuer = "XX公司VPN"
+#后台管理用户
+admin_user = "admin"
+#pass 123456
+admin_pass = "usertoken"
+jwt_secret = "jwttoken"
+
+
+#vpn服务对外地址,影响开通邮件二维码
+link_addr = "test.example.com"
+
+#前台服务监听地址
+server_addr = ":443"
+#后台服务监听地址
+admin_addr = ":8800"
+#开启tcp proxy protocol协议
+proxy_protocol = false
+
+link_mode = "tun"
+
+#客户端分配的ip地址池
+ipv4_cidr = "192.168.10.0/24"
+ipv4_gateway = "192.168.10.1"
+ipv4_pool = ["192.168.10.100", "192.168.10.200"]
+
+#最大客户端数量
+max_client = 100
+#单个用户同时在线数量
+max_user_client = 3
+#IP租期(秒)
+ip_lease = 1209600
+
+#默认选择的组
+default_group = "one"
+
+#客户端失效检测时间(秒) dpd > keepalive
+cstp_keepalive = 20
+cstp_dpd = 30
+mobile_keepalive = 50
+mobile_dpd = 60
+#session过期时间,用于断线重连,0永不过期
+session_timeout = 3600
+auth_timeout = 0

From fdca29790042cc3782c54a5ba0cb1f6631d3da98 Mon Sep 17 00:00:00 2001
From: jonny <475634114@qq.com>
Date: Tue, 30 Mar 2021 15:53:13 +0800
Subject: [PATCH 4/5] Create Dockerfile

---
 Dockerfile | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 Dockerfile

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..44f0d01
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,26 @@
+FROM golang:alpine as builder
+ENV GOPROXY=https://goproxy.io \
+    GO111MODULE=on \
+    GOOS=linux
+WORKDIR /root/
+RUN apk add --no-cache --update bash git g++ nodejs npm \
+    && git clone https://github.com/bjdgyc/anylink.git \
+    && cd anylink/server \
+    && go build -o anylink -ldflags "-X main.COMMIT_ID=$(git rev-parse HEAD)" \
+    && cd ../web \
+    && npm install \
+    && npx browserslist@latest --update-db \
+    && npm run build
+
+
+FROM golang:alpine
+LABEL maintainer="www.mrdoc.fun"
+COPY --from=builder /root/anylink/server  /app/
+COPY --from=builder /root/anylink/web/ui  /app/ui/
+COPY  docker/ /app/
+WORKDIR /app
+RUN apk add --no-cache pwgen bash iptables openssl ca-certificates \
+    && rm -f /app/conf/server.toml \
+    && chmod +x docker_entrypoint.sh
+
+ENTRYPOINT ["./docker_entrypoint.sh"]

From 5e5395dabe63e3b4d552fdd616ff3ae777917dff Mon Sep 17 00:00:00 2001
From: jonny <475634114@qq.com>
Date: Tue, 30 Mar 2021 15:56:43 +0800
Subject: [PATCH 5/5] Update Dockerfile

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 44f0d01..efbf806 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -17,7 +17,7 @@ FROM golang:alpine
 LABEL maintainer="www.mrdoc.fun"
 COPY --from=builder /root/anylink/server  /app/
 COPY --from=builder /root/anylink/web/ui  /app/ui/
-COPY  docker/ /app/
+COPY --from=builder /root/anylink/docker /app/
 WORKDIR /app
 RUN apk add --no-cache pwgen bash iptables openssl ca-certificates \
     && rm -f /app/conf/server.toml \