aws × Goサーバー環境構築：ゼロからのhelloworld

##まずはAWSサーバーをゲットする
AWSには一年間の無料体験があるので、安心に登録できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/ede9f0a8-16a6-b19f-501b-49fc6a3b81f8.png)
インスタンスを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/359ae979-6b3a-0637-5a2e-fd37c5e2281e.png)
ここではAmazon　Linuxを使いました。必要なパッケージが揃っているので使いやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/a2df8f24-e599-64e5-40b2-0cc32221cede.png)
僕も無料体験中なので、設定はディフォルトで作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/bdfb8831-d762-fe12-284b-6656be3f4506.png)
起動バタンを押すとキーの作成画面が出て、キーペア名を入力したら、```.pem```のファイルをダウンロードします。サーバーにアクセスにはキーが必要なの、これを大事に保存しましょう。

##IPをもらいます
右ボタンを押せばこういうパネルが出ます。IPアドレス管理を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/4250e6aa-674b-9d70-1960-aa422a86a693.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/c39613de-27df-6656-7793-127127285047.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/6cd45498-1f1b-793d-209d-a422c2bf9946.png)
こうすることでIPの割り当てが完了しました。

それからセキュリティグループを設定する、テストとしてこのように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/7768d970-ed08-3ba7-4f16-4822414cb99e.png)


早速テストしましょう！
cmdを開いて、pingでテストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/4b6efffc-0b38-d669-31a7-bc2d8a8865e4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/0b0ababd-8ac0-99cb-51ea-00582c7a9f99.png)
アクセス出来ました！
##Puttyで接続
まずはPuttyをダウンロード↓
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
続いてPuttyの環境配置を行います。↓
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html
↑公式ドキュメンテーションに詳しく記述してあります。
##GO環境の構築
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/356a25f9-9feb-25f6-fbb8-eb1dbc7e4d80.png)
では始めます～
公式サイトでlinkを取得します。
https://golang.org/dl/
```https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz```
↑私が選択したバージョン
Linuxの下で

```
//ダウンロード
wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz

//フォルダーを作ります。
mkdir　~/local

//内容を抽出
sudo tar -C ~/local -xzf go1.12.5.linux-amd64.tar.gz

//PATHを設定
cd ~/
vim .bashrc
//開いたテクストエディターにPATHを入れる
GOROOT=~/local/go 
PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/XXXXX/go 　　//プロジェクトのディレクトリ
export GOBIN=$GOPATH/XXXXXX/bin  //プロジェクトのbinディレクトリ

//shift+zz(二回押し)保存

//PATHを更新
sourse ~/.bashrc

//テスト
go version

```
//
vim .bashrc でこんな感じです。↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/7d1f7385-7275-6e6c-892f-4e42a8267828.png)

##Helloworld

```
//goファイルを作る
vi HelloWorld.go
```

```
//以下のコードを中にコピーする
package main

 import (
    "fmt"
    "log"
    "net/http"
)

 func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello world\n")
    })

    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
```
```
//保存
shift+zz
//実行
go run HelloWorld.go

```
##テスト
go run の後、puttyをそのまま放置
ブラウザに　[自分のIP]:9090を入力　例：```http://18.220.120.65:9090/```
自分のIPはさっき取得した：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/949bab5e-39af-9dd7-27a7-6ec1dc77e8c2.png)

テスト成功！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/40421254-f7b3-5acf-1e31-0eb49cd8ebdb.png)
##もう一歩-------SupervisorでHelloWorldを管理する


```
//まずはSupervisorをインストール
sudo easy_install supervisor

//バージョン確認
supervisord -v

```
Supervisorの設定ファイルを作る↓

```
sudo mkdir /etc/supervisor

//権限を取得する
sudo chmod -R 777 /etc/supervisor

//ディフォルト配置ファイルを作る
 echo_supervisord_conf > /etc/supervisor/supervisord.conf

```
このように編集する

```
//後ろにこれを挿入
[include]
files = /etc/supervisor/config/*.conf
//ほかのpackageを導入、プロセスが多くなってもコントロールしやすい。

mkdir /etc/supervisor/config/
//HelloWorld.confをこう編集する
vim /etc/supervisor/config/HelloWorld.conf
```
```
[program:HelloWorld]
command=go run /home/ec2-user/GoCode/hello/HelloWorld.go ;実行するコマンド
autostart=true　　　；Supervisorと共に起動
autorestart=true　　；自動再起動
startsecs=10
stdout_logfile=/var/log/HelloWorld.log　　；ログファイルのディレクトリを設定
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/HelloWorld.log　；うえと同じくディレクトリを設定
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
```
```
mkdir /var/log/
//ディレクトリの権限を取得する
sudo chmod -R 777  /var/log/
//起動
supervisord -c /etc/supervisor/supervisord.conf
//作動状態をチェック
supervisorctl 
```
起動しプロセスはこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403926/c6dae50a-6d56-c3c6-3a10-a11c8e85cba2.png)


よく使うsupervisord/supervisorctl コマンド

```
supervisord -c supervisor.conf                       配置ファイルでsupervisorを起動
supervisorctl -c supervisor.conf status              状態チェック
supervisorctl -c supervisor.conf reload              配置ファイルの再読み込み
supervisorctl -c supervisor.conf start [all]|[x]     すべて/指定のプロセスを起動
supervisorctl -c supervisor.conf stop [all]|[x]      すべて/指定のプロセスを中止 
```