搭建这个环境可把我折腾坏了,持续将近一周,总是出现各种错误(自己有点笨而已)。特此写下这篇文章来记录自己踩过的坑
服务器环境
- 服务器vps - 本人使用的是 搬瓦工 (bandwagonhost.com已被墙,此站点亦为官方站点),个人感觉速度还可以,用了也很久了。
- 操作系统CentOS 7 x64(以下操作都以全新CentOS为准 不含radius配置)
系统配置说明(可跳过)
配置epel Repository
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm rpm -ivh epel-release-7-9.noarch.rpm
配置vim 编辑
/etc/vimrc
(目的:防止打开config.php文件时乱码)# 设置行号 set nu set fileencodings=utf-8,gb2312,gbk,gb18030 set termencoding=utf-8 set fileformats=unix set encoding=prc # 设置缩进 set ts=4 set expandtab set autoindent
前端安装说明
安装lnmp
安装screen,目的:安装lnmp时间过长防止连接中断引发不必要的错误,安装教程参考 screen教程,如遇中断可使用下面命令恢复,提前是你创建了screen会话 (此步骤可跳过)
screen -r lnmp
安装lnmp包,可去该站点查看最新可用的包
wget http://soft.vpser.net/lnmp/lnmp1.3-full.tar.gz tar xvzf lnmp1.3-full.tar.gz && cd lnmp1.3-full ./install.sh
安装组件 设置MySQL账户root密码、PHP、Nginx(仅供参考)
新建vhost,并创建数据库
lnmp vhost add
在enter domain时,建议填写真实域名 也可以在nginx配置文件中配置(配置
server_name
),可以直接通过域名访问,提前是你域名做了解析设置如图片所示(仅供参考)
配置nginx
对Nginx进行一些细节配置,打开
/usr/local/nginx/conf/vhost/{your domain}.conf
,添加下面代码到server
配置节location / { try_files $uri $uri/ /index.php$is_args$args; }
修改
root
配置节,修改为root /home/wwwroot/{your domain}/public
PHP程序安装
下载程序代码,执行下面命令
cd /home/wwwroot/{your domain} yum install git -y git clone https://github.com/glzjin/ss-panel-v3-mod.git tmp -b new_master && mv tmp/.git . && rm -rf tmp && git reset --hard
修改网站配置,添加php对目录操作权限
cd /home/wwwroot/{your domain} chown -R root:root * chmod -R 777 * chown -R www:www storage chattr -i .user.ini mv .user.ini public cd public chattr +i .user.ini # 重新添加回权限
- 重启一下nginx
service nginx restart
配置数据库
通过浏览器访问
phpMyAdmin
,地址为http://{your host ip}/phpmyadmin/
(建议修改目录名称防止暴露数据库,执行如下脚本),输入MySQL帐户root和密码,选择你在添加nginx vhost时设置的数据库名称cd /home/wwwroot/default/ mv phpmyadmin {new dir name}
我是直接通过
SQL
菜单手动执行SQL来创建数据库表的,SQL脚本 glzjin_all.sql这个脚本中有些小问题,需要修改一下再执行,修改代码片段
/*!40101 SET ...
为/* !40101 SET ...
(*号和!号之间加个空格)
安装PHP依赖 同步用户等信息
安装php依赖 执行如下脚本
cd /home/wwwroot/{your domain} php composer.phar install cp config/.config.php.example config/.config.php vim config/.config.php
进行相应的配置(配置.config.php文件)
主要对站点名称(
$System_Config['appName']
)、后端访问token($System_Config['muKey']
)、验证邮件配置(smtp or mailgun)、注册后获得验证码数量($System_Config['inviteNum']
)、数据库配置、多用户混淆后缀($System_Config['mu_suffix']
)$System_Config['appName'] = ''; // 站点名称 $System_Config['muKey'] = ''; // mu key用于后端python访问时的access token $System_Config['mailDriver'] = 'mailgun'; // 邮件 选项值为mailgun/stmp 分别对应着 #stmp #mailgun配置节组 $System_Config['inviteNum'] = '0'; // 注册后获得的邀请码数量 # database 数据库配置 $System_Config['db_driver'] = 'mysql'; $System_Config['db_host'] = 'localhost'; $System_Config['db_database'] = ''; $System_Config['db_username'] = ''; $System_Config['db_password'] = ''; $System_Config['db_charset'] = 'utf8'; $System_Config['db_collation'] = 'utf8_general_ci'; $System_Config['db_prefix'] = ''; #多用户混淆参数后缀 $System_Config['mu_suffix']='baidu.com'; # 多用户混淆参数表达式,%5m代表取用户特征 md5 的前五位,%id 代表用户id,%suffix 代表上面这个后缀。 $System_Config['mu_regex']='%5m%id.%suffix';
注:muKey和mu_suffix主要用于和python后端通信使用,因此在后端python中userapiconfig.py文件进行同样的设置,具体对应如下
MU_SUFFIX = '{.config.php $System_Config["mu_suffix"]}' WEBAPI_TOKEN = '{.config.php $System_Config["muKey"]}'
创建管理员账户,用来登录站点配置信息
php -n xcat createAdmin
同步用户,执行如下命令
php xcat syncusers
编辑cron,执行
crontab -e
,输入以下内容30 22 * * * php /home/wwwroot/{WEBSITE.NAME}/xcat sendDiaryMail */1 * * * * php /home/wwwroot/{WEBSITE.NAME}/xcat synclogin */1 * * * * php /home/wwwroot/{WEBSITE.NAME}/xcat syncvpn 0 0 * * * php -n /home/wwwroot/{WEBSITE.NAME}/xcat dailyjob */1 * * * * php /home/wwwroot/{WEBSITE.NAME}/xcat checkjob */1 * * * * php -n /home/wwwroot/{WEBSITE.NAME}/xcat syncnas
没出什么问题的话,现在ss-panel-v3-mod已经能运行起来了,现在进行节点配置
进行此步的目的是为了在userapiconfig.py中填写
NODE_ID = {node id}
- 用第3步创建的管理员登录系统后,选择左下角的
管理面板
- 进入
管理面板
后,选择左侧的节点列表
,再点击右下角的添加
按钮 主要填写节点名称、节点地址、节点IP、加密方式、流量比例、节点状态、节点类型,可参考:节点添加说明 - 如图所示:
- 用第3步创建的管理员登录系统后,选择左下角的
后端安装说明
后端使用的是 ShadowsocksR
安装工具
安装pip(python包管理器),执行如下命令:
yum install python-setuptools && easy_install pip
安装libsodium
yum -y groupinstall "Development Tools" wget https://github.com/jedisct1/libsodium/releases/download/1.0.10/libsodium-1.0.10.tar.gz tar xf libsodium-1.0.10.tar.gz && cd libsodium-1.0.10 ./configure && make -j2 && make install echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf ldconfig
配置服务
下载程序源代码
cd /usr/ git clone -b manyuser https://github.com/glzjin/shadowsocks.git
进入shadowsocks目录,安装依赖
cd /usr/shadowsocks yum -y install python-devel yum -y install libffi-devel yum -y install openssl-devel pip install requests
配置程序
得到配置文件
cd /usr/shadowsocks cp apiconfig.py userapiconfig.py cp config.json user-config.json
编辑userapiconfig.py,以下仅贴出重要配置
NODE_ID = 1 # 此处修改为之前添加的节点id eg: 3 MU_SUFFIX = 'zhaoj.in' # 此处修改为.config.php中$System_Config['mu_suffix'] MU_REGEX = '%5m%id.%suffix' API_INTERFACE = 'modwebapi' # 填写为modwebapi WEBAPI_URL = 'https://zhaoj.in' # 此处修改为你当前的站点 WEBAPI_TOKEN = 'glzjin' # 此处修改为.config.php中$System_Config['muKey'] # Mysql 数据库配置和.config.php配置一样 MYSQL_HOST = '127.0.0.1' MYSQL_PORT = 3306 MYSQL_USER = 'ss' MYSQL_PASS = 'ss' MYSQL_DB = 'shadowsocks'
执行以下命令,测试服务是否可用
cd /usr/shadowsocks/ python server.py # 用于调试
如果服务报错,进行调试的话,主要有以下几个文件:
- php程序中的
app/Middleware/Mod_Mu.php
文件,主要负责校验token(muKey) - php程序中的
config/routes.php
,主要是路由配置,查看$app->group('/mod_mu',...
,此处代码块主要用于和python交互的 - python程序中的
webapi_utils.py
文件,可以适当输出uri
参数,观察当前请求的php地址
- php程序中的
在第4步成功的提前下,优化程序
编辑
/etc/security/limits.conf
,在最后添加如下代码:* soft nofile 51200 * hard nofile 51200
- 运行命令
ulimit -n 51200
编辑防火墙配置
/etc/sysctl.conf
配置如下,配置完成后使用systcl -p
使其生效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
安装配置
supervisord
安装
supervisord
,执行如下脚本yum install supervisor python-pip -y pip install supervisor==3.1 chkconfig supervisord on wget https://github.com/glzjin/ssshell-jar/raw/master/supervisord.conf -O /etc/supervisord.conf wget https://github.com/glzjin/ssshell-jar/raw/master/supervisord -O /etc/init.d/supervisord
编辑
/etc/supervisord.conf
,将最后一段修改如下:[program:mu] command=python /root/shadowsocks/server.py directory=/root/shadowsocks autorestart=true startsecs=10 startretries=36 redirect_stderr=true user=root ; setuid to this UNIX account to run the program log_stdout=true ; if true, log program stdout (default true) log_stderr=true ; if true, log program stderr (def false) logfile=/var/log/mu.log ; child log path, use NONE for none; default AUTO ;logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;logfile_backups=10 ; # of logfile backups (default 10)
编辑
/etc/init.d/supervisord
在这两行之间添加ulimit -n 51200
echo -n $"Starting supervisord: " ulimit -n 51200 daemon supervisord -c /etc/supervisord.conf
启动
supervisord
,执行以下命令service supervisord start
关于升级
cd /usr/shadowsocks git pull
主要参考资料:
本文由 waynelone 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。