ブログタイトル募集中の新人SE記

ネットの片隅で非力を嘆く

dockerでnginxのロードバランシングを試す

dockerでnginxのロードバランシング

実際に動かしたコードはこちら

github.com

前提

  • dockerが動かせる環境

事前準備

docker-compose作成

./docker-compose.yaml を下記の内容で作成

version: '3.2'

services:
  loadbalancer:
    container_name: "wg-loadbalancer"
    image: nginx:alpine
    volumes:
      - ./loadbalancer:/etc/nginx/conf.d
    ports:
      - 8000:80
  web1:
    container_name: "wg-webserver1"
    image: nginx:alpine
    volumes:
      - ./web1:/usr/share/nginx/html
    # 本来必要ないが検証のため
    ports:
      - 8001:80
  web2:
    container_name: "wg-webserver2"
    image: nginx:alpine
    volumes:
      - ./web2:/usr/share/nginx/html
    # 本来必要ないが検証のため
    ports:
      - 8002:80

ロードバランシング用のnginx設定ファイル作成

./loadbalancer/nginx.conf を下記の内容で作成

upstream web {
    # コンテナ名で接続する
    server wg-webserver1;
    server wg-webserver2;
}

server {
    listen       80;
    location / {
           proxy_pass http://web;
    }
}

振り分け先サーバ1用のhtml作成

振り分けられたサーバがわかるよう ./web1/index.html を作成

<!DOCTYPE html>
<html>

<head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
</head>

<body>
    <h1>Welcome to nginx! server1</h1>
    <p>If you see this page, the nginx web server is successfully installed and
        working. Further configuration is required.</p>

    <p>For online documentation and support please refer to
        <a href="http://nginx.org/">nginx.org</a>.<br />
        Commercial support is available at
        <a href="http://nginx.com/">nginx.com</a>.</p>

    <p><em>Thank you for using nginx.</em></p>
</body>

</html>

同様にサーバ2用のhtml作成

./web2/index.htmlを作成

<!DOCTYPE html>
<html>

<head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
</head>

<body>
    <h1>Welcome to nginx! server2</h1>
    <p>If you see this page, the nginx web server is successfully installed and
        working. Further configuration is required.</p>

    <p>For online documentation and support please refer to
        <a href="http://nginx.org/">nginx.org</a>.<br />
        Commercial support is available at
        <a href="http://nginx.com/">nginx.com</a>.</p>

    <p><em>Thank you for using nginx.</em></p>
</body>

</html>

実行

docker実行

$ docker-compose up -d

検証

サーバ1にアクセス

  • http://localhost:8001 にアクセス
  • 何度アクセスしても server1 と表示される

サーバ2にアクセス

  • http://localhost:8002 にアクセス - 何度アクセスしても server2 と表示される

ロードバランサー経由でアクセス

  • http://localhost:8000 にアクセス
  • アクセスするたびに server1 server2 のどちらかが表示される

停止

$ docker-compose down

めも

各サーバへの接続

$ docker exec -it <コンテナ名> /bin/ash

nginx:alpineを使っているので /bin/bash でなく /bin/ash

ログ確認

$ docker logs -tf <コンテナ名> で各サーバのログが見れる

最後に

とりあえず超簡易的に作成

nginxでのロードバランシング設定など学ぶのに使っていく

へっぽこエンジニアなので実務で触ることは今の所ないが知っておかないと余計なことに困るので

とりあえずコレだけはやっておきたいGit初期設定

Git初期設定

ssh接続

cd ~/.ssh
ssh-keygen -t rsa

下記みたくなんか聞かれるが3回Enterでよい
(1つ目が鍵の名前,2つ目、3つ目はパスフレーズの設定)

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

鍵が生成されたら公開鍵をクリップボードにコピー
例) vim id_rsa.pubで開いてssh-rsa含めて全てコピー

https://github.com/settings/ssh にアクセス

画面右上の「Add SSH key」からコピーした公開鍵を登録

git config系

ユーザ名/メアド登録

git config --global user.name "<user_name>"
git config --global user.email "address@example.co.jp"

色付け

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto

push方式

git config --global push.default simple

改行コードをCRLFに変更しようとするのを阻止

git config --global core.autoCRLF false

git関連パッケージ

git-completion

gitコマンドを補完
- 下記コマンド実行

cd ~/
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
mv git-completion.bash .git-complation.bash
source .git-complation.bash
  • ~/.bash_profile に下記を追加
if [ -f ~/.git-completion.bash ] ; then
  . ~/.git-completion.bash
