Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用自定义项目文件夹结构在Beanstalk中部署Go web应用程序_Amazon Web Services_Go_Deployment_Amazon Elastic Beanstalk - Fatal编程技术网

Amazon web services 如何使用自定义项目文件夹结构在Beanstalk中部署Go web应用程序

Amazon web services 如何使用自定义项目文件夹结构在Beanstalk中部署Go web应用程序,amazon-web-services,go,deployment,amazon-elastic-beanstalk,Amazon Web Services,Go,Deployment,Amazon Elastic Beanstalk,我是新来的。 我正在尝试将一个简单的web项目部署到EB,但没有成功。 我想将具有以下本地结构的项目部署到Amazon EB: $GOPATH ├── bin ├── pkg └── src ├── github.com │   ├── AstralinkIO │   │   └── api-server <-- project/repository root │   │   ├── bin │   │   ├── cmd <

我是新来的。 我正在尝试将一个简单的web项目部署到EB,但没有成功。 我想将具有以下本地结构的项目部署到Amazon EB:

$GOPATH
├── bin
├── pkg
└── src
    ├── github.com
    │   ├── AstralinkIO 
    │   │   └── api-server <-- project/repository root
    │   │       ├── bin
    │   │       ├── cmd <-- main package
    │   │       ├── pkg
    │   │       ├── static
    │   │       └── vendor
$GOPATH
├── 箱子
├── 包装
└── src
├── github.com
│   ├── 阿斯特拉林基奥

│   │   └── api服务器我使用Beanstalk已经很久了,所以我对细节有些生疏。但基本思想如下。AWS Beanstalk对go的支持在设计上有点奇怪。它基本上将源文件提取到服务器上的一个文件夹中,将该文件夹声明为GOPATH,并尝试构建应用程序,假设主包位于GOPATH的根目录下。这不是go项目的标准布局。因此,您的选择是:

1) 将整个GOPATH打包为Beanstalk的“源包”。然后您应该能够编写build.sh脚本来更改GOPATH并按照自己的方式构建它。然后从构建文件中调用build.sh

2) 将主包更改为常规包(例如github.com/AstralinkIO/api server/cmd)。然后在GOPATH的根目录下创建一个application.go文件(是的,在src之外,而所有实际的包都应该在src中)。你的application.go将成为你的“包main”,只包含一个main函数(它将从github.com/AstralinkIO/api server/cmd调用你当前的main函数)。我们应该做到这一点。虽然你的里程可能会有所不同

3) 更简单的选择是使用。它仍然在服务器上构建您的go应用程序,但问题与上面的基本相同,但是它的文档记录更好,并且可以在本地测试它,这对正确配置和构建有很大帮助。它还将让您了解Beanstalk如何构建go应用程序,从而帮助您使用选项1和2。我自己使用这个选项,直到我转到普通EC2实例。我仍然使用由此获得的技能,使用docker构建我当前的应用程序版本

4) 不过,你最好的选择(以我的拙见)是自己构建应用程序,并将其打包为一个随时可以运行的二进制文件。见第二个要点段落


好吧,你会选择哪一个选项——祝你好运

对于ServerFault来说,这可能更像是一个EB问题,而不是SO的围棋问题。我会说,部署Go应用程序的典型方法是构建它,将二进制文件传输到服务器(不需要安装Go或任何源代码),然后运行它。Beanstalk似乎还有其他想法,我个人认为这与最佳实践截然相反。我还应该指出,这不是一个“定制项目文件夹结构”,这是100%bog标准Go项目结构(假设
bin
pkg
只是包名)。感谢您的澄清!我想我被误导了,以为这不是标准的方法。非常感谢你的详细回答!我决定在本地编译该应用程序(使用Docker容器),并将按照Adrian的建议在EB上更改为Docker。