This commit is contained in:
mm644706215
2025-08-01 23:42:35 +08:00
parent 06c9d049ac
commit ebdbea362b
5 changed files with 116 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
derper/derper.env
derper/certbot.env
derper/letsencrypt
derper/certs
derper/logs

32
derper/Dockerfile Normal file
View File

@@ -0,0 +1,32 @@
# ─── Stage 1: Build derper ────────────────────────────────────────────
FROM golang:1.24 AS builder
WORKDIR /src
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go install -ldflags="-s -w -extldflags=-static" \
tailscale.com/cmd/derper@main
# ─── Stage 2: Final image ────────────────────────────────────────────
FROM alpine:3.14
LABEL maintainer="you@example.com"
RUN apk add --no-cache \
bash \
curl \
jq \
openssl \
certbot \
bind-tools \
ca-certificates \
wget \
tar
# 工作目录 & 日志目录
WORKDIR /app
# 复制 derper 二进制 & 脚本
COPY --from=builder /go/bin/derper /app/derper
COPY scripts/ /app/scripts/
RUN chmod +x /app/derper /app/scripts/*.sh

36
derper/docker-compose.yml Normal file
View File

@@ -0,0 +1,36 @@
version: "3.8"
services:
derper:
build:
context: .
dockerfile: Dockerfile
image: hotwa/derper:latest
container_name: derper
restart: unless-stopped
env_file:
- derper.env
ports:
- "3477:3477"
- "3478:3478/udp"
volumes:
- ./letsencrypt:/etc/letsencrypt
- ./certs:/app/certs
- ./logs:/var/log/certbot
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock:ro
# tailscale login first require
entrypoint: [""]
command:
- /bin/bash
- -c
- |
/app/derper \
-hostname headscale.jmsu.top \
-certdir /app/certs \
-certmode manual \
-a :3477 \
-stun-port 3478 \
-http-port -1 \
-verify-clients

23
derper/install.sh Normal file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
cd /opt/certbot-aliyun-docker/derper
docker run --rm \
-e REGION=cn-hangzhou \
-e ACCESS_KEY_ID=LTAI5tP1yWFMMJhF6nrGYEit \
-e ACCESS_KEY_SECRET=xBEMX76UwvO21DCES2605VM0kAU7TV \
-e DOMAIN=headscale.jmsu.top \
-e EMAIL=pylyzeng@gmail.com \
-e CRON_SCHEDULE="0 0 * * *" \
-v "$PWD/letsencrypt:/etc/letsencrypt" \
-v "$PWD/certs:/app/certs" \
-v "$PWD/logs:/var/log/certbot" \
hotwa/certbot:latest \
certbot certonly \
-d "*.headscale.jmsu.top" \
--manual \
--preferred-challenges dns \
--manual-auth-hook "alidns" \
--manual-cleanup-hook "alidns clean" \
--email pylyzeng@gmail.com \
--agree-tos \
--non-interactive \
-v

20
derper/renew.sh Normal file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
cd /opt/certbot-aliyun-docker/derper
docker run --rm \
-e REGION=cn-hangzhou \
-e ACCESS_KEY_ID=LTAI5tP1yWFMMJhF6nrGYEit \
-e ACCESS_KEY_SECRET=LTAI5tP1yWFMMJhF6nrGYEit \
-e DOMAIN=headscale.jmsu.top \
-e EMAIL=pylyzeng@gmail.com \
-v "$PWD/letsencrypt:/etc/letsencrypt" \
-v "$PWD/certs:/app/certs" \
-v "$PWD/logs:/var/log/certbot" \
hotwa/certbot:latest \
certbot renew \
--manual \
--preferred-challenges dns \
--manual-auth-hook "alidns" \
--manual-cleanup-hook "alidns clean" \
--deploy-hook "/app/scripts/webhook.sh" \
--no-random-sleep-on-renew \
-v