dockerでnginxのロードバランシングを試す
dockerでnginxのロードバランシング
実際に動かしたコードはこちら
前提
- 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で管理してみた
なぜ
- サーバ毎に設定するの疲れる
- 頭悪いから設定内容なんて覚えてられない
なにするの
- 管理用のvimrcを書く
- githubで管理
- 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を別のマシン等で使う場合は
これでどこでも同じ設定のvim使える!
そうgithubさえあればね(^ω^)
Rapberry Pi3 に RASPBIAN JESSIE Lite をインストール
今回やりたいこと
- Raspberry Pi3 に RASPBIAN JESSIE Lite で Webサーバをたてたい
背景
- 以前CentOSで作った。が・・・
yum
が動かなくなって拉致あかないので作り直し〜
アジェンダ
- RASPBIAN JESSIE Lite インストール
- 初期設定
手順
RASPBIAN JESSIE Lite インストール
イメージファイル取得
- 公式から配布されてます→こちら
- Download Zip
※ChoromeからだとZipファイルが壊れて解凍できなかった・・・
→safariからDLしたら無事解決(僕の場合だけかもですが)
イメージファイルを解凍
- Finder
- ダウンロード
- 取得したzipファイルをダブルクリック
でアーカイブユーティリティで解凍しました
SDにイメージファイルを移動
- 下記記事のイメージファイルを今回のものに置き換えればおk
起動準備
機器接続
- USBキーボード接続
- HDMIケーブルとディスプレイ接続
- microSDをRaspberry Piに差し込む
- USBアダプタ接続
※USBアダプタを接続したらスグ電源が入ります
ログイン
電源が入ると
- デイスプレイにラズパイのアイコン出現
- その下に英字がバーー
- しばらく待つとログインを求められるので
ユーザ名 | パスワード |
---|---|
pi | raspberry |
でログイン
[pi@raspberry ~]$
と表示されてればログイン成功
初期設定その1
sudo raspi-config
コマンドで設定開始
キーボード設定
(画質悪い・・・)
- [Localisation Options] を選択
- [Change Keyboard Language] を選択
- [Generic 105-key (Intl)PC] を選択
- [Other] を選択
- [Japanese] を選択
- [Japanese]か[Japanese(OADG 109A)] を選択
- [The default for the keyboard layout] を選択
- [No compose key] を選択
文字コード設定
- [Localisation Options] を選択
- [Change Language] を選択
- [ja_JP.EUC-JP EUC-JP]と[jp_JP.UTF-8 UTF-8]を選択
- [ja_JP.UTF-8]を選択
タイムゾーン設定
- [Localisation Options] を選択
- [Change Timezone]を選択
- [Asia]を選択
- [Tokyo]を選択
ディスク拡張
- [Advanced Options]を選択
- [Expand Filesystem]を選択
SSH設定
- [Interfacing Options]を設定
- [P2 SSH]を選択
- [Yes]を選択
wi-fi country 設定
- [Localisation Options] を選択
- [Change Wi-fi Country]を選択
- [Japan]を選択
その他(任意)
- パスワード設定
- [Change User Password]を選択
- あとはよしなに
- ホスト名変更
- [Hostname]を選択
- あとはよしなに
初期設定その1終了
- [Finish]を選択
- 再起動するか聞かれるので [yes] を選択
初期設定その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(
ping
はcontrol + 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接続〜
今回やりたいこと
背景
ずっとラズパイにディスプレイとキーボードつけて操作するのもねー
んじゃ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のみで作業できます
前の記事
【Mac】Raspberry Pi 3 に CentOS7 を入れてみた ③ 〜CentOS起動〜
今回やること
- 前回作成したCentOSの入ったmicroSDを使ってRaspberry Pi起動
- キーボード設定
- パーティション拡張
- NTP設定
- Wifi接続設定
背景
僕が馬鹿すぎて「よっしゃ遊べるドン!」と思ったら・・・
- 変なシグナルビンビンwなんぞwww
- コマンド打つ隙がないorz
- マウス抜いたら直った
- とりあえずREADME開く
:q!
が打てぬ- 閉じれぬ
- パーティション拡張muzui(; ;)
- なぬ?もしやwifi拾えない???
...etc
とにかくいろいろ困ったので
起動から初期設定まで一気にやります
手順
Raspberry Pi起動
起動準備
機器接続
- USBキーボード接続
- LANケーブル接続
- HDMIケーブルとディスプレイ接続
- microSDをRaspberry Piに差し込む
- 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
# 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で接続してない
てことで
次回は・・・
次の記事
==作成中==