72951


基本的にJavaを中心に開発していますが、今go言語をを勉強しています。

基本的な考え方はjavaと一緒なので、実際にアプリを作ってネットに公開するなどしてひと通りの流れを把握したいと思っています。

**その際のネットに公開する流れはどのようにするのが良いのでしょうか？**

githubでローカルのアプリをプッシュして、ネットにアクセスするとGoで出力した値を表示できたりするのでしょうか。

ライブラリとしてネットに公開することはできるといった記事は見ましたが、WEBアプリを作ってネット公開し、URLアクセスするとGoで出力した値を表示といった確認方法は見つけることができていません。

もしわかる方がいればやり方や参考サイトなど教えていただけると助かります。

自分でも調べ続けてみます


CC BY-SA 4.0
2020-12-28T13:43:16.047
72949
2020-12-29T08:58:22.260
40231
question
go
goで作ったWEBアプリをネットに公開する流れを知りたい


Go で作ったアプリをインターネットに公開する手順は、Java
で作ったアプリをインターネットに公開する手順とそう変わりません。そのプログラムを動かせるランタイムを用意して、実行ファイルを動かし、インターネットに公開する、以上です。

たとえば自分で持っている（つまり、オンプレミスの）サーバーでアプリを動かし、それをインターネットに公開するとウェブアプリとして動かすことができます。ここは
Go でも Java でも変わりません。Amazon EC2 のようにクラウドのサーバーを使う場合も同様です。

他にも Heroku のようなクラウドプラットフォームにアプリをアップロードして動かすという方法もあります。これも Go と Java
で基本的なやり方は変わりません。それぞれのプラットフォームのチュートリアルに基本的なやり方が書いてあるでしょう。

クラウドを使う際は場合によってランタイムで動かせるプログラミング言語が限定されている場合がありますが、とりあえず動かしてみたいということであれば Go
が使えるサービスを選べば良いという話になりそうです。


CC BY-SA 4.0
2020-12-28T16:00:39.233
72950
2020-12-28T16:00:39.233
19110
72949
answer


簡単そうな順に紹介していきましょう！

### 1\. Heroku

いきなりエアプのやつ出して申し訳ないんですが、[Heroku](https://jp.heroku.com/)が使えます。これは何かというとソースコードを
Git（Git _Hub_ じゃないですよ！） で送りつけると ~~Docker イメージをビルドして~~ Heroku の Docker コンテナ上で
ソースコードをビルドして（もしくは直接イメージを送りつけて）、それをサーバーアプリケーションとして立ち上げてくれるサービスです。コマンドラインでポチポチやった後
`git push heroku main` とやるだけでソースコードを経録に送りつけることができ、デプロイ完了です。GitHub
との連携も簡単でそちらが済んでいる場合は `git push origin main` でよいでしょう。便利そうだしわたしも後で使おっと。

### 2\. <何らかの CI/CD サービス> \+ Google App Engine

まーたエアプのやつなんですが[Google App
Engine](https://cloud.google.com/appengine/)というのでも似たようなことが出来ます。これは Google
が組んだクラウドクラスター上で Go のバイナリが動かせますよ、というサービスです。Heroku
との違いはこちらは直接バイナリを実行してくれる点が違いのようです。簡単に使う側としてはそんな変わらん気はしますが。

この方法からは GitHub 連携をしてくれないので何らかの CI/CD サービス (Continuous Integration/Continuous
Deployment)を使う必要があります。色々あるのでお好きなのを選べばよいのですが特にこだわりがなければ GitHub に最初からついてくる
GitHub Actions がおすすめです。これと Google App Engine の組み合わせであれば比較的簡単に済みそうです。  
[GitHub ActionsでGoアプリをGoogle App Engineにデプロイする -
Qiita](https://qiita.com/umireon/items/a831fccb96690b001292)

### 3\. CI/CD + Serverless Framework + AWS Lambda

ここからは使ったことがあるのでご安心を。サーバーが常時動いていなくてもよい、リクエストが来たときだけ反応を返すのでよいのであればこちらの組み合わせも有効です。設定ファイルも非常にシンプルでまさに「Serverless」ですね！  
[Serverless Framework example for Golang and
Lambda](https://www.serverless.com/blog/framework-example-golang-lambda-
support)  
あとはこれを CI/CD 上から呼び出すだけです。  
ただしこちらの方法だと決まった形式でアプリケーションを書かなければいけないのでそういう制約はあります。

### 4\. CI/CD + AWS ECS

いよいよ本格的になってきます。AWS ECS は Heroku のように Docker
コンテナをクラウド上で動かしてくれるサービスです。何がすごいのかというとこいつは負荷によってオートスケーリングさせたりインスタンスを増やしたりなどといったきめ細かいことができるようになります。あとは違う種類のアプリケーションを動かしてその間で通信とかもできちゃたりします。そのかわり
Docker イメージのビルドは自分でやらなきゃいけないですし、GitHub 連携もついてません。AWS に詳しくないと設定も大変でしょう。

### 5\. CI/CD + Kurbernetes が動くサービス （AWS EKS、GCP GKE など）

現状の最終兵器です。個人でやるにはおそらくここまでやる必要はありません。やると月 2
万円とかかかります（なんで知っているかというと自分のウェブサイトをこれでやってるから）。Kubernetes 自体はクラスター化マシン上で Docker
イメージを含む仮想化したコンテナを複数実行するシステムの名前です。EKS や GKE
がそれをクラウド上で動かしてるサービスになります（ちなみに頑張れば自分のマシンとかでも動く）。ECS
よりさらに柔軟な操作が可能です。秘密情報管理やスケジューリングなどなど、数え上げたらキリがありません。が、その分もちろん大変です。試すのですら大変ですし理解するのも難しいです。でもこれが使えるとこれになるんですよね……。

### X. CI/CD + VPS + SSH

番外編。昔ながらの方法でやってみましょう。VPS （仮想サーバー）を借りておきます。そしてその SSH 秘密鍵を CI/CD
サービスに持たせておきます。すると VPS をやりたい放題出来ますね？流石に SSH
コマンド毎行送りつけるのはかったるいのでサーバーに起動・停止のシェルスクリプトでもポンとおいておきましょう。あとサーバープログラムを 80/443
番で直接晒すのはめんどっちいので nginx とかのリバースプロキシ挟むのがいいですね。最近だと Caddy が楽かも。

* * *

といったわけでまー色々とやりようはあるわけです。是非いろいろ試してみてください！


CC BY-SA 4.0
2020-12-28T18:17:32.343
72951
2020-12-29T08:58:22.260
2020-12-29T08:58:22.260
39645
39645
72949
answer