部署到 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 功能默认是关闭状态