本文最后更新于 2024-01-29,文章内容可能已经过时。

Hax免费VPS的使用记录

引言: 本文详细记录了如何在Hax的IPv6_only VPS上成功部署多种服务和应用的过程,分享了各项实践经验,并为想提高其VPS工作效率和能力的用户提供实用指导。

近期,我得到了一台Hax的IPv6_only VPS,该服务器在初期只完成了一个基于hysteria2协议的代理配置。然而,由于VPS限定IPv6进行连接,其实际应用相较较少,使得服务器大部分时间处于闲置状态。然而,当我意识到人们对此类服务器的需求日渐剧增时,我决定不断续期并进行更多的服务部署。

经过几天的尝试,在这台服务器上部署了多种应用,使用体验相当顺畅。为了向更多人分享这一经验,我决定整理并纪录下这个过程。

安装常用程序包

我选择使用的的操作系统为Debian11,因为这款免费的VPS只提供了1500MB的内存。为了尽可能多地部署服务,我决定不采用Docker,取而代之的是安装Python、Node.js以及OpenJDK,满足我在VPS上运行现有以及规划中的服务的需求。

据我了解,由于Hax当前采用OpenVZ作为虚拟化技术,Docker的相关功能无法执行。因此,我选用了手动部署的方式来安装应用。


预设需求

由于Hax只提供IPv6网络,有时默认的DNS服务器设置有可能成为IPv4地址,这使得域名解析变得困难,我需要通过配置DNS64来达到正常联网的效果。配置DNS64的命令如下:

echo "nameserver 2a01:4f9:c010:3f02::1" > /etc/resolv.conf

然后,通过运行fscarmen大佬提供的Warp脚本:

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

这样我们就可以拥有来自Cloudflare的IPv4地址,并正常访问IPv4网络资源。

8FCADEF1-ECF3-44ED-8C0C-9D56F3B73F29.png

此外,我们也可以在Warp+ bot处生成Warp+的秘钥,如此可以提升Warp的网络速度。

Python

1E3E582D-5B79-4144-A169-0A88AE9853C1.webp我就是喜欢追新,所以这里我没有直接使用 apt-get安装Python,而是选择了编译安装目前最新的Release版本——Python-3.12.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:

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          #编译安装

再创建软链接:

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

检查安装是否成功:

python3 --version
pip --version

Node.js

F13A6E6C-62FD-4758-B9A4-45A009C48A86.webp同理追新,我选择安装Node.js-v21.5.0:

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

检测安装是否成功:

node --version
npm --version

OpenJDK

4311183A-66FF-4B43-96F7-4C7695DA5D0A.webp用得不多,所以偷个懒,直接 apt-get安装:

apt-get install openjdk-17-jdk

检测安装是否成功:

java -version

如果要安装新一点的版本,以OpenJDK 21为例:

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,在最末添加一些环境变量:

export JAVA_HOME=/usr/local/soft/jdk-21.0.1
export PATH=${JAVA_HOME}/bin:$PATH

可以使用sftp上传覆盖修改,也可以使用vim、nano之类的工具在线修改。
修改完后应用环境变量:

source /etc/profile

PHP

9932F313-7675-4A10-A87F-8688DC24E61B.webp这里我选择了安装PHP8.2,debian11的 apt-get源里只搜得到低版本,同Node.js一样,稍作处理即可用 apt-get直接安装:

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

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

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

则通过这个办法解决:

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

MySQL

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

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是否安装正常:

mysql --version

Redis

1EBEDBA8-9295-42E7-B324-7291218CF7F9.webp默认监听6379端口,主要用于缓存提速,部分应用可用,不详细介绍,只记录安装方法:

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的实例中:

redis-cli

pm2

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

npm install pm2 -g

常用指令:

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

一些应用的部署

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

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

Bingo

1BFAA3F2-9333-4A7F-81A4-1437BBFC2FEE.png通过源码部署的方式进行部署。将Bingo的代码下载到本地,并测试运行:

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停止运行,如果你希望设置内置账号,可以设置环境变量:

echo "BING_HEADER=Your_Header" > .env          #把Your_Header改成转换的HEADER

再使用pm2启动:|

pm2 start npm -- run start

至此,Bingo就部署完毕了,如果需要修改 BING_HEADER然后重启应用的话,修改后直接使用 ps -ef命令找到原本运行的Bingo,接着使用 kill将其停止即可。pm2会自启Bingo。

One-API

9F11EB2C-AEBB-45AC-AA18-98C075FCC945.png因为源仓库提供了可执行文件,所以部署起来非常简单,下载,赋权,运行即可:

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:

pm2 start ./one-api -- --port 1333 --log-dir ./logs

至此,One-API部署完毕。如果需要升级,与Bingo同理,下载覆盖后,使用kill停止原本的任务即可,pm2会自启One-API。

PandoraNext

9F11EB2C-AEBB-45AC-AA18-98C075FCC945.png与One-API相同,PandoraNext提供了可执行文件,部署简单。需要注意的是,PandoraNext并不是一个服务端,只是一个客户端,而且并不开源,但是其功能非常强大,且免费使用。以下是部署步骤:

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进行测试运行:

./PandoraNext

接着检查一下你在 config.json中设置的端口上PandoraNext是否正常运行,运行正常的话,使用 Ctrl+c停止运行。再使用pm2启动PandoraNext:

pm2 start ./PandoraNext

至此,PandoraNext部署完毕。如果需要升级,与Bingo同理,下载覆盖后,使用kill停止原本的任务即可,pm2会自启PandoraNext。

需要注意的是,PandoraNext的License是绑定IPv4的,实际上Hax的IPv6_only的VPS都在相近的机房,其套用Warp获得的IPv4地址数量非常有限,大多数都是共用相同的IPv4地址。按照PandoraNext的规则来讲,就是先到先得,部署晚的有可能会无法绑定License。

TokensTool

9F11EB2C-AEBB-45AC-AA18-98C075FCC945.pngTokensTool是配合PandoraNext使用的tokens管理工具,能把刷新tokens、推流one-api等工作自动化进行,而且配备了UI页面,使用简单方便。目前TokensTool还在不断更新中,如今已经支持了cocopilot转OpenAI API的功能,越来越多的功能将会被添加进去。TokensTool是用Java写的,提供了打包好的Jar包,只需要下载Jar包运行即可:

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:

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

8FCADEF1-ECF3-44ED-C0C-9D56F3B73F29.png

为了便利的给上述服务添加域名,并使得没有IPv6的网络环境下也能访问上述服务,我使用了Cloudflare提供的隧道,其使用方法也是非常简单便利:

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:

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网络的情况下的使用。

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

# 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运行
# filebrowser运行指令
./filebrowser -p 21021          #在21021端口运行filebrowser,默认用户名和密码都为admin,登录后可以修改密码
pm2 start ./filebrowser -- -p 21021          #使用pm2运行

此外,各种QQ机器人、Blog框架(如 jar4halo)、文件目录程序(如 alist)、图床程序等等。因为此前已经把Python、Node.js、OpenJDK、PHP都安装好了,主流应用的环境问题都很好解决,多数只需要按照文档部署即可。

7F71925C-B8AF-477B-8DB0-A63B5938F51F.webp

# 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时区

原帖地址:https://blog.rappit.site/2023/12/31/some_server_on_my_hax/