fi

上記でブランチ名がうまく補完されなかった場合↓(動くとは言ってない)

rm .git-complation.bash
find / -name git-completion.bash
cp <findコマンドで見つかったパス> ~/.git-completion.bash
source .git-complation.bash

git-prompt

プロンプトに現在のブランチを表示

cd ~
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
mv git-prompt.sh .git-prompt.sh
vim .bashrc

末尾に下記を追加

if [ -f ~/.git-prompt.sh ]; then
    source ~/.git-prompt.sh
    PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
fi

gitコマンド追加(エイリアス)

logをいい感じのグラフで表示

cd ~/
vim .gitconfig

末尾に下記を追加(既にエイリアス登録している場合はそこに)

[alias]
lol = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
lola = log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

個人環境依存の設定ファイルをgit管理から外す

  • IDEの設定ファイル等、Git管理下から除外したいファイルを以下に記述
vim ~/.gitignore_global

例)

# .gitignore_global
# ここに個人環境依存の設定ファイル等を記述
.ftpconfig
  • 上記ファイルをgitが見てくれるように設定
git config --global core.excludesfile $HOME/.gitignore_global

設定されると.gitconfigに下記が追加される

[core]
    excludesfile = /home/${USERNAME}/.gitignore_global

vim-plugが無かったらインストールさせる

vim-plugが無かったらインストールするように設定してみた

なぜ

  • サーバ毎に都度インストールするのだる〜い

なにするの

  • vimrcに「vim-pulgが無かったらインストールする」という設定を書く

どうやって

コレ↓をvimrcに書く

" install vim-pulg                                                                                                                                        
if has('vim_starting')
  set rtp+=~/.vim/plugged/vim-plug
  if !isdirectory(expand('~/.vim/plugged/vim-plug'))
    echo 'install vim-plug...'
    call system('mkdir -p ~/.vim/plugged/vim-plug')
    call system('git clone https://github.com/junegunn/vim-plug.git ~/.vim/plugged/vim-plug/autoload')
  end
endif

さいごに

コレでvimを立ち上げたときにvim-plugが無かったら自動でインストールされる

もっといい方法知っている人いたら教えていただきたいクオリティ・・・

vimrcをgitで管理

vimrcをgitで管理してみた

なぜ

  • サーバ毎に設定するの疲れる
  • 頭悪いから設定内容なんて覚えてられない

なにするの

  1. 管理用のvimrcを書く
  2. githubで管理
  3. vimrcに書いた設定を反映

どうやって

1. 管理用のvimrcを書く

# 管理用のvimrcを置くディレクトリを作る
mkdir ~/vimrc

# 管理用のvimrcを書く
vim vimrc

内容はとりあえず

コチラ↓の方のものを丸コピさせていただきました

何も考えず~/.vimrcにこれを書くんだ! 〜vim初心者によるvim初心者のためのvim入門〜 - Qiita

2. githubで管理

# 管理用vimrcを置いた場所に移動
cd ~/vimrc

# githubの設定〜プッシュ
git init
git remote add origin <任意の管理用リポジトリ>
git add vimrc
git commit -m "first commit"
git push -u origin master

3. vimrcに書いた設定を反映

# シンボリックリンクを貼る
ln -s ~/vimrc/vimrc ~/.vimrc

確認

vim ~/.vimrc

設定した内容が反映されて表示されるハズ

※内容を変更する場合は 管理用ファイルを編集する

さいごに

githubに置いたvimrcを別のマシン等で使う場合は

  1. リポジトリから git clone
  2. 設定を反映

これでどこでも同じ設定のvim使える!

そうgithubさえあればね(^ω^)

Rapberry Pi3 に RASPBIAN JESSIE Lite をインストール

f:id:SH000N:20170312192608p:plain

今回やりたいこと

  • Raspberry Pi3 に RASPBIAN JESSIE Lite で Webサーバをたてたい

背景

  • 以前CentOSで作った。が・・・
    • yumが動かなくなって拉致あかないので作り直し〜

アジェンダ

  1. RASPBIAN JESSIE Lite インストール
  2. 初期設定

手順

RASPBIAN JESSIE Lite インストール

イメージファイル取得

  • 公式から配布されてます→こちら
    • Download Zip

※ChoromeからだとZipファイルが壊れて解凍できなかった・・・

safariからDLしたら無事解決(僕の場合だけかもですが)

イメージファイルを解凍

  • Finder
  • ダウンロード
  • 取得したzipファイルをダブルクリック

