部署 shadowsocks-manager(旧)
Table of Contents

shadowsocks-manager 是一个 Shadowsocks 多用户及流量管理面板。

本文写作时第二版 shadowsocks-manager 尚未完成 WebGUI 等基础功能开发,本文仅针对 shadowsocks-manager 第一版(即 version1 分支)为了使用更新的功能,请优先考虑安装 shadowsocks-manager 最新版另外,为了使部署过程最简化,请使用 Ubuntu 14.04 完成本文操作

本文操作在 root 账户下进行,如使用非 root 账户请自行注意权限。

配置依赖环境

shadowsocks-manager 依赖 Node.js 4.4 及 MongoDB 3.2。

Node.js 4.x 安装

运行下面命令安装 Node.js 4.x 版本:

$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ apt-get install -y nodejs

MongoDB 3.2 安装

添加软件源公钥:

$ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

添加软件源:

$ echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

更新源:

$ apt-get update

安装 MongoDB:

$ apt-get install -y mongodb-org=3.2.10 mongodb-org-server=3.2.10 mongodb-org-shell=3.2.10 mongodb-org-mongos=3.2.10 mongodb-org-tools=3.2.10

固定 MongoDB 版本:

$ echo "mongodb-org hold" | sudo dpkg --set-selections
$ echo "mongodb-org-server hold" | sudo dpkg --set-selections
$ echo "mongodb-org-shell hold" | sudo dpkg --set-selections
$ echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
$ echo "mongodb-org-tools hold" | sudo dpkg --set-selections

安装 shadowsocks-manager

克隆仓库 version1 分支:

$ git clone -b version1 https://github.com/shadowsocks/shadowsocks-manager.git

安装 bower:

$ npm install -g bower

进入目录展开安装:

$ cd shadowsocks-manager
$ npm install
$ bower install

配置

创建配置文件

创建并编辑配置文件:

$ cp config.js.sample config.js
$ vim config.js

配置文件内 db 字段为数据库配置,MongoDB 默认未开启用户认证并且只监听本地 IP,故若无内外网连接需求则保持默认即可。

更改 admin 字段内 emailpassword 为管理员账户及密码,而mail 字段可使用 Mailgun 服务配置。

配置数据库

创建数据库:

$ mongo
> mongodb://localhost
... use shadowsocks-manager

此处若使用其他名字,则需更改 config.js 文件内 db 字段的 name 使其保持一致。

若出现 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 提示,可以参考这个页面禁用 Transparent Huge Pages

启动

在 shadowsocks-manager 目录中运行命令启动服务:

$ node server

此时已经可以通过浏览器访问 http://<你的服务器 IP>:6003 并使用前文中设置的管理员账号密码登陆来查看 shadowsocks-manager 是否部署成功。

但因服务器连接需保持程序运行,所以使用 supervisor 守护 server 进程。

使用 supervisor 守护进程

参见使用 supervisor 守护进程

配置后端 Shadowsocks

shadowsocks-manager 需配合官方 Python 或 libev 原版使用(而非 manyuser 之类的 fork 版本)。

启动 sserver 时通过参数 --manager-address 启用 Shadowsocks 的运行中多用户管理功能,若管理面板和 Shadowsocks 服务在同一服务器则运行:

$ ssserver --manager-address 127.0.0.1:6001 -c tests/server-multi-passwd.json

若前后端非同一服务器,则要修改监听地址使 Shadowsocks 监听全部:

$ ssserver --manager-address 0.0.0.0:6001 -c tests/server-multi-passwd.json

并配置 iptables 使 6001 端口仅接受来自管理面板服务器的通信:

$ sudo iptables -I INPUT -p tcp --dport 6001 -j DROP
$ sudo iptables -I INPUT -s <管理面板 IP> -p tcp --dport 6001 -j ACCEPT

保存规则:

$ iptables-save > /etc/iptables-rules

编辑 /etc/network/interfaces 添加一行使前文规则每次开机自动重载:

pre-up iptables-restore < /etc/iptables-rules

额外

使用 RockMongo 管理数据库

参见 安装 RockMongo 管理 MongoDB

通过 80 端口提供服务

若服务器上只有 shadowsocks-manager 一项 HTTP/HTTPS 服务,则可以通过简单的修改 config.js 来使其通过 80 端口提供服务:

express: {
    http: 80,
    https: 443,
    key: '',
    cert: ''
}

但若你的服务器已安装 Apache 等网页服务器,则需要通过本地搭建反向代理实现在 80 端口提供服务,参见 使用 Apache 搭建反向代理

禁止原 6003 端口非本机访问

运行以下命令添加 iptables 规则:

$ iptables -I INPUT -p tcp --dport 6003 -j DROP
$ iptables -I INPUT -s 127.0.0.1 -p tcp --dport 6003 -j ACCEPT

保存规则:

$ iptables-save > /etc/iptables-rules

编辑 /etc/network/interfaces 添加一行使前文规则每次开机自动重载:

pre-up iptables-restore < /etc/iptables-rules