黄宗银 преди 1 година
родител
ревизия
d9bc93e7cf
променени са 65 файла, в които са добавени 1716 реда и са изтрити 1 реда
  1. 14 0
      .gitignore
  2. 7 0
      ApqDotnet/dotnet6/Dockerfile
  3. 63 0
      ApqDotnet/dotnet6/build.txt
  4. 8 0
      ApqDotnet/dotnet8/Dockerfile
  5. 63 0
      ApqDotnet/dotnet8/build.txt
  6. 6 0
      ApqDotnet/gadmin/Dockerfile
  7. 63 0
      ApqDotnet/gadmin/build.txt
  8. 2 1
      README.md
  9. 2 0
      aria2/Dockerfile
  10. 2 0
      autossh/Dockerfile
  11. 15 0
      bsh/Dockerfile
  12. 39 0
      bsh/build.txt
  13. 9 0
      caddy/Dockerfile
  14. 70 0
      caddy/build.txt
  15. 15 0
      caddy/downloader.bash
  16. 8 0
      caddy/sh.fun/Rand.sh
  17. 27 0
      caddy/sh.fun/curl.sh
  18. 6 0
      caddy/sh.fun/curl_test.sh
  19. 43 0
      caddy/v1/Dockerfile.1.0.5
  20. 4 0
      caddy/v1/Dockerfile.builder
  21. 168 0
      caddy/v1/builder.sh
  22. 34 0
      caddy/v2/Dockerfile
  23. 16 0
      caddy/v2/Dockerfile.lxhao61
  24. 28 0
      caddy/v2/Dockerfile.xcaddy.apq
  25. 30 0
      caddy_apqc/Dockerfile
  26. 49 0
      caddy_apqc/build.txt
  27. 13 0
      chinadns-ng/Dockerfile
  28. 15 0
      dnscrypt-proxy/Dockerfile
  29. 12 0
      doh-server/Dockerfile.client
  30. 12 0
      doh-server/Dockerfile.server
  31. 10 0
      doh-server/Dockerfile.server.jedisct1
  32. 27 0
      ghproxy/Dockerfile
  33. 21 0
      ghproxy/build.txt
  34. 25 0
      headscale-ui/Caddyfile
  35. 76 0
      headscale-ui/Dockerfile
  36. 40 0
      headscale-ui/build.txt
  37. 22 0
      headscale-ui/scripts/1-image-build.sh
  38. 16 0
      headscale-ui/scripts/2-initialise.sh
  39. 8 0
      hugo/Dockerfile
  40. 10 0
      kms/Dockerfile
  41. 10 0
      lego/Dockerfile
  42. 13 0
      lego/Dockerfile.builder
  43. 18 0
      myurls/Dockerfile
  44. 42 0
      myurls/build.txt
  45. 5 0
      myurls/start.sh
  46. 49 0
      rainloop/Dockerfile
  47. 17 0
      rainloop/auto_update.bash
  48. 40 0
      rainloop/build.txt
  49. 12 0
      rainloop/entrypoint.sh
  50. 13 0
      softether/Dockerfile
  51. 18 0
      softether/build.txt
  52. 23 0
      softether/docker-compose.yml
  53. 39 0
      speedtest/Dockerfile
  54. 29 0
      speedtest/auto_update.bash
  55. 38 0
      speedtest/build.txt
  56. 19 0
      sub-web/Dockerfile
  57. 42 0
      sub-web/build.txt
  58. 21 0
      subconverter/Dockerfile
  59. 9 0
      subconverter/app/run.sh
  60. 8 0
      subconverter/app/sh.fun/Rand.sh
  61. 27 0
      subconverter/app/sh.fun/curl.sh
  62. 57 0
      subconverter/app/updater.sh
  63. 36 0
      subconverter/build.txt
  64. 12 0
      temp-mail/Dockerfile
  65. 21 0
      temp-mail/build.txt

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+.git
+.env
+.gitignore
+.dockerignore
+.gitlab-ci.yml
+*.sh
+*.bak
+*.log
+*.md
+!samba.sh
+!builder.sh
+!entrypoint.sh
+!README*.md
+unbound

+ 7 - 0
ApqDotnet/dotnet6/Dockerfile

@@ -0,0 +1,7 @@
+FROM mcr.microsoft.com/dotnet/aspnet:6.0
+
+# 设置语言/区域设置环境变量
+ENV LANG zh-Hans
+
+# Install extensions
+RUN apt-get update && apt-get install -y tar jq procps net-tools

+ 63 - 0
ApqDotnet/dotnet6/build.txt

@@ -0,0 +1,63 @@
+
+发布到文件夹后,复制到 DockerImg/dotnet6 并提交。
+然后到服务器上创建Docker镜像。
+
+# 新开一个会话(dbx),在此会话中编译
+tmux new -s dbx
+# 切换到dbx会话
+tmux attach-session -t dbx
+
+#git clone https://gogs-qh.zalhb.com/ApqTeam/DockerImg.git
+
+cd ApqPublish/dotnet6/
+
+
+-- 以下为国内机器构建并推送到阿里云 -------------------------------------------------
+
+docker login [email protected] registry.cn-guangzhou.aliyuncs.com
+
+# amd64上
+docker rmi registry.cn-guangzhou.aliyuncs.com/apq/dotnet6:amd64
+docker build -t registry.cn-guangzhou.aliyuncs.com/apq/dotnet6:amd64 .
+docker push registry.cn-guangzhou.aliyuncs.com/apq/dotnet6:amd64
+
+# arm64上
+docker rmi registry.cn-guangzhou.aliyuncs.com/apq/dotnet6:arm64
+docker build -t registry.cn-guangzhou.aliyuncs.com/apq/dotnet6:arm64 .
+docker push registry.cn-guangzhou.aliyuncs.com/apq/dotnet6:arm64
+
+-- 以下为国外机器构建 -------------------------------------------------------------
+
+### 创建构建实例 =============================================
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例 =========================================
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/dotnet6 . --push
+
+### end 构建并推送
+
+-- 按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/dotnet6:amd64 .
+docker push amwpfiqvy/dotnet6:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/dotnet6:arm64 .
+docker push amwpfiqvy/dotnet6:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/dotnet6
+docker manifest create amwpfiqvy/dotnet6 \
+    amwpfiqvy/dotnet6:amd64 \
+    amwpfiqvy/dotnet6:arm64
+docker manifest push amwpfiqvy/dotnet6

+ 8 - 0
ApqDotnet/dotnet8/Dockerfile

@@ -0,0 +1,8 @@
+FROM mcr.microsoft.com/dotnet/aspnet:8.0
+
+# 设置语言/区域设置环境变量
+ENV LANG zh-Hans
+
+# Install extensions
+RUN mkdir logs && chmod 777 logs && apt-get update && apt-get install -y tar jq procps net-tools
+VOLUME ["/app"]

+ 63 - 0
ApqDotnet/dotnet8/build.txt

@@ -0,0 +1,63 @@
+
+发布到文件夹后,复制到 DockerImg/dotnet8 并提交。
+然后到服务器上创建Docker镜像。
+
+# 新开一个会话(dbx),在此会话中编译
+tmux new -s dbx
+# 切换到dbx会话
+tmux attach-session -t dbx
+
+#git clone https://gogs-qh.zalhb.com/ApqTeam/DockerImg.git
+
+cd ApqPublish/dotnet8/
+
+
+-- 以下为国内机器构建并推送到阿里云 -------------------------------------------------
+
+docker login [email protected] registry.cn-guangzhou.aliyuncs.com
+
+# amd64上
+docker rmi registry.cn-guangzhou.aliyuncs.com/apq/dotnet8:amd64
+docker build -t registry.cn-guangzhou.aliyuncs.com/apq/dotnet8:amd64 .
+docker push registry.cn-guangzhou.aliyuncs.com/apq/dotnet8:amd64
+
+# arm64上
+docker rmi registry.cn-guangzhou.aliyuncs.com/apq/dotnet8:arm64
+docker build -t registry.cn-guangzhou.aliyuncs.com/apq/dotnet8:arm64 .
+docker push registry.cn-guangzhou.aliyuncs.com/apq/dotnet8:arm64
+
+-- 以下为国外机器构建 -------------------------------------------------------------
+
+### 创建构建实例 =============================================
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例 =========================================
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/dotnet8 . --push
+
+### end 构建并推送
+
+-- 按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/dotnet8:amd64 .
+docker push amwpfiqvy/dotnet8:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/dotnet8:arm64 .
+docker push amwpfiqvy/dotnet8:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/dotnet8
+docker manifest create amwpfiqvy/dotnet8 \
+    amwpfiqvy/dotnet8:amd64 \
+    amwpfiqvy/dotnet8:arm64
+docker manifest push amwpfiqvy/dotnet8

