XS Admin Project——一个开源 Shadowsocks 多用户后台管理面板,支持 SSR 新特性,持续更新
特性
- 开源
- 基于 Python 的 Django 框架开发
- 支持多节点、多用户,流量控制、统计。
- 自定义 SSR 属性
- 基于 Bootstrap 响应式前端框架,界面友好。
界面展示:
仪表盘
XsAdmin 项目部署说明
一步一步教你部署 xsadmin,下文中使用 CentOS 7 x64,默认用 root,如用其他用户登录,执行命令前面要加sudo
-
安装前准备
1.1 安装 LNMP 环境
1.1.1 一键 LNMP
为了方便建站,建议部署环境直接配置一键 LNMP 环境,虽然整个项目是用的是 Python 来实现的,但是 LNMP 作为非常常用的 web 环境, 安装后,对于我们管理网站(例如管理虚拟机、MySQL 数据库操作等)都将带来很大的帮助。
参考:LNMP 一键安装包
需要安装的组件:
- PHP:方便使用 phpMyAdmin 管理 MySQL 等
- Nginx:作为方向代理服务器
- MySQL:作为主站服务器
- Redis:作为高速 Cache,消息队列、异步任务等需要用到的中间件
- phpMyAdmin:方便管理 MySQL
- 请按照上面链接的教程,选择对应组件,安装好 LNMP 环境
另外,lnmp 解压包里面有vhost.sh
可以方便的管理虚拟主机,addons.sh
可以方便的给我们安装扩展
1.1.2 其他扩展
a 自动部署 SSL 证书扩展
参考:OneinStack 自动部署 Let’s Encrypt 证书 (./addons.sh
脚本在上面安装 lnmp 环境的解压包文件夹下已经有了,无需再下载 oneinstack)
b 阻止 SSH 暴力破解扩展
参考:fail2ban 阻止 SSH 暴力破解 (可选,也可自行设置,如限制只能用 SSH Key 登录)
1.2 安装 Supervisor
Supervisor 简介
Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控*nix 上面的进程。目前只支持 Python2
1.2.1 安装 Supervisor
安装 supervisor 很简单,通过 easy_install 就可以安装
yum -y install python-setuptools
easy_install supervisor
安装完成之后,就可以用echo_supervisord_conf
命令来生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
1.2.2 supervisor 开机脚本(CentOS 6.x 开机脚本)
wget https://github.com/Supervisor/initscripts/raw/master/redhat-init-mingalevme
mv redhat-init-mingalevme /etc/init.d/supervisord
chmod +x /etc/init.d/supervisord
chkconfig supervisord on #开机自启动
service supervisord restart #启动
1.3 升级 Python 到 3.6
我们的项目环境要求是 Python 3.5+,我们需要升级 Linux 系统默认带的 Python2,这次我们升级到最新的 Release 版本:Python 3.6.0
1.3.1 下载 & install
yum -y install xz wget gcc make gdbm-devel openssl-devel sqlite-devel zlib-devel bzip2-devel
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
tar -vxzf Python-3.6.0.tgz
cd Python-3.6.0/
./configure --enable-optimizations --enable-loadable-sqlite-extensions --with-zlib
make && make install
这样,Python3 就装好了,默认会安装在/usr/local/bin/python3
,还附带安装了 pip(/usr/local/bin/pip3
),不和原本的 Pytho2 冲突 可以查看 Python3 和 pip3 的版本
python3 -V
pip3 -V
1.3.2 安装必要组件
项目在部署的时候,会用到virtualenv
,她能很好的帮我们隔离 Python 运行环境
执行下面的命令进行安装:
pip3 install virtualenv
2. 初始化项目结构
执行如下命令:
cd /data/
yum install -y git
git clone https://github.com/alishtory/xsadmin_deploy.git
cd xsadmin_deploy
git clone https://github.com/alishtory/xsadmin.git
创建 Python 的 virtualenv 环境,执行以下命令:
virtualenv env
整个项目结构如下:
/data/xsadmin_deploy ##项目根目录
├── env ## virtualenv 根目录
├── xsadmin ## Django 项目目录
├── logs ## supervisor 日志文件
├── static ## web 静态文件目录
├── upload ## web 文件上传目录
├── conf ## 一些配置文件
├── LICENSE
├── README.md
3. 配置你的 XsAdmin 项目
先确定在项目根目录/data/xsadmin_deploy
,如果不在,切换到这里
首先,激活virtualenv
source env/bin/activate
切换到 Django 项目目录
cd xsadmin
安装项目依赖
pip install -r requirements.txt
配置项目
vi xsadmin/settings_custom.py
编辑 Django 配置文件,
SECRET_KEY = '05bk@wyb%nm2-=59n08-mu@^t7+#%x$^kk8_%pm_wcnq6ga!2=' #建议随机改一下加密 Key
ALLOWED_HOSTS = ('127.0.0.1', 'xsadmin.org',) #自定义域名
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xsadmin',
'USER':'xsadmin',
'PASSWORD':'xsadmin', #用 phpMyAdmin 建立用户和对应的数据库,这里配置对应数据库及密码
'HOST':'127.0.0.1', #phpMyAdmin 建立用户时,可选只允许本地 127.0.0.1(注意不要填 localhost)
'PORT':'3306' #默认的 3306
}
}
STATIC_ROOT = "/data/xsadmin_deploy/static/" #改成静态文件目录
MEDIA_ROOT = '/data/xsadmin_deploy/upload/' #上传文件目录
SITE_CONFIG = {
'SITE_NAME':'XS Admin', #网站标题
'SITE_DESC':'One powerful tool...', #网站说明
}
INIT_TRANS_ENABLE = 6*1073741824 #默认用户流量是 6G
#极验证,自己去 geetest.com 注册生成
GEE_CAPTCHA_ID = 'b46d1900d0a894591916ea94ea91bd2c'
GEE_PRIVATE_KEY = '36fc3fe98530eea08dfc6ce76e3d24c4'
同步数据库
python manage.py migrate
创建管理员帐号
python manage.py createsuperuser #然后按照提示输入,完成创建超管帐号
同步静态资源文件
python manage.py collectstatic
4. 配置 Supervisor
修改配置文件
vi /etc/supervisord.conf
shift+G
,跳转至文件末尾,i
插入,在配置文件末尾加入
[include]
files = /data/xsadmin_deploy/conf/supervisor_*.ini
重启 Supervisor
service supervisord restart
查看 Supervisor 管理的进程状态
supervisorctl status
确定 uwsgi_xsadmin
、celery_worker
、celery_beat
都是RUNNING
状态
5. 配置 Nginx 虚拟主机
进入 lnmp 解压文件夹下,执行./vhost.sh
命令(可参考 LNMP 一键安装包),完成创建虚拟主机。
本次以 xsadmin.org 域名为例,来进行说明
创建完虚拟主机后,运行vi /usr/local/nginx/conf/vhost/xsadmin.org
,编辑虚拟主机配置文件
5.1 注释 root 目录
找到#root /data/wwwroot/xsadmin.org;
,可以把 root 注释掉,因为我们这里是 Django 项目
5.2 配置匹配规则
找到location
开始的位置,删除默认配置,改为如下配置:
charset utf-8; #默认编码方式
client_max_body_size 75M;
#文件上传目录
location /upload {
alias /data/xsadmin_deploy/upload;
expires 30d;
access_log off;
}
#静态资源目录,让 nginx 处理静态文件,速度更快。
#需要在 Django 里面配置 STATIC_ROOT 并运行 python manage.py collectstatic
location /static {
alias /data/xsadmin_deploy/static;
expires 30d;
access_log off;
}
# 其他的请求全部交给 Python 的 uWSGI 来处理
location / {
uwsgi_pass unix:///var/run/xsadmin.sock; #注意这里要和之前的匹配
include uwsgi_params;
}
改完后,/usr/local/nginx/conf/vhost/xsadmin.org
配置文件如下:
server {
listen 80;
listen 443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/xsadmin.org.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/xsadmin.org.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name xsadmin.org;
index index.html index.htm index.php;
include /usr/local/nginx/conf/rewrite/none.conf;
#root /data/wwwroot/xsadmin.org; #可以把 root 注释掉,我们是 Django 项目
if ($ssl_protocol = "") { return 301 https://$server_name$request_uri; } #我们开启了全站 SSL
#error_page 404 = /404.html;
#error_page 502 = /502.html;
#上面的配置可以用./vhost.sh 默认生成的
#下面是我们需要修改的地方
charset utf-8;
client_max_body_size 75M;
location /upload {
alias /data/xsadmin_deploy/upload;
expires 30d;
access_log off;
}
location /static {
alias /data/xsadmin_deploy/static;
expires 30d;
access_log off;
}
location / {
uwsgi_pass unix:///var/run/xsadmin.sock;
include uwsgi_params;
}
}
配置完成后,重启 Nginx 服务
nginx -s reload
访问您的网站,Done~
XsAdmin ShadowsocksR 端部署教程
本 ss 服务端支持多用户流量控制、支持 SSR 新特性,需配合xsadmin
面板项目Restfull
接口使用
1. 安装相关依赖
1.1 安装 Requests/Git 等
CentOS:
yum install -y git python-setuptools && easy_install pip
ubuntu/debian:
apt-get install -y python-pip git
1.2 安装 libsodium
如果要使用 salsa20 或 chacha20 或 chacha20-ietf 算法,请安装 libsodium
:
centos:
yum install -y epel-release 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
ubuntu/debian:
apt-get install -y build-essential
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
ldconfig
如果曾经安装过旧版本,亦可重复用以上步骤更新到最新版,仅 1.0.4 或以上版本支持 chacha20-ietf
1.3 安装 Supervisor
安装 supervisor 很简单,通过 easy_install 就可以安装
yum -y install python-setuptools
easy_install supervisor
安装完成之后,就可以用echo_supervisord_conf
命令来生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
supervisor 开机脚本
wget https://github.com/Supervisor/initscripts/raw/master/redhat-init-mingalevme
mv redhat-init-mingalevme /etc/init.d/supervisord
chmod +x /etc/init.d/supervisord
chkconfig supervisord on #开机自启动
service supervisord restart #启动
1.4 安装依赖
pip install requests
2. 获取项目源码
git clone -b manyuser https://github.com/alishtory/shadowsocksr.git
执行完毕后此目录会新建一个 shadowsocksr 目录,其中根目录的(./shadowsocksr
)是多用户版
进入根目录初始化配置(假设根目录在~/shadowsocksr,如果不是,命令需要适当调整):
cd ~/shadowsocksr
3. 配置客户端
3.1 配置 API
进入 xsadmin 项目管理员后台,添加节点,然后点击进入编辑节点页面,右上角有一个 API 配置信息,点击进入 API 配置信息页面
复制user-config.json
配置内容,并在~/shadowsocksr
文件夹下建立并保存成user-config.json
文件
同理,复制config_xsadmin.py
配置内容,并在~/shadowsocksr
文件夹下建立并保存成config_xsadmin.py
文件
3.2 配置 supervisor 进程管理
执行以下命令:
cat<< EOF >> /etc/supervisord.conf
[program:ssserver]
command = python /root/shadowsocksr/xsadmin_server.py
directory = /root/shadowsocksr
user = root
autostart = true
autorestart = true
redirect_stderr=true
stdout_logfile = /root/shadowsocksr/ssserver.log
EOF
重启 supervisor:
service supervisord restart
查看 ss 的运行 log:
supervisorctl tail -f ssserver
重启 ssserver
supervisorctl restart ssserver