2017-11-09 1 views
0

나는 가기가 쉽다. 간단한 웹 프로젝트를 EB없이 EB에 배포하려고합니다. 나는 아마존 EB에 다음 지역 구조의 프로젝트를 전개하고자 다음 명령을 구축 할 때사용자 프로젝트 폴더 구조로 Beanstalk에서 Go 웹 응용 프로그램을 배포하는 방법

$GOPATH 
├── bin 
├── pkg 
└── src 
    ├── github.com 
    │   ├── AstralinkIO 
    │   │   └── api-server <-- project/repository root 
    │   │    ├── bin 
    │   │    ├── cmd <-- main package 
    │   │    ├── pkg 
    │   │    ├── static 
    │   │    └── vendor 

을하지만 그렇게하는 방법을 잘 모르겠어요, 아마존은 $GOPATHapi-server을 치료하고,의 과정 import 경로가 끊어졌습니다.

내가 읽어을 내가 출력 경로를 사용자 정의 할 수 ProcfileBuildfile를 사용하고이 같은 작업 공간에서 모든 REPOS을 유지하는 것이 가장 좋습니다하지만 배포가 어렵게 시간 ..

의 대부분을하지만 난 할 수 없음을 나타 의존성에 대한 해결책을 찾는다.

이러한 프로젝트를 EB로 배포하는 가장 좋은 방법은 무엇입니까?

+1

이것은 ServerFault에 대한 EB 질문이 SO에 대한 Go 질문보다 많을 수 있습니다. Go 애플리케이션을 배치하는 일반적인 방법은 빌드하고 Go (설치 또는 소스 코드가 필요하지 않음) 서버로 바이너리를 전송 한 다음 실행하는 것입니다. Beanstalk에는 다른 아이디어가 있습니다. 개인적으로 모범 사례에 정면으로 반대하는 것으로 보입니다. – Adrian

+0

나는 이것이 "커스텀 프로젝트 폴더 구조"가 아니라는 것을 지적해야한다. 이것은 100 % bog-standard Go 프로젝트 구조이다 ('bin'과'pkg'는 단지 패키지 이름이다). – Adrian

+0

설명해 주셔서 감사합니다. 나는 이것이 표준 방법이 아니라고 믿는 것이 오도 된 것 같아요. – Naoric

답변

1

Beanstalk을 사용한 이후로 오랜 시간이 지났으므로 세부 사항에 녹슬지는 않습니다. 그러나 기본적인 아이디어는 다음과 같습니다. AWS Beanstalk에 대한 지원은 설계 상 다소 이상합니다. 기본적으로 소스 파일을 서버의 폴더로 추출하고 해당 폴더를 GOPATH로 선언하고 기본 패키지가 GOPATH의 루트에 있다고 가정하여 응용 프로그램을 빌드하려고 시도합니다. 이동 프로젝트의 표준 레이아웃이 아닙니다. 따라서 옵션은 다음과 같습니다.

1) 전체 GOPATH를 Beanstalk의 "소스 번들"로 패키지화하십시오. 그런 다음 GOPATH를 변경하고 직접 빌드 할 build.sh 스크립트를 작성할 수 있어야합니다. 그런 다음 Buildfile에서 build.sh를 호출하십시오.

2) 메인 패키지를 일반 패키지 (예 : github.com/AstralinkIO/api-server/cmd)로 변경하십시오. 그런 다음 GOPATH의 루트에 application.go 파일을 만듭니다 (예 : src 외부, 모든 실제 패키지는 src에 있어야 함). 귀하의 application.go은 "패키지 메인"이되며 주요 기능 (github.com/AstralinkIO/api-server/cmd의 현재 주요 기능을 호출 할 것입니다) 만 포함됩니다. 트릭을해야 할 것입니다. 귀하의 마일리지는 다를 수 있습니다.

3) 좀 더 쉬운 옵션은 대신 Docker-based Go Platform을 사용하는 것입니다. 위와 거의 동일한 문제로 서버에 계속 응용 프로그램을 빌드 할 수 있지만 설명서가 더 잘 문서화되어 있으며 로컬에서 테스트 할 수 있으므로 구성을 올바르게 수행하고 빌드하는 데 많은 도움이됩니다. 또한 Beanstalk이 옵션 1과 2를 돕는 응용 프로그램을 빌드하는 방법에 대한 통찰력을 줄 것입니다. 일반 EC2 인스턴스로 이동할 때까지이 옵션을 직접 사용했습니다. 그리고 나는 그 결과로 도커를 사용하여 현재의 앱 릴리스를 빌드하는 데 얻은 기술을 사용합니다.

4) 가장 좋은 방법은 귀하의 앱을 직접 빌드하고 바이너리 파일을 실행할 준비가되어있는 패키지로 만드는 것입니다. 두 번째 글 머리 기호 단락보기 here

글쎄, 선택의 여지가있는 옵션 - 행운을 빈다.

+0

답변을 주셔서 감사합니다.Docker 컨테이너를 사용하여 로컬에서 앱을 컴파일하기로 결정했으며 Adrian이 제안한 EB로 도커로 변경됩니다. – Naoric

관련 문제