10
2025
01
09:15:41

CodeSandbox-Blog备份 (二)

在CodeSandBox上部署小雅、xiaoyakeeper、Cloudflared

部署小雅

通过上述的分析,不难得出,可以修改小雅的一键部署脚本,然后直接在CodeSandBox的Devbox的Terminal中运行部署脚本,以将小雅部署到CodeSandBox上。小雅的一键脚本功能很简答,无非就是要求你输入 tokenopentokenfolder_id,然后把他们储存在一个路径,再 Docker run,把这个路径挂载进容器。基本上不需要什么修改,唯一需要修改的就是把创建文件和挂载卷的路径改成在CodeSandBox中能够永久储存的路径,操作如下:

下载小雅的部署脚本并替换其中的路径然后执行

在Terminal中运行以下命令:

SHELL
1
wget -O update.sh http://docker.xiaoya.pro/update_new.sh && sed -i 's|/etc/xiaoya|/project/sandbox/xiaoya|g' update.sh && chmod +x update.sh && bash update.sh && rm update.sh

按照提示输入各种要求的变量即可。运行完毕后可以看到右侧弹窗窗口中对应5678端口的那个就是小雅了。

注意,如果你遇到了运行后小雅路径下内没有 mytoken.txtmyopentoken.txttemp_transfer_folder_id.txt,请不要一个劲重试浪费时间,自己把这三个文件建好并填入应有的内容再放入xiaoya路径下即可。小雅的配置文档中本身就有好几个文件需要手动建立并填入内容。

部署xiaoyakeeper

经我尝试,xiaoyakeeper部署在CodeSandBox上,如果使用Docker模式,会有很多问题,大概与CodeSandBox的 docker.sock配置有关,所以只能使用模式0:

SHELL
1
bash -c "$(curl -s https://xiaoyahelper.zengge99.eu.org/aliyun_clear.sh | tail -n +2)" -s 0 -tg

如果需要TG推送,先把上述命令在Terminal中运行一遍,会要求接入TG推送,按照要求操作即可。接入完成后使用 Ctrl+c结束脚本。

如果你不需要TG推送,或者已经运行了刚刚的命令接入了TG,那么就在左侧文件中新建一个名为”clear.sh”的文件,把上述命令最后的 -tg参数删除,粘贴进去,即为:

SHELL
1
bash -c "$(curl -s https://xiaoyahelper.zengge99.eu.org/aliyun_clear.sh | tail -n +2)" -s 0

然后把执行这个脚本添加进容器启动时的任务中,即修改 .codesandbox下的 tasks.json中的 tasks部分:

SHELL
1
2
3
4
5
6
7
"tasks": {
   "xiaoyakeeper": {
     "name": "aliyun_clear",
     "command": "bash /project/sandbox/clear.sh",
     "runAtStart": true
   }
 }

这样,当Devbox启动时,xiaoyakeeper就会启动,而xiaoyakeeper启动时就会启动小雅容器。

部署Cloudflared

如果你就个人使用,实际上没有必要加Cloudflared了,只要 .csb.app的域名和容器名不泄露,就和使用Cloudflared加自己的域名也没太大区别。

这里就简单偷个懒,虽然也可以直接运行Cloudflared客户端解决,但是可以用docker,而且又早都写好了 docker-compose.yaml,那就继续用docker-compose部署吧:

YAML
1
2
3
4
5
6
7
8
9
10
11
version: '3'
services:

   cloudflared:
     restart: always
     network_mode: host
     environment:
         - TZ=Asia/Shanghai
     command: tunnel --edge-ip-version auto --protocol quic --heartbeat-interval 10s run --token [ARGO_TOKEN]
     container_name: cloudflared
     image: cloudflare/cloudflared:latest

docker-compose.yaml文件放在.devcontainer路径下,详细的设置请参考之前写的文章。

这里依旧是修改 .codesandbox下的 tasks.json文件进行启动,加上启动xiaoyakeeper的修改,最终的的 task.json为:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
 // These tasks will run in order when initializing your CodeSandbox project.
 "setupTasks": [
   {
     "name": "Deploy",
     "command": "cd /project/sandbox/.devcontainer/ && docker compose up -d"
   }
 ],

 // These tasks can be run from CodeSandbox. Running one will open a log in the app.
 "tasks": {
   "xiaoyakeeper": {
     "name": "aliyun_clear",
     "command": "bash /project/sandbox/clear.sh",
     "runAtStart": true
   }
 }
}

