部署到 Fly.io

Fly.io 简介

Fly.io 是一个专注于将全栈应用和数据库部署到用户附近位置的平台。它通过将容器转换为运行在全球 30 多个地区的微型虚拟机(micro-VM),显著降低了延迟并提高了应用的响应速度。

部署到 Fly.io

本文将通过 https://github.com/litongjava/tio-boot-web-hello 演示如何将一个 Tio-Boot 项目部署到 Fly.io。

1. 打包应用程序

首先,我们需要使用 Maven 命令来打包应用程序:

mvn clean package -DskipTests -Pproduction

这个命令将完成以下任务:

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

2. 准备 Docker 镜像

fly deploy 命令会使用 Dockerfile 来创建 Docker 镜像。以下是一个示例 Dockerfile

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 服务参数,包括自动启动与停止。
  • 配置健康检查,确保服务正常运行。

4. 部署到 Fly.io

使用以下命令创建应用并部署:

fly apps create tio-boot-web-hello
fly deploy

此步骤将完成以下任务:

  • 构建镜像:Fly.io 使用 Dockerfile 构建 Docker 镜像。
  • 推送镜像:构建好的 Docker 镜像会被推送到 Fly.io 的镜像仓库。
  • 启动应用:Fly.io 会在指定区域启动应用实例。
  • 健康检查:Fly.io 根据配置的健康检查定期监控应用状态,确保服务正常运行。

5. 使用 build 工具

build 是一个自动化部署工具,能够提高部署效率。以下是 .build.txt 的示例配置:

[win.env]
set JAVA_HOME=D:\\java\\jdk1.8.0_121

[win.build]

mvn clean package -DskipTests -Dgpg.skip -Pproduction
fly deploy

运行以下命令即可启动部署:

build

6. 添加 Flycast 支持

执行以下命令为应用分配私有 IPv6 地址,启用 Flycast 内网访问:

fly ips allocate-v6 --private

7. 访问应用

  • 公网访问:通过 flyproxy 访问应用,访问地址为 http://app-name.fly.dev
  • 内网访问:通过 flycast 访问,地址为 http://app-name.flycast

Fly.io 会根据访问情况自动启动或停止应用,以节省资源。

使用 Fly.io 进行构建

以下是分两阶段构建并部署应用的 Dockerfile

# 第一阶段:构建阶段
FROM litongjava/maven:3.8.8-jdk8u391 AS builder

WORKDIR /src

COPY pom.xml /src/
COPY src /src/src

RUN mvn package -DskipTests -Pproduction

# 第二阶段:运行阶段
FROM litongjava/jdk:8u391-stable-slim

WORKDIR /app

COPY --from=builder /src/target/playwright-server-1.0.0.jar /app/

CMD ["java", "-Xmx900m","-Xms512m","-jar", "playwright-server-1.0.0.jar"]

修改 Fly.io 服务器配置

如需调整服务器配置,可以参考以下示例:

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

[[vm]]
  size = "shared-cpu-1x"
  memory = "2048MB"