Hax免费VPS的使用记录
Saika 博主

前些日子申请了一台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

然后再使用fscarmen大佬的Warp脚本:

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
2
3
4
5
6
cd /usr/local          #进入/usr/local路径
mkdir -p soft && mkdir -p source #创建soft、source路径
cd source && wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz #进入source路径并下载Python-3.12.1源码
tar -xzvf Python-3.12.1.tgz && rm Python-3.12.1.tgz && cd Python-3.12.1 #解压
./configure --prefix=/usr/local/soft/python3.12 --enable-optimizations #检测安装环境,配置安装参数,生成供编译用的Makefile
make && make install #编译安装

再创建软链接:

1
2
3
rm -f /usr/bin/python3          #删除原有软链接
ln -s /usr/local/soft/python3.12/bin/python3.12 /usr/bin/python3 #新建软链接python3
ln -s /usr/local/soft/python3.12/bin/pip3.12 /usr/bin/pip #新建软链接pip

检查安装是否成功:

1
2
python3 --version
pip --version

Node.js

同理追新,我选择安装Node.js-v21.5.0:

1
2
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\
apt-get install -y nodejs

检测安装是否成功:

1
2
node --version
npm --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
2
3
4
apt-get update && apt-get install lsb-release ca-certificates curl -y
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg && sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt-get update
apt-get install php

如果在执行第二条命令时报错:

1
2
3
4
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 25, in <module>
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'

则通过这个办法解决:

1
cp /usr/lib/python3/dist-packages/lsb_release.py /usr/bin/

MySQL

创建自己的数据库,再也不用到处找免费的数据库白嫖!充分利用Hax的15G硬盘。安装方法如下:

1
2
3
4
5
wget https://repo.mysql.com//mysql-apt-config_0.8.29-1_all.deb
dpkg -i mysql-apt-config_0.8.29-1_all.deb
rm mysql-apt-config_0.8.22-1_all.deb
apt-get update
apt-get install mysql-server

MySQL默认监听3306端口,安装过程中会有一些自定义选项,还会要求你设置数据库root用户的密码。使用查看版本号的命令检查MySQL是否安装正常:

1
mysql --version

Redis

默认监听6379端口,主要用于缓存提速,部分应用可用,不详细介绍,只记录安装方法:

1
2
3
curl https://packages.redis.io/gpg | apt-key add -
echo "deb https://packages.redis.io/deb \$(lsb\_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
apt-get update -y && apt-get install redis-server -y

连接测试,会进入到127.0.0.1:6379的实例中:

1
redis-cli

pm2

推荐一个很好用的进程管理工具:pm2,安装简单,功能强大。具体功能不细说,源仓库介绍很详细,安装方法也很简单,直接用 npm就能安装:

1
npm install pm2 -g

常用指令:

1
2
pm2 ls          #查看目前pm2管理的所有进程的简易列表
pm2 monit #查看pm2管理的所有进程的详细信息

一些应用的部署

我首先部署的代理在此就不做介绍了,Hysteria2和tuic协议目前在Hax上的表现都还不错,GitHub和Gitlab上也都有不少一键部署的脚本。如果希望在本地没有IPv6的情况下代理到Hax,则需要选择使用Cloudflare隧道的代理方式,上述的fscarmen大佬也有提供,这里不再赘述。

我目前已经在Hax上部署了PandoraNextTokensToolOne-APIBingo四项服务,并通过Cloudflared隧道链接到了自己的域名,通过Cloudflare提供的服务,使得没有IPv6的网络情况下也可以访问我部署的服务。以上服务均用 pm2启动,以便管理,防止崩溃。

Bingo

通过源码部署的方式进行部署。将Bingo的代码下载到本地,并测试运行:

1
2
3
4
5
git clone https://github.com/weaigc/bingo.git          #下载源码到本地
cd bingo
npm install
npm run build #构筑
npm run start #运行

其默认端口配置在 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
2
3
wget -O one-api https://github.com/songquanpeng/one-api/releases/download/v0.5.10/one-api          #下载可执行文件并重命名为one-api
chmod 777 one-api #赋权
./one-api --port 1333 --log-dir ./logs #在1333端口运行One-API并将日志输出到当前路径下的logs路径下

接着检查一下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
2
3
wget https://github.com/pandora-next/deploy/releases/download/v0.6.1/PandoraNext-v0.6.1-linux-amd64-e1cae28.tar.gz
tar -xzvf PandoraNext-v0.6.1-linux-amd64-e1cae28.tar.gz --strip-components=1
chmod 777 PandoraNext

接着修改 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
2
wget -O tokenstool.jar https://github.com/Yanyutin753/PandoraNext-TokensTool/releases/download/v0.5.9/pandoraNext-0.5.9-SNAPSHOT.jar          #下载jar包并重命名为tokenstool.jar
java -jar tokenstool.jar --server.port=8081 --deployWay=releases --deployPosition=/root/app --hotReload=true --pandora_Ip=127.0.0.1 #测试运行

接着检查一下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
2
3
wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-amd64          #下载Cloudflared客户端
chmod 777 cloudflared #赋权
./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN #测试运行,我选择使用http2协议,ARGO_TOKEN应该替换为自己创建的隧道的那一串ey开头的TOKEN

在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 BrowserTTYD并使用Cloudflared隧道穿透出来,就变相实现了这两个协议所实现的功能在没有IPv6网络的情况下的使用。

上述的两个仓库都是单个可执行文件即可实现部署,这里不再赘述部署方式,仅仅记录运行命令,以便查找:

1
2
3
# ttyd运行指令
./ttyd -p 21022 -c admin:password -W bash #在21022端口运行ttyd,用户名为admin,密码为password,连接的命令行解释器为bash
pm2 start ./ttyd -- -p 21022 -c admin:password -W bash #使用pm2运行
1
2
3
# filebrowser运行指令
./filebrowser -p 21021 #在21021端口运行filebrowser,默认用户名和密码都为admin,登录后可以修改密码
pm2 start ./filebrowser -- -p 21021 #使用pm2运行

此外,各种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

未完待续……

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
访问量