+ 6 - 0
ApqDotnet/gadmin/Dockerfile

@@ -0,0 +1,6 @@
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+WORKDIR /app
+EXPOSE 47960
+RUN mkdir logs && chmod 777 logs
+VOLUME ["/app"]
+ENTRYPOINT ["dotnet", "Admin.NET.Web.Entry.dll"]

+ 63 - 0
ApqDotnet/gadmin/build.txt

@@ -0,0 +1,63 @@
+
+发布到文件夹后,复制到 DockerImg/gadmin 并提交。
+然后到服务器上创建Docker镜像。
+
+# 新开一个会话(dbx),在此会话中编译
+tmux new -s dbx
+# 切换到dbx会话
+tmux attach-session -t dbx
+
+#git clone https://gogs-qh.zalhb.com/ApqTeam/DockerImg.git
+
+cd ApqPublish/gadmin/
+
+
+-- 以下为国内机器构建并推送到阿里云 -------------------------------------------------
+
+docker login [email protected] registry.cn-guangzhou.aliyuncs.com
+
+# amd64上
+docker rmi registry.cn-guangzhou.aliyuncs.com/apq/gadmin:amd64
+docker build -t registry.cn-guangzhou.aliyuncs.com/apq/gadmin:amd64 .
+docker push registry.cn-guangzhou.aliyuncs.com/apq/gadmin:amd64
+
+# arm64上
+docker rmi registry.cn-guangzhou.aliyuncs.com/apq/gadmin:arm64
+docker build -t registry.cn-guangzhou.aliyuncs.com/apq/gadmin:arm64 .
+docker push registry.cn-guangzhou.aliyuncs.com/apq/gadmin:arm64
+
+-- 以下为国外机器构建 -------------------------------------------------------------
+
+### 创建构建实例 =============================================
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例 =========================================
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/gadmin . --push
+
+### end 构建并推送
+
+-- 按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/gadmin:amd64 .
+docker push amwpfiqvy/gadmin:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/gadmin:arm64 .
+docker push amwpfiqvy/gadmin:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/gadmin
+docker manifest create amwpfiqvy/gadmin \
+    amwpfiqvy/gadmin:amd64 \
+    amwpfiqvy/gadmin:arm64
+docker manifest push amwpfiqvy/gadmin

+ 2 - 1
README.md

@@ -1,2 +1,3 @@
-# dockerimg
+# Dockerize an application
 
+应用容器化

+ 2 - 0
aria2/Dockerfile

@@ -0,0 +1,2 @@
+FROM playn/alpine:latest
+RUN apk add --no-cache aria2

+ 2 - 0
autossh/Dockerfile

@@ -0,0 +1,2 @@
+FROM playn/alpine:3.12.0
+RUN apk add --no-cache autossh=1.4g-r1

+ 15 - 0
bsh/Dockerfile

@@ -0,0 +1,15 @@
+#FROM debian:stable-slim
+FROM ubuntu
+
+LABEL maintainer="[email protected]"
+
+ENV TZ=Asia/Shanghai
+
+RUN apt-get update \
+    && apt-get install -y --assume-yes git curl jq tar unzip p7zip-full telnet iputils-ping \
+    && apt-get clean
+
+WORKDIR /app
+
+#ENTRYPOINT ["/bin/bash"]
+CMD ["bash"]

+ 39 - 0
bsh/build.txt

@@ -0,0 +1,39 @@
+
+#git clone https://gogs.tods.gq/ApqTeam/DockerImg
+
+cd DockerImg/bsh/
+
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/bsh . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/bsh:amd64 .
+docker push amwpfiqvy/bsh:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/bsh:arm64 .
+docker push amwpfiqvy/bsh:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/bsh
+docker manifest create amwpfiqvy/bsh \
+    amwpfiqvy/bsh:amd64 \
+    amwpfiqvy/bsh:arm64
+docker manifest push amwpfiqvy/bsh

+ 9 - 0
caddy/Dockerfile

@@ -0,0 +1,9 @@
+# syntax=docker/dockerfile:1
+FROM amwpfiqvy/bsh AS downloader
+COPY sh.fun sh.fun
+COPY downloader.bash downloader.bash
+RUN bash downloader.bash
+
+FROM caddy
+COPY --from=downloader /app/caddy /usr/bin/caddy
+RUN chmod 777 /usr/bin/caddy

+ 70 - 0
caddy/build.txt

@@ -0,0 +1,70 @@
+
+# 新开一个会话(dbx),在此会话中编译
+tmux new -s dbx
+# 切换到dbx会话
+tmux attach-session -t dbx
+
+#git clone https://gogs.tods.eu.org/ApqTeam/DockerImg
+
+cd DockerImg/caddy/
+
+
+### 创建构建实例
+
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 \
+-t amwpfiqvy/caddy \
+-t amwpfiqvy/caddy:2.7.6 \
+. --push
+
+### end 构建并推送
+
+-- 推送到阿里云 -----------------------------------------------------------------------
+docker login [email protected] registry.cn-chengdu.aliyuncs.com
+
+# amd64上
+docker rmi amwpfiqvy/caddy
+docker pull amwpfiqvy/caddy
+docker tag amwpfiqvy/caddy registry.cn-chengdu.aliyuncs.com/apq/caddy:amd64
+docker push registry.cn-chengdu.aliyuncs.com/apq/caddy:amd64
+docker rmi registry.cn-chengdu.aliyuncs.com/apq/caddy:amd64
+
+# arm64上
+docker rmi amwpfiqvy/caddy
+docker pull amwpfiqvy/caddy
+docker tag amwpfiqvy/caddy registry.cn-chengdu.aliyuncs.com/apq/caddy:arm64
+docker push registry.cn-chengdu.aliyuncs.com/apq/caddy:arm64
+docker rmi registry.cn-chengdu.aliyuncs.com/apq/caddy:arm64
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/caddy:2.7.6_amd64 .
+docker push amwpfiqvy/caddy:2.7.6_amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/caddy:2.7.6_arm64 .
+docker push amwpfiqvy/caddy:2.7.6_arm64
+
+# 任意机器上构建版本标签与latest标签并推送
+docker manifest create amwpfiqvy/caddy:2.7.6 \
+    amwpfiqvy/caddy:2.7.6_amd64 \
+    amwpfiqvy/caddy:2.7.6_arm64
+docker manifest push amwpfiqvy/caddy:2.7.6
+
+#docker manifest rm amwpfiqvy/caddy
+docker manifest create amwpfiqvy/caddy \
+    amwpfiqvy/caddy:2.7.6_amd64 \
+    amwpfiqvy/caddy:2.7.6_arm64
+docker manifest push amwpfiqvy/caddy

+ 15 - 0
caddy/downloader.bash

@@ -0,0 +1,15 @@
+#!/bin/bash
+
+. /app/sh.fun/curl.sh
+
+# 注意:不同shell对语法的支持有细微差别,第一行并不能随便写。
+
+# 解压出 _static_ 压缩文件
+
+archStr=$(dpkg --print-architecture)
+
+if [ "${archStr}"x == "arm64"x ]; then
+    curlDown "/app" caddy "https://caddyserver.com/api/download?os=linux&arch=arm64&p=github.com%2Fcaddy-dns%2Fcloudflare&p=github.com%2Fdunglas%2Fmercure%2Fcaddy&p=github.com%2Fdunglas%2Fvulcain%2Fcaddy&p=github.com%2Fcaddyserver%2Ftransform-encoder&p=github.com%2Fcaddyserver%2Freplace-response&p=github.com%2Fcaddy-dns%2Froute53&p=github.com%2Fmholt%2Fcaddy-webdav&p=github.com%2Fgreenpau%2Fcaddy-security&p=github.com%2Fcaddy-dns%2Fduckdns&p=github.com%2Fcaddy-dns%2Fdnspod&p=github.com%2Fimgk%2Fcaddy-trojan&p=github.com%2Fporech%2Fcaddy-maxmind-geolocation&p=github.com%2Fkirsch33%2Frealip&p=github.com%2Fcaddy-dns%2Falidns&p=github.com%2FWingLim%2Fcaddy-webhook&idempotency=5815992748437"
+else
+    curlDown "/app" caddy "https://caddyserver.com/api/download?os=linux&arch=amd64&p=github.com%2Fcaddy-dns%2Fcloudflare&p=github.com%2Fdunglas%2Fmercure%2Fcaddy&p=github.com%2Fdunglas%2Fvulcain%2Fcaddy&p=github.com%2Fcaddyserver%2Ftransform-encoder&p=github.com%2Fcaddyserver%2Freplace-response&p=github.com%2Fcaddy-dns%2Froute53&p=github.com%2Fmholt%2Fcaddy-webdav&p=github.com%2Fgreenpau%2Fcaddy-security&p=github.com%2Fcaddy-dns%2Fduckdns&p=github.com%2Fcaddy-dns%2Fdnspod&p=github.com%2Fimgk%2Fcaddy-trojan&p=github.com%2Fporech%2Fcaddy-maxmind-geolocation&p=github.com%2Fkirsch33%2Frealip&p=github.com%2Fcaddy-dns%2Falidns&p=github.com%2FWingLim%2Fcaddy-webhook&idempotency=83904614959909"
+fi

