
2025/09/30
两分钟搞定:一键部署 Gost + Clash 订阅(SOCKS5)
用 Docker 两分钟搭建 SOCKS5 代理,并发布 Clash 订阅。
如果你想快速整一个 SOCKS5 代理,还能顺手给 Clash 出个订阅,其实很简单。 下面这套流程照着敲就行:Docker 跑 Gost 当代理核心,再用 Nginx 把订阅文件对外发布。新手也能一次过。
1. 先装下 Docker(没装的话)
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 加入 docker 用户组,避免每次用 sudo
sudo usermod -aG docker $USER
exit # 退出一次再重新 ssh 进来,让权限生效
2. 起个 Gost 容器(SOCKS5)
监听 1080 端口,账号 myuser
,密码 mypass
,一条命令搞定:
docker run -d --name gost --restart unless-stopped \
-p 1080:1080 \
gogost/gost:latest \
-L=socks5://myuser:mypass@:1080
参数解释:
-d
:后台跑,省心--restart unless-stopped
:开机自己起来-p 1080:1080
:把 1080 暴露出来-L
:告诉 Gost 用 SOCKS5 监听
3. 防火墙 / 安全组
把这两个端口放行就行:
- 22/tcp:仅限你自己的公网 IP(用于 SSH 登录)
- 1080/tcp:允许中继服务器或需要访问代理的机器 IP
AWS 的话,入站规则里这么配就好:
- 类型: SSH / 端口: 22 / 来源: 你的公网 IP
- 类型: 自定义 TCP / 端口: 1080 / 来源: 使用代理的服务器公网 IP
4. 试一下代理有没有跑起来
在服务器本机试:
curl -x socks5h://myuser:[email protected]:1080 https://api.ipify.org
换到另一台机器(比如中继服务器)再试:
curl -x socks5h://myuser:mypass@<你的服务器公网IP>:1080 https://api.ipify.org
👉 能看到这台 VPS 的公网 IP,就说明 OK 了。
5. 发一个 Clash 订阅
5.1 装个 Nginx
sudo apt install -y nginx
5.2 丢个订阅文件进去
sudo tee /var/www/html/clash-sub.yaml >/dev/null <<'EOF'
proxies:
- name: "my-socks5"
type: socks5
server: <你的服务器公网IP>
port: 1080
username: "myuser"
password: "mypass"
proxy-groups:
- name: "Proxy"
type: select
proxies:
- my-socks5
- DIRECT
rules:
- MATCH,Proxy
EOF
5.3 在浏览器 / Clash 客户端里用订阅
http://<你的服务器公网IP>/clash-sub.yaml
刷新后就能看到节点 my-socks5
。
🔐 小提醒:把示例账号密码换成强随机密码,1080/tcp
只给可信 IP 放行,会更稳。
在 AI 时代,把这些重复、规范、可脚本化的工作交给 AI,是最高效也最省心的方式。下面这段提示词你只需要原样粘贴给任意主流模型(如 GPT、Claude),它就会一步到位地帮你把 SOCKS5 和 Clash 订阅搭好,还会给出自检与回滚命令。
一键搭建 AI 提示词(原样粘贴给 AI 即可)
我要在一台**全新 Ubuntu(20.04/22.04/24.04)**服务器上,自动部署一个 SOCKS5 代理(Gost)并发布一个 Clash 订阅。
请你按如下要求执行,一步到位:
需求与约束
• SOCKS5 运行在 TCP 1080 端口
• 代理支持认证(默认开启,账户:myuser,密码:mypass);如需关闭认证,只要把 USE_AUTH=false
• Nginx 对外发布 /clash-sub.yaml(URL:http://<服务器公网IP>/clash-sub.yaml)
• 所有命令幂等、可重复执行,失败时应立即退出
• 最后输出验证命令与清理回滚命令
• 如果系统启用了 UFW,请自动放行 80/1080(若未启用则跳过)
请以 root 身份执行下面这份脚本(或在每行前面补上 sudo):#!/usr/bin/env bash
set -euo pipefail
############################
# 可调参数
############################
SOCKS_PORT=1080
USE_AUTH=true # 需要认证:true;不要认证:false
S5_USER="myuser"
S5_PASS="mypass"
SUB_FILE="/var/www/html/clash-sub.yaml"
############################
# 准备与通用
############################
export DEBIAN_FRONTEND=noninteractive
echo "[1/7] 更新包索引(不做发行版升级)"
apt-get update -y
############################
# 安装 Docker(官方仓库)
############################
echo "[2/7] 安装 Docker 依赖与仓库"
apt-get install -y ca-certificates curl gnupg lsb-release
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
UBU_CODENAME="$(. /etc/os-release && echo "${VERSION_CODENAME}")"
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ${UBU_CODENAME} stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
############################
# 启动/更新 Gost(Docker)
############################
echo "[3/7] 部署/更新 Gost 容器(SOCKS5 端口: ${SOCKS_PORT})"
docker rm -f gost 2>/dev/null || true
if [ "${USE_AUTH}" = "true" ]; then
GOST_CMD="-L=socks5://${S5_USER}:${S5_PASS}@:$(printf '%d' "${SOCKS_PORT}")"
else
GOST_CMD="-L=socks5://:$(printf '%d' "${SOCKS_PORT}")"
fi
docker run -d --name gost --restart unless-stopped \
--pull=always \
-p "${SOCKS_PORT}:${SOCKS_PORT}" \
gogost/gost:latest ${GOST_CMD}
echo "Gost 已启动:"
docker ps --filter name=gost --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}"
############################
# 安装 Nginx 并发布 Clash 订阅
############################
echo "[4/7] 安装 Nginx 并发布 Clash 订阅"
apt-get install -y nginx
systemctl enable --now nginx
# 计算公网 IP(供订阅里引用)
PUB_IP="$(curl -fsS https://api.ipify.org || true)"
if [[ -z "${PUB_IP}" ]]; then
echo "无法获取公网 IP,订阅将暂时写入 127.0.0.1;可手动替换。"
PUB_IP="127.0.0.1"
fi
install -d -m 0755 /var/www/html
cat > "${SUB_FILE}" <<'YAML'
# 这是自动生成的最小 Clash 配置(可按需扩展)
mixed-port: 7890
allow-lan: true
mode: Rule
log-level: info
proxies:
- name: "aws-socks5"
type: socks5
server: __PUB_IP__
port: __SOCKS_PORT__
__AUTH_BLOCK__
proxy-groups:
- name: "Select"
type: select
proxies:
- aws-socks5
- DIRECT
rules:
- GEOIP,CN,DIRECT
- MATCH,Select
YAML
# 按开关拼接认证段
if [ "${USE_AUTH}" = "true" ]; then
AUTH_BLOCK=" username: ${S5_USER}\n password: ${S5_PASS}"
else
AUTH_BLOCK=""
fi
# 变量替换
sed -i \
-e "s/__PUB_IP__/${PUB_IP}/g" \
-e "s/__SOCKS_PORT__/${SOCKS_PORT}/g" \
-e "s|__AUTH_BLOCK__|${AUTH_BLOCK}|g" \
"${SUB_FILE}"
# 权限
chown www-data:www-data "${SUB_FILE}"
chmod 0644 "${SUB_FILE}"
# 本机验证
curl -fsSI "http://127.0.0.1/$(basename "${SUB_FILE}")" >/dev/null \
&& echo "Nginx 已能访问本地订阅文件。" \
|| (echo "Nginx 访问订阅失败,请检查。"; exit 1)
############################
# UFW(如启用则放行 80/1080)
############################
echo "[5/7] 如 UFW 已启用,则开放 80 与 ${SOCKS_PORT}"
if ufw status 2>/dev/null | grep -q "Status: active"; then
ufw allow 80/tcp || true
ufw allow "${SOCKS_PORT}"/tcp || true
fi
############################
# 可选:开启 BBR(提升长距离吞吐)
############################
echo "[6/7] (可选)启用 BBR 拥塞控制"
if ! sysctl net.ipv4.tcp_congestion_control | grep -q bbr; then
{
echo "net.core.default_qdisc=fq"
echo "net.ipv4.tcp_congestion_control=bbr"
} >> /etc/sysctl.conf
sysctl -p >/dev/null || true
fi
echo "当前拥塞控制:$(sysctl -n net.ipv4.tcp_congestion_control)"
############################
# 最终信息与校验
############################
echo "[7/7] 自检与使用说明"
echo
echo "=== 自检(SOCKS5 -> 公网 IP) ==="
if [ "${USE_AUTH}" = "true" ]; then
echo "curl -x 'socks5h://${S5_USER}:${S5_PASS}@${PUB_IP}:${SOCKS_PORT}' -sS https://api.ipify.org && echo"
else
echo "curl -x 'socks5h://${PUB_IP}:${SOCKS_PORT}' -sS https://api.ipify.org && echo"
fi
echo
echo "=== 自检(Clash 订阅 URL) ==="
echo "curl -I http://${PUB_IP}/$(basename "${SUB_FILE}")"
echo
echo "=== 清理/回滚(如需) ==="
cat <<'CLEAN'
# 停用并移除 Gost 容器与镜像
docker rm -f gost 2>/dev/null || true
docker image prune -f 2>/dev/null || true
# 移除订阅文件(如需)
rm -f /var/www/html/clash-sub.yaml
# (可选)恢复拥塞控制为 cubic
sed -i '/^net.core.default_qdisc=fq$/d' /etc/sysctl.conf
sed -i '/^net.ipv4.tcp_congestion_control=bbr$/d' /etc/sysctl.conf
sysctl -p || true
CLEAN
echo
echo "=== 完成!请在云控制台安全组放行:22/tcp、80/tcp、${SOCKS_PORT}/tcp(1080 仅放给需要访问的来源 IP 更安全)。==="
我期望的输出
• 显示 Docker 与 Gost 容器运行状态
• 输出 Nginx 就绪、订阅文件可访问
• 提供自检命令(SOCKS5 经 curl 返回公网 IP;订阅 URL 能 200)
• 若有错误,请给出原因与修复建议