由于界面部署时常失败,改为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 #安装依赖
项目配置文件
- 在 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→账户主页→你的域名→电子邮件→电子邮件路由
-
→路由规则→Catch-all地址,编辑 操作为发送到worker(远程部署的自己已选择了 包括目标也是)
注意默认有一条规则 就改这一条**全收**规则 状态 改为活跃 -
→目标地址 随便输入一个你自己的邮件地址 如gmail的
-
→设置 dns记录,有个按钮为解锁(如果为锁定则点击变为锁定后才可继续,尤其是前面有部署失败的需要重新解锁再锁定,否则dns记录为旧值,无法处理接收邮件)
-
添加worker自定义域(默认cf的worker网址中国无法打开)
Workers 和 Pages→cloud-mail→域
在自定义域和路由 中添加自定义的域名,即邮局主页网址
- 浏览器输入
https://worker自定义域/api/init/你的jwt_secret初始化或更新数据库,提示success为成功,登录邮局主页网址为你的自定义域名 - 注册前面设定的管理员邮箱 登录后继续操作
邮局操作
系统设置 Resend Token设置发送邮件
Telegram 机器人 设定 收件提醒到tg
第三方邮箱 设定 收件转发到其他邮箱(项目没有smtp iamp pop3接口)
具体操作参考
https://doc.skymail.ink/system/forward.html
感谢 skymail.ink 站长
收藏
mark
没有docker吗?那我不装
mark