+ 8 - 0
caddy/sh.fun/Rand.sh

@@ -0,0 +1,8 @@
+#!/bin/sh
+
+Rand() {
+    min=$1
+    max=$(($2-$min+1))
+    num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')
+    echo $(($num%$max+$min))
+}

+ 27 - 0
caddy/sh.fun/curl.sh

@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# 执行curl直至成功
+curl_cycle(){
+    while true; do
+        curl "$@"
+        if [ "$?"x = "0"x ]; then
+            break
+        fi
+    done
+}
+
+# 执行下载直至成功
+curlDown(){
+    folder=$1
+    filename=$2
+    dUrl=$3
+    dProxy=$4
+    
+    [ ! -d "${folder}/tmp" ] && mkdir -p "${folder}/tmp"
+    if [ "${dProxy}"x != ""x ]; then
+        curl_cycle -x ${dProxy} -kfsSL -o "${folder}/tmp/${filename}" ${dUrl}
+    else
+        curl_cycle -kfsSL -o "${folder}/tmp/${filename}" ${dUrl}
+    fi
+    mv "${folder}/tmp/${filename}" "${folder}/${filename}"
+}

+ 6 - 0
caddy/sh.fun/curl_test.sh

@@ -0,0 +1,6 @@
+#!/bin/sh
+
+. /root/sync/sh.fun/curl.sh
+
+curl_cycle -x socks5://127.0.0.1:10808 -kfsSL -X GET https://api.cloudflare.com/client/v4/zones/e1bfbb9cb8c2337f7056fcec24e18731/dns_records \
+    -H "X-Auth-Email: [email protected]" -H "Authorization: Bearer 6dfgOe0C6FePTQKRF9BlqTTqua5TzOMq17xj5Iyk" -H "Content-Type:application/json"

+ 43 - 0
caddy/v1/Dockerfile.1.0.5

@@ -0,0 +1,43 @@
+#
+# Builder
+#
+FROM playn/caddy:builder as builder
+
+ARG version="1.0.5"
+ARG plugins="cloudflare,forwardproxy"
+ARG enable_telemetry="true"
+
+# process wrapper
+RUN go get -v github.com/abiosoft/parent
+
+RUN VERSION=${version} PLUGINS=${plugins} ENABLE_TELEMETRY=${enable_telemetry} /bin/sh /usr/bin/builder.sh
+
+#
+# Final stage
+#
+FROM playn/alpine:3.12.0
+
+ARG version="1.0.5"
+LABEL caddy_version="$version"
+
+# Let's Encrypt Agreement
+ENV ACME_AGREE="false"
+
+# Telemetry Stats
+ENV ENABLE_TELEMETRY="$enable_telemetry"
+
+RUN apk add --no-cache \
+    ca-certificates
+
+# install caddy
+COPY --from=builder /install/caddy /usr/bin/caddy
+
+# validate install
+RUN /usr/bin/caddy -version
+RUN /usr/bin/caddy -plugins
+
+# install process wrapper
+COPY --from=builder /go/bin/parent /bin/parent
+
+ENTRYPOINT ["/bin/parent", "caddy"]
+CMD ["--conf", "/etc/Caddyfile", "--log", "stdout", "--agree=$ACME_AGREE"]

+ 4 - 0
caddy/v1/Dockerfile.builder

@@ -0,0 +1,4 @@
+FROM golang:1-alpine
+RUN apk add --no-cache git gcc musl-dev
+COPY builder.sh /usr/bin/builder.sh
+CMD ["/bin/sh", "/usr/bin/builder.sh"]

+ 168 - 0
caddy/v1/builder.sh

@@ -0,0 +1,168 @@
+#!/bin/sh
+
+VERSION=${VERSION:-"1.0.5"}
+TELEMETRY=${ENABLE_TELEMETRY:-"true"}
+IMPORT="github.com/caddyserver/caddy"
+
+# version <1.0.1 needs to use old import path
+new_import=true
+if [ "$(echo $VERSION | cut -c1)" -eq 0 ] 2>/dev/null || [ "$VERSION" = "1.0.0" ]; then 
+    IMPORT="github.com/mholt/caddy" && new_import=false
+fi
+
+# add `v` prefix for version numbers
+[ "$(echo $VERSION | cut -c1)" -ge 0 ] 2>/dev/null && VERSION="v$VERSION"
+
+stage() {
+    STAGE="$1"
+    echo
+    echo starting stage: $STAGE
+}
+
+end_stage() {
+    if [ $? -ne 0 ]; then
+        >&2 echo error at \'$STAGE\'
+        exit 1
+    fi
+    echo finished stage: $STAGE ✓
+    echo
+}
+
+use_new_import() (
+    cd $1
+    find . -name '*.go' | while read -r f; do
+        sed -i.bak 's/\/mholt\/caddy/\/caddyserver\/caddy/g' $f && rm $f.bak
+    done
+)
+
+get_package() {
+    # go module require special dns handling
+    if $go_mod && [ -f /dnsproviders/$1/$1.go ]; then
+        mkdir -p /caddy/dnsproviders/$1
+        cp -r /dnsproviders/$1/$1.go /caddy/dnsproviders/$1/$1.go
+        echo "caddy/dnsproviders/$1"
+    else
+        GO111MODULE=off GOOS=linux GOARCH=amd64 caddyplug package $1 2> /dev/null
+    fi
+}
+
+dns_plugins() {
+    git clone https://github.com/caddyserver/dnsproviders /dnsproviders
+    # temp hack for repo rename
+    if $new_import; then use_new_import /dnsproviders; fi
+}
+
+plugins() {
+    mkdir -p /plugins
+    for plugin in $(echo $PLUGINS | tr "," " "); do \
+        import_package=$(get_package $plugin)
+        $go_mod || go get -v "$import_package" ; # not needed for modules
+        $go_mod && package="main" || package="caddyhttp"
+        printf "package $package\nimport _ \"$import_package\"" > \
+            /plugins/$plugin.go ; \
+    done
+}
+
+module() {
+    mkdir -p /caddy
+    cd /caddy # build dir
+
+    # setup module
+    go mod init caddy
+    go get -v $IMPORT@$VERSION
+
+    # plugins
+    cp -r /plugins/. .
+
+    # temp hack for repo rename
+    go get -v -d # download possible plugin deps
+    if $new_import; then use_new_import /go/pkg/mod; fi
+
+    # main and telemetry
+    cat > main.go <<EOF
+    package main
+    import "$IMPORT/caddy/caddymain"
+    import "os"
+    func main() {
+        switch os.Getenv("ENABLE_TELEMETRY") {
+        case "0", "false":
+            caddymain.EnableTelemetry = false
+        case "1", "true":
+            caddymain.EnableTelemetry = true
+        default:
+            caddymain.EnableTelemetry = $TELEMETRY
+        }
+        caddymain.Run()
+    }
+EOF
+}
+
+legacy() {
+    cd /go/src/$IMPORT/caddy # build dir
+
+    # plugins
+    cp -r /plugins/. ../caddyhttp
+
+    # telemetry
+    run_file="/go/src/$IMPORT/caddy/caddymain/run.go"
+    if [ "$TELEMETRY" = "false" ]; then
+        cat > "$run_file.disablestats.go" <<EOF
+        package caddymain
+        import "os"
+        func init() {
+            switch os.Getenv("ENABLE_TELEMETRY") {
+            case "0", "false":
+                EnableTelemetry = false
+            case "1", "true":
+                EnableTelemetry = true
+            default:
+                EnableTelemetry = false
+            }
+        }
+EOF
+    fi
+}
+
+# caddy source
+stage "fetching caddy source"
+git clone https://github.com/caddyserver/caddy -b "$VERSION" /go/src/$IMPORT \
+    && cd /go/src/$IMPORT
+end_stage
+
+# plugin helper
+stage "installing plugin helper"
+GOOS=linux GOARCH=amd64 go get -v github.com/abiosoft/caddyplug/caddyplug
+end_stage
+
+# check for modules support
+go_mod=false
+[ -f /go/src/$IMPORT/go.mod ] && export GO111MODULE=on && go_mod=true
+
+# dns plugins
+stage "fetching dns plugin sources"
+dns_plugins
+end_stage
+
+# generate plugins
+stage "generating plugins"
+plugins
+end_stage
+
+# add plugins and telemetry
+stage "customising plugins and telemetry"
+if $go_mod; then module; else legacy; fi
+end_stage
+
+# build
+stage "building caddy"
+CGO_ENABLED=0 go build -o caddy
+end_stage
+
+# copy binary
+stage "copying binary"
+mkdir -p /install \
+    && mv caddy /install \
+    && /install/caddy -version
+end_stage
+
+echo "installed caddy version $VERSION at /install/caddy"