アーカイブユーティリティで解凍しました

SDにイメージファイルを移動

  • 下記記事のイメージファイルを今回のものに置き換えればおk

shon-blo.hatenablog.com

起動準備

機器接続

  1. USBキーボード接続
  2. HDMIケーブルとディスプレイ接続
  3. microSDRaspberry Piに差し込む
  4. USBアダプタ接続

※USBアダプタを接続したらスグ電源が入ります

ログイン

電源が入ると

  • デイスプレイにラズパイのアイコン出現
  • その下に英字がバーー
  • しばらく待つとログインを求められるので
ユーザ名 パスワード
pi raspberry

でログイン

[pi@raspberry ~]$

と表示されてればログイン成功

初期設定その1

  • sudo raspi-configコマンドで設定開始

キーボード設定

(画質悪い・・・)

  • [Localisation Options] を選択 f:id:SH000N:20170312220517p:plain
  • [Change Keyboard Language] を選択 f:id:SH000N:20170312213421j:plain
  • [Generic 105-key (Intl)PC] を選択 f:id:SH000N:20170312213516j:plain
  • [Other] を選択
    • [Japanese] を選択
  • [Japanese]か[Japanese(OADG 109A)] を選択 f:id:SH000N:20170312213644j:plain
  • [The default for the keyboard layout] を選択 f:id:SH000N:20170312213922j:plain
  • [No compose key] を選択 f:id:SH000N:20170312214602j:plain

文字コード設定

  • [Localisation Options] を選択 f:id:SH000N:20170312220517p:plain
  • [Change Language] を選択 f:id:SH000N:20170312215209p:plain
  • [ja_JP.EUC-JP EUC-JP]と[jp_JP.UTF-8 UTF-8]を選択 f:id:SH000N:20170312215340p:plain
  • [ja_JP.UTF-8]を選択 f:id:SH000N:20170312215626p:plain

タイムゾーン設定

  • [Localisation Options] を選択 f:id:SH000N:20170312220517p:plain
  • [Change Timezone]を選択 f:id:SH000N:20170312220153p:plain
  • [Asia]を選択 f:id:SH000N:20170312220100p:plain
  • [Tokyo]を選択 f:id:SH000N:20170312220304p:plain

ディスク拡張

  • [Advanced Options]を選択 f:id:SH000N:20170312220750p:plain
  • [Expand Filesystem]を選択 f:id:SH000N:20170312220919p:plain

SSH設定

  • [Interfacing Options]を設定 f:id:SH000N:20170312221246p:plain
  • [P2 SSH]を選択 f:id:SH000N:20170312221352p:plain
  • [Yes]を選択 f:id:SH000N:20170312221500p:plain

wi-fi country 設定

  • [Localisation Options] を選択 f:id:SH000N:20170312220517p:plain
  • [Change Wi-fi Country]を選択 f:id:SH000N:20170312221708p:plain
  • [Japan]を選択 f:id:SH000N:20170312221800p:plain

その他(任意)

  • パスワード設定
    • [Change User Password]を選択 f:id:SH000N:20170312222001p:plain
    • あとはよしなに
  • ホスト名変更
    • [Hostname]を選択 f:id:SH000N:20170312222107p:plain
    • あとはよしなに

初期設定その1終了

  • [Finish]を選択 f:id:SH000N:20170312222817p:plain
  • 再起動するか聞かれるので [yes] を選択 f:id:SH000N:20170312222912p:plain

初期設定その2

wi-fi 設定

  • アクセスポイントを確認
    • sudo iwlist wlan0 scan | grep ESSID
  • 以下コマンドのは自身が設定するアクセスポイントのを
    • sudo sh -c 'wpa_passphrase <SSID> <Password> >> /etc/wpa_supplicant/wpa_supplicant.conf'
  • 設定ファイルを開く
    • sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
  • 下記のようにファイルに追記
    • proto key_mgmt pairwise auth_alg を足せば良いはず
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
        ssid="aterm-155704-g"
        psk="2967ABCDEF"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        auth_alg=OPEN
}
  • 再起動
    • sudo reboot
  • 再度ログインしたら pingコマンド等で接続確認
    • 例) ping yahoo.co.jp
  • 無事アクセスされていればおk(pingcontrol + C で停止)

ホスト名でアクセスできるように設定

  • avahiをインストール
    • sudo apt-get install avahi-daemon
  • /etc/hostnameを編集
    • 使いたいホスト名に変更(デフォルトはraspberry(なはず))
  • /etc/hostsを編集
    • /etc/hostnameでつけた名前に合わせる
  • 再起動
    • sudo reboot

