用serv00部署Alist以及其它项目
原作者链接 Saika’s Blog
serv00 是一个提供免费的 Virtual Host 的平台,其托管平台使用的是 FreeBSD 系统,并不是 Linux。每个账号有效期 10 年,超过三个月不登入 Panel 以及 SSH 则会被删除账号。
| 名称 | Serv00 免费提供 |
|---|---|
| 存储空间 | 3 GB |
| 每月流量 | unlimited |
| 网站数量 | 100 |
| MySQL | 10 |
| MySQL | 3 |
| MongoDB | 3 |
| GIT/SVN/HG 仓库 | 3 |
| TCP/UDP 端口 | 3 |
| PHP 解释器 | 3 |
| 系统进程 | 15 |
| RAM | 512MB |
| 备份 | 7 天 |
| 服务器放置 | 欧盟 |
| 免费子域名 | login.serv00.net |
| 技术支持 | 只有论坛 |
| SLA | 不支持 |
| 现代技术 | 支持 |
| SSH 访问 | 支持 |
| SSH 隧道 | 不支持 |
| 远程数据库访问 | 不支持 |
| 固态硬盘 | 支持 |
| 没有广告 | 支持 |
| 价格 | 免费 |
Alist详细部署记录
注册账号
首先去 serv00 的官网注册一个账号:注册页面
最好不要使用国内邮箱,注册信息请尽可能真实填写。(What is the cost of hosting on serv00.com? 这一项填 0/free)
接着你可以在邮箱里收到你的注册信息的邮件;邮件最末有 Panel 的入口地址和文档链接(官方文档)以及论坛链接(官方论坛),接下来登入 Panel 进行操作:
- 首先去左侧的 Additional Service 选项卡中,找到 Run your own applications 选项,将其设置为允许
- 接着去 Port reservation 选项卡,使用 Add port 功能,随机添加一个 TCP 端口
接着使用 SSH 登入到你的账户,我使用的 SSH 客户端是 Termius
部署 Alist
Alist 的官方仓库并没有提供 FreeBSD 版本的可执行文件构筑,Alist 构筑 FreeBSD 版本的仓库
Serv00 本身提供的网站托管在 ~/domains 路径下,所以我建议把 Alist 也部署到这个路径下的子目录:
1 | mkdir -p ~/domains/alist && cd ~/domains/alist |
接着下载目前 shangskr/alist-freebsd 提供的最新版的 Alist 的可执行二进制文件构筑:
1 | wget https://github.com/shangskr/alist-freebsd/releases/download/v3.30.0/alist && chmod +x alist |
然后需要先启动一次 Alist 以生成配置文件,此次启动一定会失败,请不用在意:
1 | ./alist server |
接着回到 Panel 中,找到 MySQL 选项卡,使用 Add database 功能新建一个数据库:
密码要求含有大写字母、小写字母和数字三种字符,且长度必须超过 6 个字符。
接下来进入 File manager 选项卡,进入 ~/domains/alist/data 路径,可以看到一个名为 config.json 的文件,右键点击,选择 View/Edit > Source Editor,进行编辑:

