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使配置生效。