sshで接続

  • ssh pi@raspberryでアクセスできるはず

最後に

  • たぶんこれで全部だけど、一気にやって後から書いたから抜けてるものあるかも

【Mac】Raspberry Pi 3 に CentOS7 を入れてみた ④ 〜ssh接続〜

Raspberry Pi 3 Model B (Element14)

今回やりたいこと

macからsshで接続

背景

ずっとラズパイにディスプレイとキーボードつけて操作するのもねー

んじゃsshで接続するっしょ

手順

ssh接続

現在の接続状態を確認

# nmcli d
DEVICE  TYPE      STATE        CONNECTION     
wlan0   wifi      connected    ********** 
eth0    ethernet  unavailable  --             
lo      loopback  unmanaged    --

connectedになっているデバイスで次のコマンドを実行

ipを確認

# nmcli d show wlan0
==中略==
IP4.ADDRESS[1] : 192.168.1.6/24
==以下略==

IP4.ADDRESS[1]の値をメモっておく

macからssh接続

macでターミナルを開く

先ほどメモしたIPで下記コマンドを叩く

$ ssh root@192.16.1.6

パスワードを求められるので入力

root@192.168.1.6's password: 

表記がこうなれば成功↓

[root@centos-rpi3 ~]# 

最後に

CentOSをシャットダウン

# shutdown -h now

ラズパイ本体の緑のピカピカ〜が消えたらシャットダウン完了?

一度全ての機器を本体から取り外し

再度USBアダプタだけつないで起動

sshで接続できたら完璧!

ラズパイをすっきり綺麗な状態で置いておけます←

完了

これで次回からmacのみで作業できます

前の記事

shon-blo.hatenablog.com

【Mac】Raspberry Pi 3 に CentOS7 を入れてみた ③ 〜CentOS起動〜

f:id:SH000N:20161026015640j:plain

今回やること

背景

僕が馬鹿すぎて「よっしゃ遊べるドン!」と思ったら・・・

  • 変なシグナルビンビンwなんぞwww
    • コマンド打つ隙がないorz
    • マウス抜いたら直った
  • とりあえずREADME開く
    • :q!が打てぬ
    • 閉じれぬ
  • パーティション拡張muzui(; ;)
  • なぬ?もしやwifi拾えない???

...etc

とにかくいろいろ困ったので

起動から初期設定まで一気にやります

手順

Raspberry Pi起動

起動準備

機器接続

  1. USBキーボード接続
  2. LANケーブル接続
  3. HDMIケーブルとディスプレイ接続
  4. microSDをRaspberry Piに差し込む
  5. USBアダプタ接続

※USBアダプタを接続したらスグ電源が入ります

※必要のないもの(主にマウス)刺しとくと後でビビりますよ(笑)

ログイン

電源が入ると

  • デイスプレイにラズパイのアイコン出現
  • その下に英字がバーー
  • しばらく待つと下記が表示される
CentOS Linux 7 (Core)
centos-rpi3 login: 

上記が表示されたら

ユーザ名 root
パスワード centos

でログインできます

[root@centos-rpi3 ~]#

と表示されてればログイン成功

キーボード設定

09キー日本語レイアウトのキーボードの設定

# localectl set-keymap jp106
# localectl set-keymap jp-OADG109A

System Localeも変更

(コンソールに日本語表記が欲しい方のみ)

# localectl set-locale LANG=ja_JP.utf8

確認

# localectl

System Locale: LANG=ja_JP.utf8
       VC Keymap: jp-OADG109A
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

上記のようになっていればおk

パーティション拡張

Rootパーティションのサイズ拡張

現状を確認

# df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       2.0G  682M  1.2G  38% /
devtmpfs        459M     0  459M   0% /dev
tmpfs           463M     0  463M   0% /dev/shm
tmpfs           463M  6.2M  457M   2% /run
tmpfs           463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1  300M   66M  235M  22% /boot
tmpfs            93M     0   93M   0% /run/user/0

