为了账号安全,请及时绑定邮箱和手机立即绑定

使用Docker和Encore将后端应用部署到DigitalOcean的简单步骤

💡 这里介绍如何使用 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应用程序

  • 如果你还没有(做过),使用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 镜像,然后启动应用程序。
第4步:监控和管理应用
  • 访问应用:

  • 部署后,你可以通过公共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的控制面板轻松地管理它。

🎮自己动手试试 结尾
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消