将包含Golang的网络应用程序部署到Beanstalk,其中包含供应商

如果不正确设置文件夹结构,就会陷入困境。

    • vendoringも含めた本格ウェブアプリのデプロイは、フォルダ構成とかちゃんとしとかないとハマります・・・

 

    • 自分で書いたコードをどこに置くか、vendorをどこに置くか

 

    その上でDockerfileをどう書くとスムーズにデプロイしてくれるか

我会将诸如此类的事情总结一下。

我已经成功地将以下内容与IntelliJ开发环境配合使用。

    GolangのウェブアプリをBeanstalkへデプロイする環境をなるはやで作る(Mac版)

项目文件夹结构

    • ソースファイルを$GOPATH/ドメイン名/パッケージ名の下に置くのは鉄則!

 

    • 今回は、$GOPATH/example.jp/sample1/とします

 

    自分はプロジェクトツリーは以下のようにしています

$GOPATH/example.jp/sample1/的布置

ファイル or ディレクトリ説明app/自分で書いたgoファイルを置く場所。サブディレクトリからなるvendor/github.com/hoge/fugaなどサードパーティ製のvendoringしたいものを置くtemplate/テンプレートファイル。app/の中に入れても良い。お好みでassets/画像やjs、cssなど静的ファイル置き場。これもapp/の中に入れても良いmain.gomain()を含むアプリ実行の拠点DockerfileDockerコンテナをビルドするためのお馴染みファイルDockerrun.aws.json起動ポートなどを指定.ebextensionsBeanstalk環境への追加設定

以下是部署所需的所有目录或文件。.ebextensions 文件用于指定文件上传上限,因此在实际上是必需的。
在 Beanstalk + Docker 中,在上传过大文件时出现了无法上传的问题。

除此之外,我会在下面的文件夹中创建并放置。

ファイル or ディレクトリ説明dev/開発でのみ必要なものを入れるdev/script/スクリプトファイル置き場dev/gulp/.coffeeや.scss置き場。ここからgulpでall.js、all.cssを作って、assetsへコピーしたりする

无论如何,这些在部署时都是不必要的。

卖家/被安置的地方

    • オープンソースなサードパーティ製パッケージは、go getで最新を得るのではなく、バージョンを固定しておきたい場合があります

 

    • これらはvendor/へ配置します

 

    • git submoduleで配置すると良いでしょう

 

    仮にgithub.com/Sirupsen/logrusパッケージをサブモジュールとしてvendorに配置する場合、以下のようにgit submoduleコマンドを叩きます
git sumodule add https://github.com/Sirupsen/logrus.git vendor/github.com/Sirupsen/logrus

Dockerfile的含义是什么?

#
#  golang:1.6-onbuildではないことに注意。onbuildだとうまくいかないかも・・・
#
FROM golang:1.6

#
# vendoringせずgo getで得る依存パッケージをつらつらと書く
#
RUN go get github.com/golang/protobuf/proto
RUN go get golang.org/x/text/currency
RUN go get golang.org/x/image/draw
RUN go get golang.org/x/image/bmp
RUN go get golang.org/x/image/tiff
RUN go get golang.org/x/net/context
RUN go get gopkg.in/go-playground/validator.v8
RUN go get gopkg.in/yaml.v2

#
# golang:1.6で$GOPATHとなっている/go/以下へ必要なファイルとディレクトリを配置
# ドメイン/パッケージ名は、ローカル開発環境と一致するようにすることが大事
#
ADD app /go/src/example.jp/sample1/app
ADD assets /go/src/example.jp/sample1/assets
ADD vendor /go/src/example.jp/sample1/vendor
ADD main.go /go/src/example.jp/sample1/main.go

EXPOSE 5000

WORKDIR "/go/src/example.jp/sample1/"
CMD ["go", "run", "main.go"]

Dockerrun.aws.json文件

根据Dockerfile的要求,指定端口为5000。

{
  "AWSEBDockerrunVersion": "1",
  "Ports" : [{ "ContainerPort": "5000" }]
}

HTTP和HTTPS的请求将通过此方式流向在Docker容器中运行的网络应用程序 main.go 所监听的5000端口。

将要部署的文件以zip格式压缩。

使用`eb deploy`命令进行部署,默认情况下会上传由git归档生成的zip文件。然而,由于缺少git子模块,导致部署目标上的构建失败。

你应该使用自己的脚本将文件打包为zip,然后使用eb deploy命令进行部署。

    Elastic Beanstalkにgit submoduleの内容を含めてデプロイする

这次我们将按照以下方式创建一个zip文件。

zip -r deploy.zip Dockerfile Dockerrun.aws.json main.go app assets vendor template .ebextensions

因为一个一个打很麻烦,所以可以把它们放在一个Shell脚本中,在上述步骤之后执行eb deploy会更方便。

将以下行添加到项目根目录下的.elasticbeanstalk/config.yml文件中。

deploy:
  artifact: deploy.zip

部署

一旦到了这个地步,

$ eb deploy

只要努力,就应该能行!祝你成功。

广告
将在 10 秒后关闭
bannerAds