在服务器上启动golang

时间:2018-02-24 16:31:53

标签: go

我在计算机上创建了一个很小的Go程序:

package main

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

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

在Mac上使用终端:

$ cd $HOME/go/src/hello
$ ./hello

服务器正在启动。并使用Safari:

http://localhost:8080/hello

我得到“你好,我爱你好!”

到目前为止一切顺利。但我的挑战是将这个二进制文件放在服务器上并运行相同的文件。

在服务器上

Debian 8使用webmin在root Go中创建一个文件夹并将二进制文件放在这个文件夹中

[root@server ~]# cd /go/
[root@server go]# ./hello
sh: 1: ./hello: Permission denied
[root@server go]# 

Go文件夹和hello二进制文件的权限是0644. AFAIK,与大多数文件相同。

如何将Golang部署到服务器并在服务器上启动golang?关于上一步的大量文档,但我在服务器端没有找到任何文档。

2 个答案:

答案 0 :(得分:4)

我认为您需要使用交叉编译。

当您在Mac上启动go build -o hello .时,它正在为您构建一个二进制文件Mac。

但是要在linux上运行它,你需要使用交叉编译:{{1​​}}。它将为您的服务器构建二进制文件。

您可以阅读Dave Cheney的这篇文章:https://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

答案 1 :(得分:1)

// while (password_found == 0) 通常指向文件上缺少可执行权限。

hello二进制文件应该有Permission denied755(前者使其可以为所有人执行,后者仅适用于您的用户)。

运行

700

或者

chmod 755 ~/go/hello

第一个只在服务器可执行文件上设置显式权限位,第二个只在整个目录中添加可执行权限位,以及所有包含的文件(和子目录)。 (目录通常也会设置chmod -R +x ~/go - 位,否则您将无法列出其内容)