注意,只有5678端口需要映射出来,另外两个端口是配合一些TV软件使用,这里用不上。如果你确实有需求且自己会配置,请自行研究,这里不做探讨。

到这里就全部部署完成了,只需要Restart Devbox检查一下是否正常运行即可。

附上Cloudflared的可执行文件使用命令行直接建立Tunnel的命令:

SHELL
1
./cloudflared tunnel --edge-ip-version auto --protocol quic --heartbeat-interval 10s run --token [ARGO_TOKEN]

其他应用的部署

通过以上的捣鼓可以发现,.codesandbox下的 tasks.json文件实际上与Replit的 replit.nix和 .replit两个文件的功能相近。

在 setupTasks部分中你可以使用 apt-get installnpm install或者 pip install等命令进行软件包的安装,亦或者其他的部署指令。

在 tasks部分你可以添加一些快捷命令,需要在启动时自动运行的,就把 runAtStart设置为 true即可。

上述命令,无论是 setupTasks还是 tasks,都是在Terminal中直接运行的命令,区别是,如果 setupTasks没有执行完,Devbox不会启动,而 tasks只有在启动完成之后才能执行。

那么就可以很简单的把Replit上之前部署的应用搬到CodeSandBox上了,replit.nix里需要的软件包,就去 setupTasks添加命令安装,.replit里定义的 Run的行为,添加到 tasks里去,并且把 runAtStart设置为 true,其他的文件照搬一下,原本使用 ${REPL_SLUG}${REPL_OWNER}之类的变量确定的文件路径,统一修改为 /project/sandbox/下的任意路径即可。

当然不建议直接照搬,因为CodeSandBox配置比Replit高不少而且支持docker,这里建议能用docker的都用docker部署,源仓库不提供用docker部署的,写dockerfile构筑docker部署。实在不会用docker,再考虑这样的照搬或者直接运行的方法。


在CodeSandBox中使用Mirai-Console-Loader

刚好发现了ttydfilebrowser两款神器,感觉使用这两个工具就可以愉快便利的在CodeSandBox上使用Mirai-Console-Loader,遂试了一下,果然可行,记录一下部署过程。

部署过程

下载Mirai-Console-Loader

Terminal中运行一行命令解决:

SHELL
1
wget -O mcl.zip https://github.com/iTXTech/mirai-console-loader/releases/download/v2.1.2/mcl-2.1.2.zip && unzip -o mcl.zip && rm mcl.zip && chmod +x mcl

如果和我一样有强迫症,看着时区不对很烦,毕竟CodeSandBox的服务器并不在UTC+8区,所以通过手动修改其启动脚本,即名为 mcl的那个文件,在执行jar包的命令前添加时区参数,即把最后一行改成:

SHELL
1
$JAVA_BINARY -jar -Duser.timezone=Asia/Shanghai mcl.jar $*

修改Devbox的启动任务

修改 .codesandbox路径下的 tasks.json文件,添加软件包的安装与所需工具的下载与运行命令,修改后的 tasks.json文件如下:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
 // These tasks will run in order when initializing your CodeSandbox project.
 "setupTasks": [
   {
     "name": "Installing java",
     "command": "apt-get update && echo | apt-get install openjdk-21-jre"
   },
   {
     "name": "Downloading ttyd",
     "command": "mkdir -p /project/sandbox/ttyd && cd /project/sandbox/ttyd && wget -O ttyd https://github.com/tsl0922/ttyd/releases/download/1.7.4/ttyd.x86_64 && chmod +x ttyd"
   },
   {
     "name": "Downloading filebrowser",
     "command": "mkdir -p /project/sandbox/filebrowser && cd /project/sandbox/filebrowser && wget -O filebrowser.tar.gz https://github.com/filebrowser/filebrowser/releases/download/v2.26.0/linux-amd64-filebrowser.tar.gz && tar -xzvf filebrowser.tar.gz && chmod +x filebrowser && rm -f filebrowser.tar.gz"
   },
   {
     "name": "Downloading Cloudflared",
     "command": "wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-amd64 && chmod +x cloudflared"
   }
 ],

 // These tasks can be run from CodeSandbox. Running one will open a log in the app.
 "tasks": {
   "ttyd": {
     "name": "ttyd",
     // 在21022端口打开ttyd终端,用户名为admin,密码为password,可以自行修改。
     "command": "./ttyd/ttyd -p 21022 -c admin:password -W zsh",
     "runAtStart": true
   },
   "filebrowser": {
     "name": "filebrowser",
     // 在21021端口打开filebrowser,默认用户名和密码都为admin,登入后请自行在设置中修改用户名和密码,确保安全。
     "command": "./filebrowser/filebrowser -p 21021",
     "runAtStart": true
   },
   "Cloudflared": {
     "name": "Cloudflared",
     // 运行Cloudflare Tunnels,请把最后的[ARGO_TOKEN]替换成自己的。
     "command": "./cloudflared tunnel --edge-ip-version auto --protocol quic --heartbeat-interval 10s run --token [ARGO_TOKEN]",
     "runAtStart": true
   }
 }
}