2Gしかない( ;´Д`)

ので、拡張していく

1.partedコマンドを叩く

# parted /dev/mmcblk0

GNU Parted 3.1
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) 

2.pと打つ

(parted) p

Model: SD SA64G (sd/mmc)
Disk /dev/mmcblk0: 61.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  316MB   315MB   primary  fat16           lba
 2      316MB   852MB   537MB   primary  linux-swap(v1)
 3      852MB   3000MB  2147MB  primary  ext4

(parted)

3.rm 3と打つ

(parted) rm 3 

Error: Partition(s) 3 on /dev/mmcblk0 have been written, but we have been unable to inform the kernel of the change,
probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now
before making further changes.

Ignore/Cancel?

4.iと打つ

Ignore/Cancel? i

(parted)

5.pと打つ

(parted) p                                                                

Model: SD SA64G (sd/mmc)
Disk /dev/mmcblk0: 61.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End    Size   Type     File system     Flags
 1      1049kB  316MB  315MB  primary  fat16           lba
 2      316MB   852MB  537MB  primary  linux-swap(v1)

(parted)

6.mkpart primary 852M 32Gと打つ

61.9Gと記載されているサイトしか見つからなかったが、今回僕が使ったmicroSDが32Gだからか、ずっとエラー返ってきてて、32Gにしたら通りました

(parted) mkpart primary 852M 32G

Error: Partition(s) 3 on /dev/mmcblk0 have been written, but we have been unable to inform the kernel of the change,
probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now
before making further changes.

Ignore/Cancel?

7.iと打つ

Ignore/Cancel? i                                                          

(parted)

8.pと打つ

(parted) p                                                                

Model: SD SA64G (sd/mmc)
Disk /dev/mmcblk0: 61.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  316MB   315MB   primary  fat16           lba
 2      316MB   852MB   537MB   primary  linux-swap(v1)
 3      852MB   61.9GB  61.1GB  primary  ext4

(parted)

9.quitと打つ

(parted) quit                                                             

Information: You may need to update /etc/fstab.

再起動

# reboot

※まだ完了ではありません

ファイルシステム拡張

# resize2fs /dev/mmcblk0p3

resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mmcblk0p3 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 8
The filesystem on /dev/mmcblk0p3 is now 14910208 blocks long.

拡張されたか確認

# df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        32G  689M   53G   2% /
devtmpfs        459M     0  459M   0% /dev
tmpfs           463M     0  463M   0% /dev/shm
tmpfs           463M  6.1M  457M   2% /run
tmpfs           463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1  300M   66M  234M  22% /boot
tmpfs            93M     0   93M   0% /run/user/0

rootのとこのサイズが2Gから変わっていればおk

NTP設定

時間を調整する

NTPをインストール

# yum install -y ntp

vi でntp.confを変更

# vi /etc/ntp.conf 

既存の設定をコメントアウトして下記の感じで追記

#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp

ntpdを有効化して、タイムゾーンを変更

# systemctl enable ntpd
# systemctl start ntpd
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
cp: overwrite '/etc/localtime'? y

# date
  <現在の時刻が出力される>

出力された時刻があっていればおk

Wifi設定

Wifiを拾う準備

現状確認

# nmcli d

DEVICE  TYPE      STATE         CONNECTION 
eth0    ethernet  connected     eth0       
lo      loopback  unmanaged     -- 

wlan0というのが認識されていれば接続可能

当然この時点では認識されていない

まずgitをインストール

# yum -y install git

githubから必要なFirmwareをダウンロード

# git clone https://github.com/RPi-Distro/firmware-nonfree.git

適切な場所へ配置

# mv /lib/firmware/brcm{,.org}
# cp -R firmware-nonfree/brcm80211/brcm /lib/firmware/brcm

rpi-updateをダウンロード

# curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update

ダウンロードしたファイルの権限変更

# chmod +x /usr/bin/rpi-update

rpi-update実行

# rpi-update

再起動

# reboot

確認

# nmcli d

DEVICE  TYPE      STATE         CONNECTION 
eth0    ethernet  connected     eth0       
wlan0   wifi      disconnected  --         
lo      loopback  unmanaged     -- 

wlan0が認識されていればおk

wifi設定

アクセスポイント検索

# nmcli d wifi
  <アクセスポイント一覧が出力>

接続

# nmcli d wifi connect <アクセスポイント名> password <アクセスポイントのパスワード>

確認

# nmcli d

DEVICE  TYPE      STATE      CONNECTION 
eth0    ethernet  connected  eth0       
wlan0   wifi      connected  <アクセスポイント名>    
lo      loopback  unmanaged  --  

wlan0のステータスがconnectedになっていればおk

初期設定完了

じゃなかたです

sshで接続してない

てことで

次回は・・・

sshMacからアクセスします

次の記事

==作成中==

前の記事

shon-blo.hatenablog.com