• 本站在不影响浏览的前提下添加了少量广告,请允许本站广告可显示,感谢~
  • 如果有必要,请使用Telegram关注https://t.me/getssr_info
  • 关于国内某个软件代理商代理的CorelDRAW系列软件,如果各位需要正版请访问corel官方网站,不要访问带有china的网站!!!反正话是放在这里了,听不听随你
  • 如果遇到文章图片不显示请联系管理员处理,谢谢
  • 欢迎访问寡人的吐槽胜地,我们真的只是吐槽,不谈技术,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 版权声明:大部分文章是从网上复制的!并不表示全部都是从网上复制的!

可能是最好的 ss-panel 部署教程

技术类 大变态 8年前 (2016-05-16) 2401次浏览 已收录 0个评论

截至今日,这篇文章已经发布了近五个月,在这期间,ss-panel 和 shadowsocks-manyuser 都有很大的更新,而且本文也在 Google 搜索 ss panel 结果中占了个前排,为了不误人子弟(愧对这个标题),在此修订。


今天折腾了好久 ss-panel,期间遇到了一些奇奇怪怪的问题,但是网上都没有好的解决方法。网上那么多教程有些事写的笼统,有些还是瞎复制的。由此萌生了想要写一篇配置 ss-panel 和 ss-manyuser 的教程,希望能够帮到需要的人。

注意,本教程 不是 图文并茂的面向小白的教程,窝希望你能够有足够的 linux 操作经验再来看这篇教程。至少你需要熟悉 ssh 连接,熟悉 web 环境的配置,最好可以看得懂一些代码。

一、安装并配置 ss-panel

本教程打算先配置好前端,当然你想要先配置后端可以拉下去。

既然你已经看到这里了,那么你肯定已经搭建好了 web 环境吧?本教程所使用的环境是 NGINX + PHP 7 + MariaDB 10。当然其他主流 LNMP/LAMP 架构都可以(PHP >= 5.4),确保你的站点可以访问后就继续吧。

0x01 下载 ss-panel 源码

ss-panel GitHub 项目地址:orvice/ss-panel

cd 至你的站点 web 根目录,从 git 上 clone 源码:

$ git clone https://github.com/orvice/ss-panel.git

现在项目默认的 master 分支的版本已经是 3.0+ 了,相比起以前的版本,新版使用了 LightFish MVC 框架。旧版可以在这里找到。

ss-panel 3.0 release

当然你也可以下载源码再用 WINSCP 传到 VPS 上

