Microsoft AzureのVMにMySQLを入れて、GolangでWebAPIサーバを作りました。
大量リクエストは来ない、データベースの容量も確実に少ない、という要件だったので、一番小さいVMを使いました。
サーバ構成
- ホストマシン:Microsoft Azure
- OS:Ubuntu 16.04
- データベース:MySQL 5.7.13
- 開発言語:Golang 1.6.2
サーバ構築手順
Azureの画面で、Virtual Machines > 追加 > 検索ボックスに[ubuntu]と入力。
Ubuntu Server 16.04 LTS を選択。
マシンサイズは「すべて表示」をクリックして、一番小さな「A0 Basic」を選択。
VM作った後からでも追加できますが、ネットワークセキュリティグループにFTPとHTTPを許可する設定を追加します。
この設定を行う手順がちょくちょく変わるので、古い記事を参考にしていると迷子になります。
また、IPが動的の場合は、DNSラベル名を設定すると便利です。
(SSHするときは常にDNS名で接続できる。)
VMが起動したら、SSHで接続確認。
ssh -l [ユーザ名] [DNS名(例 xxxxxx.japaneast.cloudapp.azure.com)]
実行するとパスワードを求められるので、入力してEnter。
MySQLのインストール
以下のコマンドでインストール。
sudo apt-get install mysql-server
文字コードをutf-8にそろえるため、設定ファイルを編集。
sudo vi /etc/mysql/my.cnf
(実はvi使えないのでnanoでやった。)
sudo nano /etc/mysql/my.cnf
で、以下を追記する。
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB
[mysqldump]
default-character-set=utf8
[mysql]
default-character-set=utf8
再起動。
sudo /etc/init.d/mysql restart
接続して、UTF-8になっているか確認。
mysql -u root -p
status;
以降は、Sequel ProなどのツールでSSH接続して利用できます。
vsftpdのインストール
FTP用のユーザを作成。
sudo adduser ftpuser
インストール。
sudo apt-get install -y vsftpd
設定ファイルを修正します。
sudo nano /etc/vsftpd.conf
以下の通りに修正。
コメント解除( 書き込み許可 )
write_enable=YES
コメント解除( アスキーモード転送許可 )
ascii_upload_enable=YES
ascii_download_enable=YES
コメント解除( chroot 有効 )
chroot_local_user=YES
コメント解除
chroot_list_enable=YES
コメント解除
chroot_list_file=/etc/vsftpd.chroot_list
コメント解除( ディレクトリごと一括での転送有効 )
ls_recurse_enable=YES
chroot_list を編集(新規作成)して ftpuser を追加する。
sudo nano /etc/vsftpd.chroot_list
以下を追加します。
ftpuser
再起動。
sudo service vsftpd restart
以降は、Cyberduckなどのツールで接続して利用できます。
※SFTPで接続します。
Golangでの開発〜ビルド〜実行
開発は Visual Studio Code で行いました。
開発環境の構築方法はこちらの記事を参考にしました。
クロスコンパイルを可能にするため、以下のコマンドでインストール
brew install go --cross-compile-all
実際に書いたソースなどの説明はその2で行います。
実装が終わったらコンパイルします。
Ubuntu環境で実行するためのビルドコマンドは以下。
GOOS=linux GOARCH=amd64 go build main.go
ビルドしてできた実行ファイルをFTPでサーバにアップします。
(ここでは例として/usr/local/myproject/bin/にアップします。)
アップしたらSSHで接続して実行権限をつけます。
cd /usr/local/myproject/bin/
sudo chmod 755 main
実行。
sudo ./main &
停止。
(裏で起動しているため、プロセスをkillする。)
ps aux | grep main
sudo kill -KILL [ps番号]
サーバの再起動時に自動で実行するには、以下の手順を実施します。
rc.localファイルを編集。
sudo nano /etc/rc.local
ファイルを開いたら、exit 0 の前の行に以下を追加。
# By default ……
cd /usr/local/myproject/bin ←この行を追加
sudo ./main & ←この行を追加
exit 0
以上で、サーバの環境については終了です。
Golangのソースの説明のため、その2に続きます。