💡 这里介绍如何使用 Encore CLI 中的新 encore build
命令将 Encore 应用程序部署到 DigitalOcean。
这很有用,当你更喜欢手动部署而不是使用Encore的云平台提供的自动化功能时。
⚡️即使手动进行部署,Encore 也通过提供构建和配置应用的工具来简化过程。
现在来看看如何通过使用Docker和encore build
将Encore应用部署到DigitalOcean的App平台!
- DigitalOcean账户:确保你有一个DigitalOcean账户。如果没有,你可以在这里注册。
-
确保已安装Docker:确保你的本地机器上已安装Docker。你可以从Docker网站下载。
-
Encore CLI:
-
macOS:
brew install encoredev/tap/encore
-
Linux:
curl -L https://encore.dev/install.sh | bash
-
Windows:
iwr https://encore.dev/install.ps1 | iex
(Windows的安装命令) - DigitalOcean CLI(可选):你可以安装DigitalOcean CLI以获得更多的灵活性和自动化,但这不是本教程必需的。
-
创建一个新的Encore应用程序
- 如果你还没有(做过),使用Encore CLI创建一个新的Encore应用。
- 你可以用以下命令来新建一个应用:
encore app 创建 myapp 应用
- 选择
Hello World
模板。 - 根据提示创建应用。
- 制作 Docker 镜像 ,
(此处使用了“制作 Docker 镜像”以使表达更加自然,并在句子后面添加了逗号以符合中文标点符号规则。)
- 构建 Encore 应用程序来生成部署用的 Docker 镜像:
docker: myapp
第2步:将 Docker 镜像推送到容器注册表。
要将您的 Docker 镜像部署到 DigitalOcean,您需要将其推送到容器镜像仓库。DigitalOcean 支持其自己的容器镜像仓库,但您也可以使用 DockerHub 或其他镜像仓库。以下是将镜像推送到 DigitalOcean 容器镜像仓库的具体步骤:
-
创建一个 DigitalOcean 的容器镜像仓库:
- 前往 DigitalOcean 控制面板 并创建一个新的容器仓库。
- 按照指示设置它。
- 登录到 DigitalOcean 的注册表:
使用 DigitalOcean 提供的登录命令,形式如下:
使用 DigitalOcean 提供的登录命令,形式如下:
运行 `doctl registry login`
切换到全屏 退出全屏
您需要 DigitalOcean CLI,可以从 DigitalOcean CLI 文档 安装得到。
- 给 Docker 镜像打上标签:使其匹配注册表的 URL。
docker tag myapp registry.digitalocean.com/YOUR_REGISTRY_NAME/myapp:latest
将myapp镜像标签设置为registry.digitalocean.com/YOUR_REGISTRY_NAME/myapp:latest
切换到全屏模式 退出全屏
- 将Docker镜像上传到仓库
docker push registry.digitalocean.com/YOUR_REGISTRY_NAME/myapp:latest
这会将你的应用推送到 DigitalOcean 注册表中。请将 'YOUR_REGISTRY_NAME' 替换为你的实际注册表名称。
进入全屏模式,退出全屏模式
步骤 3: 部署 Docker 镜像到 DigitalOcean 应用服务-
转到应用平台:
访问 DigitalOcean App Platform 。 -
新建应用
- 点击 "创建应用程序"。
- 选择 "DigitalOcean容器仓库"。
-
选择Docker镜像 :
- 选择你刚才上传的图片。
-
设置选项:
- 调整缩放选项:设置容器数量、CPU和内存。
- 设置环境变量:添加应用程序所需的任何环境变量。
- 选择区域:靠近用户的区域以获得更好的性能。
-
部署应用:开始部署应用
- 单击“下一步”,查看设置,单击“创建资源”。
- DigitalOcean 会处理搭建基础架构,拉取 Docker 镜像,然后启动应用程序。
-
访问应用:
-
部署后,你可以通过公共URL访问你的应用。
- 测试应用,确保它按预期运行,比如:
运行此命令以从指定的URL获取数据
curl https://myapp.ondigitalocean.app/hello/world
点击全屏模式,点击退出全屏
-
查看日志和指标:
- 在App平台中,转到"实时日志"选项卡查看日志。
- 在App平台中,转到"性能"选项卡查看性能指标。
-
管理扩展和部署设置:
- 可以更改应用程序配置,例如缩放比例设置、部署区域位置或环境变量。
步骤 5:为您的应用添加数据库
DigitalOcean的App平台提供了托管数据库服务,让您轻松为应用添加数据库。以下是为您的应用设置托管数据库的方法:
-
前往DigitalOcean控制面板
- 访问 DigitalOcean 控制面板。
- 在左侧边栏中点击 "数据库" 选项。
-
点击 创建一个新的数据库集群 :
- 点击 “创建数据库集群”。
- 选择 PostgreSQL
- 选择 数据库版本、数据中心区域 和 集群配置(例如,根据您的需求选择开发或生产模式)。
- 为数据库命名,并根据需要配置其他选项,然后点击 “创建数据库集群”。
-
配置数据库设置:
- 创建数据库之后,转到数据库仪表板的 "连接详情" 选项卡。
- 复制 连接字符串 或单独的设置(主机、端口、用户名、密码、数据库名)。您需要这些信息以将应用程序连接到数据库。
- 下载 CA证书文件
-
创建一个数据库
- 使用 DigitalOcean 提供的连接串来连接数据库。
psql -h mydb.db.ondigitalocean.com -U doadmin -d mydb -p 25060
# 运行此命令来连接到数据库,其中 -h 指定数据库主机,-U 指定用户名,-d 指定数据库名,-p 指定端口号
全屏模式,退出全屏
- 建一个数据库试试看
创建数据库 mydb。
- 创建表
下面是一个创建用户表的例子:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO users (name) VALUES ('Alice');
进入全屏 退出全屏
-
在你的Encore应用中声明一个数据库实例:
-
打开你的Encore应用的代码。
- 添加
mydb
数据库到你的应用中(Encore数据库文档)
const mydb = new SQLDatabase("mydb", {
migrations: "./migrations",
});
// 获取用户信息的函数
export const getUser = api(
{ expose: true, method: "GET", path: "/names/:id" },
async ({id}: {id:number}): Promise<{ id: number; name: string }> => {
return await mydb.queryRow`SELECT * FROM users WHERE id = ${id}` as { id: number; name: string };
}
);
进入全屏 退出全屏
-
创建一个 Encore 基础设施配置
-
在 Encore 应用程序的根目录下创建一个名为
infra.config.json
的文件。 - 在文件中添加 CA 证书内容 和连接信息:
{
"$schema": "https://encore.dev/schemas/infra.schema.json",
"SQL服务器": [
{
"主机": "mydb.db.ondigitalocean.com:25060",
"TLS配置": {
"ca": "-----BEGIN CERTIFICATE-----\n..."
},
"数据库": {
"mydb": {
"用户名": "doadmin",
"密码": {"$env": "DB_PASSWORD"}
}
}
}]
}
全屏 退出全屏
-
设置环境变量(可选的) :
- 前往 DigitalOcean App 平台的仪表板。
- 选择你的应用。
- 在 "设置" 部分,找到 "应用级环境变量"
- 将数据库密码设置为加密环境变量
DB_PASSWORD
。 -
构建并推送 Docker 镜像 :
- 构建更新配置的Docker镜像。
再构建 Docker --config infra.config.json 应用名
点击全屏 进入
点击全屏 退出
- 将 Docker 镜像标记后推送到 DigitalOcean 的容器注册表。
将 Docker 镜像标记为最新的版本
docker tag myapp registry.digitalocean.com/您的仓库名称/myapp:latest
将 Docker 镜像推送到指定的仓库
docker push registry.digitalocean.com/您的仓库名称/myapp:latest
进入全屏 退出全屏
-
测试数据库连接 ,
-
在 DigitalOcean 上重新部署应用程序以应用更改。
- 通过调用 API 来测试数据库连接。
curl https://myapp.ondigitalocean.app/names/1
使用 curl
命令来获取服务器上的数据。
全屏模式 退出全屏
故障排除小贴士
- 部署失败:检查构建日志以查找任何错误。确保正确地标记并推送了 Docker 镜像到注册表。
- 应用无法访问:确认 Dockerfile 和应用平台配置中正确暴露了所需端口。
- 数据库连接问题:确保数据库连接详情正确且数据库可从应用端访问。
结尾:
搞定啦!你成功地将Encore app通过Docker部署到了DigitalOcean平台。💪
你现在可以扩展你的应用程序,监控它的性能,并通过DigitalOcean的控制面板轻松地管理它。
🎮自己动手试试- 通过这些教程(https://encore.dev/docs/tutorials),您可以学习如何使用Encore创建应用程序。👈
- 这些开源应用程序模板(https://encore.dev/templates)可以为您提供灵感,帮助您决定创建什么样的应用程序。👈
- ⭐️ 在 GitHub 上给 Encore 加星标来支持该项目:在 GitHub 上给 Encore 加星标。
- 💙 加入 Discord 上的 Encore 社区,与其他开发者交流:Discord 社区。