今天弄了一下的ss-panel,看见网上好多教程,基本上都不太全。折腾了好久,终于弄好了,于是打算写一篇文章分享一下!
本教程面向新手,不过还是希望读者有一定的Linux操作经验,有搭建服务器的经验那就更好了!废话不多说,我们开始:
基本环境搭建:
系统版本:ubuntu16.04
安装 LNMP
LNMP 是常用的 web 环境 Linux, Nginx, MySQL, PHP 的统称。如果你已经配置完成了环境可以直接跳过这一步。网络上有一些自动安装的脚本,不过在这里我主要介绍一下手动安装各个部件。
NGINX
安装 Nginx 没啥难度,直接用包管理就好。如果你需要更多的模块得自己编译,当然这就不是我们的讨论范围了。
sudo apt-get update
sudo apt-get install nginx
Finished.
MySQL
同理,直接用包管理就好。
sudo apt-get install mysql-server
安装过程中会让你设置数据库管理员密码,照做就好。
PHP
Ubuntu 自带的 PHP 版本太老了,所以得安装最新的 PHP 7。稍微麻烦一点。
添加 PPA:
sudo add-apt-repository ppa:ondrej/php
如果有乱码,试试下面的这个:
sudo apt-get install language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
完了就开始装吧。
sudo apt-get update
sudo apt-get install php7.0 php7.0-fpm php7.0-mysql php7.0-gd php7.0-curl php7.0-mbstring php7.0-dom
部署 SS-Panel 前端
下载 ss-panel。目录随意,我的放在 /var/www
git clone https://github.com/orvice/ss-panel.git
进入目录,使用 composer 安装需要的依赖。
curl -sS https://getcomposer.org/installer | php
php composer.phar install
没啥问题的话等一会就会装好了。如果有问题,老规矩看输出,缺啥装啥。
完了就安装 Redis:
sudo apt-get install redis-server
添加 MySQL 数据库:
mysql -u root -p
mysql>create database shadowsocks;
> use shadowsocks;
> source /var/www/ss-panel/db-160409.sql;
> flush privileges;
> exit;
配置 NGINX
创建配置文件:
sudo vim /etc/nginx/sites-enabled/ss-panel
加入以下代码:
server {
listen 80;
server_name example.com;
root /var/www/ss-panel/public/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
当然这是典型配置,记得把 example.com 换成你自己的网址。强烈推荐上 HTTPS 保护用户及管理员信息在传输过程中的安全。
复制并修改 SS-Panel 配置文件
进入到 ss-panel 文件夹,复制配置文件:
cp .env.example .env
修改其中的信息,记得把 yourpassword 改成你自己的密码:
# database 数据库配置
db_driver = 'mysql'
db_host = 'localhost'
db_port = '3306'
db_database = 'shadowsocks'
db_username = 'root'
db_password = 'yourpassword'
db_charset = 'utf8'
db_collation = 'utf8_general_ci'
db_prefix = ''
你还需要修改 .env 中的 muKey 字段,修改为任意字符串(最好只包含 ASCII 字符),下面配置后端的时候我们需要使用到这个 muKey:
muKey = 'test'
接下来,确保 storage 目录可写入(否则 Smarty 会报错):
sudo chmod -R 777 /var/www/ss-panel/storage/
其他的配置项目前用不到,以后有需要可以自行修改。
添加一个管理员账户:
php xcat createAdmin
开启 nginx 服务器:
sudo service nginx start
好了,现在访问网站应该就可以看到 SS-Panel 界面了。前端界面到此部署完毕。
接下来部署后端 shadowsocks-manyuser
在本篇教程中我们使用 https://github.com/fsgmhoward/shadowsocks-py-mu 这个版本的后端。
先将代码 clone 到本地:
$ git clone https://github.com/fsgmhoward/shadowsocks-py-mu.git
源码 clone 后,你的目录结构应该是这样的:
其中的 shadowsocks 子目录才是我们需要的,外面的是 setup.py 的相关文件。
配置 shadowsocks-manyuser
进入 shadowsocks 目录,将 config_example.py 复制一份到 config.py:
$ cp config_example.py config.py
修改其中第 15 行和第 29~31 行的内容:
# 启用 MultiUser API
API_ENABLED = True
# 就是在你的站点地址后面加个 /mu
API_URL = 'http://ss.prinzeugen.net/mu'
# 还记得上面在 .env 中填写的 muKey 吗?把它填在这里
API_PASS = 'test'
由于我们选择使用 Mu API 来与前端通信,所以我们不需要修改 config.py 中任何关于数据库的配置。
好了,现在可以试着运行一下 $ python servers.py 了(注意,是 servers.py 而不是 server.py)。如果没错的话,应该可以看到这样的输出:
其中 P[XXX] 表示用户端口,M[XXX] 表示加密方式,E[XXX] 表示用户的邮箱地址。这些都会随着 ss-panel 前端中用户配置的改变而实时变化。
注意:在这之前你得以管理员进入你的前端页面,添加一个节点。加密方法,建议用 aes-256-cfb
0x03 常见错误 FAQ
连接上 shadowsocks 试试看能不能行?八成不能。
虽然你成功的把 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
现在再连接 shadowsocks 就应该可以看到 TCP 连接信息了。并且你可以在 ss-mu 后端的输出信息中看到详细的连接日志:
最后
如果servers.py能成功运行,不报错,但是连上shadowsocks服务器端提示密码有问题的话,很可能就是加密方式有问题(遇到过这个问题),我查看了一下config.py文件里写的默认加密方式是:aes-256-cfb,这也是为什么上面建议用这种方式加密的原因!
配置开机自动运行servers.py
编辑/etc/rc.local文件:
在末尾添加你的运行命令:
python /path/servers.py
path为你servers.py文件的路径。
好了,配置完毕,重启以下试试!稍等片刻,奇迹就将来临!