配置多节点多用户的Shadowsocks比较繁琐且需要一定技术门槛,
调试的这些天里遇到很多问题,那么就将这些整理一下都写下来吧。
新手请先参考部署完成《CentOS部署LNMP环境及一些常用命令》
一、安装依赖组件
yum install wget git tar gcc gcc-c++ openssl openssl-devel pcre-devel python-devel libevent automake autoconf libtool make -y
升级Python(新手请跳过以免操作不当无法使用)
wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
tar zxvf Python-2.7.6.tgz
cd /root/Python-2.7.6/Modules/zlib
./configure
make && make install
cd /root/Python-2.7.6
./configure
make && make install
python -V //查看当前python的版本
mv /usr/bin/python /usr/bin/python2.6.6 //这里填刚才显示的版本号
ln -s /usr/local/bin/python2.7 /usr/bin/python //创建2.7版本的软连接
yum与python的兼容问题还要处理下:
vi /usr/bin/yum
#!/usr/bin/python2.6.6 //第一行修改为原始的变更后的版本文件名
python //运行下查看版本信息,Ctrl+Z 停止退出。
显示python版本2.7.6就说明成功了,请直接跳过以下这些内容直至第二大部分的安装!
如运行出错:ImportError: No module named binascii ,是由于升级版本不对导致的。
这部分内容是全新部署不用操作不用看的!以下这部分是:
已有以下软件才升级Python版本出现很多问题的解决方法:
安装setuptools
cd /root
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
sh setuptools-0.6c11-py2.7.egg
如果提示 zipimport.ZipImportError: can’t decompress data; zlib not available ,说明需要安装zlib库:
cd /root/Python-2.7.6/Modules/zlib
./configure
make && make install
重新编译一下python
cd /root/Python-2.7.6
make && make install
安装setuptools
cd /root
sh setuptools-0.6c11-py2.7.egg
安装pip
wget http://pypi.python.org/packages/source/p/pip/pip-7.1.0.tar.gz --no-check-certificate
tar zxf pip-7.1.0.tar.gz
cd pip-7.1.0
python setup.py install
错误提示:in resolve pkg_resources.DistributionNotFound: pip==7.1.0 说明需要安装pip7.1.0版本
二、安装setuptools、pip、cymysql、swig、M2Crypto、gevent
cd /root
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
python ez_setup.py --insecure
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz
tar zxvf pip-7.1.2.tar.gz
cd pip-7.1.2
python setup.py install
pip install cymysql
cd /root
wget http://jaist.dl.sourceforge.net/project/swig/swig/swig-3.0.0/swig-3.0.0.tar.gz
tar zxvf swig-3.0.0.tar.gz
cd swig-3.0.0
./configure
make && make install
cd /root
wget https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.22.3.tar.gz --no-check-certificate
tar zxvf M2Crypto-0.22.3.tar.gz
cd M2Crypto-0.22.3
python setup.py build
python setup.py install
cd /root
yum install -y libevent
pip install greenlet
pip install gevent
三、安装及配置Shadowsocks
cd
git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
vim /root/shadowsocks/shadowsocks/Config.py
vim /root/shadowsocks/shadowsocks/config.json
编辑 config.json 只更改加密算法为:
aes-256-cfb
编辑 Config.py 文件的数据库配置信息。
重点是节点的配置文件中需要注意的是:
#Config
MYSQL_HOST = ‘‘ #MySQL服务器域名
MYSQL_PORT = 3306 #MySQL服务器端口
MYSQL_USER = ‘‘ #MySQL用户名
MYSQL_PASS = ‘‘ #MySQL用户密码
MYSQL_DB = ‘‘ #MySQL数据库名
MANAGE_PASS = ‘‘ #这个随便填没关系的
MANAGE_BIND_IP = ‘127.0.0.1‘ #当前节点IP地址
MANAGE_PORT = 3306
这里再说一下,没安装vim的可以用yum install vim 进行安装。
vim 编辑器下按 i 进入编辑模式就可以编辑了,编辑好了之后,
按Esc输入:(冒号)再输入wq(保存退出)即可完成文本编辑。
以下SS-panel配置部分节点服务器不用做连接到主数据库即可。
四、创建数据库并开启远程连接
(1)创建数据库并开启远程连接
mysql -u root -p
提示输入MySQL密码,进入后创建数据库:
create database shadowsocks;
grant all privileges on shadowsocks.* to ‘root‘@‘%‘ identified by ‘password‘ ;
flush privileges;
这里的grant all reivileges 是赋予账户所有的权限,可以只赋予select和update权限即可。
shadowsocks.*是shadowsocks数据库下的所有表,root是用户名%指任意主机连接地址。
password就是设置的账户密码,flush privileges;是重新加载权限。这样就能远程连接了。
下面是另一种方法可以更改权限,我们再来查看下确定是否已经拥有远程连接的权限了:
use mysql;
select host,user from user;
查看结果是不是root或你指定的那个用户登录的host字段是否显示为%,如不是就执行:
update user set host = ‘%‘ where user = ‘root‘; 执行完后再select host,user from user;
查看下root对应的host是否更改成了%,更改成功就表示该用户可以任意IP地址登录了。
flush privileges; 记得要执行一下这个命令才能让刚才更改的权限信息重新载入生效。
exit; 或输入 quit 退出MySQL控制台。当然也可以在phpmyadmin里面进行权限更改。
我们还需要确定防火墙是否开放了数据库所需要的3306端口来保障我们的通信正常的。
(2)打开远程连接数据库的端口
添加规则,打开3306端口:
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
查看规则是否生效:
iptables -L -n 或者 service iptables status
service iptables save 或者 /etc/init.d/iptables save 这样重启也可以生效了。
五、前端SS-Panel的配置
上传SS-panel的文件到网站目录中,lnmp是在:/home/wwwroot/default/ 目录下。
进入phpmyadmin,将SS-panelsql下所有sql文件全都导入shadowsocks数据库中。
编辑SS-panel的数据库配置文件lib/config.php (config-sample.php改为config.php)
其中user表中id=1的用户是管理员,端口号也是起始端口号之后的端口由此而递增。
默认帐号:first@blood.com 默认密码:1993 密码为MD5值,可以自行更改。
命令行操作为:
cd /home/wwwroot/default
git clone https://github.com/orvice/ss-panel.git
mv -f ss-panel/* .
cat /home/wwwroot/default/sql/*.sql > shadowsocks.sql
mysql -u root -p
use shadowsocks;
source /home/wwwroot/default/shadowsocks.sql;
exit
六、运行测试并设置开机自动后台运行
(1)运行测试
cd /root/shadowsocks/shadowsocks
python server.py
看输出信息来确定是否正常运行连接到数据库和监听端口。
按ctrl+c 可以中断,根据反馈的信息去找问题所在去解决。
(2)后台运行
下面我们来介绍几种用法,选其一即可:
<1>nohup
cd /root/shadowsocks/shadowsocks
nohup python server.py &
& 是后台运行意思。nohup 命令> log.file 2>&1 & 可将日志文件重定向到log.file中。
运行后如果不重定向则会在目录下生成nohup.out日志文件可用cat nohup.out查看。
用这个命令需要注意的是要使用exit退出才能关闭终端会话否则程序也会一起关闭。
如果需要查看可以使用jobs -l命令,关闭可以使用kill PID号即可关闭所指定的任务。
<2>screen
screen -dmS Shadowsocks python server.py
screen -dmS 用来创建一个处于断开模式的会话,Shadowsocks为session name。
screen -r Shadowsocks 可以恢复指定的会话,忘记了可以用screen -list来查看。
(3)配置开机自动启动并在后台运行
vim /etc/rc.local
编辑添加以下内容:
cd /root/shadowsocks/shadowsocks
python server.py &
screen实现的方法就添加以下内容:
cd /root/shadowsocks/shadowsocks
screen -dmS Shadowsocks python server.py
(4)supervisor值守进程方法:
cd /root
pip install --upgrade pip
pip install supervisor
echo_supervisord_conf > /etc/supervisord.conf
vim /etc/supervisord.conf
[include] //在底部编辑去注释
files = /etc/supervisord.conf.d/*.conf //存退
mkdir /etc/supervisord.conf.d
cd /etc/supervisord.conf.d
vim shadowsocks.conf
[program:shadowsocks]
command=python /root/shadowsocks/shadowsocks/server.py -c /root/shadowsocks/shadowsocks/config.json
autostart=true
autorestart=true
stderr_logfile = /root/shadowsocks.err.log
stdout_logfile = /root/shadowsocks.out.log
运行supervisor
supervisord -c /etc/supervisord.conf
supervisor运行后就交由supervisorctl来管理了
使修改的配置立即生效:supervisorctl
update设置开机启动supervisor
vi /etc/rc.local //添加以下内容
supervisord -c /etc/supervisord.conf
supervisor控制台命令
supervisorctl 打开命令行
supervisorctl status 获得所有程序状态
supervisorctl
start all 运行所有进程supervisorctl stop all 停止所有进程supervisorctl restart all 重启所有进程supervisorctl shutdown 关闭所有程序
supervisorctl
start shadowsocks 运行目标进程supervisorctl stop shadowsocks 停止所有进程supervisorctl restart shadowsocks 重启目标程序supervisorctl tail -f shadowsocks stderr 查看此进程的日志文件
Web管理supervisor
supervisor自带Web Server 可以通过页面来管理进程,
前提是需要开启配置文件中的 [inet_http_server] 项。
vim /etc/supervisord.conf
[inet_http_server]
port = 127.0.0.1:9001;username = admin;password = yourpassword即可在浏览器中输入地址和端口号进行网页化的管理。