feat: migrate Osaka node to full sing-box

This commit is contained in:
Codex
2026-09-01 23:25:30 -07:00
parent 4ed88a46c5
commit 2fe6976d18
13 changed files with 162 additions and 53 deletions
@@ -1,43 +0,0 @@
{
"inbounds": [
{
"type": "trojan",
"tag": "trojan-in",
"listen": "::",
"listen_port": ${LISTEN_PORT},
"sniff": true,
"sniff_override_destination": true,
"users": [
{
"name": "user1",
"password": "${USER1_PASSWORD}"
}
],
"tls": {
"enabled": true,
"server_name": "${DOMAIN}",
"acme": {
"domain": "${DOMAIN}",
"email": "${ACME_EMAIL}",
"dns01_challenge": {
"provider": "cloudflare",
"api_token": "${CLOUDFLARE_API_TOKEN}"
}
}
},
"multiplex": {
"enabled": true
}
}
],
"outbounds": [
{
"type": "direct"
}
],
"log": {
"disabled": false,
"level": "info",
"timestamp": true
}
}
@@ -1,6 +1,6 @@
# LiteLLM Vertex AI Relay # Osaka LiteLLM Vertex AI Relay
- 仅通过 HK 节点的 Tailscale IPv4 地址监听;`LISTEN_IP` 不要填写公网地址或 `0.0.0.0` - 仅通过 Osaka 节点的 Tailscale IPv4 地址监听;`LISTEN_IP` 不要填写公网地址或 `0.0.0.0`
- ADC、LiteLLM key 仅存放于 Arcane `.env`,不得提交 Git。 - ADC、LiteLLM key 仅存放于 Arcane `.env`,不得提交 Git。
- 默认监听端口为 `1049`;需要修改时设置 `LITELLM_PORT` - 默认监听端口为 `1049`;需要修改时设置 `LITELLM_PORT`
- 后续 Vertex Anthropic 模型在 `config.yaml` 增加独立模型项。 - 后续 Vertex Anthropic 模型在 `config.yaml` 增加独立模型项。
@@ -1,6 +1,6 @@
services: services:
adc-init: adc-init:
image: alpine:3.22 image: alpine:3.24
restart: "no" restart: "no"
environment: environment:
GOOGLE_ADC_B64: ${GOOGLE_ADC_B64} GOOGLE_ADC_B64: ${GOOGLE_ADC_B64}
@@ -1,3 +1,4 @@
# Osaka node model routing.
model_list: model_list:
- model_name: gemini-3.6-flash - model_name: gemini-3.6-flash
litellm_params: litellm_params:
@@ -1,12 +1,25 @@
services: services:
config-render: config-render:
image: alpine:3.20 image: alpine:3.24
environment: environment:
DOMAIN: ${DOMAIN} DOMAIN: ${DOMAIN}
ACME_EMAIL: ${ACME_EMAIL} ACME_EMAIL: ${ACME_EMAIL}
LISTEN_PORT: ${LISTEN_PORT} LISTEN_PORT: ${LISTEN_PORT}
USER1_PASSWORD: ${USER1_PASSWORD} USER1_PASSWORD: ${USER1_PASSWORD}
CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN} CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN}
ANYTLS_HY2_PORT: ${ANYTLS_HY2_PORT}
ANYTLS_PASSWORD: ${ANYTLS_PASSWORD}
HY2_PASSWORD: ${HY2_PASSWORD}
HY2_OBFS_PASSWORD: ${HY2_OBFS_PASSWORD}
VLESS_PORT: ${VLESS_PORT}
VLESS_UUID: ${VLESS_UUID}
REALITY_SERVER_NAME: ${REALITY_SERVER_NAME}
REALITY_PRIVATE_KEY: ${REALITY_PRIVATE_KEY}
REALITY_SHORT_ID: ${REALITY_SHORT_ID}
SNELL_V4_PORT: ${SNELL_V4_PORT}
SNELL_V4_PSK: ${SNELL_V4_PSK}
SNELL_V6_PORT: ${SNELL_V6_PORT}
SNELL_V6_PSK: ${SNELL_V6_PSK}
volumes: volumes:
- ./etc/sing-box/config.json.template:/template/config.json.template:ro - ./etc/sing-box/config.json.template:/template/config.json.template:ro
- sing-box-config:/output - sing-box-config:/output
@@ -20,7 +33,7 @@ services:
restart: "no" restart: "no"
sing-box: sing-box:
image: ghcr.io/sagernet/sing-box:v1.12.13 image: ghcr.io/sagernet/sing-box:v1.14.0
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
config-render: config-render:
@@ -0,0 +1,136 @@
{
"certificate_providers": [
{
"type": "acme",
"tag": "public-cert",
"domain": [
"${DOMAIN}"
],
"email": "${ACME_EMAIL}",
"dns01_challenge": {
"provider": "cloudflare",
"api_token": "${CLOUDFLARE_API_TOKEN}"
}
}
],
"inbounds": [
{
"type": "trojan",
"tag": "trojan-in",
"listen": "::",
"listen_port": ${LISTEN_PORT},
"users": [
{
"name": "user1",
"password": "${USER1_PASSWORD}"
}
],
"tls": {
"enabled": true,
"server_name": "${DOMAIN}",
"certificate_provider": "public-cert"
},
"multiplex": {
"enabled": true
}
},
{
"type": "anytls",
"tag": "anytls-in",
"listen": "::",
"listen_port": ${ANYTLS_HY2_PORT},
"users": [
{
"name": "user1",
"password": "${ANYTLS_PASSWORD}"
}
],
"tls": {
"enabled": true,
"server_name": "${DOMAIN}",
"certificate_provider": "public-cert"
}
},
{
"type": "hysteria2",
"tag": "hysteria2-in",
"listen": "0.0.0.0",
"listen_port": ${ANYTLS_HY2_PORT},
"obfs": {
"type": "salamander",
"password": "${HY2_OBFS_PASSWORD}"
},
"users": [
{
"name": "user1",
"password": "${HY2_PASSWORD}"
}
],
"tls": {
"enabled": true,
"server_name": "${DOMAIN}",
"alpn": [
"h3"
],
"certificate_provider": "public-cert"
}
},
{
"type": "vless",
"tag": "vless-reality-in",
"listen": "::",
"listen_port": ${VLESS_PORT},
"users": [
{
"name": "user1",
"uuid": "${VLESS_UUID}",
"flow": "xtls-rprx-vision"
}
],
"tls": {
"enabled": true,
"server_name": "${REALITY_SERVER_NAME}",
"reality": {
"enabled": true,
"handshake": {
"server": "${REALITY_SERVER_NAME}",
"server_port": 443
},
"private_key": "${REALITY_PRIVATE_KEY}",
"short_id": [
"${REALITY_SHORT_ID}"
],
"max_time_difference": "2m"
}
}
},
{
"type": "snell",
"tag": "snell-v4-compatible-in",
"listen": "::",
"listen_port": ${SNELL_V4_PORT},
"version": 5,
"psk": "${SNELL_V4_PSK}",
"obfs_mode": "none"
},
{
"type": "snell",
"tag": "snell-v6-in",
"listen": "::",
"listen_port": ${SNELL_V6_PORT},
"version": 6,
"psk": "${SNELL_V6_PSK}",
"mode": "default"
}
],
"outbounds": [
{
"type": "direct"
}
],
"log": {
"disabled": false,
"level": "info",
"timestamp": true
}
}
@@ -1,4 +1,4 @@
FROM alpine:3.21 AS downloader FROM alpine:3.24 AS downloader
ARG SNELL_VERSION=5.0.1 ARG SNELL_VERSION=5.0.1
ARG SNELL_ZIP_SHA256=9bea1c2b9e35b73b31634856c04d18c393072b9e5dcde6a32781d8b8f908c539 ARG SNELL_ZIP_SHA256=9bea1c2b9e35b73b31634856c04d18c393072b9e5dcde6a32781d8b8f908c539
@@ -1,4 +1,4 @@
# Snell Server # Osaka Snell Server (rollback only)
- 当前锁定 Snell Server 5.0.1,由本目录 Dockerfile 从官方包构建并校验 SHA-256。 - 当前锁定 Snell Server 5.0.1,由本目录 Dockerfile 从官方包构建并校验 SHA-256。
- 客户端因禁用 QUIC 显示 `version=4` 属现有兼容用法,不改变服务端 5.0.1 部署。 - 客户端因禁用 QUIC 显示 `version=4` 属现有兼容用法,不改变服务端 5.0.1 部署。
@@ -1,3 +1,4 @@
# Retained temporarily as a rollback target during the sing-box migration.
services: services:
snell-v5: snell-v5:
build: build:
@@ -1,4 +1,5 @@
#!/bin/sh #!/bin/sh
# Osaka rollback-only Snell entrypoint.
set -eu set -eu
: "${PSK:?PSK is required}" : "${PSK:?PSK is required}"
@@ -16,4 +17,3 @@ psk = ${PSK}
EOF EOF
exec /usr/local/bin/snell-server -c /tmp/snell-server.conf exec /usr/local/bin/snell-server -c /tmp/snell-server.conf
@@ -1,3 +1,4 @@
# Osaka web endpoints. MeTube is intentionally not routed here.
rules.kais.cloud { rules.kais.cloud {
root * /srv/web root * /srv/web
reverse_proxy filebrowser:80 reverse_proxy filebrowser:80
@@ -1,4 +1,4 @@
# HK Web Services # Osaka Web Services
- Arcane 项目名:`web-managed` - Arcane 项目名:`web-managed`
- 复用旧项目 `/opt/stacks/web` 下的持久化数据。 - 复用旧项目 `/opt/stacks/web` 下的持久化数据。
@@ -1,6 +1,6 @@
services: services:
caddy: caddy:
image: caddy:2.10.2 image: caddy:2.11.4
container_name: caddy container_name: caddy
restart: unless-stopped restart: unless-stopped
ports: ports: