使用PEBL免费部署Go&redis!
#devops #云 #redis #pebl

在本指南中,我们将考虑将简单的GO服务器与Redis梳理,并使用pebl免费部署。

设置

  1. 确保已安装了dockerGo
  2. 按照此处的步骤安装PEBL CLI:https://docs.pebl.io/setup
  3. 前往pebl.io并创建一个免费帐户

创建您的帐户后,请确保要求您的免费*.pebl.rocks子域(https://www.pebl.io/signup/claim),因为我们将在系列的其余部分中使用它!

我们将使用hey.pebl.rocks使事情变得具体,因此请确保用自己的子域替换任何实例。

项目创建

现在是时候创建我们的项目了!

  1. 创建一个刮擦文件夹以充当项目的根。对于本教程,我们将创建pebl-tutorial

    $ mkdir ~/work/pebl-tutorial
    
  2. 然后通过创建一个GO模块来初始化项目:

    $ cd ~/work/pebl-tutorial
    $ go mod init pebl-tutorial
    
  3. 通过在项目文件夹中运行go get下载PEBL GO SDK:

    $ cd ~/work/pebl-tutorial
    $ go get github.com/peblcloud/go
    

添加redis

让我们首先安装我们将使用的redis client

$ go get github.com/redis/go-redis/v9

然后在项目的根部创建一个main.go,然后粘贴以下:

package main

import (
    "net/http"
    "github.com/peblcloud/go"
    "github.com/redis/go-redis/v9"
)

func main() {
    redisConn, _ := pebl.Redis("redis-1")
    rdb := redis.NewClient(&redis.Options{
        Addr: redisConn.Addr,
    })

    svc := http.NewServeMux()
    svc.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
        count, _ := rdb.Get(context.Background(), "count").Result()
        res := fmt.Sprintf("current count: %s", count)
        w.Write([]byte(res))
    })

    svc.HandleFunc("/incr", func(w http.ResponseWriter, _ *http.Request) {
        rdb.Incr(context.Background(), "count")
    })

    pebl.Service(svc, "hey.pebl.rocks")
}

pebl是一个唯一的云平台,其中一切都用代码驱动。无需配置!在这里,我们利用pebl.Service从标准的net/http GO服务器中创建服务,该服务将在hey.pebl.rocks上使用。 (确保将其更改为您所声称的自己的子域)。

以类似的方式,我们可以使用pebl.Redis访问Redis。此方法返回一个结构,该结构包含REDIS实例的连接信息。这将传递到Redis客户端。

最后,我们在服务器上配置了两个端点:/incr,该端点会增加键count,而根端点/返回当前计数。

本地运行

让我们尝试本地运行!

本地群集

首先,我们需要初始化本地群集:

$ pebl up
 :: initializing new pebl cluster...
 :: done!
 :: run `pebl info` to see logs, endpoints, and other info about the running cluster!
$

然后执行pebl info以将其连接到运行群集。这让您看到有关运行群集的信息,包括任何运行的工作负载,日志等。信息屏幕应像这样:


  pebl cluster version: 0.0.9
  ctrl-C or q to exit the info pane
  (exiting will not stop the cluster)


══ logs ═══════════════════════════════

您可以通过按qCtrl-C退出信息窗格。

运行项目

现在确保您处于项目的根源,并执行pebl run

$ cd ~/work/pebl-tutorial
$ pebl run
 :: building golang project...
 :: staging build at: /tmp/dir
 :: containerizing the build...
 :: starting container...
$

现在,如果您检查了信息窗格,则应该看到两个工作负载,端点和redis实例。


  pebl cluster version: 0.0.9
  ctrl-C or q to exit the info pane
  (exiting will not stop the cluster)

      redis: redis-1 → localhost:55000
      endpoint: hey.pebl.rocks → localhost:55001

══ logs ════════════════════════════════

发送请求

信息窗格显示了该服务的本地绑定端口。在我们的示例中,它注定要与:55001,但您自己的情况会有所不同。将测试卷发发送到绑定端口:

$ curl localhost:55001/incr
$ curl localhost:55001/
current count: 1
$ curl localhost:55001/incr
$ curl localhost:55001/incr
$ curl localhost:55001/
current count: 3
$

进行更改

现在使它变得更加有趣!让我们为/reset添加一个端点,该端点将将count键设置为零。

package main

import (
    "net/http"
    "github.com/peblcloud/go"
    "github.com/redis/go-redis/v9"
)

func main() {
    redisConn, _ := pebl.Redis("redis-1")
    rdb := redis.NewClient(&redis.Options{
        Addr: redisConn.Addr,
    })

    svc := http.NewServeMux()
    svc.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
        count, _ := rdb.Get(context.Background(), "count").Result()
        res := fmt.Sprintf("current count: %s", count)
        w.Write([]byte(res))
    })

    svc.HandleFunc("/incr", func(w http.ResponseWriter, _ *http.Request) {
        rdb.Incr(context.Background(), "count")
    })


    svc.HandleFunc("/reset", func(w http.ResponseWriter, _ *http.Request) {
        rdb.Set(context.Background(), "count", "0", 0)
    })

    pebl.Service(svc, "hey.pebl.rocks")
}

请注意已附加到svc的新的/reset处理程序。

在其他平台中进行更改可能是一个涉及的过程。但是使用PEBL,我们只需要重新运行该项目! PEBL了解更新端点的含义,并将自动处理将基础服务器切换到最新版本而不会任何中断。

再次使用pebl run运行项目,然后将请求发送到/reset端点:

$ curl localhost:55001/
current count: 3
$ curl localhost:55001/reset
$ curl localhost:55001/
current count: 0
$

云运行时

真正让您了解PEBL方法如此强大的原因,我们将把这个项目部署到云中。我们将无需任何更改,无需额外的配置!

只需在项目的根部使用pebl deploy

$ cd ~/work/pebl-tutorial
$ pebl deploy

部署后,您可以访问pebl console以查看运行的Redis实例。您还可以为远程redis实例创建本地隧道以进行检查或调试:

$ pebl tunnel redis
 :: tunnel established at: 127.0.0.1:50000
 :: use redis-cli to connect:
 :: redis-cli -p 50000

,正如输出所建议的那样,我们可以使用redis-cli到本地绑定的端口,以隧道到您的远程redis实例:

$ redis-cli -p 50000
127.0.0.1:50000> get counter
"1"

请注意,无需为您的本地群集创建“隧道”。信息窗格已经显示了您可以使用的本地绑定端口,您可以使用该端口来检查本地Redis!

下一个

您可以继续更改GO服务器,也许会添加身份验证或缓存。

有关更多教程,请查看我们的many guides。 PEBL目前也在Python和Node中提供。

有关GO SDK的引用,请查看https://pkg.go.dev/github.com/peblcloud/go

有关PEBL可用的所有云功能的概述,请查看reference