前些日子申请了一台Hax的IPv6_only的VPS,本来只搭了一个hysteria2协议的代理,因为只能使用IPv6连入,基本处于放置不用的状态,但是看到后来大家都开始抢注册,又舍不得把机器放出,于是一直在续期。
近些天,在这台机器上部署了一些应用,感觉用起来还比较舒服,于是做个记录。
一些常用程序包的安装
我选择的是Debian11的系统,因为免费的VPS只有1500MB的内存,为了尽可能部署更多的服务,我没有选择安装Docker。与之相对应,我安装了Python和Node.js还有OpenJDK,以便运行目前和之后我需要部署在VPS上的服务。
现得知,由于Hax目前使用的OpenVZ虚拟化技术的原因,docker相关功能无法使用,所以只能使用手动部署的方式对应用进行部署。
前置需求:
因为Hax只有IPv6网络,甚至于有时dns服务器的默认设置是一个IPv4地址,根本无法解析,需要先配置使用DNS64才能正常联网。配置DNS64可以使用此命令:
1 echo "nameserver 2a01:4f9:c010:3f02::1" > /etc/resolv.conf
1 wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh即可获得Cloudflare提供的IPv4地址,正常访问IPv4的网络资源。
另外,可以在Warp+ bot处生成Warp+的秘钥,提升Warp的网络速度。
Python
我就是喜欢追新,所以这里我没有直接使用 apt-get
安装Python,而是选择了编译安装目前最新的Release版本——Python-3.12.1。编译安装并不难,只是略微有些慢:
先安装一些环境依赖:
1 | apt-get update && apt-get install build-essential gdb lcov pkg-config libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev lzma lzma-dev tk-dev uuid-dev zlib1g-dev |
接着编译安装Python:
1 | cd /usr/local #进入/usr/local路径 |
再创建软链接:
1 | rm -f /usr/bin/python3 #删除原有软链接 |
检查安装是否成功:
1 | python3 --version |
Node.js
同理追新,我选择安装Node.js-v21.5.0:
1 | curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\ |
检测安装是否成功:
1 | node --version |
OpenJDK
用得不多,所以偷个懒,直接 apt-get
安装:
1 | apt-get install openjdk-17-jdk |
检测安装是否成功:
1 | java -version |
如果要安装新一点的版本,以OpenJDK 21为例:
1
2
3
4
5
6
7 mkdir -p /usr/local/soft
cd /usr/local/soft
wget https://download.java.net/java/GA/jdk21.0.1/415e3f918a1f4062a0074a2794853d0d/12/GPL/openjdk-21.0.1_linux-x64_bin.tar.gz
tar -xzvf openjdk-21.0.1_linux-x64_bin.tar.gz
rm openjdk-21.0.1_linux-x64_bin.tar.gz
ln -s /usr/local/soft/jdk-21.0.1/bin/java /usr/bin/java
ln -s /usr/local/soft/jdk-21.0.1/bin/jar /usr/bin/jar然后修改
/etc/profile
,在最末添加一些环境变量:
1
2 export JAVA_HOME=/usr/local/soft/jdk-21.0.1
export PATH=${JAVA_HOME}/bin:$PATH可以使用sftp上传覆盖修改,也可以使用vim、nano之类的工具在线修改。
修改完后应用环境变量:
1 source /etc/profile
PHP
这里我选择了安装PHP8.2,debian11的 apt-get
源里只搜得到低版本,同Node.js一样,稍作处理即可用 apt-get
直接安装:
1 | apt-get update && apt-get install lsb-release ca-certificates curl -y |
如果在执行第二条命令时报错:
1 | Traceback (most recent call last): |
则通过这个办法解决:
1 | cp /usr/lib/python3/dist-packages/lsb_release.py /usr/bin/ |
MySQL
创建自己的数据库,再也不用到处找免费的数据库白嫖!充分利用Hax的15G硬盘。安装方法如下:
1 | wget https://repo.mysql.com//mysql-apt-config_0.8.29-1_all.deb |
MySQL默认监听3306端口,安装过程中会有一些自定义选项,还会要求你设置数据库root用户的密码。使用查看版本号的命令检查MySQL是否安装正常:
1 | mysql --version |
Redis
默认监听6379端口,主要用于缓存提速,部分应用可用,不详细介绍,只记录安装方法:
1 | curl https://packages.redis.io/gpg | apt-key add - |
连接测试,会进入到127.0.0.1:6379的实例中:
1 | redis-cli |
pm2
推荐一个很好用的进程管理工具:pm2,安装简单,功能强大。具体功能不细说,源仓库介绍很详细,安装方法也很简单,直接用 npm
就能安装:
1 | npm install pm2 -g |
常用指令:
1 | pm2 ls #查看目前pm2管理的所有进程的简易列表 |
一些应用的部署
我首先部署的代理在此就不做介绍了,Hysteria2和tuic协议目前在Hax上的表现都还不错,GitHub和Gitlab上也都有不少一键部署的脚本。如果希望在本地没有IPv6的情况下代理到Hax,则需要选择使用Cloudflare隧道的代理方式,上述的fscarmen大佬也有提供,这里不再赘述。
我目前已经在Hax上部署了PandoraNext、TokensTool、One-API、Bingo四项服务,并通过Cloudflared隧道链接到了自己的域名,通过Cloudflare提供的服务,使得没有IPv6的网络情况下也可以访问我部署的服务。以上服务均用 pm2
启动,以便管理,防止崩溃。
Bingo
通过源码部署的方式进行部署。将Bingo的代码下载到本地,并测试运行:
1 | git clone https://github.com/weaigc/bingo.git #下载源码到本地 |
其默认端口配置在 server.js
文件的第7行,默认为 3000
。运行成功后可以访问http://[IPv6]:PORT查看是否正常运行。
正常运行的话,使用 Ctrl+c
停止运行,如果你希望设置内置账号,可以设置环境变量:
1 | echo "BING_HEADER=Your_Header" > .env #把Your_Header改成转换的HEADER |
再使用pm2启动:
1 | pm2 start npm -- run start |
至此,Bingo就部署完毕了,如果需要修改 BING_HEADER
然后重启应用的话,修改后直接使用 ps -ef
命令找到原本运行的Bingo,接着使用 kill
将其停止即可。pm2会自启Bingo。
One-API
因为源仓库提供了可执行文件,所以部署起来非常简单,下载,赋权,运行即可:
1 | wget -O one-api https://github.com/songquanpeng/one-api/releases/download/v0.5.10/one-api #下载可执行文件并重命名为one-api |
接着检查一下1333端口上one-api是否正常运行,运行正常的话,使用 Ctrl+c
停止运行。再使用pm2启动One-API:
1 | pm2 start ./one-api -- --port 1333 --log-dir ./logs |
至此,One-API部署完毕。如果需要升级,与Bingo同理,下载覆盖后,使用kill停止原本的任务即可,pm2会自启One-API。
PandoraNext
与One-API相同,PandoraNext提供了可执行文件,部署简单。需要注意的是,PandoraNext并不是一个服务端,只是一个客户端,而且并不开源,但是其功能非常强大,且免费使用。以下是部署步骤:
1 | wget https://github.com/pandora-next/deploy/releases/download/v0.6.1/PandoraNext-v0.6.1-linux-amd64-e1cae28.tar.gz |
接着修改 config.json
文件,填入自己的配置,再启动PandoraNext进行测试运行:
1 | ./PandoraNext |
接着检查一下你在 config.json
中设置的端口上PandoraNext是否正常运行,运行正常的话,使用 Ctrl+c
停止运行。再使用pm2启动PandoraNext:
1 | pm2 start ./PandoraNext |
至此,PandoraNext部署完毕。如果需要升级,与Bingo同理,下载覆盖后,使用kill停止原本的任务即可,pm2会自启PandoraNext。
需要注意的是,PandoraNext的License是绑定IPv4的,实际上Hax的IPv6_only的VPS都在相近的机房,其套用Warp获得的IPv4地址数量非常有限,大多数都是共用相同的IPv4地址。按照PandoraNext的规则来讲,就是先到先得,部署晚的有可能会无法绑定License。
TokensTool
TokensTool是配合PandoraNext使用的tokens管理工具,能把刷新tokens、推流one-api等工作自动化进行,而且配备了UI页面,使用简单方便。目前TokensTool还在不断更新中,如今已经支持了cocopilot转OpenAI API的功能,越来越多的功能将会被添加进去。TokensTool是用Java写的,提供了打包好的Jar包,只需要下载Jar包运行即可:
1 | wget -O tokenstool.jar https://github.com/Yanyutin753/PandoraNext-TokensTool/releases/download/v0.5.9/pandoraNext-0.5.9-SNAPSHOT.jar #下载jar包并重命名为tokenstool.jar |
接着检查一下8081端口上TokensTool是否正常运行,运行正常的话,使用 Ctrl+c
停止运行。再使用pm2启动TokensTool:
1 | pm2 start java -- -jar tokenstool.jar --server.port=8081 --deployWay=releases --deployPosition=/root/app --hotReload=true --pandora_Ip=127.0.0.1 |
至此,TokensTool部署完毕。如果需要升级,与Bingo同理,下载覆盖后,使用kill停止原本的任务即可,pm2会自启TokensTool。
Cloudflared
为了便利的给上述服务添加域名,并使得没有IPv6的网络环境下也能访问上述服务,我使用了Cloudflare提供的隧道,其使用方法也是非常简单便利:
1 | wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-amd64 #下载Cloudflared客户端 |
在Cloudflare的面板中看到隧道上线,则运行正常。再使用 Ctrl+c
停止运行,并使用pm2启动Cloudflared:
1 | pm2 start ./cloudflared -- tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN |
至此,Cloudflared部署完毕。如果需要升级,与Bingo同理,下载覆盖后,使用kill停止原本的任务即可,pm2会自启Cloudflared。
在Cloudflare的面板中给上述服务添加对应域名即可,比如3000端口的bingo,只要添加 HTTP
协议的地址 localhost:3000
即可。
一些我没有部署但可以部署的应用
在Warp和Cloudflared的加持下,Hax的IPv6_only的VPS的使用基本上已经和有IPv4的服务器无异,仅仅在需要进行SSH或者SCP连接的时候必须要求本地有IPv6网络。而实际上,通过使用File Browser和TTYD并使用Cloudflared隧道穿透出来,就变相实现了这两个协议所实现的功能在没有IPv6网络的情况下的使用。
上述的两个仓库都是单个可执行文件即可实现部署,这里不再赘述部署方式,仅仅记录运行命令,以便查找:
1 | # ttyd运行指令 |
1 | # filebrowser运行指令 |
此外,各种QQ机器人、Blog框架(如 jar4halo)、文件目录程序(如 alist)、图床程序等等。因为此前已经把Python、Node.js、OpenJDK、PHP都安装好了,主流应用的环境问题都很好解决,多数只需要按照文档部署即可。
1
2
3
4 # jar4halo需要设置环境变量运行
export HALO_WORK_DIR="/root/halo/.halo2" #halo的工作目录设置为/root/halo/.halo2
export HALO_EXTERNAL_URL="https://Your_Domain" #设置halo的对外域名
java -jar -Duser.timezone=Asia/Shanghai halo.jar #使用UTC+8时区
文件的备份与转移
如果你需要将服务器上的文件快速地下载到本地,亦或者是传输到另一台服务器上,可以使用ShareList。
这是一个一键脚本,用以在当前路径直接启动sharelist,并且把当前路径挂载到sharelist中:
1 | bash <(curl -s https://raw.githubusercontent.com/k0baya/sharelist_repl/main/hax/share.sh) |
上述命令只能在AMD64架构的Linux机器上使用。sharelist固定运行在33001端口,因为其监听的是127.0.0.1
所以无法使用ip:port
进行访问,你可以选择用nginx或者直接用Cloudflared绑定33001端口到一个域名进行访问。进入sharelist的页面后,你可以直接把打包好的文件下载到本地或者在另外一台机器使用wget -O 文件名 '链接'
的命令进行下载。
另外把打包和解压的命令做个备份,我喜欢使用tar命令,这里只记录tar:
**打包:
tar -czvf 文件名.tar.gz 路径
**,比如打包整个/root/app
路径,命名为archive.tar.gz
,即为tar -czvf archive.tar.gz /root/app
**解压:
tar -xzvf 文件名
**,比如解压刚刚打包的archive.tar.gz
即为tar -xzvf archive.tar.gz
未完待续……