[OLD] ss-panel 前端 + manyusers 后端部署笔记

网上的教程不是不全就是过时,自己解决问题,做个笔记。

安装 LNMP 环境

LNMP 是常用的 web 环境 Linux, Nginx, MySQL, PHP 的简称。

NGINX

安装 Nginx :

sudo apt-get update  
sudo apt-get install nginx  

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 数据库:

Tips: 若想更改默认加密方式,请先在添加数据库前查看下文“进阶”。

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;
    }
}

复制并修改 SS-Panel 配置文件

进入到 ss-panel 文件夹,复制配置文件:

cp .env.example .env  

修改其中的信息,其中 yourpasswd 记住修改:

# 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 = ''  

设置密码

redis 密码

修改配置文件,在 /etc/redis/redis.conf 找到 requirepass 一行,设置自己的密码。并且终端进行如下操作:

redis-cli
>config set requirepass yourpasswd
OK
>config get requirepass
(error) ERR operation not permitted
>auth yourpasswd
>OK
>config get requirepass
>
加盐等操作

可以仔细看 ss-panel 的配置文件 .env,在 salt 中添加随机字符串。

添加一个管理员账户

php xcat createAdmin  

开启 nginx 服务器:

sudo service nginx start  

好了,现在访问网站应该就可以看到 SS-Panel 界面了。前端界面到此部署完毕。

如果出现 “Slim Application Error。A website error has occurred. Sorry for the temporary inconvenience.” 那你可能还需要更改ss-panel文件夹的读写权限:

chmod -R 777 ss-panel

部署后端 shadowsocks-manyuser

下载代码:

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

安装 cmysql 依赖:

sudo pip install cymysql  

(如果没有安装 pip,用 apt-get install python-pip 安装一遍即可)

进入 shadowsocks-rm/shadowsocks 目录,修改 config.py 文件的以下项,记得替换 yourpassword 为自己刚刚设置的密码:

#Config
MYSQL_HOST = 'localhost'  
MYSQL_PORT = 3306  
MYSQL_USER = 'root'  
MYSQL_PASS = 'yourpassword'  
MYSQL_DB = 'shadowsocks'  

然后就完成了!python servers.py 试试,如果没有报错就可以正常运行了。

守护进程

screen -S shadowsocks

在此窗口执行 python servers.py。退出时按 Ctrl+A+D

回到 session:

screen -R

开机自启动

需要开机自启动的两个服务:redis 和 manyusers。

检查 redis 是否已经添加开机自启,关机自关
update-rc.d redis-server defaults
manyusers

/etc/rc.local 中添加:

/usr/bin/nohup /usr/bin/python /etc/shadowsocks-rm/shadowsocks/servers.py

进阶

更改默认链接密码加密方式和密码长度

加密方式的实质改变

shadowsocks-rm/shadowsocks 中的 config.py 可以修改 SS-METHOD,推荐使用 aes-256-cfb

加密方式的表象改变

在 db-160409.sql 中的 User 配置中将加密方式从 rc4-md5 改为 aes-256-cfb

在随机生成的密码中修改长度,并添加特殊字符
vi ss-panel/app/Utils/Tools.php

更改其中 $length 和字符集

//获取随机字符串
public static function genRandomChar($length = 8)
{
    // 密码字符集,可任意添加你需要的字符
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
为管理员和用户采用新的密码长度

管理员:

vi ss-panel/app/Command/XCat.php

function createAdmin 中修改$user->passwd = Tools::genRandomChar(6);

用户:

vi ss-panel/app/Controllers/AuthController.php

// do reg user 下修改 $user->passwd = Tools::genRandomChar(6);

连接故障排查

若不能连接,检查防火墙配置。SS-Panel 的端口是递加的,也就是说如果第一个用户的端口是 1000,那么新增用户的端口会是 1001, 1002……也就是说防火墙只要开启一个范围段的端口即可。举例如果要开启 1000-1050 的端口,可以sudo ufw allow 1000:1050/tcp或者iptables -I INPUT -p tcp -m tcp --dport 1000:1050 -j ACCEPT

ss-panel 界面的个性化

编辑界面可以进入 ss-panel/resources/views 中修改相应php文件。

加速

Linux 内核中提供了若干套 TCP 拥塞控制算法,这些算法各自适用于不同的环境。

  1. reno是 最基本的拥塞控制算法,也是 TCP 协议的实验原型。

  2. bic 适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是 2.6.8 到 2.6.18 之间的 Linux 内核的默认算法。

  3. cubic 是修改版的 bic,适用环境比 bic 广泛一点,它是 2.6.19 之后的 linux 内核的默认算法。

  4. hybla 适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。

我们需要做的工作就是将TCP拥塞控制算法改为 hybla 算法,并且优化 TCP 参数。

要求 Linux 内核 3.5 或以上。

增加系统文件描述符的最大限数

编辑文件 limits.conf

vi /etc/security/limits.conf

增加以下两行

* soft nofile 51200
* hard nofile 51200

启动 ss-manyuers 服务器之前,设置以下参数

ulimit -n 51200

调整内核参数

修改配置文件 /etc/sysctl.conf:

fs.file-max = 51200

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla

修改后执行 sysctl -p 使配置生效。

相关

以上加速方法已经过时,Debian 9 开启 BBR 加速的方法,见 Enable BBR on Debian Stretch