记录通过 Coolify 安装 AppWrite 的常规步骤和报错解决要点
Coolify 教程
如果你还没有安装 Coolify,或者安装 Coolify 过程中遇到问题,可以先看这个教程:

安装之后就可以通过 Coolify 安装和部署各种服务或项目,包括本篇将要介绍的 AppWrite。
关于 AppWrite
Appwrite 是一个开源的后端即服务(Backend-as-a-Service,BaaS)平台,提供构建应用程序所需的各种后端服务,例如:数据库、身份验证(账号注册和登录)、存储服务(保存图片、文件等)、云函数(在服务端定时执行或根据事件触发)等。
使用 AppWrite 构建的项目示例:多 VPS 服务管理面板 支持微信推送 VPS 续费和证书续期提醒
关于通过 Coolify 安装 AppWrite,不论是 AppWrite 还是 Coolify 都没有提供详细、具体、最新版的文档说明,以至于在通过 Coolify 安装 AppWrite 之后访问 AppWrite Console,可以注册账号,但是登录时会报错:500 Server Error。本文讲解常规安装步骤和报错解决方法。
安装步骤
- 首先添加域名解析到服务器 IP,建议添加
*
通配符 A 记录方便证书自动生成 - Projects ~ 点进 Project ~ 点击左上角
+New
,搜索AppWrite
,点击标题进入配置

修改配置
主要修改以下几项:
- Service Name,例如改成:
appwrite
- 去除三个 Services 域名中随机生成的部分:
Appwrite
,Appwrite Console
,Appwrite Realtime
- 点击 Save 之后要等待出现绿色保存成功提示再关闭
- 取消
AppWrite Console
和AppWrite Realtime
容器中的Strip Prefixes
选项- 点击 settings 进入之后取消勾选,点击 Save 保存之后返回即可。
- 如果你使用 ClouaFlare 管理你的域名 DNS,需要设置 SSL/TLS 加密类型为
Full
首次部署
点击右上角 Deploy,等待进度条走完即可访问域名进行账号注册。
以上便是常规的安装方式,结合了 AppWrite 文档中的提示,但是部署之后只能注册账号,登录时会报错。注册账号之后登录,会自动跳转到 /console/onboarding/create-project
并显示:

报错解决
- 切换 Coolify 到 Logs 面板

- 找到 AppWrite 容器,勾选 Stream Logs 即可实时查看报错信息

- 通过查看日志得知因为变量带
https://
导致判定为不是正确的域名 - 点击 Edit Compose File,全选复制之后,粘贴到编辑器中以便查找和修改

- 搜索并修改
_APP_DOMAIN
和_APP_DOMAIN_FUNCTIONS
否则将带https://
导致报错

- 将这两个变量
=
后面的部分替换成实际的 AppWrite 域名- 比如
appwrite.example.com
,具体看你使用的是什么二级域名。
- 比如
这样修改之后,复制修改后的内容替换保存并点击 Restart 重新部署,发现还是不行。
通过查看日志,发现有新的报错信息。
解决了上一个报错之后 realtime
又开始报错,查看日志,修改 AppWrite Realtime 的域名,去除前面的 https://
,上面两个 Services 保持 https://
不去除,否则无法访问 Console。

这样操作之后再次点击右上角 Restart,等待进度条走完就搞定了!
可以访问 AppWrite Dashboard 进行使用。

容器状态全部绿色正常:

至于查看日志,最起码要能打开 AppWrite Console 再去查看。
以上便是通过 Coolify 安装最新版 AppWrite 的步骤以及报错解决方法,供参考。
AppWrite Functions
通过以上方法安装之后即可使用 AppWrite 数据库、验证、存储桶功能了。
而 AppWrite Functions 可以在本地调试和部署上线,但无法通过点击自动生成的链接访问和触发
这里继续给出相关的提示,可以实现 AppWrite Functions 的正常调用。
前置条件
由于需要使用通配符证书实现对任意二级域名自动提供 SSL 证书,而使用 CloudFlare 免费版本只能创建二级域名(大概率不会有人单独为了这个而去付费购买),不支持三级或更多层级的域名,所以需要将主域名绑定在 AppWrite 上面,参考官方文档操作:

那么安装步骤就会变成如下:
新的安装步骤
- 修改 Server Name,并删除域名中自动生成的随机字符,将域名改成主域
- 取消 AppWrite Console 和 AppWrite Realtime 容器中的 Strip Prefixes 选项
- 编辑 Compose File,全选复制配置内容,粘贴到代码编辑器中:
- 搜索:
_APP_DOMAIN=$SERVICE_URL_APPWRITE
- 替换为:
_APP_DOMAIN=[你的 AppWrite 主域名]
- 搜索:
_APP_DOMAIN_FUNCTIONS=$SERVICE_URL_APPWRITE
- 替换为:
_APP_DOMAIN_FUNCTIONS=[你的 AppWrite 主域名]
- 复制搜索,并删除搜到的三行结果:
SERVICE_URL_APPWRITE
- 全选修改后的 Compose File 内容,复制粘贴到后台替换,保存成功出现绿色提示再关闭。
- 编辑环境变量:切换到 Developer View,全选复制之后粘贴到代码编辑器中
- 对
_APP_DOMAIN
和_APP_DOMAIN_FUNCTIONS
的操作同上,搜索并替换为域名 - 搜索
SERVICE_URL_APPWRITE
并检查三个链接,修改第一个链接(拼接错误,去除后缀) - 全选修改后的 环境变量 内容,复制粘贴到后台替换并保存。保存成功出现绿色提示再关闭。
- 刷新环境变量页面,手动创建环境变量
- 搜索 SERVICE_URL_APPWRITE 检查三个链接是否正确
- 删除拼接错误的链接,重新创建:
SERVICE_URL_APPWRITE
[你的 AppWrite 主域名]
- 添加用于 AppWrite Functions 的环境变量
SERVICE_URL_APPWRITE_FUNCTIONS
https://[你的 AppWrite 主域名]/v1/functions
- 刷新页面,搜索检查三个 SERVICE_URL_APPWRITE 链接均正确之后点击右上角 Deploy
调用方法
- 格式和示例如下:
fetch("https://[你的 AppWrite 主域名]/v1/functions/[function_name]/executions", {
method: "POST",
headers: {
"X-Appwrite-Project": "[project_id]",
"Content-Type": "application/json",
},
})
.then((response) => response.json())
.then((data) => console.log(data));