無料運用 Google Cloud PlatformのAlways Free枠を使う ~DBサーバーの構築~

2019/11/19

cloud 開発試行

個人開発や学習等でDBを使うにあたり、無料でサーバーを運用する方法をまとめました。 GCP上での構築手順(VMインスタンス作成、セキュリティ対策、mysqlインストール、簡単な疎通確認まで)になります。


Google Cloud PlatformのAlways Freeとは


DBサーバーの構築

>VMインスタンス作成

GCPコンソールより、[Compute Engine]>[VM インスタンス]を選択します。

・名前:dbsvr
・リージョン :us-central1,us-west1,us-east1
・ゾーン :xxx-a
・マシンタイプ:f1-micro1台
・ブートディスク:標準永続ディスク ストレージは30GB
・イメージ :Debian BNU/Linux9(stretch) ※プレミアム以外
・ファイアウオール:httpとhttpsを許可
・ネットワークタグ:※なし
・ネットワーク:default
・サブネットワーク:default
・内部IP:エフェメラル
・外部IP:スタティック

>請求アラートの設定

請求発生時のアラートを検知するために、請求アラートを設定します。
GCPコンソールより、お支払いの[予算とアラート]を選択します。

・予算名 :
・予算額 :1月の予算額
・対象プロジェクト:すべて
・アラートの設定:1月の予算の到達額のいつアラートを出すか

不要な外部IPアドレスの削除

GCPコンソールより、[ネットワーキング]>[外部IPアドレス]を選択します。
使用するインスタンス以外のスタティックIPアドレスを削除します。

インスタンスの初期設定

GCPコンソールより、[Compute Engine]-[VM インスタンス]より、SSH接続にてサーバにログインします。


apixxxx@dbsvr:~$ sudo apt-get -y update
apixxxx@dbsvr:~$ sudo apt-get -y install git
apixxxx@dbsvr:~$ sudo pip install --upgrade setuptools
apixxxx@dbsvr:~$ sudo pip install --upgrade google-cloud
apixxxx@dbsvr:~$ sudo apt-get install dbus
apixxxx@dbsvr:~$ sudo timedatectl set-timezone Asia/Tokyo


メモリの拡張

GCPの環境については f1-micro(vCPU x 1、メモリ 0.6 GB)
という要は最低スペックで作られているので、SWAP領域は0なので、拡張が必要です。


apixxxx@dbsvr:~$ sudo free
                 total       used       free     shared    buffers     cached
Mem:            604380     159344     445036        156       2260     19948-/+
buffers/cache:  137136     467244
Swap:                0          0          0

apixxxx@dbsvr:~$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 26.8912 s, 39.9 MB/s

apixxxx@dbsvr:~$ sudo mkswap /swapfile
apixxxx@dbsvr:~$ sudo swapon /swapfile


SSHのポート番号変更


apixxxx@dbsvr:~$ sudo vi /etc/ssh/sshd_config
--------------------------------------
# OpenSSH is to specify options with their default value where
# default value.
Port 40022
:wq
--------------------------------------
apixxxx@dbsvr:~$ systemctl restart sshd.service
apixxxx@dbsvr:/$ netstat -tlpn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     PID/Programname
tcp        0      0 0.0.0.0:40022           0.0.0.0:*               LISTEN    -

ファイアーウォールルール設定(SSHのポート番号許可)

GCPコンソールより、[VPCネットワーク]>[ファイアーウォール ルール]を選択します。
・名前:allow-40022
・送信と受信 :上り※ターゲット向け
・一致した時のアクション:許可
・ターゲット :allow-40022-svr
・ソースフィルタ :ソース範囲
・ソースIP範囲 :0.0.0.0/0
・プロトコルとポート:TCP:40020

・名前:disallow-00022
・送信と受信 :上り※ターゲット向け
・一致した時のアクション:許可しない
・ターゲット :disallow-00022-svr
・ソースフィルタ :ソース範囲
・ソースIP範囲 :0.0.0.0/0
・プロトコルとポート:TCP:00022


GCPコンソールより、[Compute Engine]>[VM インスタンス]>[ネットワークタグ]を選択します。
・ターゲット:allow-40022-svr,disallow-00022-svr


SSHのポート番号変更確認

GCPコンソールより、[Compute Engine]-[VM インスタンス]より、SSH接続(カスタムポート)にてサーバにログインします。

