Goで立ち上げたサーバを停止した後、再度同じポートで立ち上げる


まだまだ課題は多いけど、

最低限の機能は実装できてるので、

さくらのVPSを借りて、

アプリケーションサーバを立ち上げてみた。


その時行ったことをメモに記す。




さくらのVPSを借りて、Ubuntuを入れた。


Ubuntuでファイアウォール等の設定は下記の、

さくらのVPSでSOY CMSを動かした時のメモで記載したものを参考にして進め、


今回は練習も兼ねて、

この先はデプロイツールを使わず、一つ一つ丁寧に行ってみた。


とりあえず、行ったことをまとめると

Gitのインストール

Goのインストール

MySQLのインストール

アプリ用のディレクトリを作成して、GitでGitHubに挙がっているリポジトリをクローン

アプリのコンパイル

実行

で、


実際に行ったことは


sudo apt-get update
sudo apt-get upgrade

#Gitのインストール
sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext  libz-dev libssl-dev
sudo apt-get install git

#Goのインストール
sudo apt-get install curl
sudo curl -O https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
sudo tar -xvf go1.6.linux-amd64.tar.gz
sudo mv go /usr/local
sudo rm go1.6.linux-amd64.tar.gz

#homeに戻る
cd

mkdir .go

#GOのパスの設定
sudo emacs .bashrc

export PATH=$PATH:/usr/local/go/bin
export GOBIN=/usr/local/go/bin
export GOPATH=$HOME/.go
export PATH=$PATH:GOPATH/bin

#.bashrcを保存

source .profile


#MySQLのインストール
sudo apt-get install mysql-server

#MySQLの文字コードの変更等
sudo emacs -nw /etc/mysql/my.cnf

#[mysqld]の下に下記の文字コードの設定を追加
character-set-server=utf8

#設定変更後にMySQLの再起動
sudo /etc/init.d/mysql restart

#MySQLにログイン
mysql -u root -p

#MySQLの文字列の設定がすべてutf-8に変更されていることを確認
show variables like '%char%'

#sysv-rc-confのインストール。sysv-rc-confはサーバ起動時に立ち上げるアプリを指定する
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf mysql on

#アプリ用のディレクトリを準備
cd /var
sudo mkdir golang
sudo chmod -R 755 golang
git clone アプリのリポジトリ

#golangのmainパッケージがあるディレクトリまで移動

#パーミッションに関する変更は加味しない
git config core.filemode false
git config -l | grep filemode

#アプリをビルド
go build -o app

#ポート番号80でサーバを立ち上げる
./app -addr=:80

こんな感じ。


ここで無事に終わると思いきや


2016/04/07 22:36:55 Webサーバーを開始します。ポート: :80
2016/04/07 22:36:55 ListenAndServe:listen tcp :80: bind: permission denied

ポート番号80でサーバを立ち上げる権限がないぞとエラーになった。


そういえば、ポート番号が1024以下の場合はroot権限が必要ということで、


sudo ./app -addr=:80
2016/04/07 22:36:55 Webサーバーを開始します。ポート:  :80

こうしてみたらいけました。


とりあえず、無事に起動までできたが、

セキュリティ面でやらなければならないことがありますので、

実際に稼働しているURLはまだ記載できません。


追記


sudo ./app -addr=:80 &
2016/04/07 22:36:55 Webサーバーを開始します。ポート:  :80

コマンドの末尾に&をつけることで、バックグラウンドでの実行になる。

サーバを停止する場合はkill -KILL プロセスIDでプロセスを強制終了