在Hax的IPv6_only VPS上成功部署与管理多种应用:一份详尽的实践指南
本文最后更新于 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网络资源。
此外,我们也可以在Warp+ bot处生成Warp+的秘钥,如此可以提升Warp的网络速度。
Python
我就是喜欢追新,所以这里我没有直接使用 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
同理追新,我选择安装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
用得不多,所以偷个懒,直接 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
这里我选择了安装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
创建自己的数据库,再也不用到处找免费的数据库白嫖!充分利用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
默认监听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
推荐一个很好用的进程管理工具:pm2,安装简单,功能强大。具体功能不细说,源仓库介绍很详细,安装方法也很简单,直接用 npm
就能安装:
npm install pm2 -g
常用指令:
pm2 ls #查看目前pm2管理的所有进程的简易列表
pm2 monit #查看pm2管理的所有进程的详细信息
一些应用的部署
我首先部署的代理在此就不做介绍了,Hysteria2和tuic协议目前在Hax上的表现都还不错,GitHub和Gitlab上也都有不少一键部署的脚本。如果希望在本地没有IPv6的情况下代理到Hax,则需要选择使用Cloudflare隧道的代理方式,上述的fscarmen大佬也有提供,这里不再赘述。
我目前已经在Hax上部署了PandoraNext、TokensTool、One-API、Bingo四项服务,并通过Cloudflared隧道链接到了自己的域名,通过Cloudflare提供的服务,使得没有IPv6的网络情况下也可以访问我部署的服务。以上服务均用 pm2
启动,以便管理,防止崩溃。
Bingo
通过源码部署的方式进行部署。将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
因为源仓库提供了可执行文件,所以部署起来非常简单,下载,赋权,运行即可:
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
与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
TokensTool是配合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
为了便利的给上述服务添加域名,并使得没有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 Browser和TTYD并使用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都安装好了,主流应用的环境问题都很好解决,多数只需要按照文档部署即可。
# 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/
- 感谢你赐予我前进的力量