Golang 如何将Golang WebApp部署到Heroku

Golang 如何将Golang WebApp部署到Heroku

Heroku是一个云平台,可让开发人员轻松地构建、部署和扩展Web应用程序,支持多种编程语言。在本文中,我们将探讨如何使用Heroku将Golang WebApp部署到云上。

准备工作

在将Golang WebApp部署到Heroku之前,我们需要进行一些准备工作。首先,我们需要确保本地已经安装了Golang。其次,我们需要一个Heroku账户,并安装Heroku CLI。最后,我们需要创建我们的Golang应用程序。

接下来,让我们看一下如何创建一个简单的Golang WebApp。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, Heroku")
    })

    http.ListenAndServe(":8080", nil)
}

在这个示例代码中,我们创建了一个简单的HTTP服务器,用于响应根路径请求。现在,我们可以测试我们的代码,并确保我们的应用程序正常工作。

$ go run main.go

通过这个命令,我们可以启动我们的Web服务器,并访问http://localhost:8080/,我们应该看到一个“Hello,Heroku”的消息。

创建Heroku应用程序

现在,我们已经准备好将我们的Golang应用程序部署到Heroku了。首先,我们需要在Heroku上创建一个新的应用程序。打开终端,输入以下命令:

$ heroku create <app-name>

这个命令会在你的Heroku账户创建一个新的应用程序,并提示你应用程序的网址。应用程序的名称是可选的,如果没有指定则会随机生成。

配置Heroku应用程序

创建Heroku应用程序后,我们需要告诉Heroku如何构建和运行我们的应用程序。我们需要创建一个Procfile文件,告诉Heroku哪个文件是我们的主要服务器代码,并向Heroku指定我们希望使用的端口号。

在你的应用程序根目录下,创建Procfile文件,并将以下内容粘贴到文件中:

web: ./main

在这个示例代码中,我们告诉Heroku我们的应用程序的Web服务是在./main文件中运行的。Heroku将使用Procfile文件来启动我们的应用程序。

在我们的Golang服务器代码中,我们需要编写代码,以从环境变量读取端口号并使用该端口号启动Web服务器。

package main

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

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, Heroku")
    })

    addr := ":" + os.Getenv("PORT")
    http.ListenAndServe(addr, nil)
}

在这个示例代码中,我们从环境变量中读取端口号,并用它来启动我们的Web服务器。这种方法允许Heroku等云平台自动向我们分配端口号,并使用该端口号来启动我们的应用程序。

将代码推送到Heroku

现在我们已经准备好将我们的应用程序部署到Heroku了。我们可以使用git将我们的代码推送到Heroku。首先,我们需要将我们的代码提交到本地git存储库。

$ git init
$ git add .
$ git commit -m "Initial commit"

一旦我们的代码被提交到本地git存储库,我们就可以将代码推送到Heroku了。

$ git push heroku master

这个命令将代码推送到Heroku的远程git存储库,并通知Heroku开始构建我们的应用程序。我们的应用程序会自动地构建并部署在Heroku上。你可以在Heroku的Web控制台上查看应用程序的构建和部署进度。

测试Heroku应用程序

现在我们已经将我们的应用程序部署到Heroku,我们可以测试它是否工作正常了。使用以下命令,我们可以访问我们的应用程序。

$ heroku open

这个命令将在默认浏览器中打开我们的应用程序网址。我们应该看到一个“Hello,Heroku”的消息。

给Heroku应用程序添加数据库

我们已经成功地将我们的Golang应用程序部署到Heroku上,但是我们的应用程序目前没有数据库支持。让我们花一些时间来向我们的应用程序添加数据库。

在Heroku上添加支持PostgreSQL数据库是很容易的。在本地终端中,输入以下命令:

$ heroku addons:create heroku-postgresql:hobby-dev

这个命令会在我们的Heroku账户创建一个新的PostgreSQL数据库,并自动为我们的应用程序配置数据库连接。

现在,我们需要更新我们的Golang应用程序,以连接我们的PostgreSQL数据库并执行一些基本操作。

package main

import (
    "database/sql"
    "fmt"
    "net/http"
    "os"

    _ "github.com/lib/pq"
)

const (
    host     = "<database-host>"
    port     = "<database-port>"
    user     = "<database-user>"
    password = "<database-password>"
    dbname   = "<database-name>"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        db, err := sql.Open("postgres", fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=require", host, port, user, password, dbname))
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer db.Close()

        rows, err := db.Query("SELECT * FROM users")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer rows.Close()

        for rows.Next() {
            var name string
            err := rows.Scan(&name)
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }

            fmt.Fprintf(w, "Name: %s\n", name)
        }
    })

    addr := ":" + os.Getenv("PORT")
    http.ListenAndServe(addr, nil)
}

在这个示例代码中,我们使用了“github.com/lib/pq”包,并使用sql.Open函数连接我们的PostgreSQL数据库。我们也执行了一个非常简单的查询,并将结果打印到Web服务器响应中。

我们需要更新我们的Heroku应用程序的连接字符串,以反映我们新的PostgreSQL数据库。

$ heroku config:set DATABASE_URL=<database-url>

这个命令将更新我们的应用程序的环境变量,以反映我们的新的PostgreSQL数据库连接字符串。

现在,我们已经成功地将我们的Golang应用程序部署到Heroku,并向我们的应用程序添加了数据库支持。

结论

在本文中,我们探讨了如何将Golang WebApp部署到Heroku。我们看到了如何创建一个简单的Golang WebApp,并向其添加数据库支持。使用Heroku CLI,我们可以轻松地将我们的应用程序部署到Heroku,然后使用Heroku Web控制台跟踪我们的应用程序的进度。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程