+ 34 - 0
caddy/v2/Dockerfile

@@ -0,0 +1,34 @@
+# syntax=docker/dockerfile:1
+FROM golang:1.17-alpine AS builder
+RUN go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest && \
+    xcaddy build \
+    --with github.com/caddy-dns/cloudflare \
+    # --with github.com/caddy-dns/dnspod \
+    # --with github.com/caddy-dns/duckdns \
+    # --with github.com/caddy-dns/route53 \
+    --with github.com/mholt/caddy-webdav \
+    --with github.com/mholt/caddy-l4 \
+    --with github.com/mholt/caddy-dynamicdns \
+    # --with github.com/abiosoft/caddy-exec \
+    # --with github.com/greenpau/caddy-trace \
+    # --with github.com/greenpau/caddy-auth-jwt \
+    # --with github.com/greenpau/caddy-auth-portal \
+    # --with github.com/porech/caddy-maxmind-geolocation \
+    # --with github.com/imgk/caddy-trojan \
+    --with github.com/kirsch33/realip \
+    --with github.com/mastercactapus/caddy2-proxyprotocol \
+    --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
+
+    # export CADDY_VERSION=$(wget -qO- https://api.github.com/repos/caddyserver/caddy/releases/latest | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/') && \
+    # xcaddy build ${CADDY_VERSION} \
+
+FROM playn/alpine
+COPY --from=builder /go/caddy /usr/local/bin/
+ENV XDG_CONFIG_HOME=/config
+ENV XDG_DATA_HOME=/data
+VOLUME /config
+VOLUME /data
+# EXPOSE 80
+# EXPOSE 443
+# EXPOSE 2019
+ENTRYPOINT ["/usr/local/bin/caddy"]

+ 16 - 0
caddy/v2/Dockerfile.lxhao61