请不要直接复制粘贴,务必看一眼我写的批注,改成自己的信息后再复制粘贴。接着Restart Devbox,等待重启完毕即可。

记得在Cloudflare面板里设置相应的端口对应,这里我使用的是21021和21022两个端口。

接着打开自己映射的域名,输入自己设置的用户名和密码即可开始畅玩。

后话

Mirai-Console-Loader是目前最为成熟的QQ机器人使用方法之一了,其插件生态之完善带来了很高的可玩性,不论是之前部署的ChatGPT机器人、New Bing机器人,在Mirai-Console-Loader中基本都有相应的插件实现。也是得益于CodeSandBox比起Replit更为强大的机能,才使得Mirai-Console-Loader能够在平台上流畅的运行。

关于Mirai-Console-Loader的使用方法、插件安装、登录问题等,其官方文档和论坛也已经记录的非常详细了,这里不多作讨论,只说这一点:

我大概尝试发现的可行的登录方法就是在本地电脑也安装一个Mirai-Console-Loader,通过手表协议扫码登录之后能够获得一个登录记录的文件夹,把整个文件夹上传到CodeSandBox上的相应位置即可。原理和go-cqhttp通过上传 session.token文件进行登录是类似的。

讨论群:738386033


在CodeSandBox上搭建代理服务器

使用的是3Kmfi6HP/nodejs-proxy这个仓库。

部署方法

新建Node.js为Template的Devbox,然后使用以下 tasks.json的内容覆盖原本的 tasks.json

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
 // These tasks will run in order when initializing your CodeSandbox project.
 "setupTasks": [
   {
     "name": "Install Dependencies",
     "command": "npm i -g @3kmfi6hp/nodejs-proxy"
   }
 ],
 // These tasks can be run from CodeSandbox. Running one will open a log in the app.
 "tasks": {
   "dev": {
     "name": "Start Dev Server",
     "command": "npx @3kmfi6hp/nodejs-proxy",
     "runAtStart": true,
     "preview": {
       "port": 7860
     },
     "restartOn": {
       "files": ["./package-lock.json"]
     }
   }
 }
}

然后Restart Devbox,等待网页弹出即可。

使用注意

有个Bug,实际端口应该是443而不是80,所以要在导出的代理配置中把服务端口从80改为443才能正常连接,不然连不上。


在CodeSandBox上模拟健康码

仓库是health-code-simulator

听说健康码要回来了,咱提前做好准备,有备无患。

部署流程

下载源码

新建Template为Node.js的Devbox。在Terminal中输入以下命令把源码下载到Devbox中:

SHELL
1
wget -O repo.zip https://codeberg.org/mito/health-code-simulator/archive/main.zip && unzip repo.zip && rm repo.zip && mv -b health-code-simulator/* ./ && mv -b health-code-simulator/.[^.]* ./ && rm -rf *~ && rm -rf health-code-simulator

修改启动任务

修改.codesandbox路径下的tasks.json文件,加入依赖安装和启动的任务:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
 // These tasks will run in order when initializing your CodeSandbox project.
 "setupTasks": [
   {
     "name": "Install Dependencies",
     "command": "npm install"
   },
   {
     "name": "Building",
     "command": "npm build"
   }
 ],

 // These tasks can be run from CodeSandbox. Running one will open a log in the app.
 "tasks": {
   "start": {
     "name": "start",
     "command": "node build.mjs --serve",
     "runAtStart": true
   }
 }
}

接着Restart Devbox即可。


在一个容器内同时运行PandoraNext和TokensTool

在ChatGPT的辅助下,我写了一个Dockerfile,用以构筑PandoraNext和TokensTool二合一的镜像。

该Dockerfile在构筑时会自动从PandoraNext和TokensTool的release中检测最新且符合当前系统架构的版本进行下载,省去了很多麻烦。