注意 git clone 后的目录结构,请务必保证 /public 目录在站点根目录下。可以使用 $ mv ss-panel/* ./ 命令将子目录的内容移动到当前目录来(可能需要先运行一次 $ shopt -s dotglob 来移动以 . 开头的文件)。

# 目录结构应该类似于这样
prpr@prinzeugen:/home/wwwroot/ss.prinzeugen.net$ tree  
.
├── app
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── db-160502.sql
├── LICENSE
├── public
├── README.md
├── resources
├── storage
├── views
└── xcat

0x02 配置 ss-panel

由于新版使用了 MVC 架构,所以部署步骤比起以前变了许多,现在网上的 ss-panel 部署教程也大多停留在 v2。这里我介绍的是新版的部署方法,旧版 v2 的部署教程我会放在最下面。

执行完上面的步骤之后,你兴高采烈地访问了你的站点,却得到了无情的 403 Forbidden。

WTF?然后你惊奇的发现,站点根目录下竟然没有 index.php!看来是作者把入口文件放到奇怪的地方去了,按照作者的部署说明,你需要在你站点的 NGINX 设置中加入这些:

# 在你原先的 root 目录后面加上 /public
root /home/wwwroot/ss.prinzeugen.net/public;

# MVC 惯例的 URL 重写
location / {  
    try_files $uri $uri/ /index.php$is_args$args;
}

编辑完后,$ service nginx reload 重载 NGINX 配置,然后访问你的站点。。于是你得到了一个 500 Internal Server Error。

看来是 PHP 的锅,我们把 display_error 打开,看看哪里出错了:

Warning: require(/home/wwwroot/ss.prinzeugen.net/vendor/autoload.php): failed to open stream: No such file or directory in /home/wwwroot/ss.prinzeugen.net/bootstrap.php on line 18

Fatal error: require(): Failed opening required '/home/wwwroot/ss.prinzeugen.net/vendor/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/wwwroot/ss.prinzeugen.net/bootstrap.php on line 18  

蛤?文件不存在?

原来,V3 版的 ss-panel 使用了高大上的 composer 来自动管理依赖,这样就不用把一堆库打包在一起啦(孤陋寡闻的窝)

$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar  install

这样,composer 就会根据 composer.json 中的内容自动安装好依赖,vendor 文件夹也出现了。

再安装所需的 redis 依赖:

$ sudo apt-get install redis-server

虽然我觉得这明明是不用 redis 也能实现的功能就是了。。。

接着进行配置:

$ cp .env.example .env

.env.example 复制一份重命名为 .env,自行修改其中的数据库等信息。

# database 数据库配置
db_driver = 'mysql'  
db_host = 'localhost'  
db_database = 'ss-panel'  
db_username = 'test'  
db_password = 'password'  
db_charset = 'utf8'  
db_collation = 'utf8_general_ci'  
db_prefix = ''  

数据库的创建窝就不多说了,建站的一般都玩过数据库吧?将根目录下的 db-160122.sql 导入到数据库中即可。其他配置自行修改。

现在访问你的站点,就可以看到熟悉的 ss-panel 首页啦~

另,如果有遇到

SmartyException: unable to write file /home/wwwroot/ss.prinzeugen.net/storage/framework/smarty/compile/xxx  

这样的错误,那是因为现在 www 用户(运行 NGINX 的用户)没有对 ss-panel 目录的写权限(可能的原因有使用 root 用户进行了上述操作)。使用 $ chown -R www /home/wwwroot/ss.prinzeugen.net/ 恢复 www 对其的写权限。

0x03 进入 ss-panel 后台

现在访问 http://your-domain/admin 就可以进入 ss-panel 后台了。

不过细心的你可能会注意到,刚才导入数据表的时候,user 表并没有添加记录,那要咋进管理后台呢?

当然你可以手动加一条记录,不过作者已经提供了一个更方便的方式:

$ php xcat createAdmin

在站点根目录下运行,根据提示即可创建管理员账号。

add admin/创建管理员帐号.....  
Enter your email/输入管理员邮箱: h@prinzeugen.net  
Enter password for: h@prinzeugen.net /为 h@prinzeugen.net 添加密码 xxx  
Email: h@prinzeugen.net, Password: xxx  
Press [Y] to create admin..... 按下[Y]确认来确认创建管理员账户..... y  
start create admin accountSuccessful/ 添加成功!  

ss-panel dashboard screenshot

到这里,前端就已经配置完成了。现在开始部署作为后端的 shadowsocks-manyuser


二、部署配置 shadowsocks-manyuser

0x01 安装 shadowsocks-manyuser

ss-manyuser 项目地址:mengskysama/shadowsocks-rm/manyuser

先 clone 到本地:

$ git clone -b manyuser https://github.com/mengskysama/shadowsocks-rm.git

注意那个 -b manyuser,这个参数表示 clone 仓库的 manyuser 分支。不加上的话可就下成单用户版的 shadowsocks 了哦。

clone 后,你的目录结构应该是这样的:

prpr@prinzeugen:~/shadowsocks-rm$ tree  
.
├── CHANGES
├── CONTRIBUTING.md
├── debian
├── LICENSE
├── MANIFEST.in
├── README.md
├── README.rst
├── setup.py
├── shadowsocks  <- Look here
├── tests
└── utils

其中的 shadowsocks 子目录才是我们需要的,外面的是 setup.py 的相关文件

安装 pip 包管理器(如果没安装的话):

$ sudo apt-get install python-pip  # For Debian/Ubuntu
$ sudo yum install python-pip      # For CentOS

安装依赖包:

$ pip install cymysql

注意,官方文档里的 shadowsocks.sql 就不用导入了,所用到的 user 表在上面 ss-panel 已经导入了。

0x02 配置 shadowsocks-manyuser

编辑 config.py 中的 MySQL 数据库连接信息,务必于上面 ss-panel 所配置的相同

MYSQL_HOST = 'localhost'  
MYSQL_PORT = 3306  
MYSQL_USER = 'test'  
MYSQL_PASS = 'password'  
MYSQL_DB = 'ss-panel'  

好了,现在可以试着运行一下 $ python servers.py

注意,是 servers.py 而不是 server.py

如果没错的话,应该可以看到如下信息:

db start server at port [62111] pass [yahoo~test!]  
adding server at 0.0.0.0:62111  

如果遇到这样的错误:

WARNING:root:db thread except:(1045, u"Access denied for user 'test'@'127.0.0.1' (using password: YES)")  

首先请 $ mysql -u 用户名 -p 检查用户名密码是否正确。如果这样没问题的话,那估计就是权限问题了。根据错误日志,给予该用户从 127.0.0.1 连接的权限:

# 登录到 MySQL 控制台,执行如下语句
# 其中 ss-panel 为数据库名,test 为所指定的用户名
# 'test'@'%' 意为授权所有来自 127.0.0.1 的连接

GRANT ALL PRIVILEGES ON `ss-panel`.* TO 'test'@'127.0.0.1' IDENTIFIED BY '密码' WITH GRANT OPTION;  

如果不会用 MySQL 控制台,你也可以在 phpMyAdmin 的 用户 -> 编辑权限 -> 登录信息 中找到相关配置。

现在,servers.py 应该可以正常启动了。

start successfully

其中的端口以及密码就是数据库 user 表中的信息,可以在 ss-panel 中修改。那一堆 WARNING:root:db loop 是轮询数据库时的输出,不影响。

0x03 常见错误 FAQ

连接上 ss 试试看能不能翻墙了?

八成不能。

虽然你成功的把 servers.py 跑起来了,但还可能有各种神奇的错误阻止你翻出伟大的墙。下面窝们来排排错

首先国际惯例查看连接:

$ netstat -anp | grep 你的端口

正常的话,应该是这样的:

Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 0.0.0.0:62111            0.0.0.0:*               LISTEN      32083/python  
tcp        0      0 162.233.122.111:62111    115.233.233.140:47177   TIME_WAIT   -  
tcp        0      0 162.233.122.111:62111    115.233.233.140:47161   TIME_WAIT   -  
tcp        0      0 162.233.122.111:62111    115.233.233.140:47160   TIME_WAIT   -  
tcp        0      0 162.233.122.111:62111    115.233.233.140:47157   TIME_WAIT   -  

如果没有来自你的 IP 的 TCP 连接的话,那八成就是防火墙的锅了,执行 iptables 放行你的端口:

$ iptables -I INPUT -p tcp -m tcp --dport 你的端口 -j ACCEPT
$ iptables-save

ss-panel 新注册的用户所分配的端口均为其 id-1 的用户的端口号 + 1。比如说你把 admin 用户(uid 为 1)的端口改为 12450(ss-panel 中不能改,去数据库改),那么后面注册的新用户的端口就会是 12451, 12452 这样递增的。

所以如果你要开放注册,就要这样配置你的 iptables:

# 注意是半角冒号,意为允许 12450 及以上的端口
# 也可以指定 12450:15550 这样的范围
$ iptables -I INPUT -p tcp -m tcp --dport 12450: -j ACCEPT

现在再连接 ss,你就应该可以看到 TCP 连接信息了。

如果还是翻不出去,并且得到了这样的错误信息的话:

WARNING:root:unsupported addrtype 30, maybe wrong password or encrypti  
ERROR:root:can not parse header when handling connection from 115.203.  
Traceback (most recent call last):  
  File "../shadowsocks/tcprelay.py", line 315, in _handle_stage_addr
    raise Exception('can not parse header')
Exception: can not parse header  

正如 WARNING 所说,是加密方式出错了。你可能会说,不对啊,我在 ss-panel 里设置的加密方式和客户端上的一样啊?

最开始窝也是这么认为的,直到窝发现了 config.py 中的

SS_BIND_IP = '0.0.0.0'  
SS_METHOD = 'rc4-md5'  

两个设置项。

很遗憾,mengskysama 的 ss-manyuser 并不支持不支持自定义加密方式,所以面板上的修改是没有卵用的。(你需要 shadowsocks-go mu

修改 config.py 中的加密方式,在 ss-panel 中添加节点,应该就可以翻出去了。

三、配置 ss-manyuser 守护进程以及多节点配置

0x01 使用 supervisor 监控 ss-manyuser 运行

如果你只是想让 ss-manyuser 在后台运行的话,可以参考我写的这篇文章

安装 supervisor (用的是上面安装过的 pip):

$ pip install supervisor

创建 supervisor 配置文件

# 输出至 supervisor 的默认配置路径
$ echo_supervisord_conf > /etc/supervisord.conf

运行 supervisor 服务

$ supervisord

配置 supervisor 以监控 ss-manyuser 运行

$ vim /etc/supervisord.conf

在文件尾部(当然也可以新建配置文件,不过这样比较方便)添加如下内容并酌情修改:

[program:ss-manyuser]
command = python /root/shadowsocks-rm/shadowsocks/servers.py  
user = root  
autostart = true  
autorestart = true  

其中 command 里的目录请自行修改为你的 servers.py 所在的绝对路径。

重启 supervisor 服务以加载配置

$ killall -HUP supervisord

查看 shadowsocks-manyuser 是否已经运行:

$ ps -ef | grep servers.py
root       952   739  0 15:40 ?        00:00:00 python /root/shadowsocks-rm/shadowsocks/servers.py  

可以通过以下命令管理 shadowsock-manyuser 的状态

$ supervisorctl {start|stop|restart} ss-manyuser

0x02 ss-panel 的多节点配置

其实多节点也没咋玄乎,说白了就是多个后端共用一个数据库而已。轮询数据库的活都是后端干的,前端只不过是改下数据库而已。

只要把所有后端的 config.py 中的数据库地址设置为同一个,并且给予数据库用户远程访问权限就好了:

# 在 MySQL 控制台中执行
GRANT ALL PRIVILEGES ON `ss-panel`.* TO 'test'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;  

ss-panel nodes screenshot

success google

至此,你已完成对 ss-panel 的部署。叫上小伙伴们一起享受自由的互联网吧。

其他诸如 ss-panel 所使用的 maxCDN 访问太慢了啊之类的,还请自行解决。


本站大部分资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费内容,请在下载后 24 小时之内自觉删除,若作商业用途请购买正版;如果有版权争议,请发送邮件至 master@digac.cc(请留下写明原因和文章链接),我们将及时处理,谢谢!

喜欢 (1)
大变态
关于作者:
头像
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址