亚马逊EC2部署Go程序

这两天想着看下Go,争取弄通前端后端app整个的一个流程--从代码到最后的效果是怎么出来的,我想这样对,自己在和别人沟通时也轻松些。

因为亚马逊的AWS注册时送一年的空间,就想着拿这个来学习部署等等一些东西。标题有点大,是因为我在遇到这个小坑时不管中英文搜这些都没搜到,希望后来者可以搜到。

首先是这段代码,网上到处都是

package main

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

func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()  //解析参数,默认是不会解析的
    fmt.Println(r.Form)  //这些信息是输出到服务器端的打印信息
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的
}

func main() {
   fmt.Println("Start listen")
    http.HandleFunc("/", sayhelloName) //设置访问的由
    err := http.ListenAndServe(":9090", nil) //设置监听的端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }else {
        log.Fatal("start listen")
    }
}

在本地运行起来后,直接浏览器输入http://localhost:9090/即可访问,但我将它在EC2的Ubuntu实例中跑时就懵了,后来才知我犯了几个错误。
Local_Go.png-31.6kB

1 设置路由端口

EC2的实例里默认只开启了22端口,用于SSH,需要我们手动打开其他端口,知道后很简单。

依次点开实例里的【网络与安全】-> 【安全组】 -> 【入站】 -> 【编辑】-> 【添加】即可.

2 IP地址

其实在实例里是写有公有IP的,我当时犯二在Ubuntu里输入ifconfig查的IP,一直无法打开,才发现
ifconfig查到的是亚马逊 Cloud里的私有ID,类似网关IP吧。

以上两步完成即可,结果如下
EC2_Go_Deploy.png-27.1kB