@@ -0,0 +1,16 @@
+# syntax=docker/dockerfile:1
+FROM playn/alpine
+RUN export version=$(wget -qO- https://api.github.com/repos/lxhao61/integrated-examples/releases/latest | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/'); \
+    wget --quiet -O /tmp/caddy.tar.gz "https://github.com/lxhao61/integrated-examples/releases/download/${version}/caddy_linux_amd64.tar.gz"; \
+    tar -zxf /tmp/caddy.tar.gz -C /usr/bin caddy; \
+    rm -f /tmp/caddy.tar.gz; \
+    chmod +x /usr/bin/caddy; \
+    unset version
+ENV XDG_CONFIG_HOME=/config
+ENV XDG_DATA_HOME=/data
+VOLUME /config
+VOLUME /data
+# EXPOSE 80
+# EXPOSE 443
+# EXPOSE 2019
+ENTRYPOINT ["/usr/bin/caddy"]

+ 28 - 0
caddy/v2/Dockerfile.xcaddy.apq

@@ -0,0 +1,28 @@
+# syntax=docker/dockerfile:1
+FROM caddy:builder AS builder
+RUN xcaddy build \
+    # 用于直接使用Nginx的配置,解析nginx.conf文件,然后转换为json 格式
+    # --with github.com/caddyserver/nginx-adapter \
+    # --with github.com/abiosoft/caddy-json-parse \
+    # 用于对响应的body执行子字符串或正则表达式替换
+    --with github.com/caddyserver/replace-response \
+    --with github.com/mholt/caddy-webdav \
+    # --with github.com/mholt/caddy-l4 \
+    # --with github.com/mholt/caddy-dynamicdns \
+    # --with github.com/abiosoft/caddy-exec \
+    # --with github.com/greenpau/caddy-trace \
+    --with github.com/greenpau/caddy-security \
+    --with github.com/porech/caddy-maxmind-geolocation \
+    # --with github.com/shift72/caddy-geo-ip \
+    --with github.com/imgk/caddy-trojan \
+    # --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \
+    --with github.com/kirsch33/realip \
+    --with github.com/mastercactapus/caddy2-proxyprotocol \
+    --with github.com/caddy-dns/duckdns \
+    --with github.com/caddy-dns/route53 \
+    --with github.com/caddy-dns/cloudflare \
+    --with github.com/caddy-dns/alidns \
+    --with github.com/caddy-dns/dnspod
+
+FROM caddy
+COPY --from=builder /usr/bin/caddy /usr/bin/caddy

+ 30 - 0
caddy_apqc/Dockerfile

@@ -0,0 +1,30 @@
+# syntax=docker/dockerfile:1
+FROM caddy:builder AS builder
+RUN xcaddy build \
+    # 已集成,不再需要添加了
+    # --with github.com/mastercactapus/caddy2-proxyprotocol \
+    # 用于直接使用Nginx的配置,解析nginx.conf文件,然后转换为json 格式
+    # --with github.com/caddyserver/nginx-adapter \
+    # --with github.com/abiosoft/caddy-json-parse \
+    # 用于对响应的body执行子字符串或正则表达式替换
+    # --with github.com/caddyserver/replace-response \
+    # --with github.com/mholt/caddy-webdav \
+    # --with github.com/mholt/caddy-l4 \
+    # --with github.com/mholt/caddy-dynamicdns \
+    # --with github.com/abiosoft/caddy-exec \
+    # --with github.com/greenpau/caddy-trace \
+    # --with github.com/greenpau/caddy-security \
+    # --with github.com/porech/caddy-maxmind-geolocation \
+    # --with github.com/shift72/caddy-geo-ip \
+    # --with github.com/imgk/caddy-trojan \
+    # --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \
+    # --with github.com/kirsch33/realip \
+    # --with github.com/caddy-dns/duckdns \
+    # --with github.com/caddy-dns/route53 \
+    # --with github.com/caddy-dns/cloudflare \
+    # --with github.com/caddy-dns/alidns \
+    # --with github.com/caddy-dns/dnspod \
+    --with github.com/hadi77ir/caddy-websockify
+
+FROM caddy
+COPY --from=builder /usr/bin/caddy /usr/bin/caddy

+ 49 - 0
caddy_apqc/build.txt

@@ -0,0 +1,49 @@
+
+# 新开一个会话(dbx),在此会话中编译
+tmux new -s dbx
+# 切换到dbx会话
+tmux attach-session -t dbx
+
+#git clone https://gogs.tods.gq/ApqTeam/DockerImg
+
+cd DockerImg/caddy_apqc/
+
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/caddy:2.7.6_apqc . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/caddy:amd64 .
+docker push amwpfiqvy/caddy:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/caddy:arm64 .
+docker push amwpfiqvy/caddy:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/caddy
+docker manifest create amwpfiqvy/caddy \
+    amwpfiqvy/caddy:amd64 \
+    amwpfiqvy/caddy:arm64
+docker manifest push amwpfiqvy/caddy
+
+-- 推送到阿里云 -----------------------------------------------------------------------
+docker login --username=Apq@apq registry.cn-chengdu.aliyuncs.com
+docker tag d24718fc00bd registry.cn-chengdu.aliyuncs.com/apq/caddy:amd64
+docker tag 8306779e0c13 registry.cn-chengdu.aliyuncs.com/apq/caddy:arm64

+ 13 - 0
chinadns-ng/Dockerfile

@@ -0,0 +1,13 @@
+# syntax=docker/dockerfile:1
+FROM golang:alpine AS builder
+WORKDIR /go
+RUN apk --no-cache --no-progress add git gcc make libc-dev linux-headers && \
+    git clone --depth 1 https://github.com/zfl9/chinadns-ng.git && \
+    cd /go/chinadns-ng && \
+    make -j$(nproc) CFLAGS="-O3 -pipe" && \
+    make install
+
+FROM playn/alpine
+COPY --from=builder --chown=0:0 /usr/local/bin/chinadns-ng /usr/local/bin/chinadns-ng
+RUN apk --no-cache --no-progress add ipset
+ENTRYPOINT [ "/usr/local/bin/chinadns-ng" ]

+ 15 - 0
dnscrypt-proxy/Dockerfile

@@ -0,0 +1,15 @@
+# syntax=docker/dockerfile:1
+FROM playn/alpine AS builder
+# ARG version=2.0.46-beta3
+RUN export version=$(wget -qO- https://api.github.com/repos/dnscrypt/dnscrypt-proxy/releases/latest | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/'); \
+    wget --quiet -O /tmp/dnscrypt-proxy.tar.gz https://github.com/dnscrypt/dnscrypt-proxy/releases/download/${version}/dnscrypt-proxy-linux_x86_64-${version}.tar.gz; \
+    tar -zxf /tmp/dnscrypt-proxy.tar.gz -C /tmp; \
+    cd /tmp/linux-x86_64; \
+    ls | awk -F "example-" '{print "mv "$0" "$1$2""}' | sh; \
+    cd -; \
+    mv /tmp/linux-x86_64 /usr/local/bin/dnscrypt-proxy
+
+FROM playn/alpine
+COPY --from=builder --chown=0:0 /usr/local/bin/dnscrypt-proxy /usr/local/bin/dnscrypt-proxy
+ENTRYPOINT [ "/usr/local/bin/dnscrypt-proxy/dnscrypt-proxy" ]
+ENV PATH /usr/local/bin/dnscrypt-proxy:$PATH

+ 12 - 0
doh-server/Dockerfile.client

@@ -0,0 +1,12 @@
+# syntax=docker/dockerfile:1
+FROM golang:alpine AS builder
+WORKDIR /go
+RUN apk --no-cache --no-progress add git make && \
+    git clone --depth 1 https://github.com/m13253/dns-over-https.git && \
+    cd /go/dns-over-https && \
+    make doh-client/doh-client
+
+FROM playn/alpine
+COPY --from=builder /go/dns-over-https/doh-client/doh-client /usr/local/bin/doh-client
+ENTRYPOINT ["/usr/local/bin/doh-client"]
+CMD ["-conf", "/doh-client.conf"]

+ 12 - 0
doh-server/Dockerfile.server

@@ -0,0 +1,12 @@
+# syntax=docker/dockerfile:1
+FROM golang:alpine AS builder
+WORKDIR /go
+RUN apk --no-cache --no-progress add git make && \
+    git clone --depth 1 https://github.com/m13253/dns-over-https.git && \
+    cd /go/dns-over-https && \
+    make doh-server/doh-server
+
+FROM playn/alpine
+COPY --from=builder /go/dns-over-https/doh-server/doh-server /usr/local/bin/doh-server
+ENTRYPOINT ["/usr/local/bin/doh-server"]
+CMD ["-conf", "/doh-server.conf"]

+ 10 - 0
doh-server/Dockerfile.server.jedisct1

@@ -0,0 +1,10 @@
+# syntax=docker/dockerfile:1
+FROM playn/alpine AS builder
+RUN apk update --no-cache && \
+    apk add --no-cache rust cargo make && \
+    cargo install doh-proxy
+
+FROM playn/alpine
+COPY --from=builder /root/.cargo/bin/doh-proxy /usr/local/bin/doh-proxy
+RUN apk add --no-cache libgcc
+ENTRYPOINT [ "/usr/local/bin/doh-proxy" ]

+ 27 - 0
ghproxy/Dockerfile

@@ -0,0 +1,27 @@
+FROM agostof/uwsgi-nginx:python3.7
+
+LABEL maintainer="Apq <[email protected]>"
+
+RUN pip install flask requests
+
+COPY gh-proxy/app /app
+WORKDIR /app
+
+# Make /app/* available to be imported by Python globally to better support several use cases like Alembic migrations.
+ENV PYTHONPATH=/app
+
+# Move the base entrypoint to reuse it
+RUN mv /entrypoint.sh /uwsgi-nginx-entrypoint.sh
+# Copy the entrypoint that will generate Nginx additional configs
+COPY gh-proxy/entrypoint.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
+
+# Run the start script provided by the parent image tiangolo/uwsgi-nginx.
+# It will check for an /app/prestart.sh script (e.g. for migrations)
+# And then will start Supervisor, which in turn will start Nginx and uWSGI
+
+EXPOSE 80
+
+CMD ["/start.sh"]

+ 21 - 0
ghproxy/build.txt

@@ -0,0 +1,21 @@
+mkdir -p ~/sync/DockerImg/ghproxy/
+cd ~/sync/DockerImg/ghproxy
+
+# 下载源码
+git clone https://github.com/hunshcn/gh-proxy.git
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/ghproxy:amd64 .
+docker push amwpfiqvy/ghproxy:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/ghproxy:arm64 .
+docker push amwpfiqvy/ghproxy:arm64
+
+# 任意机器上构建latest标签并推送
+docker manifest rm amwpfiqvy/ghproxy
+docker manifest create --amend amwpfiqvy/ghproxy \
+    amwpfiqvy/ghproxy:amd64 \
+    amwpfiqvy/ghproxy:arm64
+
+docker manifest push amwpfiqvy/ghproxy

+ 25 - 0
headscale-ui/Caddyfile

@@ -0,0 +1,25 @@
+{
+	skip_install_trust
+	auto_https disable_redirects
+	http_port {$HTTP_PORT}
+	https_port {$HTTPS_PORT}
+}
+
+:{$HTTP_PORT} {
+	redir / /web
+	uri strip_prefix /web
+	file_server {
+		root /web
+	}
+}
+
+:{$HTTPS_PORT} {
+	redir / /web
+	uri strip_prefix /web
+	tls internal {
+		on_demand
+	}
+	file_server {
+		root /web
+	}
+}

+ 76 - 0
headscale-ui/Dockerfile

@@ -0,0 +1,76 @@
+# arguments
+ARG VERSION="master"
+# Branch to check out
+ARG CHECKOUT_BRANCH="master"
+
+FROM node:lts AS build
+
+#environment variables
+ENV PROJECT_NAME="headscale-ui"
+# URL for the github/git location
+ENV PROJECT_URL="https://github.com/gurucomputing/headscale-ui"
+
+# Set the staging environment
+WORKDIR /staging/scripts
+WORKDIR /staging
+RUN chown 1000:1000 /staging
+
+# Copy across the scripts folder
+COPY scripts/* ./scripts/
+
+# Set permissions for all scripts. We do not want normal users to have write
+# access to the scripts
+RUN chown -R 0:0 scripts
+RUN chmod -R 755 scripts
+
+# Build the image. This build runs as root
+RUN /staging/scripts/1-image-build.sh
+
+#####
+## Second Image
+#####
+
+FROM alpine:latest
+
+#environment variables
+ENV PROJECT_NAME="headscale-ui"
+# URL for the github/git location
+ENV PROJECT_URL="https://github.com/gurucomputing/headscale-ui"
+# Ports that caddy will run on
+ENV HTTP_PORT="80"
+ENV HTTPS_PORT="443"
+
+# Production Web Server port. Runs a self signed SSL certificate
+EXPOSE 443
+
+# Set the staging environment
+WORKDIR /data
+WORKDIR /web
+WORKDIR /staging/scripts
+WORKDIR /staging
+
+# Copy across the scripts folder
+COPY scripts/* ./scripts/
+# Copy default caddy config from project root
+COPY ./Caddyfile /staging/Caddyfile
+COPY --from=build /staging/${PROJECT_NAME}/build /web
+
+RUN apk add --no-cache caddy
+
+# Create a group and user
+RUN addgroup -S appgroup && adduser -D appuser -G appgroup
+
+# Set permissions for all scripts. We do not want normal users to have write
+# access to the scripts
+RUN chown -R 0:0 scripts
+RUN chmod -R 755 scripts
+
+RUN chown -R appuser:appgroup /web
+RUN chown -R appuser:appgroup /data
+
+# Tell docker that all future commands should run as the appuser user
+USER appuser
+
+WORKDIR /data
+
+ENTRYPOINT /bin/sh /staging/scripts/2-initialise.sh

+ 40 - 0
headscale-ui/build.txt

@@ -0,0 +1,40 @@
+Dockerfile来自:https://github.com/gurucomputing/headscale-ui/tree/master/docker/production
+
+#git clone https://gogs.tods.gq/ApqTeam/DockerImg
+
+cd DockerImg/headscale-ui/
+
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/headscale-ui . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/headscale-ui:amd64 .
+docker push amwpfiqvy/headscale-ui:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/headscale-ui:arm64 .
+docker push amwpfiqvy/headscale-ui:arm64
+
+# 任意机器上构建latest标签并推送
+docker manifest create amwpfiqvy/headscale-ui \
+    amwpfiqvy/headscale-ui:amd64 \
+    amwpfiqvy/headscale-ui:arm64
+
+docker manifest push amwpfiqvy/headscale-ui

+ 22 - 0
headscale-ui/scripts/1-image-build.sh

@@ -0,0 +1,22 @@
+#!/bin/sh
+set -x
+
+# add dependencies
+# jq for parsing version information
+# git for cloning the repository
+apk add --no-cache jq git
+
+#clone the project
+git clone ${PROJECT_URL} ${PROJECT_NAME}
+cd ${PROJECT_NAME}
+git checkout ${CHECKOUT_BRANCH}
+
+# install the project
+npm install
+
+# inject the version number
+VERSION=$(jq -r '.version' package.json)
+sed -i "s/insert-version/${VERSION}/g" ./src/routes/settings.html/+page.svelte
+
+# build the project
+npm run build

+ 16 - 0
headscale-ui/scripts/2-initialise.sh

@@ -0,0 +1,16 @@
+#!/bin/sh
+
+#----#
+# placeholder for testing
+# while true; do sleep 1; done
+#----#
+
+# check if /data/Caddyfile exists, copy across if not
+if [ ! -f /data/Caddyfile ];
+then
+  echo "no Caddyfile detected, copying across default config"
+  cp /staging/Caddyfile /data/Caddyfile
+fi
+
+echo "Starting Caddy"
+/usr/sbin/caddy run --adapter caddyfile --config /data/Caddyfile

+ 8 - 0
hugo/Dockerfile

@@ -0,0 +1,8 @@
+FROM playn/alpine:3.12.0
+ARG version=0.74.2
+ADD https://github.com/gohugoio/hugo/releases/download/v${version}/hugo_${version}_Linux-64bit.tar.gz /tmp
+RUN tar -xf /tmp/hugo_${version}_Linux-64bit.tar.gz -C /tmp && \
+    mv /tmp/hugo /usr/local/bin/ && \
+    rm /tmp/*
+WORKDIR /src
+VOLUME /src

+ 10 - 0
kms/Dockerfile

@@ -0,0 +1,10 @@
+FROM alpine:latest as builder
+RUN apk add --no-cache git make build-base && \
+    git clone --depth 1 --branch master --single-branch https://github.com/Wind4/vlmcsd.git && \
+    cd vlmcsd && \
+    make
+
+FROM playn/alpine
+COPY --from=builder /vlmcsd/bin/vlmcsd /usr/local/bin/vlmcsd
+EXPOSE 1688/tcp
+CMD [ "/usr/local/bin/vlmcsd", "-D", "-d" ]

+ 10 - 0
lego/Dockerfile

@@ -0,0 +1,10 @@
+# syntax=docker/dockerfile:1
+FROM playn/alpine
+# ARG version=4.4.0
+RUN export version=$(wget -qO- https://api.github.com/repos/go-acme/lego/releases/latest | grep '"tag_name":' | head -n 1 | sed -E 's/.*"([^"]+)".*/\1/'); \
+    wget -P /tmp -c https://github.com/go-acme/lego/releases/download/${version}/lego_${version}_linux_amd64.tar.gz; \
+    tar zxf /tmp/lego_${version}_linux_amd64.tar.gz -C /tmp; \
+    mv /tmp/lego /usr/local/bin/lego; \
+    rm -rf /tmp/*; \
+    unset version
+ENTRYPOINT ["/usr/local/bin/lego"]

+ 13 - 0
lego/Dockerfile.builder

@@ -0,0 +1,13 @@
+# syntax=docker/dockerfile:1
+FROM golang:alpine AS builder
+WORKDIR /go
+ENV GO111MODULE on
+RUN apk --no-cache --no-progress add make git && \
+    git clone --depth 1 https://github.com/go-acme/lego.git && \
+    cd /go/lego && make build
+
+FROM playn/alpine
+RUN apk add --no-cache ca-certificates && \
+    update-ca-certificates
+COPY --from=builder /go/lego/dist/lego /usr/local/bin/lego
+ENTRYPOINT [ "/usr/local/bin/lego" ]

+ 18 - 0
myurls/Dockerfile

@@ -0,0 +1,18 @@
+FROM golang:1.19-alpine AS build
+ARG TARGETARCH
+RUN apk add --update git
+RUN git clone https://github.com/CareyWang/MyUrls /app
+WORKDIR /app
+RUN go env -w GO111MODULE="on" && go env -w GOPROXY="https://goproxy.cn,direct"
+RUN go mod tidy 
+RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -o myurls main.go 
+
+FROM alpine:latest
+WORKDIR /app
+COPY --from=build /app/myurls ./
+COPY --from=build /app/public/* ./public/
+COPY start.sh ./
+RUN chmod 777 ./start.sh
+
+EXPOSE 8002
+ENTRYPOINT [ "sh", "-c", "/app/start.sh" ]

+ 42 - 0
myurls/build.txt

@@ -0,0 +1,42 @@
+git clone https://gogs.tods.eu.org/ApqTeam/DockerImg.git
+cd DockerImg/myurls/
+
+# Dockerfile 修改自 https://github.com/stilleshan/dockerfiles/blob/main/myurls/Dockerfile
+# 改动: 1、public目录直接从build中复制 2、start.sh改为将http://example.com替换为//${MYURLS_DOMAIN}
+
+# 下载源码
+git clone https://github.com/CareyWang/MyUrls.git
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/myurls . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/myurls:amd64 .
+docker push amwpfiqvy/myurls:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/myurls:arm64 .
+docker push amwpfiqvy/myurls:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/myurls
+docker manifest create amwpfiqvy/myurls \
+    amwpfiqvy/myurls:amd64 \
+    amwpfiqvy/myurls:arm64
+docker manifest push amwpfiqvy/myurls

+ 5 - 0
myurls/start.sh

@@ -0,0 +1,5 @@
+#/bin/sh
+
+sed -i "s#http://example.com#//${MYURLS_DOMAIN}#g" /app/public/index.html
+
+/app/myurls -domain ${MYURLS_DOMAIN} -conn ${REDIS} -ttl ${MYURLS_TTL}

+ 49 - 0
rainloop/Dockerfile

@@ -0,0 +1,49 @@
+FROM php:8.1.11-apache-bullseye
+
+ARG RAINLOOP_VERSION=1.17.0
+
+ARG DEBIAN_FRONTEND=noninteractive
+ARG RAINLOOP_URL=https://github.com/RainLoop/rainloop-webmail/releases/download/v${RAINLOOP_VERSION}/rainloop-legacy-${RAINLOOP_VERSION}.zip
+ARG RAINLOOP_URL_ASC=https://github.com/RainLoop/rainloop-webmail/releases/download/v${RAINLOOP_VERSION}/rainloop-legacy-${RAINLOOP_VERSION}.zip.asc
+ARG RAINLOOP_PGP_PUBLIC_KEY=https://www.rainloop.net/repository/RainLoop.asc 
+ARG RAINLOOP_GPG_FINGERPRINT="3B79 7ECE 694F 3B7B 70F3  11A4 ED7C 49D9 87DA 4591"
+
+ENV APACHE_DOCUMENT_ROOT /rainloop
+
+WORKDIR /tmp
+
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
+
+COPY entrypoint.sh /entrypoint.sh
+
+RUN chmod +x /entrypoint.sh
+
+RUN sed -ri -e "s!/var/www/html!${APACHE_DOCUMENT_ROOT}!g" /etc/apache2/sites-available/*.conf
+
+RUN sed -ri -e "s!/var/www/!${APACHE_DOCUMENT_ROOT}!g" /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
+
+RUN apt-get update -qq \
+    && apt-get install -q -y --no-install-recommends unzip=6.0-26+deb11u1 wget=1.21-1+deb11u1 gpg=2.2.27-2+deb11u2 gpg-agent=2.2.27-2+deb11u2 \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/* \
+    &&  wget -q ${RAINLOOP_PGP_PUBLIC_KEY} \
+    && wget -q ${RAINLOOP_URL_ASC} \
+    && wget -q ${RAINLOOP_URL} \
+    && gpg --import RainLoop.asc \
+    && FINGERPRINT="$(LANG=C gpg --verify rainloop-legacy-${RAINLOOP_VERSION}.zip.asc rainloop-legacy-${RAINLOOP_VERSION}.zip 2>&1 \
+      | sed -n "s#Primary key fingerprint: \(.*\)#\1#p")" \
+    && if [ -z "${FINGERPRINT}" ]; then echo "ERROR: Invalid GPG signature!" && exit 1; fi \
+    && if [ "${FINGERPRINT}" != "${RAINLOOP_GPG_FINGERPRINT}" ]; then echo "ERROR: Wrong GPG fingerprint!" && exit 1; fi \
+    &&  mkdir ${APACHE_DOCUMENT_ROOT} \
+    && unzip -q /tmp/rainloop-legacy-${RAINLOOP_VERSION}.zip -d ${APACHE_DOCUMENT_ROOT} \
+    && apt-get purge -q -y unzip wget gpg gpg-agent \
+    && apt-get autoremove -y \
+    && rm -rf /tmp/*
+
+EXPOSE 80
+
+VOLUME ["/rainloop/data"]
+
+WORKDIR /rainloop/data
+
+ENTRYPOINT ["/entrypoint.sh"]

+ 17 - 0
rainloop/auto_update.bash

@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# 注意:不同shell对语法的支持有细微差别,第一行并不能随便写。
+
+# 自动更新为最新版本
+ftag_name=$(curl -ksSL https://api.github.com/repos/RainLoop/rainloop-webmail/releases/latest | jq -r '.tag_name')
+fName="/app/rainloop-${ftag_name}.zip"
+
+if [ ! -e "${fName}" ]; then
+	curl -o ${fName} -ksSL $(curl -ksSL https://api.github.com/repos/RainLoop/rainloop-webmail/releases/latest | jq -r '.assets[0].browser_download_url')
+	rm -rf /var/www/rainloop
+	rm -f /var/www/index.php
+	unzip -n -d /var/www/ ${fName}
+	chmod -R 777 /var/www/rainloop
+fi
+
+if [[ "${1}"x != "OnlyUpdate"x ]]; then php-fpm; fi

+ 40 - 0
rainloop/build.txt

@@ -0,0 +1,40 @@
+Dockerfile来自:https://github.com/wernerfred/docker-rainloop
+
+#git clone https://gogs.tods.gq/ApqTeam/DockerImg
+
+cd DockerImg/rainloop/
+
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/rainloop . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/rainloop:amd64 .
+docker push amwpfiqvy/rainloop:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/rainloop:arm64 .
+docker push amwpfiqvy/rainloop:arm64
+
+# 任意机器上构建latest标签并推送
+docker manifest create amwpfiqvy/rainloop \
+    amwpfiqvy/rainloop:amd64 \
+    amwpfiqvy/rainloop:arm64
+
+docker manifest push amwpfiqvy/rainloop

+ 12 - 0
rainloop/entrypoint.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# Add .htacces according to https://www.rainloop.net/docs/installation/#notice
+echo "Require all denied" > /rainloop/data/.htaccess
+
+# Set rainloop directory permissions to catch bind mounts too
+chown -R www-data:www-data /rainloop/data
+find /rainloop -type d -exec chmod 755 {} \;
+find /rainloop -type f -exec chmod 644 {} \;
+
+# Call same entrypoint command as base image
+/usr/local/bin/apache2-foreground

+ 13 - 0
softether/Dockerfile

@@ -0,0 +1,13 @@
+FROM debian
+
+ENV DOWNLOAD_URL https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.39-9772-beta/softether-vpnserver-v4.39-9772-beta-2022.04.26-linux-x64-64bit.tar.gz
+
+RUN apt-get update && apt-get install -y curl tar gzip grep make gcc cpp
+RUN curl -L -o /opt/softether.tar.gz $DOWNLOAD_URL && tar xzfp /opt/softether.tar.gz -C /opt 
+RUN cd /opt/vpnserver && make i_read_and_agree_the_license_agreement 
+
+COPY files/* /opt/
+RUN chmod 755 /opt/*.sh
+
+#ENTRYPOINT /bin/bash
+ENTRYPOINT /opt/start.sh

+ 18 - 0
softether/build.txt

@@ -0,0 +1,18 @@
+# v4.39-9772-beta
+git clone https://gogs.apqlan.eu.org/ApqTeam/DockerImg.git
+cd DockerImg/softether/
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/softether:amd64 .
+docker push amwpfiqvy/softether:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/softether:arm64 .
+docker push amwpfiqvy/softether:arm64
+
+# 任意机器上构建latest标签并推送
+docker manifest create amwpfiqvy/softether \
+    amwpfiqvy/softether:amd64 \
+    amwpfiqvy/softether:arm64
+
+docker manifest push amwpfiqvy/softether

+ 23 - 0
softether/docker-compose.yml

@@ -0,0 +1,23 @@
+version: '3'
+
+services:
+  softether:
+    image: croc/softether
+    volumes:
+      - './logs/packet_log:/opt/vpnserver/packet_log'
+      - './logs/security_log:/opt/vpnserver/security_log'
+      - './logs/server_log:/opt/vpnserver/server_log'
+      - './config/backup.vpn_server.config:/opt/vpnserver/backup.vpn_server.config'
+      - './config/chain_certs:/opt/vpnserver/chain_certs'
+      - './config/vpn_server.config:/opt/vpnserver/vpn_server.config'
+      - '/etc/localtime:/etc/localtime:ro'
+    privileged: true
+# with host mode - maybe the services on vpn host is not accessible, like http, etc..
+#    network_mode: host
+# with normal mode - you cant add any local bridge, but every service on vpn host is accessible
+    ports:
+      - '9443:443'
+      - '5443:5443'
+      - '5555:5555'
+      - '55555:55555'
+    restart: unless-stopped 

+ 39 - 0
speedtest/Dockerfile

@@ -0,0 +1,39 @@
+FROM php:7.4-apache
+
+# Install extensions
+RUN apt-get update && apt-get install -y \
+    tar \
+    jq \
+    libfreetype6-dev \
+    libjpeg62-turbo-dev \
+    libpng-dev \
+    libpq-dev \
+    && docker-php-ext-install -j$(nproc) iconv \
+    && docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
+    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
+    && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql pgsql
+
+# Prepare files and folders
+
+RUN mkdir -p /app/ /speedtest/
+
+COPY ./ /app/
+
+WORKDIR /app
+
+RUN sh auto_update.bash OnlyUpdate
+
+# Prepare environment variabiles defaults
+
+ENV TITLE=LibreSpeed
+ENV MODE=standalone
+ENV PASSWORD=password
+ENV TELEMETRY=false
+ENV ENABLE_ID_OBFUSCATION=false
+ENV REDACT_IP_ADDRESSES=false
+ENV WEBPORT=80
+
+# Final touches
+
+EXPOSE 80
+CMD ["bash", "/app/auto_update.bash"]

+ 29 - 0
speedtest/auto_update.bash

@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# 注意:不同shell对语法的支持有细微差别,第一行并不能随便写。
+
+# 自动更新为最新版本
+ftag_name=$(curl -ksSL https://api.github.com/repos/librespeed/speedtest/releases/latest | jq -r '.tag_name')
+fName="speedtest-${ftag_name}.tar.gz"
+
+if [ ! -e "${fName}" ]; then
+	curl -o ${fName} -ksSL $(curl -ksSL https://api.github.com/repos/librespeed/speedtest/releases/latest | jq -r '.tarball_url') && tar -xzpvf ${fName}
+
+    dName=$(tar -tzf ${fName}| awk -F "/" '{print $1}' | sort | uniq)
+
+    if [ -d "${dName}" ]; then
+		cp -rf ${dName}/backend/ /speedtest/backend
+
+		cp -rf ${dName}/results/ /speedtest/results/
+
+		cp -f ${dName}/*.js /speedtest/
+		cp -f ${dName}/favicon.ico /speedtest/
+
+		cp -f ${dName}/docker/servers.json /servers.json
+
+		cp -f ${dName}/docker/*.php /speedtest/
+		cp -f ${dName}/docker/entrypoint.sh /
+	fi
+fi
+
+if [[ "${1}"x != "OnlyUpdate"x ]]; then bash /entrypoint.sh; fi

+ 38 - 0
speedtest/build.txt

@@ -0,0 +1,38 @@
+#git clone https://gogs.tods.gq/ApqTeam/DockerImg
+
+cd DockerImg/speedtest/
+
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/speedtest . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/speedtest:amd64 .
+docker push amwpfiqvy/speedtest:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/speedtest:arm64 .
+docker push amwpfiqvy/speedtest:arm64
+
+# 任意机器上构建latest标签并推送
+docker manifest create amwpfiqvy/speedtest \
+    amwpfiqvy/speedtest:amd64 \
+    amwpfiqvy/speedtest:arm64
+
+docker manifest push amwpfiqvy/speedtest

+ 19 - 0
sub-web/Dockerfile

@@ -0,0 +1,19 @@
+# ---- Dependencies ----
+FROM node:16-alpine AS dependencies
+WORKDIR /app
+COPY sub-web/package.json ./
+RUN yarn install
+
+# ---- Build ----
+FROM dependencies AS build
+ENV VUE_APP_SUBCONVERTER_DEFAULT_BACKEND="https://sc.apqarm.eu.org"
+ENV VUE_APP_MYURLS_DEFAULT_BACKEND="https://apqx.eu.org"
+ENV VUE_APP_CONFIG_UPLOAD_BACKEND="https://sc.apqarm.eu.org"
+WORKDIR /app
+COPY sub-web /app
+RUN yarn build
+
+FROM nginx:1.16-alpine
+COPY --from=build /app/dist /usr/share/nginx/html
+EXPOSE 80
+CMD [ "nginx", "-g", "daemon off;" ]

+ 42 - 0
sub-web/build.txt

@@ -0,0 +1,42 @@
+git clone https://gogs.tods.eu.org/ApqTeam/DockerImg.git
+cd DockerImg/sub-web/
+
+# Dockerfile 修改自 https://github.com/CareyWang/sub-web/blob/master/Dockerfile
+
+# 下载源码
+#rm -rf sub-web/
+git clone https://github.com/CareyWang/sub-web.git
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/subweb . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/subweb:amd64 .
+docker push amwpfiqvy/subweb:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/subweb:arm64 .
+docker push amwpfiqvy/subweb:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/subweb
+docker manifest create amwpfiqvy/subweb \
+    amwpfiqvy/subweb:amd64 \
+    amwpfiqvy/subweb:arm64
+docker manifest push amwpfiqvy/subweb

+ 21 - 0
subconverter/Dockerfile

@@ -0,0 +1,21 @@
+FROM alpine
+
+LABEL maintainer="[email protected]"
+
+ENV TZ=Asia/Shanghai
+ENV START_TYPE=edge
+
+COPY app /app
+WORKDIR /base
+WORKDIR /app
+
+RUN set -x && \
+    apk update && \
+    apk add --update curl jq tar && \
+    rm -rf /var/cache/apk/* && \
+    chmod +x /app/*.sh && \
+    sh updater.sh
+
+EXPOSE 25500
+
+ENTRYPOINT [ "sh", "-c", "/app/run.sh" ]

+ 9 - 0
subconverter/app/run.sh

@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# 注意:不同shell对语法的支持有细微差别,第一行并不能随便写。
+
+# 自动更新当前架构可用版本
+cd /app
+sh updater.sh
+
+[ -e "/app/subconverter/subconverter" ] && /app/subconverter/subconverter $@

+ 8 - 0
subconverter/app/sh.fun/Rand.sh

@@ -0,0 +1,8 @@
+#!/bin/sh
+
+Rand() {
+    min=$1
+    max=$(($2-$min+1))
+    num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')
+    echo $(($num%$max+$min))
+}

+ 27 - 0
subconverter/app/sh.fun/curl.sh

@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# 执行curl直至成功
+curl_cycle(){
+    while true; do
+        curl "$@"
+        if [ "$?"x = "0"x ]; then
+            break
+        fi
+    done
+}
+
+# 执行下载直至成功
+curlDown(){
+    folder=$1
+    filename=$2
+    dUrl=$3
+    dProxy=$4
+    
+    [ ! -d "${folder}/tmp" ] && mkdir -p "${folder}/tmp"
+    if [ "${dProxy}"x != ""x ]; then
+        curl_cycle -x ${dProxy} -kfsSL -o "${folder}/tmp/${filename}" ${dUrl}
+    else
+        curl_cycle -kfsSL -o "${folder}/tmp/${filename}" ${dUrl}
+    fi
+    mv "${folder}/tmp/${filename}" "${folder}/${filename}"
+}

+ 57 - 0
subconverter/app/updater.sh

@@ -0,0 +1,57 @@
+#!/bin/sh
+
+. /app/sh.fun/curl.sh
+
+cd /app
+
+# 注意:不同shell对语法的支持有细微差别,第一行并不能随便写。
+
+local_version=$(sed -n '1p' local_version.txt)
+local_time=$(sed -n '2p' local_version.txt)
+
+# 指定版本(最新版或特定版本) https://github.com/MetaCubeX/subconverter
+release_tag="latest"
+#release_tag="v2.0.3"
+
+echo "本地版本: ${local_version} 时间: ${local_time}"
+
+# 获取latest的实际版本号
+if [ "${release_tag}"x = "latest"x ]; then
+    release_tag=$(curl_cycle -kfsSL "https://api.github.com/repos/MetaCubeX/subconverter/releases/latest" | jq -r .tag_name)
+fi
+# 获取发布信息(文件名、更新时间、下载地址)
+releaseJson=$(curl_cycle -kfsSL "https://api.github.com/repos/MetaCubeX/subconverter/releases" | jq -r --arg tag ${release_tag} '.[]|select(.tag_name==$tag)')
+
+fName=""
+fUrl=""
+release_time="2023-01-15T16:45:04Z"
+case $(uname -m) in
+    x86_64)
+        # amd64 $(uname -m)="x86_64"
+        fName=$(echo "${releaseJson}" | jq -r '.assets[]|select(.browser_download_url|contains("linux64"))|.name')
+        fUrl=$(echo "${releaseJson}" | jq -r '.assets[]|select(.browser_download_url|contains("linux64"))|.browser_download_url')
+        release_time=$(echo "${releaseJson}" | jq -r '.assets[]|select(.browser_download_url|contains("linux64"))|.updated_at')
+    ;;
+    *)
+        # arm64 $(uname -m)="aarch64"
+        fName=$(echo "${releaseJson}" | jq -r --arg arch $(uname -m) '.assets[]|select(.browser_download_url|contains($arch))|.name')
+        fUrl=$(echo "${releaseJson}" | jq -r --arg arch $(uname -m) '.assets[]|select(.browser_download_url|contains($arch))|.browser_download_url')
+        release_time=$(echo "${releaseJson}" | jq -r --arg arch $(uname -m) '.assets[]|select(.browser_download_url|contains($arch))|.updated_at')
+    ;;
+esac
+
+echo "指定版本: ${release_tag} 时间: ${release_time}"
+
+if [ "${release_tag}"x != ""x ] && [ "${release_tag}"x != "${local_version}"x -o "${release_time}"x != "${local_time}"x ]; then
+    [ -d "subconverter" ] && rm -rf subconverter
+    
+    curlDown ./ ${fName} ${fUrl}
+    tar -xzpvf ${fName}
+    
+    # 复制配置文件
+    #cp appCfg/pref.toml subconverter/base/config/
+
+    echo "${release_tag}" > local_version.txt
+    echo "${release_time}" >> local_version.txt
+    echo "版本已更新至: ${release_tag}"
+fi

+ 36 - 0
subconverter/build.txt

@@ -0,0 +1,36 @@
+git clone https://gogs.tods.eu.org/ApqTeam/DockerImg.git
+cd DockerImg/subconverter/
+
+### 创建构建实例
+
+# 如果已存在,可以先删除
+docker buildx ls
+docker buildx rm build -f
+
+docker buildx create --use --name build --node build --driver docker-container --driver-opt network=host
+
+### end 创建构建实例
+
+
+### 构建并推送
+
+docker buildx build --platform linux/amd64,linux/arm64 -t amwpfiqvy/subconverter . --push
+
+### end 构建并推送
+
+-- 以下为按架构分别构建 ----------------------------------------------------------------
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/subconverter:amd64 .
+docker push amwpfiqvy/subconverter:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/subconverter:arm64 .
+docker push amwpfiqvy/subconverter:arm64
+
+# 任意机器上构建latest标签并推送
+#docker manifest rm amwpfiqvy/subconverter
+docker manifest create amwpfiqvy/subconverter \
+    amwpfiqvy/subconverter:amd64 \
+    amwpfiqvy/subconverter:arm64
+docker manifest push amwpfiqvy/subconverter

+ 12 - 0
temp-mail/Dockerfile

@@ -0,0 +1,12 @@
+FROM node:alpine
+LABEL version="1.0" maintainer="apq<[email protected]>"
+
+COPY temp-mail/src /app
+
+WORKDIR /app
+
+RUN npm install
+
+EXPOSE 25 3000
+
+ENTRYPOINT npm start

+ 21 - 0
temp-mail/build.txt

@@ -0,0 +1,21 @@
+mkdir -p ~/sync/DockerImg/temp-mail/
+cd ~/sync/DockerImg/temp-mail
+
+# 下载源码
+git clone https://github.com/colin-chang/temp-mail.git
+
+# amd64上构建并推送
+docker build -t amwpfiqvy/temp-mail:amd64 .
+docker push amwpfiqvy/temp-mail:amd64
+
+# arm64上构建并推送
+docker build -t amwpfiqvy/temp-mail:arm64 .
+docker push amwpfiqvy/temp-mail:arm64
+
+# 任意机器上构建latest标签并推送
+docker manifest rm amwpfiqvy/temp-mail
+docker manifest create --amend amwpfiqvy/temp-mail \
+    amwpfiqvy/temp-mail:amd64 \
+    amwpfiqvy/temp-mail:arm64
+
+docker manifest push amwpfiqvy/temp-mail