部署到 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"