为查询资料需要,部署自用ss服务,这里将部署流程整理,以备后查。
主要区分为以下几个步骤:
基本思路
这里使用的是基于python2.7的采用mysql数据库的多用户ss,对数据库的管理使用phpmyadmin。环境使用的是VULTR日本机房的VPS,环境为CentOS7.2+Docker。这下就简单了:
ss源码:python2.7(系统自带);supervisor(进程管理,用于异常退出的自动重启)
数据库:mysql(直接用docker)
phpmyadmin:php+apache+phpmyadmin(直接用docker)
mysql数据库
使用数据库为mysql,直接使用Docker的镜像。
1 2 |
docker pull hub.c.163.com/library/mysql:latest 这是163的镜像仓库,因为是在国外拉镜像,其实用163的速度非常慢 docker pull mysql:latest Docker官方镜像仓库,在国外访问速度不错 |
因为需要将数据库真实文件映射到外部目录,防止容器删除后丢失数据,所以建立外部空目录,并做挂载。
1 2 |
mkdir -p /ssserver/db docker run --name mysql -v /ssserver/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysqlpasswd -p 3306:3306 --restart=always -d mysql:latest |
容器别名这里命名为mysql;将外部目录/ssserver/db挂载为容器内的/var/lib/mysql,这样可以方便的保存和管理数据库文件;数据库root用户密码设置为:mysqlpasswd;将mysql的3306端口映射到外部,也为3306;在docker服务启动时,自动启动容器,所以这里使用restart=always方式;将容器注册为deamon;使用镜像mysql:latest创建容器。
接下来进入容器,创建数据库shadowsocks并恢复初始数据。
1 2 3 4 |
docker exec -it mysql bash mysql -uroot -pmysqlpasswd mysql> create database shadowsocks; mysql> exit |
恢复初始数据,这里已提前将shadowsocks.sql文件上传至外部目录/ssserver/db,在容器内则是/var/lib/mysql
1 |
mysql -uroot -pmysqlpasswd shadowsocks < /var/lib/mysql/shadowsocks.sql |
这样,数据库这一块就完成了
ss程序部分
ss程序本来也想放到容器里面跑的,但是想着做起来比较麻烦,并且linux默认就有python的执行环境,放外面跑更简单。
为了防止出现ss意外中止的情况,使用进程管理工具supervisor来做监控,负责在ss进程意外中止,或者出错后,可以自动重启服务,提高服务稳定性。
1 2 3 4 5 |
yum install gcc python-devel openssl-devel cd //将get-pip.py保存在用户家目录 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py pip install cymysql M2Crypto |
程序我放到我的github下面了,包括客户端(包括电脑和手机)软件,点此下载
1 2 3 4 |
yum install git mkdir /ssserver cd /ssserver/ git clone https://github.com/Shadowsocks-mu-python/shadowsocks.git |
这样,代码就会存在/ssserver/shadowsocks目录
修改配置文件/ssserver/shadowsocks/Config.py
1 |
vim /ssserver/shadowsocks/Config.py |
#Config
MYSQL_HOST = '000.000.000.000'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASS = 'mysqlpasswd'
MYSQL_DB = 'shadowsocks'
MANAGE_PASS = 'ss233333333'
#if you want manage in other server you should set this value to global ip
MANAGE_BIND_IP = '127.0.0.1'
#make sure this port is idle
MANAGE_PORT = 23333
1 2 3 |
yum install supervisor systemctl start supervisord systemctl enable supervisord |
创建日志目录(实际不会生成日志文件)
1 |
mkdir -p /var/log/ssserver |
修改配置文件/etc/supervisord.conf或者在/etc/supervisord.d/目录下新建一个ini文件,这里我使用后者
1 |
vim ssserver.ini |
command=nohup python /ssserver/shadowsocks/server.py -c /ssserver/shadowsocks/config.json &
autostart=true
autorestart=true
user=root
log_stdout=true
log_stderr=true
logfile=/var/log/ssserver/shadowsocks.log
logfile_maxbytes=5MB
logfile_backups=10
1 2 3 4 5 |
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --zone=trusted --change-interface=docker0 --permanent firewall-cmd --permanent --zone=public --add-port=10000-10100/tcp firewall-cmd --permanent --zone=public --add-port=10000-10100/udp firewall-cmd --reload |
phpmyadmin部分
phpmyadmin运行需要php的环境,前面刚好用到了wordpress的镜像,那这里直接借用wordpress的,在其网站根目录下建一个子目录,放phpmyadmin。
先把镜像拉下来
1 |
docker pull wordpress:4.8.0-php5.6-apache |
建一个外部目录,放网页文件
1 2 |
mkdir -p /ssserver/phpmyadmin/phpmyadmin docker run --name phpmyadmin -v /ssserver/phpmyadmin:/var/www/html --link mysql:mysql --restart=always -d -p 80:80 wordpress:4.8.0-php5.6-apache |
容器起名为phpmyadmin;将外部目录/ssserver/phpmyadmin与内部目录/var/www/html做映射挂载;容器随docker服务的启动而启动;将apache的80端口映射到外部,也为80;将容器注册为deamon;使用镜像wordpress:4.8.0-php5.6-apache创建容器。
phpmyadmin要连接mysql数据库,需要修改一下配置文件:
1 2 |
cp config.sample.inc.php config.inc.php vim config.inc.php |
修改第31行,将
$cfg['Servers'][$i]['host'] = 'localhost';
改为:
$cfg['Servers'][$i]['host'] = 'mysql';
浏览器输入http://yourip/phpmyadmin就可以管理数据库啦