logo NodeSeekbeta

cf cloud-mail 安装 远程部署

由于界面部署时常失败,改为vps远程部署,支持多域名

# **部署准备**

一台vps 

Nodejs v20.19.6 ,安装好nodejs 版本不一定v20

Cloudflare 账号 (需要绑定域名)

vps中操作

**克隆项目到本地 如** /opt/cloudmail/

```jsx
git clone https://github.com/maillab/cloud-mail #拉取代码
cd cloud-mail/mail-worker #进入worker目录

安装依赖

apt install pnpm  #安装pnpm
pnpm i #安装依赖

项目配置文件

  1. 在 Cloudflare 控制台创建KV,D1数据库 ,记下数据库名

打开编辑:mail-worker/wrangler.toml

ame = **"cloud-mail"**
main = "src/index.js"
compatibility_date = "2025-06-04"
keep_vars = true

[observability]
enabled = **true**

[[d1_databases]]
binding = **"db"**			#d1数据库绑定名默认不可修改
database_name = **"cloudmail"**		#d1数据库名字
#database_id = **"817444ae-7b71-4b55-a44c-0989855506ea5"**		#d1数据库id

[[kv_namespaces]]
binding = **"kv"**			#kv绑定名默认不可修改
id = **"6a2345ef11464345b93d134be5d6e12c"**					#kv数据库id

#[[r2_buckets]]
#binding = "r2"			#r2对象存储绑定名默认不可修改
#bucket_name = ""		#r2对象存储桶的名字

#[[send_email]]
#name = "email"			#CF发件, 配置后优先使用

[ai]
binding = "ai"

[assets]
binding = "assets"		#静态资源绑定名默认不可修改
directory = "./dist"	#前端vue项目打包的静态资源存放位置,默认dist
not_found_handling = "single-page-application"
run_worker_first = true

[triggers]
crons = ["0 16 * * *"]	#每天晚上12点执行每日任务,刷新分析缓存

[vars]
#ai_model = ""			#ai模型,不填默认使用@cf/meta/llama-3.1-8b-instruct
#analysis_cache = false			#是否开启分析数据缓存
#orm_log = false			#是否sql日志
domain = **["test.com","test2.net"]**	#邮件域名可可配置多个 示例: ["example1.com","example2.com"]
admin = **"[email protected]"**				#管理员的邮箱	示例: admin@example.com
jwt_secret = **"grcxfdfdyuu7bb"**			#jwt令牌的密钥,随便填一串字符串

[build]
command = "pnpm --prefix ../mail-vue install && pnpm --prefix ../mail-vue run build"

说明:红色字体内容必填,admin字段请写domain域名中其中一个,安装后打开需要注册此管理账号

2 . 需要先在 Cloudflare 后台创建一个 API Token,然后拿到你的 Account ID、API_TOKEN或是api_key

如果你只是当前 shell 临时部署一次,直接这样:

export CLOUDFLARE_API_TOKEN='你的_API_TOKEN'
export CLOUDFLARE_ACCOUNT_ID='你的_ACCOUNT_ID'

pnpm wrangler whoami
持久化到 Debian

如果你要长期在这台 服务器上用,同一个 root 用户下可以写到 shell 配置:

echo "export CLOUDFLARE_API_TOKEN='你的_API_TOKEN'" >> ~/.bashrc
echo "export CLOUDFLARE_ACCOUNT_ID='你的_ACCOUNT_ID'" >> ~/.bashrc
source ~/.bashrc

然后在mail-worker目录执行验证命令:

pnpm wrangler whoami

错误处理:

错误1: root@mail:/opt/cloudmail/cloud-mail/mail-worker# pnpm run deploy? Lockfile passes supply-chain policies (verified 20m ago)Lockfile is up to date, resolution step is skippedAlready up to date[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] "pnpm approve-builds" to pick which dependencies should be allowed to run scripts.[ERROR] Command failed with exit code 1: pnpm installpnpm: Command failed with exit code 1: pnpm install at getFinalError (file:///usr/lib/node_modules/pnpm/dist/pnpm.mjs:34291:14)

项目目录mail-worker执行

pnpm approve-builds #如果 approve-builds 里出现你日志中的那些包,就全部选允许,选esbuild或 workerd 。
pnpm install

错误2:✘ [ERROR] Running custom build pnpm --prefix ../mail-vue install && pnpm --prefix ../mail-vue run build failed. There are likely more logs from your build command above.

修复先到 mail-vue 目录里批准构建脚本:

cd /opt/cloudmail/cloud-mail/mail-vue
pnpm approve-builds
pnpm install
pnpm run build

如果成功,再回去:

cd /opt/cloudmail/cloud-mail/mail-worker
pnpm run deploy

安装完毕时会 上传cf 部署完成如下

No updated asset files to upload. Proceeding with deployment...
Total Upload: 2999.68 KiB / gzip: 615.83 KiB
Worker Startup Time: 47 ms
Your Worker has access to the following bindings:
Binding                                                Resource
env.kv (**6a2345ef11464345b93d134be5d6e12c**)              KV Namespace        
env.db (inherited)                                     D1 Database         
env.ai                                                 AI                  
env.assets                                             Assets              
env.domain (["test1.com","test2.net"])                Environment Variable
env.admin ("[email protected]")                          Environment Variable
env.jwt_secret ("**grcxfdfdyuu7bb**")                   Environment Variable

Uploaded cloud-mail (11.80 sec)
Deployed cloud-mail triggers (3.34 sec)
  https://cloud-mail.cf账户id.workers.dev
  schedule: 0 16 * * *
Current Version ID: ......

cloudflare界面操作:在Cloudflare→账户主页→你的域名→电子邮件→电子邮件路由

  1. →路由规则→Catch-all地址,编辑 操作为发送到worker(远程部署的自己已选择了 包括目标也是)

         注意默认有一条规则 就改这一条**全收**规则 状态 改为活跃
    
  2. →目标地址 随便输入一个你自己的邮件地址 如gmail的

  3. →设置 dns记录,有个按钮为解锁(如果为锁定则点击变为锁定后才可继续,尤其是前面有部署失败的需要重新解锁再锁定,否则dns记录为旧值,无法处理接收邮件)

  4. 添加worker自定义域(默认cf的worker网址 中国无法打开)

Workers 和 Pages→cloud-mail→域

在自定义域和路由 中添加自定义的域名,即邮局主页网址

  1. 浏览器输入 https://worker自定义域/api/init/你的jwt_secret 初始化或更新数据库,提示success为成功,登录邮局主页网址为你的自定义域名
  2. 注册前面设定的管理员邮箱 登录后继续操作

邮局操作

系统设置 Resend Token设置发送邮件

Telegram 机器人 设定 收件提醒到tg

第三方邮箱 设定 收件转发到其他邮箱(项目没有smtp iamp pop3接口)

具体操作参考

https://doc.skymail.ink/system/forward.html

感谢 skymail.ink 站长

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有63021位seeker

🎉欢迎新用户🎉