部署到 flyio

flyio 简介

Fly.io 是一个旨在将全栈应用程序和数据库部署到靠近用户位置的平台。通过将容器转换为运行在全球 30 多个地区硬件上的微型虚拟机(micro-VM),Fly.io 能够显著降低延迟,提高应用响应速度。

部署到 flyio

本示例使用https://github.com/litongjava/tio-boot-web-hello演示如何将一个tio-boot项目部署到flyio

1. 打包应用程序

将的应用程序会使用 Maven 命令进行打包:

mvn clean package -DskipTests -Pproduction

这一步将会:

  • 清理项目(clean)。
  • 打包项目(package)。
  • 跳过测试(-DskipTests)。
  • 使用生产环境配置(-Pproduction)。

2. 准备 Docker 镜像

fly deploy 命令会使用 Dockerfile 来创建 Docker 镜像:

FROM litongjava/jre:8u391-stable-slim

# 设置工作目录
WORKDIR /app

# 复制 jar 文件到容器中
COPY target/tio-boot-web-hello-1.0.0.jar /app/

# 运行 jar 文件
CMD ["java", "-jar", "tio-boot-web-hello-1.0.0.jar", "--app.env=prod"]

这一步将会:

  • 使用指定的基础镜像。
  • 设置容器的工作目录。
  • 复制打包好的 jar 文件到容器中。
  • 设置容器启动时执行的命令。

3. 配置 Fly.io 应用

Fly.io 使用 fly.toml 文件来配置应用的各种参数:

app = "tio-boot-web-hello"
primary_region = 'sjc'

kill_signal = "SIGINT"
kill_timeout = 5
processes = []

[[vm]]
  cpu_kind = "shared"
  cpus = 1
  memory_mb = 1024

[http_service]
  internal_port = 80
  force_https = false
  auto_stop_machines = true
  auto_start_machines = true
  min_machines_running = 0

[checks]
  [checks.health_check]
    grace_period = "30s"
    interval = "15s"
    method = "get"
    path = "/"
    port = 80
    timeout = "10s"
    type = "http"

[env]
  LANG="C.UTF-8"

这一步包括:

  • 定义应用名称和主要区域。
  • 设置虚拟机配置,包括 CPU 和内存。
  • 配置 HTTP 服务,包括端口、HTTPS 强制启用、自动启动和停止机器等。
  • 设置健康检查。

如果想要提到机器人的配置,可以使用下面的配置

[[vm]]
  cpu_kind = "performance"
  cpus = 2
  memory_mb = 4096

4. 部署到 Fly.io

执行fly apps create tio-boot-web-hello创建应用 执行 fly deploy 命令进行部署,这一步将进行以下操作:

  • 构建镜像:Fly.io 使用 Dockerfile 构建 Docker 镜像。
  • 推送镜像:构建好的 Docker 镜像会被推送到 Fly.io 的镜像仓库。
  • 启动应用:Fly.io 会在指定的区域启动应用实例,并根据配置文件启动和管理这些实例。
  • 健康检查:Fly.io 会根据配置的健康检查路径和参数定期检查应用实例的健康状态,确保服务正常运行。

5.使用 deploy 工具

deploy 是笔者开发的部署工具,专注于提高部署效率 https://github.com/litongjava/go-deploy

deploy deploy-win.txt

deploy-win.txt

set JAVA_HOME=D:\\java\\jdk1.8.0_121
mvn clean package -DskipTests -Dgpg.skip -Pproduction
fly deploy

deploy 命令会读取 set 设置环境变量

6.添加 flycast

fly ips allocate-v6 --private

7. 访问

  • 公网访问 http://app-name.fly.dev
  • 内网访问 http://app-nane.flycast

通过公网访问实际上是通过 flyproxy 访问应用,fly proxy 在检查到应用关闭时会自动启动应用.如果长时间没有访问 fly proxy 也会关闭应用以节省资源
通过内网访问实际上是通过 flycast 访问应用,flycast 在检查到应用关闭时会自动启动应用.如果长时间没有访问 flycast 也会关闭应用以节省资源,flycast 功能默认是关闭状态