网盘聚合搜索项目Aipan(爱盼)【续】
前言
本文是 网盘聚合搜索项目Aipan(爱盼) 的后续
当时留了个尾巴,就是无法登陆 Aipan
的后台。从官方代码的 Issue #67
看,作者建议用户在本地编译,这个对大部分用户来说是比较困难的。
老苏分析了镜像中生成的 js
和 mjs
文件,发现编译时,会将环境变量保存在 nitro.mjs
文件中,但是在运行时设置的环境变量则不会,所以我们要做的是,把运行时设置的环境变量替换到 nitro.mjs
中
找到了原因,解决起来就简单了,老苏准备拿出惯用的 占位符
法,来解决这个问题
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
Dockerfile
官方提供了 Dockerfile
,但老苏编译的时候,可能因为是虚拟机的缘故,在构建时出现了 JavaScript
堆内存不足 的错误。这通常发生在 Node.js
应用程序在处理大量数据或复杂操作时
114.8 ✔ Server built in 41821ms
115.0 [nitro] ✔ Generated public .output/public
116.7 [nitro] ℹ Building Nuxt Nitro server (preset: node-server, compatibility date: 2024-09-12)
239.9
239.9 <--- Last few GCs --->
239.9
239.9 [16:0x7f4c8031f660] 229536 ms: Mark-Compact 2034.0 (2091.6) -> 2024.7 (2092.6) MB, 3942.93 / 0.00 ms (average mu = 0.225, current mu = 0.055) allocation failure; scavenge might not succeed
239.9 [16:0x7f4c8031f660] 235234 ms: Mark-Compact 2033.1 (2092.6) -> 2027.7 (2093.6) MB, 5486.97 / 0.00 ms (average mu = 0.127, current mu = 0.037) allocation failure; scavenge might not succeed
239.9
239.9
239.9 <--- JS stacktrace --->
239.9
239.9 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
239.9 ----- Native stack trace -----
239.9
246.5 npm error path /app
246.5 npm error command failed
246.5 npm error signal SIGABRT
246.5 npm error command sh -c nuxt build
246.5 npm error A complete log of this run can be found in: /root/.npm/_logs/2024-12-02T16_02_24_571Z-debug-0.log
所以老苏微微做了一点点改动,增加了一句 ENV NODE_OPTIONS="--max-old-space-size=4096"
,来对 Node.js
的内存进行限制
# 第一阶段:构建阶段
FROM node:20.18.0-alpine AS builder
LABEL authors="Lei"
# 设置工作目录
WORKDIR /app
# 安装 pnpm
RUN npm install -g pnpm
# 复制 package.json 和 pnpm-lock.yaml(或 package-lock.json,如果有)
COPY package*.json ./
# 安装构建依赖
RUN pnpm install
# 复制所有项目文件
COPY . .
# 生成 Prisma 客户端(不执行数据库迁移)
RUN npx prisma generate
# 构建 Nuxt.js 项目
ENV NODE_OPTIONS="--max-old-space-size=4096"
RUN npm run build
# 第二阶段:运行阶段
FROM node:20.18.0-alpine
LABEL authors="Lei"
# 设置工作目录
WORKDIR /app
# 复制构建后的项目文件
COPY --from=builder /app/.output .output
COPY --from=builder /app/node_modules node_modules
COPY --from=builder /app/package.json package.json
# 复制 prisma schema 文件
COPY --from=builder /app/prisma /app/prisma
# 复制启动脚本
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
# 设置公共的环境变量
ENV NUXT_HOST=0.0.0.0
ENV NUXT_PORT=3000
# 暴露端口
EXPOSE 3000
# 使用启动脚本作为启动命令
CMD ["/app/start.sh"]
env
需要在 .env
中添加特定的字符串,方便后面进行替换
ADMIN_USER="admin_user"
ADMIN_PASSWORD="admin_password"
ADMIN_EMAIL="admin_email"
JWT_SECRET="jwt_secret"
DATABASE_SCHEMA="database_schema"
DATABASE_URL="database_url"
SHADOW_DATABASE_URL="shadow_database_url"
# 复制到服务器上的 .env 文件 然后执行docker compose 命令
# GitHub 配置
# GitHub 用户名
NUXT_PUBLIC_GITHUB_OWNER="nuxt_public_github_owner"
# 用于存储图片的仓库名称
NUXT_PUBLIC_GITHUB_REPO="nuxt_public_github_repo"
# GitHub Personal Access Token
NUXT_PUBLIC_GITHUB_TOKEN="nuxt_public_github_token" # 替换为新生成的 token
# 默认分支名称
NUXT_PUBLIC_GITHUB_BRANCH="nuxt_public_github_branch"
start.sh
老苏在官方的 start.sh
中间,插入了一段替换 .env
中设定的特定字符串的脚本,其他未做任何修改
#!/bin/sh
# 检查必要的环境变量是否已设置
: "${ADMIN_PASSWORD:?Need to set ADMIN_PASSWORD}"
: "${ADMIN_EMAIL:?Need to set ADMIN_EMAIL}"
: "${JWT_SECRET:?Need to set JWT_SECRET}"
: "${DATABASE_URL:?Need to set DATABASE_URL}"
: "${DATABASE_SCHEMA:?Need to set DATABASE_SCHEMA}"
# 以下这段新增用来替换环境变量的实际值
sed -i -e 's,admin_user,'"${ADMIN_USER}"',g' \
-e 's,admin_password,'"${ADMIN_PASSWORD}"',g' \
-e 's,admin_email,'"${ADMIN_EMAIL}"',g' \
-e 's,jwt_secret,'"${JWT_SECRET}"',g' \
-e 's,database_schema,'"${DATABASE_SCHEMA}"',g' \
-e 's,database_url,'"${DATABASE_URL}"',g' \
-e 's,shadow_database_url,'"${SHADOW_DATABASE_URL}"',g' \
-e 's,nuxt_public_github_owner,'"${NUXT_PUBLIC_GITHUB_OWNER}"',g' \
-e 's,nuxt_public_github_repo,'"${NUXT_PUBLIC_GITHUB_REPO}"',g' \
-e 's,nuxt_public_github_token,'"${NUXT_PUBLIC_GITHUB_TOKEN}"',g' \
-e 's,nuxt_public_github_branch,'"${NUXT_PUBLIC_GITHUB_BRANCH}"',g' \
/app/.output/server/chunks/nitro/nitro.mjs
echo "Running database migrations..."
# 执行数据库迁移,并指定 schema 文件的位置
npx prisma migrate deploy --schema=/app/prisma/schema.prisma
echo "Starting application..."
# 启动 Nuxt.js 应用
exec node .output/server/index.mjs
解释:
-i
:直接修改文件。-e
:指定要执行的命令,可以多次使用以进行多个替换。s,...,g
:替换命令,g
表示全局替换。"${ADMIN_USER}"
等:使用双引号引用变量,确保变量的值被正确解析。
构建
构建镜像和容器运行的基本命令如下👇
# 下载代码
git clone https://github.com/unilei/aipan-netdisk-search.git
# 进入目录
cd aipan-netdisk-search
# 创建 .env 文件
cp .env.example .env
# 修改 start.sh 文件
# 构建镜像
docker build -t wbsu2003/aipan-netdisk-search:v1 .
安装
请参考上文,但因为更换了镜像,所以 docker-compose.yml
中需要将 image: unilei/aipan-netdisk-search:amd64
修改为 image: wbsu2003/aipan-netdisk-search:latest
,其他都是一样
文章传送门:网盘聚合搜索项目Aipan(爱盼)
运行
看起来主页面上又多了 本地音乐播放器
后台
在浏览器中输入 http://群晖IP:3295/login
就能看到后台界面
输入我们在环境变量中设置的账号和密码就可以了
云盘
老苏随便加了一个,但没弄明白怎么用
在前端页面上没有找到入口,有知道的请给老苏科普一下
博客
点 新建文章
功能一目了然
Alist
需要那种能匿名访问的,老苏在网上找了一个
点 添加数据源
名称
:这是标识,直接用了网站的源链接
:切记不要以/
结尾,一般复制网址都会带,记得删掉,否则会刷不出列表
添加成功后,可以切换到 tv
界面
在浏览器中输入 http://群晖IP:3295/tv
切到主页
找部电影看看
参考文档
unilei/aipan-netdisk-search: 本项目乃是基于 Vue 与 Nuxt.js 技术打造的网盘搜索项目,持续开源并保持维护更新。其旨在让人人皆可拥有属于自己的网盘搜索网站。强烈建议自行部署,向所有参与者致敬!Salute to all!
地址:https://github.com/unilei/aipan-netdisk-search
网盘聚合搜索项目Aipan(爱盼) | 老苏的blog
地址:https://laosu.tech/2024/11/16/网盘聚合搜索项目Aipan(爱盼)
使用最新的官方Docker镜像;无法登陆后台(邮箱或密码不正确) · Issue #67 · unilei/aipan-netdisk-search
地址:https://github.com/unilei/aipan-netdisk-search/issues/67