部署 shadowsocks-manager
shadowsocks-manager 是一个 Shadowsocks 多用户及流量管理面板。
本文操作在 root 账户下进行,如使用非 root 账户请自行注意权限。
概述
shadowsocks-manager 分别有 m 和 s 两种运行模式(type),type s 运行于后端 shadowsocks 服务器,type m 运行于前端向用户及管理员提供 webgui 页面并通过与后端 type s 通讯以实现对后端 shadowsocks 服务的管理。
安装 shadowsocks-manager
前后端服务器均需安装 shadowsocks-manager,该程序依赖 Node.js 6.x 运行。
Node.js 6.x 安装
运行下面命令安装 Node.js 6.x 版本:
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - $ apt-get install -y nodejs
shadowsocks-manager 安装
通过 npm 安装 shadowsocks-manager:
$ npm i -g shadowsocks-manager
配置后端 shadowsocks 服务
shadowsocks-manager 支援 shadowsocks-python 及 shadowsocks-libev,并强烈推荐使用 shadowsocks-libev 作为后端,下文以 shadowsocks-libev 为例。
安装 shadowsocks-libev
Ubuntu 16.10 以上用户可直接通过 apt 安装:
$ apt-get install shadowsocks-libev
Ubuntu 16.04 用户则需要通过官方 repo 脚本安装,首先获取源代码:
$ git clone https://github.com/shadowsocks/shadowsocks-libev.git $ cd shadowsocks-libev $ git submodule update --init --recursive
然后运行脚本:
$ mkdir -p ~/build-area/ $ cp ./scripts/build_deb.sh ~/build-area/ $ cd ~/build-area $ ./build_deb.sh
运行 shadowsocks-libev
运行命令启动 shadowsocks-libev 的 manager API 服务:
$ ss-manager -m aes-256-cfb -u --manager-address 127.0.0.1:4000
其中
-m 参数为加密方式,--manager-address 参数为 API 监听地址。若使用 shadowsocks-python 版本,则此处 manager API 命令可能需作修改。
运行 type s 的 shadowsocks-manager
在
~/.ssmgr 下建立 ss.yml 作为 type s 的配置文件:$ mkdir ~/.ssmgr $ vim ~/.ssmgr/ss.yml
配置内容如下:
type: s empty: false shadowsocks: address: 127.0.0.1:4000 manager: address: 0.0.0.0:4001 password: 'YOURPASSWD' db: 'ss.sqlite'
此配置文件中的
shadowsocks 部分负责与 shadowsocks-libev 的 manager API 服务进行通讯,所以其中的 address 需要与上文中的 API 监听地址保持一致。manager 部分负责与前端的 shadowsocks-manager type m 进行通讯,若前端 type m 与后端 type s 在同一服务器上可修改 address 为 127.0.0.1:4001 只监听本机通讯,若不在同一服务器则保持原样(端口可自行修改只需注意与后文一致);password 部分自行修改确保安全。
配置完成后运行以下命令开启 shadowsocks-manager type s:
$ ssmgr -c ss.yml
配置前端 webgui 服务
在
~/.ssmgr 下建立 webgui.yml 作为 type m 的配置文件:$ mkdir ~/.ssmgr $ vim ~/.ssmgr/webgui.yml
配置内容如下:
type: m empty: false manager: address: <后端地址>:4001 password: 'YOURPASSWD' plugins: flowSaver: use: true user: use: true account: use: true pay: hour: price: 0.03 flow: 500000000 day: price: 0.5 flow: 7000000000 week: price: 3 flow: 50000000000 month: price: 10 flow: 200000000000 season: price: 30 flow: 200000000000 year: price: 120 flow: 200000000000 email: use: true username: 'username' password: 'password' host: 'smtp.your-email.com' webgui: use: true host: '0.0.0.0' port: '80' site: '<站点地址>' gcmSenderId: '456102641793' gcmAPIKey: 'AAAAGzzdqrE:XXXXXXXXXXXXXX' alipay: use: true appid: <支付宝 APPID> notifyUrl: '' merchantPrivateKey: '<rsa_private_key.pem 中的私钥>' alipayPublicKey: '<支付宝公钥>' gatewayUrl: 'https://openapi.alipay.com/gateway.do' db: 'webgui.sqlite'
其中
manager 部分负责与 type s 进行通讯,将 address 设置为运行 type s 的服务器公网地址,另外注意 address 端口部分及 password 需要与前文中 type s 部分的设置保持一致。plugins 部分设置了站点大部分插件配置:account中的pay用于设置定价。email负责发送验证及密码找回邮件,可使用 Mailgun 服务配置。webgui负责 webgui 的输出,site设置为本站点地址,如果没有特别需求可直接按配置中的80端口直接对外提供访问。alipay为支付宝商家当面付接口,可按照 V2EX 贴文指引进行申请签约。签约完成后到蚂蚁金服开放平台密钥页面按照指示完成「RSA(SHA1) 密钥」的设置,将生成的rsa_private_key.pem中的私钥填入merchantPrivateKey,网页中提供的「支付宝公钥」填入alipayPublicKey,并将 APPID 填入appid。
配置完成后运行以下命令开启 shadowsocks-manager type m:
$ ssmgr -c webgui.yml
此时已经可以通过浏览器访问
http://<前端服务器 IP>:<预设端口> 查看 shadowsocks-manager 是否部署成功,网站架设后注册的首个账户即为管理员身份。额外
使用 MySQL 替换 SQLite
若需要使用 MySQL 替换默认的 SQLite 作为数据库使用,可在配置
ss.yml 及 webgui.yml 时将 db 部分替换为:db: host: '<MySQL 地址>' user: '<MySQL 用户>' password: '<MySQL 密码>' database: '<MySQL 库名>'
提供 HTTPS 或与其他站点共存(推荐)
前文中
webgui.yml 的 plugins 部分的 webgui 配置默认使用 80 端口直接对外提供 web 访问。
但若为了安全需求要提供服务器端的 HTTPS 支持,或该服务器上需同时提供其他站点的 web 访问服务,可将此处端口变更为
80 及 443 以外的其他端口并参见通过 Apahce 或 nginx 等架设反向代理对外提供 web 服务。后台运行
参见使用 supervisor 守护进程或项目 Wiki 页面提供的通过 pm2 后台运行。
请注意使用 supervisor 守护进程中使用的 shadowsocks-manager 为旧版,配置文件均有变化。
如发生 Cannot find module … node_sqlite3.node 错误
这是由于通过 npm 安装 shadowsocks-manager 时没有成功安装依赖的 sqlite3 所导致的,到 shadowsocks-manager 安装目录补装 sqlite3 即可解决:
$ cd /usr/lib/node_modules/shadowsocks-manager/ $ npm install sqlite3 --save
评论
发表评论