00 前言这个平台是个 Virtual Host ，没有 Root ，还是 FreeBSD 的系统，不是 Linux ，不太好用。但是优点是隔离性差， Memory 和 vCPU 能短时间内超过 100% 进行调用。不过Serv00 它极其不稳，有时候会重启宿主机，相当不友好。不过好在 pm2 也可以在 Serv00 上使用，这就使得这个十年有效期的玩具突然显得有用了起来。在 Serv00 的面板上自带了以下一些服务：01 面板自带功能域名Serv00 上如果想要使用自己的域名，有两种方式，一种是通过 Cloudflare 提供的 Argo 隧道，不仅能绑域名，免配置 ssl ，还可以享受 Cloudflare 的免费 CDN 提速。第二种就是直接使用面板内自带的 DNS 服务器功能绑定自己的域名。在 Panel 中进入 DNS zones 选项卡，使用 Add new zone 功能添加自己的域名或者自己的域名的子域，然后在 Zone list 中找到刚刚添加的域名，点击 Edit 查看 DNS 记录，把当中列出的全部记录添加到自己的域名的 DNS 记录中即可完成域名的绑定。Serv00 本身对于绑定在其上的域名提供了许多的服务支持，这里所说的绑定在Serv00上的域名包括自己绑定的自己的域名，以及 Serv00 在注册账户时赠送的域名 USERNAME.serv00.net ，其服务包括免费的一键申请式的 SSL 证书、域名邮箱、 DNS 管理等多种功能。SSL 证书申请在 Panel 中进入 WWW websites 选项卡，点击 Manage SSL certificates ，在你需要申请 SSL 证书的域名的 A 记录指向的那个 IP 地址右侧点击 Manage ，再点击 Add certificate ， Type 选择 Generate Let’s Encrypt certificate ，Domain 选择要申请 SSL 证书的域名，再点击 Add 即可。域名邮箱Panel 中进入 E-mail 选项卡，注册账号后会自动注册一个域名邮箱，用户名是 USERNAME@USERNAME.serv00.net 是 Serv00 的账户密码。可以使用 Add new e-mail 功能新建邮箱账户。也可以在 Add new alias 功能中新建别名邮箱，其别名邮箱功能也提供了和 Cloudflare 一样的 Catch-all 的 Advanced settings 选项，用来批量注册东西十分方便。目前我的测试中，似乎没有在 Manage whitelist 中添加进白名单的域名邮箱发来的邮件全部都会被识别为垃圾邮件。所以有需要的话可以在 Manage whitlist 中添加你需要接受邮件的邮箱的域名，比如 qq.com 、 gmail.com 等等。如果绑定了自己的域名，想要使用自己的域名配置域名邮箱的话，要在 Domain list 中找到自己的域名，点击最右边的 DKIM ， action 选择 Add DNS record automatically ，然后 Sign domain 以注册域名，使得新的域名邮箱能够通过一些邮件接收服务器的验证。Open web client 功能就可以进入邮箱的登录页面了，其使用方法与大多数的邮箱相同，不再赘述。DNS 管理DNS zones 选项卡中在自己绑定的域名右侧点击 Edit ，即可查看当前域名的所有 DNS 记录，在 Add new record 中可以手动添加新的 DNS 记录，与大多数的域名服务商提供的 DNS 管理的功能类似。ProxyWWW websites 选项卡中可以根据语言不同添加多种网站，其中 PHP 的 eval() function 和 exec() function 都要在添加完网站后，在 Manage > Details 中打开。不同类型的网页其 Details 中的选项也都有差异，可以按需查看配置，这里重点讲一下 Proxy 类型指向自己的应用程序监听端口的配置。Add new website 功能中， Domain 填写自己的域名或者 serv00 分配的域名，或者它们的子域，展开 Advanced settings， Website type 选择 Proxy ，Proxy target 选择 localhost ， Proxy port 选择自己的应用监听的端口，其他选项留空或者保持默认，点击 Add 即可。接下来就能使用刚刚填写的域名访问自己部署的对应端口的应用了。如果需要 https 访问，再按前文的步骤去申请 SSL 证书即可。File manager文件管理，有一定的在线编辑和预览的功能，兼具文件的上传下载，删除新建等各种管理功能，十分便利。Port reservation需要使用端口都得在这申请。数据库Serv00 提供了 MySQL 、 PostgreSQL 、 MongoDB 三种数据库，可以按需新建数据库、数据库用户。同时， Serv00 还提供了三种数据库的 webui ，十分便利。需要注意的是，所有数据库在新建时，其用户名和数据库名都有一个 mxxx_ 的前缀，在使用时容易被忽视。Cron jobsCron jobs 选项卡提供了一些计划性任务的设置功能，在这里可以设置开机自启任务，或者定时循环任务，当然常用的还是开机自启任务的设定， Specify time 选择 After reboot 即为开机自启。运行自己的应用部署自己的应用前应先在面板的 Additional services 选项卡中找到 Run your own applications 项目，将其设置为 Enabled 即可。如果不开启这一项，自己的用户目录下的所有文件都无法添加可执行权限。02 部署应用前的一些准备工作在应用部署前应先在面板上开启 Run your own applications 权限，或者使用 SSH 工具输入以下命令开启权限：devil binexec on在部署自己的应用之前，我建议提前安装好 pm2 以及 Cloudflared （可选）。前者是进程管理工具，用来方便开机自启，以及程序崩溃后自启，查阅进程运行情况等等。后者是 Cloudflare 的 Argo 隧道客户端，用它也可以给自己部署的应用加域名。特别是 Uptime Kuma ，更加推荐使用 Cloudflared 加域名，而不建议使用面板自带的 Proxy 。Pm2这个是重中之重，如果不是成功安装了 pm2 ，我甚至不会尝试探索 Serv00 这个玩具有什么用，所以 pm2 的安装方法记录在开头。在 SSH 连接 serv00 之后，直接使用一键脚本安装 pm2 ：bash <(curl -s https://raw.githubusercontent.com/k0baya/alist_repl/main/serv00/install-pm2.sh )如果安装完成后执行 pm2 提示命令未找到，你可以断开 SSH 连接，再重新连接，即可。CloudflaredCloudflared 官方仓库并没有构建 FreeBSD 系统上能够使用的二进制文件，但是同样的，我找到了第三方的构筑。使用第三方构筑的二进制文件，就能愉快的使用隧道了。关于 Cloudflared 是什么，有什么用，ARGO\_TOKEN 如何获取等部分，这里不再赘述，详细可以查看我的关于 CodeSandbox 和 Hax 的文章。创建并进入 Cloudflared 的工作目录：mkdir -p ~/domains/cloudflared && cd ~/domains/cloudflared下载 Cloudflared：wget https://cloudflared.bowring.uk/binaries/cloudflared-freebsd-latest.7z && 7z x cloudflared-freebsd-latest.7z && rm cloudflared-freebsd-latest.7z && mv -f ./temp/* ./cloudflared && rm -rf temp已知部分 Server （目前已知 s7 和 s8）已经使用 hosts 屏蔽了 Cloudflared 客户端的下载地址，可以通过手动上传二进制文件的方法解决：首先下载 https://cloudflared.bowring.uk/binaries/cloudflared-freebsd-latest.7z 并解压；然后将解压出来的 Cloudflared 二进制文件上传到你的 Serv00 内的这个路径 ~/domains/cloudflared，需要将 cloudflared-freebsd-xxx 改名为 cloudflared；接再并使用 chmod 指令给 cloudflared 二进制文件添加可执行权限。测试运行：./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN其中 ARGO_TOKEN 要替换成自己的。确定运行没有问题后，按 Ctrl+c 即可停止运行。使用 pm2 启动 Cloudflared：pm2 start ./cloudflared -- tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN其中 ARGO_TOKEN 要替换成自己的。接着去 CLoudflare 的面板中设置域名对应端口，即可使用域名访问自己搭建的服务了。安装 go1.22如果你有安装自己使用 go build 构建的需求，你可以选择安装最新的 go1.22 ，这里记录其安装过程。由于 Serv00 服务器上并未提供 go1.22 ，只提供了 go1.20.3 ，无法正常进行构建工作，所以需要手动安装 go1.22 环境。# 创建安装目录 mkdir -p ~/local/soft && cd ~/local/soft # 下载编译好的 go1.22 的程序包 wget https://dl.google.com/go/go1.22.0.freebsd-amd64.tar.gz # 解压 tar -xzvf go1.22.0.freebsd-amd64.tar.gz # 删除压缩文件 rm go1.22.0.freebsd-amd64.tar.gz # 修改 .profile 文件 echo 'export PATH=~/local/soft/go/bin:$PATH' >> ~/.profile # 使 .profile 的修改生效 source ~/.profile # 检查 go 版本 go version03 部署自己的应用经过整理网上的一些博客文章及 GitHub 上的项目，Serv00 上目前可以部署以下一些服务：关于设定 PHP 版本、插件、参数等配置均可参考文档的 .htaccess 部分进行配置，由于 PHP 的应用部署实在是太简单，故本文不会过多介绍。WordPress实际上在 serv00 的文档中有搭建网站的示例，没错，示例就有 WordPress ，实际上 WordPress 确实可以搭建，十分简单好用。这里不做过多介绍，按照文档一步步操作即可。除了 WordPress 外，文档中还详细介绍了 Redis、Memcached、Imapsync、WP-CLI、Tomcat 等服务的搭建方法，有需求的都可以照着抄。KodBox虽然 Serv00 能够部署 KodBox，但是实在是不太好用。最直观的感受就是卡，因为 KodBox 运行期间需要调用多个 PHP 组件，而 Serv00 限制同时处理三个 PHP 进程，所以显得特别慢。其次， Serv00 没有 Root 权限，部分 PHP 插件没有安装，也无法安装，导致有一些 KodBox 的插件无法正常运行。当然如果只是图新奇搭一个玩玩，也是可以的。下面是步骤：首先在 Panel 中 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypePHP添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的 USERNAME.serv00.net ，可以省略此步）接着SSH登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 安装KodBox 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 三个功能打开。然后使用浏览器访问你的 KodBxo 的域名，进行安装配置即可。初次启动需要较长的时间，请耐心等待。Lsky-Pro首先在 Panel 中 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypePHP添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的 USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下：# 下载图床应用 release_info=$(curl -s https://api.github.com/repos/lsky-org/lsky-pro/releases/latest) asset_url=$(echo "$release_info" | jq -r '.assets[] | select(.name != "source code") | .browser_download_url') curl -L -o temp.zip "$asset_url" && unzip -q temp.zip && rm -f temp.zip rm -rf public_html && ln -s "$PWD/public" "$PWD/public_html"接着在 Panel 中 WWW websites 选项卡内，点击自己刚刚创建的用于部署 Lsky-Pro 的域名的 Manage > Details ，在 Open Basedir directories 的最末添加：:/usr/home/用户名/domains/xxx.USERNAME.serv00.net记得把用户名和最末的域名换成自己的。然后把 GZIP compression 、Allow PHP eval() function 、Allow PHP exec() function 都打开，点击 save changes 保存。然后去 Panel 中的 MySQL 选项卡，新建数据库和用户，用以接入 Lsky-Pro 。然后使用浏览器访问你的 Lsky-Pro 的域名，进行安装配置即可。上面的应用不需要占用端口。下面的应用每一个都能够 / 需要占用端口。AlistAlist 官方仓库没有构筑 FreeBSD 系统下能够运行的 Alist 可执行文件，但是在 Github 上发现了一个使用 Github Workflow 自动构筑 FreeBSD 适用的 Alist 的仓库，使用这个仓库就可以很便利的在 Serv00 上部署 Alist。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Alist 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 使用一键命令安装 Alist wget -O alist-freebsd.sh https://raw.githubusercontent.com/k0baya/alist_repl/main/serv00/alist-freebsd.sh && sh alist-freebsd.sh在 Panel 中进入 MySQL 选项卡，使用 Add database 功能新建一个数据库。密码要求含有大写字母、小写字母和数字三种字符，且长度必须超过 6 个字符。接下来进入 File manager 选项卡，进入 ~/domains/xxx.USERNAME.serv00.net/public_html/data 路径，可以看到一个名为 config.json 的文件，右键点击，选择 View/Edit > Source Editor ，进行编辑：我主要修改了 CDN、database、scheme 三个部分，其中CDN可以在 Alist 的官方文档找到，请选择你本地网络连接速度最快的一个。scheme 部分，建议修改 adress 为 127.0.0.1 本地回环，是为了避免被他人使用 http://ip:port 的方式进行访问。至于自己怎么访问，我在本文后面的部分会进行介绍。port 要改成自己前面放行的端口。database 部分，type 需要改成 mysql ，host 填写你在注册邮件中看到的 mysql 的地址， port 是默认的 3306，用户名、密码、数据库名则按照你创建的情况进行填写。最新版本的 Alist 如果不想开启 S3 Server，请把对应的配置文件中的端口配置为 0 。改完之后，点击 save 保存，接着回到 SSH 窗口中进行操作：测试启动 Alist：./alist server确定运行没有问题后，按 Ctrl+c即可停止运行。使用 pm2 启动并管理 alist：pm2 start ./alist -- server同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Synctv群友仿照 alist-freebsd 的仓库的 workflow 进行构筑的。部署简单，与 alist 类似。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Synctv 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载可执行文件 release_info=$(curl -s https://api.github.com/repos/shangskr/synctv-freebsd/releases/latest) asset_url=$(echo "$release_info" | jq -r '.assets[] | select(.name != "source code") | .browser_download_url') curl -L -o synctv "$asset_url" && chmod +x synctv新建启动脚本：cat > start.sh << EOF #!/bin/sh # 如果不希望被使用 http://ip:port 的方式访问，取消注释下一行 # export SYNCTV_SERVER_LISTEN=127.0.0.1 # 把下一行的最末的PORT改成自己放行的端口 export SYNCTV_SERVER_PORT=PORT exec ./synctv server --data-dir ./ EOF添加可执行权限：chmod +x start.sh测试运行：./start.sh确定运行没有问题后，按 Ctrl+c即可停止运行。使用 pm2 启动并管理：pm2 start ./start.sh --name synctv同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。One-api源仓库没有提供 freebsd 平台的二进制文件，需要自己构建，但是很简单。我已经写了一个仓库用于自动化构建 freebsd 版本的 one-api 二进制文件，可以直接下载使用。如果你想使用 New-API ，可以使用这个仓库 k0baya/new-api-freebsd，用法与本节介绍的 One-API 基本一致，对比 One-API 添加了一些更方便的功能。也许之后 One-API 也会加入这些功能。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 One-API 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载 one-api release_info=$(curl -s https://api.github.com/repos/k0baya/one-api-freebsd/releases/latest) asset_url=$(echo "$release_info" | jq -r '.assets[] | select(.name != "source code") | .browser_download_url') curl -L -o one-api "$asset_url" && chmod +x one-api新建启动脚本：cat > start.sh << EOF #!/bin/sh # 如果你有设置主题的需要，可以取消注释下一行，然后按照自己的需求设置。 # export THEME="berry" export TIKTOKEN_CACHE_DIR="$PWD" # 把下一行的 PORT 改为自己放行的端口 exec ./one-api --port PORT --log-dir ./logs EOF添加可执行权限：chmod +x start.sh保存后回到 terminal 中，测试运行：./start.sh确定运行没有问题后，按 Ctrl+c即可停止运行。使用 pm2 启动并管理：pm2 start ./start.sh --name one-api同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Uptime-Kuma受限于 FreeBSD 的平台限制，1.23 版本内置了 PlayWright ，无法运行，所以只能安装 1.22 版本。切记先去 Panel 中放行 TCP 端口。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Uptime-Kuma 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下：# 下载 v1.22.1 版本的源代码 cd ~/domains && wget https://github.com/louislam/uptime-kuma/archive/refs/tags/1.22.1.zip && unzip 1.22.1.zip && rm -rf public_html && mv -f uptime-kuma-1.22.1 public_html && rm -f 1.22.1.zip && cd public_html设置生产模式：npm ci --production下载 dist 文件：wget https://github.com/louislam/uptime-kuma/releases/download/1.22.1/dist.tar.gz && tar -xzvf dist.tar.gz && rm dist.tar.gz安装补充依赖：npm install安装过程中多少会有报错，无视就好，实际上最后可以正常运行。内置的 Cloudflared 反向代理在 FreeBSD 平台上无法使用，但是可以使用上述的外置的 Cloudflared 进行反代，使用自己的域名。测试运行：node server/server.js --port=PORT记得把 PORT 替换成你放行的端口。确定运行没有问题后，按 Ctrl+c即可停止运行。使用 pm2 管理后台运行：pm2 start server/server.js --name uptime-kuma -- --port=PORT记得把 PORT 替换成你放行的端口。如果你不希望自己的Uptime-Kuma被人使用 http://IP:PORT的方式访问 ，你可以在最后的执行命令添加 --host=127.0.0.1的尾缀，这样就只能通过反向代理的域名进行访问了:pm2 start server/server.js --name uptime-kuma -- --port=PORT --host=127.0.0.1同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Refresh-gpt-chat用来对接 ninja、warpgpt 等能够使用 access\_Token 作为 API Key 请求 GPT 的工具，以使用永久有效期的 Refresh\_token 来获取更好的体验。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Refresh-gpt-chat 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载 refresh-gpt-chat wget -O refresh-gpt-chat.jar https://github.com/Yanyutin753/refresh-gpt-chat/releases/download/v0.0.3/refresh-gpt-chat-0.0.3-SNAPSHOT.jar使用 pm2 启动：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 的相关模型，然后在 模型重定向中填入以下内容：{ "gpt-3.5-turbo-0301": "gpt-3.5-turbo", "gpt-3.5-turbo-0613": "gpt-3.5-turbo", "gpt-3.5-turbo-16k": "gpt-3.5-turbo", "gpt-3.5-turbo-16k-0613": "gpt-3.5-turbo", "gpt-3.5-turbo-1106": "gpt-3.5-turbo", "gpt-3.5-turbo-instruct": "gpt-3.5-turbo" }密钥填写你的 refresh_token即可，如果你有多个账号，可以将批量勾选上，然后一行写一个 refresh_token。同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Gpt4-copilot-java支持 cocopilot 的 ccu 和 copilot 的 ghu 调用 copilot 转 GPT-4 的接口转换工具。 Java 写的，可以在 Serv00 运行。目前更推荐这个方法：lvguanjun/copilot-to-chatgpt4 比起 Gpt4-copilot-java 更轻量更强大。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Gpt4-copilot-java 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载 fat jar 包 RELEASE_INFO=$(curl -s "https://api.github.com/repos/Yanyutin753/gpt4-copilot-java-sh/releases/latest") JAR_DOWNLOAD_URL=$(echo "$RELEASE_INFO" | jq -r '.assets[] | select(.name|test(".jar$")) | .browser_download_url') curl -L -o gpt4-copilot-java.jar "$JAR_DOWNLOAD_URL"测试运行：# 把PORT改为自己放行的端口，最后的server.servlet.context-path参数可以改成自己喜欢的尾缀 java19 -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/测试没有问题之后，按 Ctrl+c即可停止运行。使用 pm2 启动并管理：pm2 start java19 --name gpt4-copilot-java -- -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Zfile首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Zfile 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载 fat jar 包 wget --no-check-certificate -O zfile.jar https://c.jun6.net/ZFILE/zfile-release.jar测试运行：java19 -jar -Duser.timezone=Asia/Shanghai zfile.jar --zfile.log.path=$PWD/logs --zfile.db.path=$PWD/zfile --server.port=PORT记得把端口改成自己的。测试没有问题之后，按 Ctrl+c即可停止运行。使用 pm2 启动并管理：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同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Halo慎重部署，内存会超 100%，不知道会不会封号halo 自从升级 2.0 版本开始，很长时间内都没有提供构筑好的 jar 包，甚至于在GitHub上都出现了第三方的，使用 GitHub workflow 自动化构筑 jar 包的仓库。但是，自从 2.12.0-alpha.1版本开始，halo 的官方仓库又开始提供构筑好的 jar 包了，刚好这些天在玩 Serv00 ，遂尝试部署了一下，成功。现记录一下：首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Halo 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）并在 MySQL 选项卡中中新建 MySQL 数据库，用于填入接入 Halo 。接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载jar包 release_info=$(curl -s https://api.github.com/repos/halo-dev/halo/releases/latest) jar_url=$(echo "$release_info" | jq -r '.assets[] | select(.name | endswith(".jar")) | .browser_download_url') curl -L "$jar_url" -o halo.jar在 halo.jar 所在路径下新建 .halo2 文件夹，进入其中，新建文件 application.yaml 然后并配置其内容：# 新建文件夹 mkdir -p .halo2 # 新建并填入配置 cat > .halo2/application.yaml << EOF server: port: 你在面板中放行的端口 # Response data gzip. compression: enabled: false spring: #sql: # init.platform: mysql r2dbc: url: r2dbc:pool:mysql://数据库地址:3306/数据库名 username: 数据库用户名 password: 数据库密码 halo: # Your admin client path is https://your-domain/{admin-path} admin-path: admin # memory or level cache: level EOF在 halo.jar 所在路径下新建 run.sh 运行脚本：cat > run.sh << EOF #!/bin/bash export HALO_WORK_DIR="$PWD/.halo2" export HALO_EXTERNAL_URL="https://你的域名" exec java17 -server -Xms128m -Xmx256m -jar -Duser.timezone=Asia/Shanghai $PWD/halo.jar --spring.config.additional-location=$PWD/.halo2/application.yaml EOF测试运行：chmod +x run.sh && ./run.sh确定运行没有问题后，按 Ctrl+c即可停止运行。使用 pm2 管理运行：chmod +x run.sh && pm2 start ./run.sh --name halo同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。Go-proxy-bingaiHarry-zklcdc 维护的 Go-proxy-bingai 的分支仓库目前还能够正常使用。而且在与开发者反馈了几个 bug 之后，开发者都会花时间认真复现，并快速修复，其体验实在是不错。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Go-proxy-bingai 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载可执行文件 release_info=$(curl -s https://api.github.com/repos/Harry-zklcdc/go-proxy-bingai/releases | jq -r '[.[] | select(.prerelease==false)][0]') download_url=$(echo "$release_info" | jq -r '.assets[] | select(.name=="go-proxy-bingai-freebsd-amd64.tar.gz") | .browser_download_url') curl -L "$download_url" -o go-proxy-bingai-freebsd-amd64.tar.gz&& tar -xzf go-proxy-bingai-freebsd-amd64.tar.gz && rm go-proxy-bingai-freebsd-amd64.tar.gz && chmod +x go-proxy-bingai新建启动脚本：cat > entrypoint.sh << EOF #!/bin/bash # 被注释的环境变量请根据自己的需求，按照原仓库的 wiki 中的介绍进行填入。 export BYPASS_SERVER="https://bypass.zklcdc.xyz" # 作者本人的公共bypass服务，可用性未知。 # export Go_Proxy_BingAI_USER_TOKEN_1="xxx" # export Go_Proxy_BingAI_USER_TOKEN_2="xxx" # export USER_KievRPSSecAuth="xxx" # export USER_RwBf="xxx" # export USER_MUID="xxx" # export APIKEY="sk-xxx" # export BING_BASE_URL="https://www.bing.com" # export SYDNEY_BASE_URL="https://sydney.bing.com" # export HTTP_PROXY="http://172.17.0.1:18080" # export HTTPS_PROXY="http://172.17.0.1:18080" # export Go_Proxy_BingAI_AUTH_KEY="xxx" # 请把下一行双引号中的内容替换成你放行的端口。 export PORT="xxx" chmod +x go-proxy-bingai && exec ./go-proxy-bingai EOF运行：# 测试运行 chmod +x entrypoint.sh && ./entrypoint.sh # 使用 pm2 管理运行 pm2 start ./entrypoint.sh --name go-proxy-bingai请注意，如果你需要使用其 web 功能，而不仅仅是 api 功能，请务必使用 https 访问，不然无法打开。你可以选择使用面板自带的 proxy 添加域名并申请 ssl 证书，亦或者直接使用 cloudflared 隧道。同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。OneList原作者似乎已经弃坑，但是体验还不错，有 Emby 既视感了，配合小雅的 Alist 岂不美哉。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 OneList 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载 OneList wget https://github.com/k0baya/onelist-freebsd/releases/download/v2.0.5/onelist # 初始化配置 chmod +x onelist && ./onelist -run config接着回到 Panel 中，进入 File manager 选项卡，进入 OneList 所在路径，可以看到一个名为 config.env 的文件，右键点击，选择 View/Edit > Source Editor，进行编辑：# 服务设置 # 注意要改为未被占用的端口 API_PORT=5245 FaviconicoUrl=https://wework.qpic.cn/wwpic/818353_fizV30xbQCGPQRP_1677394564/0 API_SECRET=fRVvjcNd11gYGI85StVaeCtPVSmJTRRE # Env有两种模式，Debug及Release，主要用在数据库为mysql时候，需要注意修改Env环境和mysql密码对应 Env=Debug # 管理员账户设置，用于初始化管理员账户 UserEmail=xxxx.@qq.com UserPassword=xxxxx # 数据库设置 DB_DRIVER=sqlite DB_USER=root DbName=onelist # 如果上面DB_DRIVER类型为mysql，就需要正确填下以下参数 DB_PASSWORD_Debug=123456 DB_PASSWORD_Release=123456 # TheMovieDb Key # 在https://www.themoviedb.org网站申请 KeyDb=22f10ca52f109158ac7fe064ebbcf697你可以按照自己的需求配置端口、管理员账户、数据库。 MySQL 性能更好哦~测试运行：./onelist -run server使用 pm2 管理：pm2 start ./onelist -- -run serverWarpGPT这个没什么多说的，可以使用 access\_Token 作为 API Key 请求 ChatGPT 接口，也就是所谓的 chat2api 。配合前文的 Refresh-gpt-chat 就可以把永久有效期的 Refresh\_token 作为 API Key 来使用，十分的好用。源仓库没有 Release ，故我的仓库没有做自动检测构建。如果有更新需求需要手动触发 workflow 。你有需要也可以自己 fork 一份然后手动触发 workflow 。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 WarpGPT 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载二进制文件 wget https://github.com/k0baya/warpgpt-freebsd/releases/download/latest/warpgpt && chmod +x warpgpt添加启动脚本：cat > start.sh << EOF #!/bin/bash export TMPDIR="$PWD" chmod +x warpgpt && exec ./warpgpt EOF给启动脚本赋权：chmod +x start.sh配置环境变量：cat > .env << EOF proxy = "http://127.0.0.1:10809" #代理地址 （选填） port = 5000 #程序运行端口 host = '127.0.0.1' #可访问ip，0.0.0.0允许所有ip verify = false #是否对访问进行验证 auth_key = "" #若开启访问验证，则需要在Header中添加AuthKey字段，且值为auth_key的值才能访问 （选填） arkose_must = false #是否强行gpt3.5进行验证 OpenAI_HOST = "chat.openai.com" #openai网页api接口地址 （选填） openai_api_host = "api.openai.com" #openai官方api接口 （选填） proxy_pool_url="" #ipidea代理池链接 （选填） #示例http://api.proxy.ipidea.io/getProxyIp?num=10&return_type=json&lb=1&sb=0&flow=1&regions=us&protocol=http，根据访问频次设置num值 log_level = "debug" #日志等级 redis_address = "127.0.0.1:6379" #redis地址（若不开启代理池可选填） redis_passwd = "" #redis密码 redis_db = 0 #选择的redis数据库 EOF如果有 redis 需求，可以查阅官方文档：Redis使用 pm2 管理运行：pm2 start bash --name warpgpt -- start.shCoze-discord-proxy代理 Discord 对话 Coze-Bot ，实现以 API 形式请求 GPT4 模型，提供对话、文生图、图生文、知识库检索等功能。功能不多赘述，详细去源仓库查看。同样的，我写了一个用于构建 FreeBSD 版本的仓库。在这里感谢论坛用户 Reno 的测试，没有测试人员的测试，也不会有部署的过程记录了。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Coze-discord-proxy 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：# 下载二进制文件 release_info=$(curl -s https://api.github.com/repos/k0baya/coze-discord-proxy-freebsd/releases/latest) asset_url=$(echo "$release_info" | jq -r '.assets[] | select(.name != "source code") | .browser_download_url') curl -L -o coze-discord-proxy "$asset_url" && chmod +x coze-discord-proxy添加启动脚本：cat > start.sh << EOF #!/bin/bash # 根据你的需求自行填入环境变量 export PORT="PORT" export USER_AUTHORIZATION="XXXXXX" export BOT_TOKEN="XXXXXX" export GUILD_ID="XXXXXX" export COZE_BOT_ID="XXXXXX" export PROXY_SECRET="XXXXXX" export CHANNEL_ID="XXXXXX" export TZ="Asia/Shanghai" export DATA_GYM_CACHE_DIR="$PWD" chmod +x coze-discord-proxy && exec ./coze-discord-proxy EOF给启动脚本赋权：chmod +x coze-discord-proxy添加多机器人配置文件：mkdir -p app/coze-discord-proxy/data/config touch app/coze-discord-proxy/data/config/bot_config.json然后回到 Panel 中，进入 File manager 选项卡，进入 bot_config.json 所在路径，右键点击它，选择 View/Edit > Source Editor，进行编辑：[ { "proxySecret": "123", // 接口请求密钥(PROXY_SECRET)(注意:此密钥在环境变量PROXY_SECRET中存在时该Bot才可以被匹配到!) "cozeBotId": "12***************31", // coze托管的机器人ID "model": ["gpt-3.5","gpt-3.5-16k"], // 模型名称(数组格式)(与请求参数中的model对应,如请求中的model在该json中未匹配到则会抛出异常) "channelId": "12***************56" // [可选]discord频道ID(机器人必须在此频道所在的服务器)(目前版本下该参数仅用来活跃机器人) }, { "proxySecret": "456", "cozeBotId": "12***************64", "model": ["gpt-4","gpt-4-16k"], "channelId": "12***************78" }, { "proxySecret": "789", "cozeBotId": "12***************12", "model": ["dall-e-3"], "channelId": "12***************24" } ]使用 pm2 管理运行：pm2 start bash --name coze-discord-proxy -- start.shMemos一款开源、轻量级的笔记服务。轻松捕捉并分享您的精彩想法。这个仓库比较难受的是，其在源码的这个位置强制要求其 gRPC 服务的端口为 Memos 监听端口+1，故这个应用需要占用两个端口，而且必须是两个连续的端口。Github 上一个用于构建 FreeBSD 版本的仓库。首先在 Panel 中放行两个相邻的端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port刚刚放行的两个相邻的端口中小的那一个Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：API_URL="https://api.github.com/repos/k0baya/memos-binary/releases/latest" DOWNLOAD_URL=$(curl -s $API_URL | jq -r ".assets[] | select(.name == \"memos-freebsd-amd64.tar.gz\") | .browser_download_url") curl -L $DOWNLOAD_URL -o memos-freebsd-amd64.tar.gz tar -xzvf memos-freebsd-amd64.tar.gz && rm memos-freebsd-amd64.tar.gz && chmod +x memos关于运行，有两种方式进行：SQLite如果选择使用 SQLite 作为数据库运行，则可以直接运行：# 假定你的数据文件打算存储在 /home/username/domains/xxx.USERNAME.serv00.net/public_html/data # 新建数据文件夹 mkdir -p /home/username/domains/xxx.USERNAME.serv00.net/public_html/data # 测试运行 ./memos --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data # 使用 pm2 管理 pm2 start ./memos --name memos -- --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data外接 MySQL / PostgreSQL你可以使用面板自带的 MySQL / PostgreSQL 新建数据库，或者使用其他平台提供的远程数据库：# 假定你的数据文件打算存储在 /home/username/domains/xxx.USERNAME.serv00.net/public_html/data # 新建数据文件夹 mkdir -p /home/username/domains/xxx.USERNAME.serv00.net/public_html/data # 测试运行（MySQL）（MySQL需要管理员权限，你可以选择远程连接） ./memos --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver mysql --dsn mysql://root:password123@localhost:3306/mydb # 测试运行（PostgreSQL） ./memos --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver postgres --dsn postgresql://user:password123@localhost:5432/mydb?sslmode=disable # 使用 pm2 管理（MySQL）（MySQL需要管理员权限，你可以选择远程连接） pm2 start ./memos --name memos -- --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver mysql --dsn mysql://root:password123@localhost:3306/mydb # 使用 pm2 管理（PostgreSQL） pm2 start ./memos --name memos -- --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver postgres --dsn postgresql://user:password123@localhost:5432/mydb?sslmode=disableFrps内网穿透嘛，懂的都懂，这里只做服务端的部署记录，客户端可以查看 Frp 的官方文档自行配置。感谢群友的率先测试：youyi首先在 Panel 中放行两个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来映射转发内网服务的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）同样的，你可以设置多个域名使用 Proxy 指向同一个端口，在 Frpc 客户端配置中使用域名分发不同的服务。具体可以查阅官方文档。接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下release_info=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest) download_url=$(echo "$release_info" | jq -r '.assets[] | select(.name | contains("freebsd_amd64.tar.gz")) | .browser_download_url') curl -L "$download_url" -o frp_freebsd_amd64.tar.gz tar -xzvf frp_freebsd_amd64.tar.gz --strip-components=1 rm -rf frp_freebsd_amd64.tar.gz接着编辑配置文件：# 按照自己的实际情况和需求进行配置，这里只做最简单的http转发配置示例 cat > frps.toml << EOF bindPort = 监听端口 vhostHTTPPort = 映射转发端口 auth.token = "密码" EOF运行：pm2 start ./frps -- -c frps.toml客户端配置示例：serverAddr = "x.x.x.x" serverPort = Frps 的监听端口 auth.token = "密码" proxies name = "web" type = "http" localPort = 80 customDomains = ["www.yourdomain.com"] proxies name = "web2" type = "http" localPort = 8080 customDomains = ["www.yourdomain2.com"]RcloneRclone 是一款管理云存储文件的命令行程序。它功能丰富，可替代云供应商的网络存储界面。超过 70 种云存储产品支持 Rclone，包括 S3 对象存储、企业和消费者文件存储服务以及标准传输协议。具体用法与配置请查阅其官方文档。如果你需要使用 Rclone 的 web ui ，你可以按照前文所述的大多数应用一样，先放行端口，添加域名，申请好 SSL 证书，并进入其目录下的 public_html 路径下再进行程序本体的下载部署。下载最新版 Rclone：release_info=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest) download_url=$(echo "$release_info" | jq -r '.assets[] | select(.name | contains("-freebsd-amd64.zip")) | .browser_download_url') curl -L "$download_url" -o rclone-freebsd-amd64.zip outer_folder=$(unzip -l rclone-freebsd-amd64.zip | grep '/' | sed -n '1p' | sed 's#^.* \([^/]*\)/.*$#\1#') unzip rclone-freebsd-amd64.zip mv "$outer_folder"/* . && rm -rf "$outer_folder" rclone-freebsd-amd64.zip目前 v1.63.1 之后的版本的 FreeBSD 版的构建都有无法识别 mount 命令的问题，在查阅其 issue —— #7432 、 #5843 后，确定这个 bug 已经好几个月没有修复了。所以建议在此 bug 修复前，使用 v1.63.1 版本。下载 v1.63.1 版本 Rclone ：curl -L https://github.com/rclone/rclone/releases/download/v1.63.1/rclone-v1.63.1-freebsd-amd64.zip -o rclone-freebsd-amd64.zip outer_folder=$(unzip -l rclone-freebsd-amd64.zip | grep '/' | sed -n '1p' | sed 's#^.* \([^/]*\)/.*$#\1#') unzip rclone-freebsd-amd64.zip mv "$outer_folder"/* . && rm -rf "$outer_folder" rclone-freebsd-amd64.zip配置 Rclone 的存储：./rclone config启动 web ui：./rclone rcd --rc-web-gui --rc-user 用户名 --rc-pass 密码 --rc-addr :端口pm2 管理 web ui：pm2 start ./rclone -- rcd --rc-web-gui --rc-user 用户名 --rc-pass 密码 --rc-addr :端口CloudreveCloudreve 可助你即刻构建出兼备自用或公用的网盘服务，通过多种存储策略的支持、虚拟文件系统等特性实现灵活的文件管理体验。同样的，我编写了一个用于自动化构建 FreeBSD 版本的 Cloudreve 的仓库：k0baya/cloudreve-freebsd 前后端分离构建，前端静态文件在 Cloudreve 本体同路径下的 static 文件夹内。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Cloudreve 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：release_info=$(curl -s https://api.github.com/repos/k0baya/cloudreve-freebsd/releases/latest) download_url=$(echo "$release_info" | jq -r '.assets[] | select(.name | contains("freebsd-amd64.tar.gz")) | .browser_download_url') curl -L "$download_url" -o cloudreve-freebsd-amd64.tar.gz tar -xzvf cloudreve-freebsd-amd64.tar.gz rm -rf cloudreve-freebsd-amd64.tar.gzCloudreve 在首次启动时，会创建初始管理员账号，请注意保管管理员密码，此密码只会在首次启动时出现。如果您忘记初始管理员密码，需要删除同级目录下的 cloudreve.db ，重新启动主程序以初始化新的管理员账户。Cloudreve 默认会监听 5212 端口。首次启动时，Cloudreve 会在同级目录下创建名为 conf.ini 的配置文件，你可以修改此文件进行一些参数的配置（比如端口），保存后需要重新启动 Cloudreve 生效。一个完整的配置文件示例如下：[System] ; 运行模式 Mode = master ; 监听端口 Listen = :5212 ; 是否开启 Debug Debug = false ; Session 密钥, 一般在首次启动时自动生成 SessionSecret = 23333 ; Hash 加盐, 一般在首次启动时自动生成 HashIDSalt = something really hard to guss ; 呈递客户端 IP 时使用的 Header ProxyHeader = X-Forwarded-For ; SSL 相关 [SSL] ; SSL 监听端口 Listen = :443 ; 证书路径 CertPath = C:\Users\i\Documents\fullchain.pem ; 私钥路径 KeyPath = C:\Users\i\Documents\privkey.pem ; 启用 Unix Socket 监听 [UnixSocket] Listen = /run/cloudreve/cloudreve.sock ; 设置产生的 socket 文件的权限 Perm = 0666 ; 数据库相关，如果你只想使用内置的 SQLite 数据库，这一部分直接删去即可 [Database] ; 数据库类型，目前支持 sqlite/mysql/mssql/postgres Type = mysql ; MySQL 端口 Port = 3306 ; 用户名 User = root ; 密码 Password = root ; 数据库地址 Host = 127.0.0.1 ; 数据库名称 Name = v3 ; 数据表前缀 TablePrefix = cd_ ; 字符集 Charset = utf8mb4 ; SQLite 数据库文件路径 DBFile = cloudreve.db ; 进程退出前安全关闭数据库连接的缓冲时间 GracePeriod = 30 ; 使用 Unix Socket 连接到数据库 UnixSocket = false ; 从机模式下的配置 [Slave] ; 通信密钥 Secret = 1234567891234567123456789123456712345678912345671234567891234567 ; 回调请求超时时间 (s) CallbackTimeout = 20 ; 签名有效期 SignatureTTL = 60 ; 跨域配置 [CORS] AllowOrigins = * AllowMethods = OPTIONS,GET,POST AllowHeaders = * AllowCredentials = false SameSite = Default Secure = lse ; Redis 相关 [Redis] Server = 127.0.0.1:6379 Password = DB = 0 ; 从机配置覆盖 [OptionOverwrite] ; 可直接使用 `设置名称 = 值` 的格式覆盖 max_worker_num = 50你可以使用 vim 或者 Panel 中的 File manager 选项卡，进入 conf.ini 所在路径路径，右键点击，选择 View/Edit > Source Editor ，进行编辑。修改完配置文件后，测试启动：./cloudreve使用 pm2 管理：pm2 start ./cloudrevePanIndex一个简易的网盘目录列表。GitHub 上有一个用于自动化构建 FreeBSD 版本的 PanIndex 的仓库：k0baya/panindex-freebsd。后台地址（默认）： http://ip:port/admin 默认账号：admin 默认密码：PanIndex首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 PanIndex 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的USERNAME.serv00.net ，可以省略此步）接着 SSH 登入，并进入刚刚你新建的域名目录下的 public_html 路径下：release_info=$(curl -s https://api.github.com/repos/k0baya/panindex-freebsd/releases/latest) asset_url=$(echo "$release_info" | jq -r '.assets[] | select(.name != "source code") | .browser_download_url') curl -L -o panindex "$asset_url" && chmod +x panindex创建配置文件：cat > config.json << EOF { "host": "0.0.0.0", "port": 5238, "log_level": "info", "data_path": "", "cert_file": "", "key_file": "", "config_query": "", "db_type": "", "dsn": "", "ui": "" } EOF数据库支持 sqlite (默认)、mysql、postgres ，如果需要接入 MySQL 或者 PostgreSQL ，请写成数据库链接的方式填入 dsn 。注意，如果是 Serv00 自带的 PostgreSQL ，请在数据库链接最末加上 ?sslmode=disable 以禁用 SSL 连接。编写好配置文件后，测试运行：./panindex -c=config.json使用 pm2 管理：pm2 start ./panindex -- -c=config.jsonArtalk首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：KeyValueDomainxxx.USERNAME.serv00.net（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）Website TypeproxyProxy TargetlocalhostProxy URL留空Proxy port你准备用来部署 Alist 的端口Use HTPPSFalseDNS supportTrue添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：TypeDomainGenerate Let’s Encrypted certificate与刚刚添加的站点域名保持一致（如果是原有的 USERNAME.serv00.net ，可以省略此步）接着SSH登入，并进入刚刚你新建的域名目录下的public_html路径下：# 使用一键命令安装 Artalk wget -O artalk-freebsd.sh https://github.com/SinzMise/artalk-deploy/raw/serv00/artalk-freebsd.sh && sh artalk-freebsd.sh在 Panel 中进入 MySQL 选项卡，使用 Add database 功能新建一个数据库。（当然Postgresql也可以，如果不要数据库就只要sqlite可以不用新建） 密码要求含有大写字母、小写字母和数字三种字符，且长度必须超过6个字符。接下来进入 File manager 选项卡，进入 ~/domains/xxx.USERNAME.serv00.net/public_html 路径，可以看到一个名为 artalk.yml 的文件，右键点击，选择 View/Edit > Source Editor ，进行编辑，这里面就只要改 port 和 db 就行，其它的能在后台设置，其中 port 改成你放行的端口，db 是数据库设置 参考如下： 改完之后，点击 save 保存，接着回到 SSH 窗口中进行操作：测试启动 Artalk：./artalk server确定运行没有问题后，按Ctrl+c即可停止运行。由于artalk需要创建管理员账号，因此需要输入以下命令：./artalk admin最后使用pm2启动并且管理artalk：pm2 start "./artalk server" --name "Artalk"同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。04 自动续期、保活Serv00 会不定时重启机器，所以我们把 pm2 添加开机自启，可以保证每次重启都能由 pm2 调动 Alist 和 Cloudflared 。而且 Serv00 每三个月内必须要有一次登录面板或者 SSH 连接，不然会删号，也可以通过一个脚本解决问题，接下来我会详细说明。自动续期可以用青龙面板的自动任务定期登录 SSH 解决。在青龙面板中添加 Linux 依赖 sshpass，然后添加定时任务：名称随意，命令/脚本 sshpass -p '密码' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 "exit"，定时规则 1 1 1 * *。这样就会每个月自动 ssh 连接一次，实现续期。你还可以使用自身 SSH 自身的方式进行自动续期，操作如下：使用下述命令新建 auto_renew.sh 脚本：cat > auto_renew.sh << EOF #!/bin/bash sshpass -p '密码' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 "exit" & EOF记得把其中的密码、用户名、ssh 的地址修改为你自己的。给 auto_renew.sh 添加可执行权限：chmod +x auto_renew.sh再去 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 Monthly，Form type 选择 Advanced。Command 写 auto_renew.sh 脚本文件的绝对路径，如 /home/username/auto_renew.sh >/dev/null 2>&1 即可。自动启动听说 Serv00 的主机会不定时重启，所以需要添加自启任务。在 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 After reboot，即为重启后运行。Form type 选择 Advanced，Command 写：/home/你的用户名/.npm-global/bin/pm2 resurrect >/dev/null 2>&1 && /home/你的用户名/.npm-global/bin/pm2 restart all >/dev/null 2>&1记得把你的用户名改为你的用户名添加完之后，在 SSH 窗口保存 pm2 的当前任务列表快照：pm2 save这样每次 serv00 不定时重启任务时，都能自动调用 pm2 读取保存的任务列表快照，恢复任务列表。如果在保存了任务列表快照后又改变了任务 pm2 的任务列表，需要重新执行 pm2 save 以更新任务列表。检测启动情况由于自从 S2 开始的新的 Server 推出后屡屡出现使用 Cron Job 的 After reboot 无法恢复任务列表的情况，而过了好几个月也并没有人找到令人满意的解决方案，循环监控网页状态码并在出错时尝试拉起任务是可行的，只可惜我只看到了 Python 脚本，而此等简单的功能在我看来实在没必要使用 Python ，毕竟如果要在没有 Python 环境的情况下运行又成了一种麻烦，所以我决定通过 Shell 实现此功能。#!/bin/bash USERNAME='' PASSWORD='' SSH_ADDRESS='' SERVER_ADDRESS='' SMTP_SERVER_ADDRESS='' SMTP_SERVER_PORT='' SMTP_EMAIL='' SMTP_PASSWORD='' TARGET_EMAIL='' check_health() { local CODE=$(curl -o /dev/null -s -w "%{http_code}\n" --connect-timeout 10 --max-time 30 ${SERVER_ADDRESS}) if [ "$CODE" != "200" ]; then echo 'Server is down!' return 1 fi return 0 } send_mail() { if [ -n "${SMTP_SERVER_ADDRESS}" ] && [ -n "${SMTP_SERVER_PORT}" ] && [ -n "${SMTP_EMAIL}" ] && [ -n "${SMTP_PASSWORD}" ] && [ -n "${TARGET_EMAIL}" ]; then curl --ssl-reqd \ --url "smtps://${SMTP_SERVER_ADDRESS}:${SMTP_SERVER_PORT}" \ --user "${SMTP_EMAIL}:${SMTP_PASSWORD}" \ --mail-from "${SMTP_EMAIL}" \ --mail-rcpt "${TARGET_EMAIL}" \ -T - <<EOF From: ${SMTP_EMAIL} To: ${TARGET_EMAIL} Subject: ${EMAIL_TITLE} ${EMAIL_DATA} EOF else echo 'Cancel send email due to missing or empty configuration.' fi } restart_server() { echo 'Trying to restart server...' local REMOTE_COMMAND1="/home/${USERNAME}/.npm-global/bin/pm2 resurrect && exit" \ && sshpass -p "${PASSWORD}" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt ${USERNAME}@${SSH_ADDRESS} "$(eval echo $REMOTE_COMMAND1)" \ && local REMOTE_COMMAND2="/home/${USERNAME}/.npm-global/bin/pm2 restart all && exit" \ && sshpass -p "${PASSWORD}" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt ${USERNAME}@${SSH_ADDRESS} "$(eval echo $REMOTE_COMMAND2)" } check_health EXIT_CODE=$? if [ ${EXIT_CODE} -eq 1 ]; then EMAIL_TITLE='Server is down!' EMAIL_DATA="${SERVER_ADDRESS} is down, trying to restart server..." send_mail while [ ${EXIT_CODE} -eq 1 ]; do restart_server sleep 120 check_health EXIT_CODE=$? done if [ ${EXIT_CODE} -eq 0 ]; then EMAIL_TITLE='Server is up!' EMAIL_DATA="${SERVER_ADDRESS} has been restarted successfully." send_mail fi fi在脚本开头处填好所有的环境变量即可使用：变量名是否必须备注USERNAME是Serv00 的账户用户名PASSWORD是Serv00 的账户密码SSH\_ADDRESS是Serv00 的账户 SSH 连接的地址（如 s4.serv00.com）SERVER\_ADDRESS是需要检测的 Web 服务地址（如 https://xxx.username.serv00.net ）SMTP\_SERVER\_ADDRESS否发送通知邮件的 SMTP 服务器地址（如 mail4.serv00.com、smtp.163.com）SMTP\_SERVER\_PORT否发送通知邮件的 SMTP 服务器端口，必须使用 SSL（如 465、995）SMTP\_EMAIL否用于发送通知邮件的邮箱SMTP\_PASSWORD否用于发送通知邮件的邮箱的密码或秘钥TARGET\_EMAIL否用于接收通知邮件的邮箱在你的用户目录下任意路径新建一个名为 check_health.sh 的文件，把上述脚本填好环境变量后粘贴进去，并在 Console 中使用 chmod +x check_health.sh 命令为脚本添加可执行权限。再去 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 Special manually，Form type 选择 Advanced，然后把下方的 Minute、Hour、Day of month、Month、Day of week 都改成 Every ，然后在 Minute 后填入 5（即每 5 分钟一次），其他的都填 1。Command 写 check_health.sh 脚本文件的绝对路径，如 /home/username/check_health.sh >/dev/null 2>&1 即可。你也可以根据你的需求自由修改定时。还有一个加入了循环的版本，有需求的可以移植到其他服务使用：# 各功能函数与前文一致，主函数加入循环，只展示主函数部分 while true; do check_health EXIT_CODE=$? if [ ${EXIT_CODE} -eq 1 ]; then EMAIL_TITLE='Server is down!' EMAIL_DATA="${SERVER_ADDRESS} is down, trying to restart server..." send_mail while [ ${EXIT_CODE} -eq 1 ]; do restart_server sleep 120 check_health EXIT_CODE=$? done if [ ${EXIT_CODE} -eq 0 ]; then EMAIL_TITLE='Server is up!' EMAIL_DATA="${SERVER_ADDRESS} has been restarted successfully." send_mail fi fi sleep 300 done05 服务器清理此项操作会删除 serv00 自动备份外几乎所有数据，操作前请先备份准备工作备份数据前往面板删除定时任务开始清理执行下面的代码删除所有文件# 替换下行 ${username} 为你的用户名 pkill -kill -u ${username} # 杀死所有进程 chmod -R 755 ~/* \ # 提升所有可见文件的可执行权限 chmod -R 755 ~/.* \ # 提升所有隐藏文件的可执行权限 rm -rf ~/.* \ # 删除所有隐藏文件 rm -rf ~/* # 删除所有可见文件自此除 serv00 自动备份外的所有数据均已删除。值得注意的是，在面板里你的数据库、DNS记录和 ssl 证书，以及开放的端口号均不会被删除。常用指令# Enables the ability to run your own software devil binexec on # Set Devil and shell language to English devil lang set english # Get a list of all available IP addresses owned by Serv00.com devil vhost list public # Display the list of reserved ports devil port list # 关闭用户所有进程 killall -u $(whoami)
🗨️ 用户访问`C:\Program Files\WindowsApps`文件夹时，系统提示 “拒绝你访问该文件夹”，无法正常查看或操作其中内容。该文件夹为 Windows 系统默认的应用安装目录，默认权限归系统账户`TrustedInstaller`所有，普通用户无访问权限。 详细操作步骤：通过命令行获取C:\Program Files\WindowsApps 文件夹权限目标通过命令行工具强制获取C:\Program Files\WindowsApps 文件夹的所有权，并授予管理员组完全控制权限，从而解决普通用户无法访问该文件夹的问题。详细步骤步骤 1：以管理员身份打开命令提示符调出命令提示符按下 Win + S，搜索 cmd。右键点击 命令提示符，选择 以管理员身份运行。注意：必须以管理员身份运行，否则命令无效。确认管理员权限系统会弹出用户账户控制（UAC）提示，点击 是。命令提示符窗口将以蓝色背景显示（管理员模式标志）。步骤 2：使用 takeown 命令获取所有权输入命令在命令提示符中输入以下命令并按 Enter：takeown /F "C:\Program Files\WindowsApps" /R /D Y参数解释：/F：指定目标路径（C:\Program Files\WindowsApps）。/R：递归处理所有子目录和文件。/D Y：自动确认操作（无需手动输入 Y）。等待执行完成命令会逐个文件/文件夹获取所有权。成功后，系统不会显示任何提示，但可以通过后续步骤验证。步骤 3：使用 icacls 命令授予管理员权限输入命令在同一命令提示符窗口中输入以下命令并按 Enter：icacls "C:\Program Files\WindowsApps" /grant Administrators:F /T参数解释：/grant：授予权限。Administrators:F：为管理员组授予 完全控制权限（F 表示 Full Control）。/T：递归应用于所有子目录和文件。等待执行完成命令会修改整个文件夹的权限设置。成功后，管理员组将拥有完全控制权限。步骤 4：验证权限是否生效重启资源管理器按 Ctrl + Shift + Esc 打开任务管理器。找到 Windows 资源管理器，右键选择 重新启动。访问文件夹打开资源管理器，导航至 C:\Program Files\WindowsApps。尝试编辑文件或文件夹，确认权限已生效。步骤 5：恢复默认权限（可选）如果需要恢复系统默认权限（所有权归 TrustedInstaller），请执行以下操作：恢复所有权在管理员命令提示符中输入：takeown /F "C:\Program Files\WindowsApps" /R /D Y icacls "C:\Program Files\WindowsApps" /setowner "NT SERVICE\TrustedInstaller" /T重置权限输入以下命令：icacls "C:\Program Files\WindowsApps" /reset /T重启资源管理器同步骤 4，重启资源管理器使更改生效。