2017-11-09 1 views
0

私は動く初心者です。 私は、成功していない単純なWebプロジェクトをEBに配備しようとしています。 私はアマゾンEBを次のように局所的な構造を持つプロジェクトを展開したいと思います:Beanstalkでカスタムプロジェクトフォルダ構造を使用してGo Webアプリケーションをデプロイする方法

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

しかし、コマンドを構築するとき、私は、それを行う方法がわからないんだけど、Amazonが$GOPATHとしてapi-serverの治療、およびのさコースimportパスが壊れています。

私は

...それは同じワークスペースの下にあるすべてのリポジトリを維持するのがベストですが、それは展開が困難になり、ほとんどの時間、私は出力パスをカスタマイズするProcfileBuildfileを使用していますが、私はできないことを読ん

依存関係の解を見つける。

このようなプロジェクトをEBに展開する最良の方法は何ですか?

+1

これは、SOに関するGo質問よりも、ServerFaultのEB質問のほうが多いかもしれません。 Goアプリケーションをデプロイする典型的な方法は、ビルドすること、バイナリをサーバーにインストールすること(Goのインストールやソースコードを必要としない)です。 Beanstalkには他のアイデアがあります。個人的にはベストプラクティスと正反対のものです。 – Adrian

+0

これは "カスタムプロジェクトフォルダ構造"ではないことを指摘しておきます。これは100%bog-standard Goプロジェクト構造です( 'bin'と' pkg'は単にパッケージ名です)。 – Adrian

+0

説明をありがとうございます!私はこれが標準的な方法ではないと誤解していたと思います。 – Naoric

答えて

1

私はBeanstalkを使用して以来、長い時間が経過していますので、細部には少し錆びています。しかし基本的な考え方は次の通りです。 AWS Beanstalkのサポートは、設計上少し奇妙です。基本的には、ソースファイルをサーバー上のフォルダに展開し、そのフォルダをGOPATHとして宣言し、メインパッケージがGOPATHのルートにあると仮定してアプリケーションを構築しようとします。 goプロジェクトの標準レイアウトではありません。あなたのオプションは以下の通りです:

1)GopATH全体をBeanstalkの "ソースバンドル"としてパッケージ化します。それから、build.shスクリプトを書いてGOPATHを変更し、それをあなたの方法で構築できるはずです。次に、Buildfileからbuild.shを呼び出します。

2)メインパッケージを通常のパッケージ(github.com/AstralinkIO/api-server/cmdなど)に変更します。次に、GOPATHのルートにapplication.goファイルを作成します(srcの外にありますが、実際のパッケージはすべてsrcにあります)。あなたのapplication.goはあなたの "パッケージメイン"になり、main関数(github.com/AstralinkIO/api-server/cmdからあなたの現在のメイン関数を呼び出す)のみを含みます。トリックをする必要があります。あなたの走行距離は変わるかもしれませんが。

3)少し簡単なオプションは、代わりにDocker-based Go Platformを使用することです。上記のものとほとんど同じ問題でサーバー上にアプリケーションを構築しますが、文書化されている方が良いですし、ローカルでテストすることも可能です。また、Beanstalkがアプリケーションをビルドする方法についていくつかの洞察を与えて、オプション1と2を手助けします。私はこのオプションをプレーンEC2インスタンスに移すまで自分で使いました。そして、私はまだドッカーを使って私の現在のアプリのリリースを構築するためにそれの結果として得られたスキルを使用します。

4)私の謙虚な意見では、自分のアプリを自分でビルドして、バイナリファイルを実行する準備としてパッケージ化することをお勧めします。第2の箇条書きの段落を参照してくださいhere

あなたが選ぶオプションはどれですか - 幸運です!

+0

詳細な回答をいただきありがとうございます!私はローカルで(Dockerコンテナを使用して)アプリケーションをコンパイルすることに決めました.Adrianでも提案したように、EB上のドッカーに変わります。 – Naoric

関連する問題