前面讲解了 Fly.io 的初步入门使用,本文讲解在没有 docker 环境情况下部署 go 开发的应用。

项目

这里为了演示方便, 简单使用 go 编写一个:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w,"hello world")

	})

	log.Println("listening on", 8080)
	log.Fatal(http.ListenAndServe(":"+"8080", nil))
}

安装 Flyctl 并登录

这个步骤上篇文章已经介绍过来,还不了解如何安装登录的可以参考前面的文章。

配置 Fly 应用程序

进入项目的根目录,执行 flyctl launch,它会根据你输入的配置(主要是应用名,部署区域,是否需要数据库和redis)来生成相应的配置文件,并帮你在远程构建器上打包镜像并部署,如果有 DOCKERFILE 文件就会使用你的进行构建,如果没有就会使用相应的官方文件进行构建镜像.

需要注意的是你的应用需要监听 8080 端口,否则部署时会报错

img_1.png

img_3.png

img_4.png

从日志可以看到打包好的镜像名是 registry.fly.io/cool-grass-2591:deployment-01GHPEDCXBC3K5NAGHNZWKT49H

fly.toml 配置

我们来看看 flyctl 帮我们生成的 fly.toml 具体内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# fly.toml file generated for cool-grass-2591 on 2022-11-13T01:32:35+08:00

app = "cool-grass-2591"
kill_signal = "SIGINT"
kill_timeout = 5
processes = []

[env]

[experimental]
  allowed_public_ports = []
  auto_rollback = true

[[services]]
  http_checks = []
  internal_port = 8080
  processes = ["app"]
  protocol = "tcp"
  script_checks = []
  [services.concurrency]
    hard_limit = 25
    soft_limit = 20
    type = "connections"

  [[services.ports]]
    force_https = true
    handlers = ["http"]
    port = 80

  [[services.ports]]
    handlers = ["tls", "http"]
    port = 443

  [[services.tcp_checks]]
    grace_period = "1s"
    interval = "15s"
    restart_limit = 0
    timeout = "2s"

主要就是一些常规的服务端口配置等。

查看服务状态

我们可以通过 flyctl status 查看服务的状态

img_5.png

通过 flyctl open 可以在浏览器打开网站。

小结

本文是简单的从 0 至 1 部署一个 go web 程序的流程,希望对你们有帮助。

参考