MySQL(mariaDB )インストール

mysql_secure_installation コマンドで状態を初期化してroot パスワードを設定します。


apixxxx@dbsvr:~$ sudo apt install mysql-server mysql-client
…
apixxxx@dbsvr:/$ sudo mysql_secure_installation

Enter current password for root (enter for none):※なし
Change the root password? [Y/n] y
New password: xxxx
Re-enter new password: xxxx
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y



MySQL管理ユーザ作成

初期状態の DB root ユーザ認証に unix_socket 認証プラグインが使われているため、DB root として接続するために OS のroot 権限でなければいけません。


apixxxx@dbsvr:/$ sudo mysql -u root
MariaDB [none ]> use mysql;
MariaDB [mysql]> SELECT User, Host, plugin FROM mysql.user;

+---------+-----------+-------------+
| User    | Host      | plugin      |
+---------+-----------+-------------+
| root    | localhost | unix_socket |
+---------+-----------+-------------+

MariaDB [mysql]> CREATE USER 'apixxxx'@'localhost' IDENTIFIED BY 'apixxxx';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'apixxxx'@'localhost';
MariaDB [mysql]> UPDATE user SET plugin='' from mysql.user WHERE
User='apixxxx';
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [(none)]> SELECT User, Host, plugin FROM mysql.user;

+---------+-----------+-------------+
| User    | Host      | plugin      |
+---------+-----------+-------------+
| root    | localhost | unix_socket |
| apixxxx | localhost |             |
+---------+-----------+-------------+


MySQLサービスの自動起動、起動、停止、状況のまとめ


apixxxx@dbsvr:/$ sudo systemctl enable mysqld.service
apixxxx@dbsvr:/$ sudo systemctl start mysqld.service
apixxxx@dbsvr:/$ sudo systemctl stop mysqld.service
apixxxx@dbsvr:/$ sudo systemctl status mysqld.service


MySQLサービスのエラー確認の仕方


apixxxx@dbsvr:/etc/mysql$ ls
conf.d  debian.cnf  debian-start  mariadb.cnf  mariadb.conf.d  my.cnf
my.cnf.fallback

apixxxx@dbsvr:/etc/mysql$ cat my.cnf
--------------------------------------
# The MariaDB configuration file
[client-server]
# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
--------------------------------------

apixxxx@dbsvr:/etc/mysql$ cd   /etc/mysql/mariadb.conf.d/
apixxxx@dbsvr:/etc/mysql/mariadb.conf.d$ cat 50-server.cnf

--------------------------------------
log-error= /var/log/mysql/error.log
--------------------------------------

apixxxx@dbsvr:/etc/mysql/mariadb.conf.d$ cat  /var/log/mysql/error.log

--------------------------------------
InnoDB:Cannot allocate memory for the buffer pool.
--------------------------------------


MySQL(mariaDB )外部アクセスの許可

・ソースIPを許可

apixxxx@dbsvr:/$ cd /etc/mysql/mariadb.conf.d
apixxxx@dbsvr:/$ chmod 777 50-server.cnf       #permission
apixxxx@dbsvr:/$ vim 50-server.cnf

--------------------------------------
# bind-address = 127.0.0.1
:w !sudo tee %
:q!
--------------------------------------

apixxxx@dbsvr:/$ sudo systemctl restart mysqld.service #再起動

・TCPポート3306番でListenを確認

apixxxx@dbsvr:/$ netstat -tlpn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     PID/Programname
tcp        0      0 0.0.0.0:3306          0.0.0.0:*               LISTEN      -

ファイアーウォールルール設定(MySQLのポート番号許可)

GCPコンソールより、[VPCネットワーク]>[ファイアーウォール ルール]を選択します。

・名前:allow-03306
・送信と受信 :上り※ターゲット向け
・一致した時のアクション:許可
・ターゲット :allow-03306-svr
・ソースフィルタ :ソース範囲
・ソースIP範囲 :0.0.0.0/0
・プロトコルとポート:TCP:03306


GCPコンソールより、[Compute Engine]>[VM インスタンス]>[ネットワークタグ]を選択します。
・ターゲット:allow-03306-svr


MySQL(mariaDB )portの外部からの確認

以下サイトでportスキャンを行います。

tosd Noteについて

RSS Feed資格や仕事、サラリーマンとしての備忘録です。

このブログを検索

ブログ アーカイブ

QooQ