修改 CDN、database、scheme 三个部分:
CDN:
https://jsd.onmicrosoft.cn/npm/alist-web@$version/dist/版本号的话自己指定,不指定有可能加载不出来页面
database 部分:
type需要改成mysqlhost填写你在注册邮件中看到的 mysql 的地址port是默认的3306- 用户名、密码、数据库名则按照你创建的情况进行填写
scheme 部分:
- 修改
address为127.0.0.1本地回环,是为了避免被他人使用http://ip:port的方式进行访问。至于自己怎么访问,本文后面的部分会进行介绍。 http_port要改成自己前面放行的端口。
- 修改
改完之后,点击 save 保存,接着回到 SSH 窗口中进行操作。
先启动一次,查看运行是否正常:
1 | ./alist server |
运行正常,记得把管理员用户的密码记住。接着使用 Ctrl+c 停止运行。
绑定域名
此时还没有访问 Alist 的方法,因为监听的地址是本地回环,所以需要将其反向代理出来。我选择使用 Cloudflare 提供的 Argo 通道,顺带给 Alist 绑定自己的域名。
Cloudflared 官方仓库没有提供 FreeBSD 平台的客户端,但是和 Alist 一样的,我找到了 Unofficial 的 FreeBSD 版本的构筑:cloudflared-freebsd,接下来使用它打隧道:
新建并进入 Cloudflared 的工作目录:
1 | mkdir -p ~/domains/cloudflared && cd ~/domains/cloudflared |
下载 Cloudflared:
1 | wget https://cloudflared.bowring.uk/binaries/cloudflared-freebsd-2023.10.0.7z && 7z x cloudflared-freebsd-2023.10.0.7z && rm cloudflared-freebsd-2023.10.0.7z && mv -f ./temp/cloudflared-freebsd-2023.10.0 ./cloudflared && rm -rf temp |
然后在 Cloudflare 的面板(Cloudflare Dash)中,找到 Networks 分类下的 Tunnels 功能,点击 Create a tunnel,选择 Cloudflared,Next,随便取个名字,Next,往下翻,可以看到 Run the following command,然后给了一串命令,将其复制出来,大概是这样的:
1 | cloudflared.exe service install eyJhIjoiNzh...............V5TWpBeSJ9 |
前面的不需要管,只需要保留最后 ey 开头的那串很长的 TOKEN,去 SSH 中测试运行 Cloudflared:
1 | ./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token eyJhIjoiNzh...............V5TWpBeSJ9 |
记得把最后的那一串替换成你的 TOKEN。
接着回到 Cloudflare 的面板,继续点击 Next,然后添加一个自己的域名,Service 中,Type 选择 HTTP,URL 填写 localhost:PORT,其中 PORT 为你的 Alist 对应的端口。点击 Save Tunnel 后,可以看到自己新建的 Tunnel 上线。
接着使用 Ctrl+c 停止运行。然后安装进程管理工具 pm2:
1 | bash <(curl -s https://raw.githubusercontent.com/shangskr/alist_repl/main/serv00/install-pm2.sh) |
然后使用 pm2 启动 Cloudflared:
1 | ~/.npm-global/bin/pm2 start ./cloudflared -- tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token eyJhIjoiNzh...............V5TWpBeSJ9 |
记得把最后的那一串替换成你的 TOKEN。
再启动 Alist:
1 | cd ~/domains/alist && ~/.npm-global/bin/pm2 start ./alist -- server |
到这里,就可以直接通过你的域名访问刚刚部署的 Alist 了。
收尾工作
听说 Serv00 会不定时重启机器,所以我们把 pm2 添加开机自启,可以保证每次重启都能由 pm2 调动 Alist 和 Cloudflared。而且 Serv00 每三个月内必须要有一次登录面板或者 SSH 连接,不然会删号,也可以通过一个脚本解决问题,接下来我会详细说明。
自动定时 SSH
在 Panel 中找到 File manager 选项卡,进入 alist 所在的路径,然后找到上方 Send 按钮左边的 +,选择 New empty file,文件名命名为 auto-renew.sh,右键点击 auto-renew.sh,选择 View/Edit > Source Editor,进行编辑,把下面的代码块的内容都复制进去:
1 |
|
记得把其中的密码、用户名、ssh 的地址修改为你自己的。
保存后回到 SSH 中,进入 auto-renew.sh 所在的路径,并使用 pm2 管理运行它:
1 | cd ~/domains/alist && chmod +x auto-renew.sh && ~/.npm-global/bin/pm2 start ./auto-renew.sh |
这样就会每隔一个月自动执行一次 SSH 连接,自己 SSH 自己进行续期。
添加开机自启
在 Panel 中找到 Cron jobs 选项卡,使用 Add cron job 功能添加任务:

- Specify time 选择 After reboot,即为重启后运行。
- Form type 选择 Advanced,Command 写:
1 | /home/你的用户名/.npm-global/bin/pm2 resurrect |
记得把你的用户名改为你的用户名
添加完之后,在 SSH 窗口保存 pm2 的当前任务列表快照:
1 | ~/.npm-global/bin/pm2 save |
这样每次 serv00 不定时重启任务时,都能自动调用 pm2 读取保存的任务列表快照,恢复任务列表。
更多玩法
参考来源:Saika’s Blog
serv00 官方文档 中有搭建网站的示例,示例就有 WordPress。文档中还详细介绍了以下服务的搭建方法:
- Redis
- Memcached
- Imapsync
- WP-CLI
- Tomcat
你可以根据自己的需求,参考官方文档部署更多服务。
KodBox
KodBox
虽然 Serv00 能够部署 KodBox,但是实在是不太好用。最直观的感受就是卡,因为 KodBox 运行期间需要调用多个 PHP 组件,而 Serv00 限制同时处理三个 PHP 进程,所以显得特别慢。其次,Serv00 没有 Root 权限,部分 PHP 插件没有安装,也无法安装,导致有一些 KodBox 的插件无法正常运行。
安装步骤
进入 PHP 网站路径:
1 | cd ~/domains/用户名.serv00.net/public_html/ |
安装 KodBox:
1 | bash <(curl -s https://pan.rappit.site/d/shell/kodbox1.49/serv00-kodbox-install.sh) |
然后去 Panel 中的 MySQL 选项卡,新建数据库和用户,用以接入 KodBox。再去 WWW Websites 选项卡中找到 用户名.serv00.net,点击右侧的 Manage > Details 进入设置,把以下三个功能打开:
- GZIP compression
- Allow PHP eval() function
- Allow PHP exec() function
再打开 https://用户名.serv00.net/ 进行 KodBox 的安装,数据库填写你刚刚新建的数据库即可。初次启动需要较长的时间,请耐心等待。
如果你看明白了面板的功能,也可以使用自己的域名或者子域部署 KodBox,这里仅用 https://用户名.serv00.net/ 举例。
注意:
- 上面的应用(KodBox)不需要占用端口
- 下面的应用每一个都需要占用端口
Vless
VLESS
创建并进入 vless 工作路径,并克隆源仓库:
1 | cd ~/domains && git clone https://github.com/qwer-search/serv00-vless && mv -f serv00-vless vless && cd vless && rm -f README.md |
在 Panel 中 Port Reservation 选项卡中放行一个 TCP 端口,随机即可,记住端口号。
使用 vim 编辑或者直接去 Panel 中的 File Manager 选项卡在线编辑 app.js 文件,修改端口为刚刚放行的端口。
安装依赖:
1 | npm install |
安装完毕后,使用 pm2 启动并守护 vless 进程:
1 | ~/.npm-global/bin/pm2 start app.js --name vless |
接着去你的代理客户端软件中手动添加 vless 配置即可:(下表没有给出的可以不填。)
| Key | Value |
|---|---|
| 地址 | Panel 中 WWW Websites 选项卡里的你的 Domain name |
| 端口 | 你放行的端口 |
| 用户 id | 37a0bd7c-8b9f-4693-8916-bd1e2da0a817 |
| 传输协议 | ws |
| 伪装域名 | 同地址 |
| ws path | / |
Alist
Alist(FreeBSD 版本)
Alist 官方仓库没有构筑 FreeBSD 系统下能够运行的 Alist 可执行文件,但是我在 Github 上发现了一个使用 Github Workflow 自动构筑 FreeBSD 适用的 Alist 的仓库:shangskr/alist-freebsd,使用这个仓库就可以很便利的在 Serv00 上部署 Alist。
部署步骤
新建并进入 Alist 的工作目录:
1 | mkdir -p ~/domains/alist && cd ~/domains/alist |
接着下载目前 shangskr/alist-freebsd 提供的最新版的 Alist 的可执行二进制文件构筑:
1 | wget https://github.com/shangskr/alist-freebsd/releases/download/v3.30.0/alist && chmod +x alist |
然后需要先启动一次 Alist 以生成配置文件,此次启动一定会失败,请不用在意:
1 | ./alist server |
接着回到 Panel 中,找到 MySQL 选项卡,使用 Add database 功能新建一个数据库:
密码要求含有大写字母、小写字母和数字三种字符,且长度必须超过 6 个字符。
接下来进入 File manager 选项卡,进入 ~/domains/alist/data 路径,可以看到一个名为 config.json 的文件,右键点击,选择 View/Edit > Source Editor,进行编辑:

修改 CDN、database、scheme 三个部分:
CDN:
https://jsd.onmicrosoft.cn/npm/alist-web@$version/dist/版本号的话自己指定,不指定有可能加载不出来页面
database 部分:
type需要改成mysqlhost填写你在注册邮件中看到的 mysql 的地址port是默认的3306- 用户名、密码、数据库名则按照你创建的情况进行填写
scheme 部分:
- 修改
address为127.0.0.1本地回环,是为了避免被他人使用http://ip:port的方式进行访问。至于自己怎么访问,本文后面的部分会进行介绍。 http_port要改成自己前面放行的端口。
- 修改
改完之后,点击 save 保存,接着回到 SSH 窗口中进行操作。
先启动一次,查看运行是否正常:
1 | ./alist server |
运行正常,记得把管理员用户的密码记住。接着使用 Ctrl+c 停止运行。
你可以选择使用面板中的 Proxy 功能添加域名,或者 Cloudflared 隧道添加域名。
Synctv
SyncTV
因为用 koyeb 部署这个项目把我 Koyeb 账号封了所以没办法玩了,我想到了 serv00 于是通过仿照 alist-freebsd 的仓库的 workflow 进行构筑的。
部署步骤
首先放行一个端口,然后创建并进入 synctv 的工作目录:
1 | mkdir -p ~/domains/synctv && cd ~/domains/synctv |
下载可执行文件:
1 | release_info=$(curl -s https://api.github.com/repos/shangskr/synctv-freebsd/releases/latest) |
新建启动脚本:
1 | touch start.sh && chmod +x start.sh |
接着在 Panel 中进入 File manager 选项卡,进入 synctv 的工作目录,找到 start.sh 文件,右键选择 View/Edit > Choose other > Source Editor 进行编辑,填入以下内容:
1 |
|
保存后回到 terminal 中,给予权限:
1 | chmod +x synctv |
测试运行:
1 | ./start.sh |
确定运行没有问题后,按 Ctrl+c 即可停止运行。
使用 pm2 启动并管理:
1 | ~/.npm-global/bin/pm2 start ./start.sh --name synctv |
One-api
One-API
源仓库没有提供 freebsd 平台的二进制文件,需要自己构建,但是很简单。先在面板中放行一个端口。
部署步骤
新建并进入 one-api 的工作目录:
1 | mkdir -p ~/domains/one-api && cd ~/domains/one-api |
进行构建:
1 | # 下载源代码 |
新建启动脚本:
1 | touch start.sh && chmod +x start.sh |
接着在 Panel 中进入 File manager 选项卡,进入 one-api 的工作目录,找到 start.sh 文件,右键选择 View/Edit > Choose other > Source Editor 进行编辑,填入以下内容:
1 |
|
保存后回到 terminal 中,测试运行:
1 | ./start.sh |
确定运行没有问题后,按 Ctrl+c 即可停止运行。
使用 pm2 启动并管理:
1 | ~/.npm-global/bin/pm2 start ./start.sh --name one-api |
Uptime-Kuma
Uptime Kuma
受限于 FreeBSD 的平台限制,1.23 版本内置了 PlayWright,无法运行,所以只能安装 1.22 版本。切记先去 Panel 中放行 TCP 端口。
部署步骤
下载 1.22.1 版本源代码并进入工作路径:
1 | cd ~/domains && wget https://github.com/louislam/uptime-kuma/archive/refs/tags/1.22.1.zip && unzip 1.22.1.zip && mv -f uptime-kuma-1.22.1 kuma && rm -f 1.22.1.zip && cd kuma |
设置生产模式:
1 | npm ci --production |
下载 dist 文件:
1 | wget https://github.com/louislam/uptime-kuma/releases/download/1.22.1/dist.tar.gz && tar -xzvf dist.tar.gz && rm dist.tar.gz |
安装补充依赖:
1 | npm install |
安装过程中多少会有报错,无视就好,实际上最后可以正常运行。内置的 Cloudflared 反向代理在 FreeBSD 平台上无法使用,但是可以使用上述的外置的 Cloudflared 进行反代,使用自己的域名。
测试运行:
1 | node server/server.js --port=PORT |
记得把 PORT 替换成你放行的端口。确定运行没有问题后,按 Ctrl+c 即可停止运行。
使用 pm2 管理后台运行:
1 | ~/.npm-global/bin/pm2 start server/server.js --name uptime-kuma -- --port=PORT |
记得把 PORT 替换成你放行的端口。
如果你不希望自己的 Uptime-Kuma 被人使用 http://IP:PORT 的方式访问,你可以在最后的执行命令添加 –host=127.0.0.1 的尾缀,这样就只能通过反向代理的域名进行访问了:
1 | ~/.npm-global/bin/pm2 start server/server.js --name uptime-kuma -- --port=PORT --host=127.0.0.1 |
Bingo
Bingo
先放行一个端口。在 Panel 中进入 File manager 选项卡,点击左侧的 My Files 进入你的用户根目录,找到 .bashrc 文件,右键选择 View/Edit > Choose other > Source Editor 进行编辑,在最末加上以下两行并保存:
1 | alias node='node20' |
应用更改:
1 | source ~/.bashrc |
先新建一个目录用于存放 halo 的相关文件,进入目录后执行下述操作。
下载源码:
1 | git clone https://github.com/weaigc/bingo |
进入源码所在目录:
1 | cd bingo |
安装依赖:
1 | npm20 install |
下载 build 好的 .next 资源:
1 | wget -O next.tar.gz https://pan.saika.free.hr/d/local/next.tar.gz && tar -xzvf next.tar.gz && rm next.tar.gz |
添加环境变量文件:
1 | cp .env.example .env |
接着在 Panel 中进入 File manager 选项卡,进入 Bingo 源码所在的目录,找到 server.js 文件,右键选择 View/Edit > Choose other > Source Editor 进行编辑,修改第 7 行中的端口为你放行的端口。再编辑 .env 文件,添加你的 BING_HEADER。
测试启动:
1 | npm20 run start |
确定运行没有问题后,按 Ctrl+c 即可停止运行。
使用 pm2 启动并管理:
1 | ~/.npm-global/bin/pm2 start npm --name bingo -- run start |
Refresh-gpt-chat
refresh-gpt-chat
创建并进入 refresh-gpt-chat 的工作目录:
1 | mkdir -p ~/domains/refresh-gpt-chat && cd ~/domains/refresh-gpt-chat |
下载 refresh-gpt-chat:
1 | # 本文成文时,refresh-gpt-chat 的最新版本为 0.0.3 |
使用 pm2 启动:
1 | ~/.npm-global/bin/pm2 start java19 --name refresh-gpt-chat -- -jar refresh-gpt-chat.jar --server.port=端口 --server.servlet.context-path=/ --getAccessTokenUrl=https://你的 ninja 地址/auth/refresh_token --chatUrl=https://你的 ninja 地址/v1/chat/completions |
再套域名,接下来就可以直接使用 https://你套的域名/v1/chat/completions/ 当作 API 端点,使用 refresh_token 做 API_Keys,使用 ChatGPT 了。
然后在 one-api 中添加自定义渠道,Base URL 填写你 https://你套的域名,模型填入你的 refresh_token 对应的账号所支持的模型,如果和我一样手持大把 3.5 的账号想用来做 API 用,可以选择全部 GPT3.5 的相关模型,然后在模型重定向中填入以下内容:
1 | { |
密钥填写你的 refresh_token 即可,如果你有多个账号,可以将批量勾选上,然后一行写一个 refresh_token。
gpt4-copilot-java
gpt4-copilot-java
支持 cocopilot 的 ccu 和 copilot 的 ghu 调用 copilot 转 GPT-4 的接口转换工具。Java 写的,可以在 Serv00 运行。依旧是在 Panel 中先开放端口。
部署步骤
新建并进入 gpt4-copilot-java 的工作目录:
1 | mkdir -p ~/domains/gpt4-copilot-java && cd ~/domains/gpt4-copilot-java |
下载 fat jar 包:
1 | RELEASE_INFO=$(curl -s "https://api.github.com/repos/Yanyutin753/gpt4-copilot-java-sh/releases/latest") |
测试运行:
1 | # 把 PORT 改为自己放行的端口,最后的 server.servlet.context-path 参数可以改成自己喜欢的尾缀 |
测试没有问题之后,按 Ctrl+c 即可停止运行。
使用 pm2 启动并管理:
1 | ~/.npm-global/bin/pm2 start java19 --name gpt4-copilot-java -- -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/ |
使用示例
始皇的公车:ghu_ThisIsARealFreeCopilotKeyByCoCopilot
免费公车白嫖请求示例:
1 | curl --location 'http(s)://ip:port_or_URL/cocopilot/v1/chat/completions' \ |
Zfile
ZFile
同理,先放行端口。然后新建并进入 zfile 的工作路径:
1 | mkdir -p ~/domains/zfile && cd ~/domains/zfile |
下载 fat jar 包:
1 | wget --no-check-certificate -O zfile.jar https://c.jun6.net/ZFILE/zfile-release.jar |
测试运行:
1 | java19 -jar -Duser.timezone=Asia/Shanghai zfile.jar --zfile.log.path=$PWD/logs --zfile.db.path=$PWD/zfile --server.port=PORT |
记得把端口改成自己的。测试没有问题之后,按 Ctrl+c 即可停止运行。
使用 pm2 启动并管理:
1 | ~/.npm-global/bin/pm2 start java19 --name zfile -- -jar -Duser.timezone=Asia/Shanghai zfile.jar --zfile.log.path=$PWD/logs --zfile.db.path=$PWD/zfile --server.port=PORT |
Halo
Halo
慎重部署,内存会超 100%,不知道会不会封号
Halo 自从升级 2.0 版本开始,很长时间内都没有提供构筑好的 jar 包,甚至于在 GitHub 上都出现了第三方的,使用 GitHub workflow 自动化构筑 jar 包的仓库:Jar4Halo。但是,自从 2.12.0-alpha.1 版本开始,Halo 的官方仓库又开始提供构筑好的 jar 包了。
部署步骤
先放行一个端口,并新建一个目录用于存放 halo 的相关文件,进入目录后执行下述操作。
下载 jar 包:
1 | wget -O halo.jar https://github.com/halo-dev/halo/releases/download/v2.12.0/halo-2.12.0.jar |
在面板中新建 MySQL 数据库,用于填入 application.yaml,application.yaml 的全部内容:
1 | server: |
在 halo.jar 所在路径下新建 .halo2 文件夹,进入其中,新建文件 application.yaml 然后把上述内容填入其中。
在 halo.jar 所在路径下新建 run.sh 运行脚本,其全部内容为:
1 |
|
测试运行:
1 | chmod +x run.sh && ./run.sh |
确定运行没有问题后,按 Ctrl+c 即可停止运行。
使用 pm2 管理运行:
1 | chmod +x run.sh && ~/.npm-global/bin/pm2 start ./run.sh --name halo |
自动续期
自动续期方法
方法一:使用青龙面板
可以用青龙面板的自动任务定期登录 SSH 解决。在青龙面板中添加 Linux 依赖 sshpass,然后添加定时任务:
- 名称:随意
- 命令/脚本:
1 | sshpass -p '密码' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 "exit" |
- 定时规则:
1 1 1 * *
这样就会每个月自动 ssh 连接一次,实现续期。
方法二:自身 SSH 自身自动续期
你还可以使用自身 SSH 自身的方式进行自动续期,操作如下:
在 Panel 中找到 File manager 选项卡,进入一个自己喜欢的路径,然后找到上方 Send 按钮左边的 +,选择 New empty file,文件名命名为 auto-renew.sh,右键点击 auto-renew.sh,选择 View/Edit > Source Editor,进行编辑,把下面的代码块的内容都复制进去:
1 |
|
记得把其中的密码、用户名、ssh 的地址修改为你自己的。
保存后回到 SSH 中,进入 auto-renew.sh 所在的路径:
1 | cd xxx #其中 xxx 为你的 auto-renew.sh 文件的存放路径 |
给 auto-renew.sh 添加可执行权限:
1 | chmod +x auto-renew.sh |
使用 pm2 启动:
1 | ~/.npm-global/bin/pm2 start ./auto-renew.sh |
这样就会每隔一个月自动执行一次 SSH 连接,自己 SSH 自己进行续期。







