Я пытался развернуть приложение Golang на AWS EB в течение нескольких дней.
Я пытаюсь развернуть мое приложение на сервере EB Preconfigured Docker - Go 1.4 running on 64bit Debian/2.9.2
с помощью eb cli с помощью команды eb deploy
в папке моего приложения.
Через пару секунд у меня появляется сообщение об ошибке, в котором говорится, что мое приложение не было развернуто из-за ошибки.
Глядя на eb-activity.log, вот что я вижу:
/var/log/eb-activity.log
-------------------------------------
Fetching https://golang.org/x/crypto?go-get=1
Parsing meta tags from https://golang.org/x/crypto?go-get=1 (status code 200)
golang.org/x/crypto (download)
Fetching https://golang.org/x/sys/unix?go-get=1
Parsing meta tags from https://golang.org/x/sys/unix?go-get=1 (status code 200)
get "golang.org/x/sys/unix": found meta tag main.metaImport{Prefix:"golang.org/x/sys", VCS:"git", RepoRoot:"https://go.googlesource.com/sys"} at https://golang.org/x/sys/unix?go-get=1
get "golang.org/x/sys/unix": verifying non-authoritative meta tag
Fetching https://golang.org/x/sys?go-get=1
Parsing meta tags from https://golang.org/x/sys?go-get=1 (status code 200)
golang.org/x/sys (download)
github.com/randomuser/private-repo (download)
# cd .; git clone https://github.com/randomuser/private-repo /go/src/github.com/randomuser/private-repo
Cloning into '/go/src/github.com/randomuser/private-repo'...
fatal: could not read Username for 'https://github.com': No such device or address
package github.com/Sirupsen/logrus
imports golang.org/x/crypto/ssh/terminal
imports golang.org/x/sys/unix
imports github.com/randomuser/private-repo/apis: exit status 128
package github.com/Sirupsen/logrus
imports golang.org/x/crypto/ssh/terminal
imports golang.org/x/sys/unix
imports github.com/randomuser/private-repo/app
imports github.com/randomuser/private-repo/app
imports github.com/randomuser/private-repo/app: cannot find package "github.com/randomuser/private-repo/app" in any of:
/usr/src/go/src/github.com/randomuser/private-repo/app (from $GOROOT)
/go/src/github.com/randomuser/private-repo/app (from $GOPATH)
Я полагаю, что существует проблема, когда сервер пытается установить приложение, похоже, он пытается получить данные из моего частного репозитория на github ...
Я ссылался на свои подпакеты приложения как github.com/randomuser/private-repo/subpackage
Я предположил, что именно поэтому он ведет себя так.
Есть ли способ развернуть весь мой код, заставив мое частное репо быть заполненным в GOROOT src / github.com / randomuser / private-repo /, чтобы сервер не пытался его получить?
Я не нашел ни одного правильного примера ни в Amazon docs (приложениях с несколькими пакетами), ни в Github.
Я что-то упустил? Есть ли лучшее решение?
В дополнение к этому, я также попытался развернуть мой скомпилированный двоичный файл напрямую (создать папку, в которую я помещаю только двоичный файл, заархивировать его и загрузить в enb-файл ebs), но он тоже не сработал ... Может быть, это опция требует еще один конфиг env (если да, то какой?).
Спасибо за вашу помощь :)
Конфигурация
Приложение Golang, имеющее следующие папки:
├── Dockerfile
├── server.go
├── Gopkg.lock
├── Gopkg.toml
├── Makefile
├── apis
│ ├── auth.go
│ ├── auth_test.go
│ ├── ...
├── app
│ ├── config.go
│ ├── init.go
│ ├── logger.go
│ ├── scope.go
│ ├── transactional.go
│ └── version.go
├── config
│ ├── dev.app.yaml
│ ├── errors.yaml
│ └── prod.app.yaml
├── daos
│ ├── auth.go
│ ├── auth_test.go
│ ├── ...
├── errors
│ ├── api_error.go
│ ├── api_error_test.go
│ ├── errors.go
│ ├── errors_test.go
│ ├── template.go
│ └── template_test.go
├── models
│ ├── identity.go
│ ├── ...
├── services
│ ├── auth.go
│ ├── auth_test.go
│ ├── ...
├── util
│ ├── paginated_list.go
│ └── paginated_list_test.go
Вот содержимое моего сервера.
package main
import (
"flag"
"fmt"
"net/http"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/randomuser/private-repo/apis"
"github.com/randomuser/private-repo/app"
"github.com/randomuser/private-repo/daos"
"github.com/randomuser/private-repo/errors"
"github.com/randomuser/private-repo/services"
)
func main() {
// getting env from command line
// env is either prod, preprod or dev
// by default, env is prod
env := flag.String("env", "prod", "environment: prod, preprod or dev")
flag.Parse()
...
router.To("GET,HEAD", "/ping", func(c *routing.Context) error {
c.Abort() // skip all other middlewares/handlers
return c.Write("OK " + app.Version)
})
...
// Serve on port 5000
Содержимое My Dockerfile:
FROM golang:1.4.2-onbuild
ADD . /go/src/github.com/randomuser/private-repo
RUN go install github.com/randomuser/private-repo
EXPOSE 5000
ENTRYPOINT /go/bin/private-repo