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でプロセスを強制終了