DOCKERFILE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
FROM debian:11.8-slim

WORKDIR /app

# 安装所需的工具
RUN apt-get update && apt-get install -y openjdk-11-jdk curl jq && rm -rf /var/lib/apt/lists/*

# 下载 PandoraNext 的最新版本
FROM debian:11.8-slim

WORKDIR /app

# 安装所需的工具
RUN apt-get update && apt-get install -y openjdk-11-jdk curl jq wget && rm -rf /var/lib/apt/lists/*

# 下载 PandoraNext 的最新版本
RUN ARCH=$(dpkg --print-architecture) && \
   VERSION=$(curl -s https://api.github.com/repos/pandora-next/deploy/releases/latest | jq -r ".tag_name") && \
   DOWNLOAD_URL=$(curl -s https://api.github.com/repos/pandora-next/deploy/releases/latest | jq -r ".assets[] | select(.name | contains(\"linux-${ARCH}\")) | .browser_download_url") && \
   curl -sL ${DOWNLOAD_URL} -o pandoranext.tar.gz && \
   tar -xzf pandoranext.tar.gz --strip-components=1 && \
   chmod +x /app/PandoraNext && \
   rm pandoranext.tar.gz tokens.json config.json

# 下载 PandoraNext-TokensTool 的最新版本
RUN JAR_URL=$(curl -s https://api.github.com/repos/Yanyutin753/PandoraNext-TokensTool/contents/simplyDeploy?ref=main | \
   jq -r ".[] | select(.name | endswith(\".jar\")) | .download_url"); \
   echo "Download URL: $JAR_URL"; \
   wget -O tokenstool.jar "$JAR_URL"

# 创建一个脚本来同时运行 PandoraNext 和 tokenstool.jar,并处理配置文件
RUN echo '#!/bin/sh\nln -sf /data/config.json /app/config.json\nln -sf /data/tokens.json /app/tokens.json\njava -jar tokenstool.jar --server.port=8081 --deployWay=releases --deployPosition=/app --hotReload=true --pandora_Ip=127.0.0.1 &\nsleep 10\n./PandoraNext' > start.sh && \
   chmod +x start.sh

EXPOSE 8081 8181

ENTRYPOINT ["/app/start.sh"]

使用方法——以CodeSandBox为例

构筑镜像

在DevBox中新建一个Dockerfile,并且把上述内容粘贴进去。接着在Terminal中输入命令:

SHELL
1
docker build -t pandoranext:latest .

运行容器

准备好已经填好的 config.json和 tokens.jsonTokensTool.json可以先不修改,之后在TokensTool提供的页面内进行操作也可以。),新建一个名为 pandora的文件,将这两个文件放入其中。

接着新建 docker-compose.yaml文件,并填入以下内容:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.3'
services:
   pandora-next:
       image: pandoranext:latest
       container_name: PandoraNext
       network_mode: bridge
       restart: always
       ports:
           - "8181:8181"
           - "8081:8081"
       volumes:
           - /project/sandbox/pandora:/data
           - /project/sandbox/sessions:/root/.cache/PandoraNext

再去Terminal中执行命令:

SHELL
1
docker compose up -d

容器即可完成启动。

使用我构筑的镜像

如果你嫌麻烦,也可以直接使用我构筑的镜像,省去自己构筑的时间。同理,新建pandora文件夹后放入已经填好的 config.json和 tokens.json文件,然后把 docker-compose.yaml的内容改成如下内容:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.3'
services:
   pandora-next:
       image: saika2077/pandoranext:latest
       container_name: PandoraNext
       network_mode: bridge
       restart: always
       ports:
           - "8181:8181"
           - "8081:8081"
       volumes:
           - /project/sandbox/pandora:/data
           - /project/sandbox/sessions:/root/.cache/PandoraNext

然后直接 docker compose up -d即可。我构筑的镜像截止到这篇博客成文为止,PandoraNext的版本号为 0.5.2TokensTool的版本号为 0.4.8.2

注意事项

该容器的使用注意事项与上一篇博客是完全一样的,只是更新方式发生了改变。如果你是自己构筑的方式使用的,docker compose down然后执行 docker build --no-cache -t pandoranext:latest .再 docker compose up -d即可。如果你使用的是我构筑的镜像,在我的镜像更新后,你只需要 docker compose down && docker compose pull && docker compose up -d即可完成升级。





推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/8850.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: