Pacemaker + Corosync on Ubuntu 14.04でHAクラスタを構成する
Ubuntu 14.04でPacemaker + Corosyncを用いてHAクラスタを組んでみたのでメモ。
Pacemakerとは
Linux-HA Japanさんが日本語情報をまとめています。
ざっくりいえば、
- Pacemaker... アプリやノードやネットワークといったリソースを監視
- Corosync... ノード同士を接続してクラスタを形成
という感じでしょうか。 歴史は以下のページに。
第1回 Pacemakerの歴史を見てみよう!:Pacemakerでかんたんクラスタリング体験してみよう!|gihyo.jp … 技術評論社
この記事で書くこと
- PacemakerとCorosyncをインストール
- Corosyncの初期設定(ノード同士が繋がるのを確認するところまで)
リソースの設定などは書きません。
参考にしたURL
環境
- Ubuntu 14.04がインストールされたサーバ x3
- 適当なサーバ2台以上あればOK
インストール(全ノード)
ClusterLabsのQuickStartを参考にやっていきます。 まずはaptを使ってインストールしていきましょう。
# apt install pacemaker corosync fence-agents
Corosyncの設定(全ノード)
クラスタ制御ツールCorosyncの設定をしていきます。
/etc/corosync/corosync.conf
に追記した部分は以下の通り。
# editor /etc/corosync/corosync.conf totem { ... cluster_name: mycluster transport: udpu interface { ... bindnetaddr: 198.18.249.0 ... } } ... quorum { ... two_node: 1 wait_for_all: 1 last_man_standing: 1 auto_tie_breaker: 0 } ... logging { ... debug: on ... } nodelist { node { ring0_addr: controller-ha nodeid: 101 } node { ring0_addr: compute01 nodeid: 102 } node { ring0_addr: 198.18.249.121 nodeid: 103 } }
ポイント
bindnetaddr: 198.18.249.0
ring0_addr: controller-ha
ring0_addr
の値にはIPアドレス or 名前解決可能なホスト名を入力。
nodeid: 101
- 1つのノードに一意の番号を割り当てる。nodeidが被っているとクラスタが組めない。
この設定を全ノードに行います。1つのノードで設定して他ノードにコピーすればいいのか。
起動(全ノード)
Corosync起動→Pacemaker起動の流れ。
# corosync # service pacemaker start
なぜかservice corosync start
が何も反応なく、しかたなくプログラムを直接実行するという。。。
CorosyncがうまくいかないとPacemakerは落ちます。
クラスタ確認
本当にクラスタが組めているか確認します。操作はどれか1つのノードで行います。
# crm_mon Last updated: Sun Dec 13 11:44:44 2015 Last change: Sat Dec 12 16:17:24 2015 via crm_attribute on controller-ha Stack: corosync Current DC: controller-ha (101) - partition with quorum Version: 1.1.10-42f2063 3 Nodes configured 0 Resources configured Online: [ compute01 198.18.249.121 controller-ha ]
設定したノードがすべてOnlineとなっていればOKです。
おまけ:Pacemakerのログを出力する
ログはdebug出力してほしい…君のすべてを知りたい…ということでおまけです。 (すべてを知りたければソースコードからお付き合いでしょうか。あるいは開発者と仲良くなることでしょうか。)
Pacemakerのログレベルについては/etc/default/pacemaker
を編集することで設定できます。例によって変更点のみ。
# editor /etc/default/pacemaker export PCMK_debug=yes export PCMK_debugfile=/var/log/pacemaker.log export PCMK_logpriority=debug
PCMK_logpriority
はなんとなく設定しましたが、syslogに出力するログレベルなのでなくてもいいかもです。
おしまい
「Corosyncの設定を全ノードしなきゃいけないの?スケールアウトするとき大変だ…」という人にはpacemaker-remoteというものもあります。 肝心のリソース設定は他の記事にお任せします…と思ったけれど、大体がCentOSでやっていてUbuntuでの日本語記事ってあんまりない気がするので、そのうちApacheのHAの設定やってみます。
ボーイミーツガール
こんにちは。
これは
この記事はwhywaita Advent Calendar 2015 12日目の記事です。 昨日は id:neotaso さんの 第1.0羽 「ひと目で、尋常でない第1羽と見抜いたよ」(Advent Calendarの記事) - neotaso’s blog でした。私は青山さん?という女性がすきです。あとは1羽のお風呂シーンで登場する"でっていう"ニキもすきです。
はじめに
このアドベントカレンダーのほとんどは、whywaita氏の良さを紹介するものか、氏に関係ない記事になるだろうと思っています。
せっかくなので彼に対する恨みつらみ妬み嫉みとかあることないこと適当に書いてみようと思います。
whywaita 女の子説
インターネットのみなさん、whywaitaという人間はおそらく女の子です。
私が彼を女の子と呼ぶにはいくつか理由があります。
1. にゃーん
(ツイ略)
女の子がいうとかわいい。
女の子がいうとかわいい。。。
でも「にゃーん」がありなら、犬っぽく「クゥーン」とか言ってもかわいいとおもいますよ、まる。
2. 手を振る
現実世界で彼と会うと、まず手を振ってくれます。 知人を見つけると皇族ばりに手を振ります。 相手がそれに気付かないと「気付いてくれなかった・・・」と寂しそうにつぶやきます。
3. 字がきれい
とても字がきれいです。読みやすいです。字が丸っこくてかわいらしいです。
ラブレターでも書かれたらおしまいです。要注意です。
4.「もっとお話したいなー」
なんか細かい部分は忘れましたが、ときどき「お前は彼女か!?」とツッコミを入れたくなるときがあります。
彼が姫だとしたら囲ってる男子はみなコロッと落ちてしまいます。危険です。
5. 女性声優の真似をする
whywaitaは女性声優の演技をシャドーイングします。早見さんのラジオのジングルをシャドーイングするのやめてください。怒りますよ。
6. 女の子役が得意
男を落とすテクニックを所持。
www.slideshare.netというわけで
whywaitaは女の子です。
なんか他にも書こうとしてたことがあったような気がする。カラオケいくと低い音域から高い音域まで出るとか。ダイエットしろとか。痩せないとインターネッツ取り上げるぞとか。まあいいや。おしまい。
July Tech Festa 2015に行ってきました
JTF2015 (July Tech Festa) に行ってきました。
自分はお昼から参加しました。参加費1000円(早割だと500円)でフリードリンク、お菓子食べ放題、お弁当支給(ハンバーグ弁当とかタコライスとかいろいろあった)。非常に素晴らしいサービスでした。
どのセッションもとても興味深かったです。もっといろいろ見たかった。
以下、セッションのメモ。
Modern DevOps with Mackerel
by はてなCTO 田中さん
DevOpsとは?
- CommunicationやCollaboration、Automationなどを軸にしたソフトウェア開発
CommunicationやCollaboration
- アプリケーションエンジニアとインフラエンジニアの協調作業
チームの仲が悪くなる
- それぞれがそれぞれの目標に最適化されてしまっている
- 同じ目標に向くことが大切
Integraton, Automation, Measurement
- 脱職人技*脱属人性
- 効率向上
- 再現を容易に
- 誰かがやったことをそのまま再現できると、脱属人性につながる
Modern DevOpsとは?
- 高速なテスト、デプロイ
- インフラの自動化と効率向上
- Immutable Infrastructure
- Infrastructure as Code
- 各社様々な取組
インフラの自動化と効率向上
- 構築(新規、変更)あれいれたい!減らしたい!
- 観測、監視
ここ2,3年で流行してるのが、下の2つ。
Immutable Infrastructure
- できるだけサーバに状態を持たせない。
- 可能なものと不可能なものがある。不可能な例→DB
- Immutableにできれば考えることが減る。
- 簡単に作り直せるように
- The Twelve-Factor App(Heroku)の考え方
Infrastructure as Code
- インフラの設定をコードで管理
- 長いスパンでサーバを管理するには必須になってくる。
インフラ構築の道具
- プロビジョニング
- ansible/chef/puppet
- CI
- serverspec
- デプロイ
- Capistranoなど
- AWSだとCloud Formationとか
デプロイの高速化
- CIの活用
- Jenkins/CI環境でイメージを自動作成
- Docker, AWSならamiを用意しておくことで容易にデプロイ
- ChatOps
Staging環境への自動デプロイ
- 自動デプロイ
- git pushトリガでproxy設定まで自動化
- 自動停止
- ゴミを残さない
インフラ状態の一元管理
Mackerelとは
インフラの状態をAPIで取得可能
- ホストの状態の更新はPOSTで出来る
tmux-sshでまとめてssh
Capistrano連携
- deploy.rbにIPアドレス等をハードコーディングしなくていい
Ansible Dynamic Inventory
Webhook+hubot
- アクションの自動化
- アラート→再起動、など
AutoScaling
- mackerle-agentを組み込むと自動的に反映される
監視ルールAPI
- 近日公開予定
- 監視ルールのCRUDをサポート
- (CRUD... http://e-words.jp/w/CRUD.html)
- GitHub->Mackerel 反映
- Mackerel->GitHub 書き戻し
開発ツールのクラウド化
- Github,TravisCI,CircleCI
実行環境もクラウドへ
- AWS、GCEなど
運用ツールもクラウドに
- infrastructure as codeの推進
- インフラの一元管理DBとしてのMackerel
ひしめき合うオープンソースPaaSを徹底解剖! PaaSの今と未来
by PaaS勉強会 草間さん
OpenPaaS
Cloud Foundry
-
- Public PaaS
- IBM Bluemixなど
- NTT-Com Cloundn PaaS
- Private PaaS
- Public PaaS
DEMO
- phpファイルをCloud Foundry上にデプロイ
$ cf push <app-name>
別のPaaSサービスに向ける
$ cf api <APIサーバ>
- 今回はcloudnからbluemixにAPIを変更した。
スケールも簡単
$ cf scale <app-name> -i <count of instance> -m <memory size>
CFのメリット
- ベンダーロックインが防げる
- たくさんのベンダーさんがサービスを提供している
CFのデメリット
オンプレにCFのデプロイが死ぬほど大変(1日かかったり)
Dockerは使えないの?
- CFはDocker使ってない。次期バージョンでDocker imageサポート。
Dockerが使えるPaaSはないの?
- OpenShift
OpenShift
- RedHatが開発
- OpenShift v3...Docker PaaSとして生まれ変わった。今までを捨てた。
- KubernatesをコアにしたPaaS
- Kubernatesの開発にRedHatが深くかかわっている。Kuberの概念を取り込み
- JSONでいろいろ定義。長い。その分いろいろ設定できる。
- Webhookにも対応。これはPaaSの中ではOpenShiftのみ。
- 開発早い。
- KubernatesをコアにしていてPaaSっぽさがない?
Deis
Docker + CoreOSをベースとしたPaaS
DEMO
$ deis create
- git上にリモートrepoが設定される。
$ deis scale web=5
- スケーリング
- herokuライク。
- スケジューリングが遅い。
Flynn
- Docker PaaS
- Heroku CloneのDokkuの開発者も関与
- DEMO
$ flynn create
- git上にリモートrepoが設定される。
Heroku互換のBuild Packを使ってる
メリット
- シンプルかつモジュラーでカスタマイズしやすい
- スケジューリングもDeisよりはやめ
- スケール早い(3→5台で、2.2秒)
- デメリット
- 開発の継続力に不安
- どこまでメンテし続けられるか
- スケジューラが賢くない(デプロイ先をランダムで決める。ただその分早い)
- 開発はほとんどGo。流行り。
4つ見てみて
PaaS使いたいなら
- まずはPublic PaaS
Private PaaS構築は?
- あまり実例ない。
- 準備が死ぬほど大変。
- 自由があまり効かない。
優れた仕組みを積極的に取り入れていくのは大切。
- Docker
- 構成管理ツール
- Fluentd
- など
- ただ規模が大きくなるにつれ複雑になり、メンテが出来なくなってくる。引継ぎコストも無視できなくなる。
- 自前で似たような構成を作るならOpenPaaSを採用してダクトテープ(継ぎはぎのテープ)を捨てませんか。
OpenPaaSの未来
- ネットワーキングの強化
- あらゆるサービスの「ハブ」に
Redmine構築後のDBの文字コードをutf8mb4に変換して絵文字に対応する
動機
Redmine上で絵文字を記入し保存しようとすると…
ゴール
参考リンク
- MySQLでテーブルとカラムの文字コードを一括変更する - Be an Idealistic Realist
- ActiveRecordをutf8mb4で動かす - Qiita
- MySQL(InnoDB) で "Index column size too large. The maximum column size is 767 bytes." いわれるときの対策 - かみぽわーる
前提
- これの続き
- Redmine を LXC on Ubuntu 14.04で動かす - Dig that groovy!
- といってもあまりコンテナうんぬんは関係ない
- MySQL 5.5.43-0ubuntu0.14.04.1
余談
- RedmineはRails + ActiveRecordなアプリケーションなので、似たような構成ならできるのではないでしょうか。
DBのバックアップ
Redmineを停止する
私の環境ではRedmineはnginx+Passenger上で動いているため、nginxを再起動する。
# service nginx stop
mysqlを停止する
# service mysql stop
データのバックアップ
# cp -rp /var/lib/mysql <バックアップ先>
my.cnfの変更
以下を[mysqld]セクションへ追記。
[mysqld] character-set-server = utf8mb4 innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix
(innodb_large_prefixオプションによって、後述するキープレフィックスの制限を回避し3072バイトまで拡張できる)
mysqlを起動する
# service mysql start
DB情報を変数にあらかじめ追加する
# MYSQL_DB=db_redmine # MYSQL_USER=redmine # MYSQL_PASS=password # CONVERT_SCRIPT_FILE=convert_script
文字コード変換用スクリプトの作成
# (echo 'alter database `'"$MYSQL_DB"'` default character set utf8mb4;'; mysql -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "show tables" --batch --skip-column-names | xargs -I{} echo -e 'alter table `'{}'` ROW_FORMAT=DYNAMIC;\nalter table `'{}'` convert to character set utf8mb4;') > $CONVERT_SCRIPT_FILE
以下のような内容のconvert_script
ファイルが出来ている。
alter database `db_redmine` default character set utf8mb4; alter table `attachments` ROW_FORMAT=DYNAMIC; alter table `attachments` convert to character set utf8mb4; alter table `auth_sources` ROW_FORMAT=DYNAMIC; alter table `auth_sources` convert to character set utf8mb4; alter table `boards` ROW_FORMAT=DYNAMIC; alter table `boards` convert to character set utf8mb4; ...
- 同じテーブルに対して二度処理を行っているが、それぞれ。
スクリプトの実行
# mysql -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB < $CONVERT_SCRIPT_FILE
エラーが起こらなければOK。
RedmineのDB設定の変更
# vim /path/to/redmine/config/database.yml
encoding: utf8 ↓ encoding: utf8mb4
Redmineの再起動
私の環境ではnginx+Passenger上で動いているためnginxを再起動する
# service nginx restart
おしまい
やはりナウでヤングで積極的でアグレッシブで柔軟でフレキシブルなマインドを持つ若者なので絵文字が使えると落ち着くのである。
thx! id:kuro_m88
LXCの非特権コンテナの移行
ゴール
前提
- これの続き
- OS: Ubuntu 14.04 Server (新旧両方とも)
- ユーザ名: container(新旧両方ともに存在している)
- 移行コンテナ
参考リンク
旧サーバでやること
コンテナの停止
$ lxc-stop -n mysql $ lxc-stop -n redmine
コンテナをtarで固める
$ cd /home/container/.local/share/lxc $ sudo tar zcvf $HOME/mysql.tar.gz mysql $ sudo tar zcvf $HOME/redmine.tar.gz redmine
↑sudoつけておく。使用するソフトウェアによっては自動的に独自のユーザを作ることもあり、所有者がバラバラでも正常に固めるため。
tarの転送
$ scp mysql.tar.gz redmine.tar.gz container@{移行先ホストのIP}:
コンテナ用DHCPファイルも移行
$ scp /etc/lxc/dnsmasq.conf container@{移行先ホストのIP}:
新サーバでやること
tarの展開
$ mkdir -p /home/container/.local/share/lxc $ sudo tar --numeric-owner -xpzf /home/container/mysql.tar.gz -C /home/container/.local/share/lxc $ sudo tar --numeric-owner -xpzf /home/container/redmine.tar.gz -C /home/container/.local/share/lxc
↑sudoつけること!忘れると所有者情報が更新されてしまう。
パーミッションの設定
$ sudo chown :container /home/container/.local/share/lxc/{mysql,mysql/config} $ sudo chown :container /home/container/.local/share/lxc/{redmine,redmine/config}
↑.local/share/lxc/{mysql,redmine}
になるように配置できていればOK。いなければ適宜配置。
lxcインストール
非特権で動かせるように。DHCPの設定をしてる場合はそれもする。
コンテナで使用しているsub uid/gidを確認
# cat /home/container/.local/share/lxc/mysql/config | grep lxc.id_map lxc.id_map = u 0 165536 65536 lxc.id_map = g 0 165536 65536
sub uid/gidの追加
# sudo usermod -v 165536-231071 -w 165536-231071 container ↑確認したsub uid/gidから65535足した数値の範囲
おわり
移行完了。念のため一度再起動しておく。 確認として、移行先で
$ lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART -------------------------------------------------- mysql STOPPED - - NO redmine STOPPED - - NO
$ ls -l /home/container/.local/share/lxc/mysql total 16 drwxrwx--- 3 165536 container 4096 May 13 01:18 ./ drwxr-xr-x 9 container container 4096 May 18 21:51 ../ -rw-rw-r-- 1 container container 701 May 13 01:18 config drwxr-xr-x 21 165536 165536 4096 May 18 19:56 rootfs/
となっていればOK。ほかのユーザとsub uid/gidが被ることがあるが大丈夫なのかなあ…
Redmine を LXC on Ubuntu 14.04で動かす
ゴール
非特権コンテナ
- root権限でコンテナを走らせたくない
- http://d.hatena.ne.jp/defiant/20140419/1397838711
dnsmasqでコンテナに固定IP
Redmineが動く
- 今回は3.0.3を使用
使用した環境
簡単な流れ
作業ログ
コンテナ準備
パッケージの更新
$ sudo apt-get update && sudo apt-get -y dist-upgrade
タイムゾーンの設定
$ cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
/etc/timezoneの中身をAsia/Tokyoに変更
パスワード生成&アカウント作成
$ cat /dev/urandom | tr -dc '[:alnum:]' | head -c 8 && echo $ sudo adduser container
LXCインストール
sudo apt-get install -y lxc systemd-services
↑systemd-servicesがないと非特権で動作しなかった
このときのsubuid/subgid
$ cat /etc/subuid /etc/subgid ubuntu:100000:65536 container:165536:65536 ubuntu:100000:65536 container:165536:65536
lxc-usernetの設定
$ vim /etc/lxc/lxc-usernet $ cat /etc/lxc/lxc-usernet # USERNAME TYPE BRIDGE COUNT container veth lxcbr0 20
containerユーザに切り替え
ubuntu@pkmine:~$ sudo -i -u container container@pkmine:~$
一般ユーザでコンテナを扱えるようにする設定
container@pkmine:~$ mkdir -p .config/lxc container@pkmine:~$ cp /etc/lxc/default.conf .config/lxc/ container@pkmine:~$ vim .config/lxc/default.conf container@pkmine:~$ cat .config/lxc/default.conf lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx lxc.id_map = u 0 165536 65536 lxc.id_map = g 0 165536 65536 container@pkmine:~$
★最後の2行を追記。/etc/subuid, subgidの設定と合うように書く。
dnsmasqでコンテナに固定IPを降る設定
(containerユーザからログアウトしておく) 1.dnsmasq.confを読み込むようにする
ubuntu@pkmine:~$ sudo cp /etc/default/lxc-net{,.bak} ubuntu@pkmine:~$ vim /etc/default/lxc-net ubuntu@pkmine:~$ diff /etc/default/lxc-net{,.bak} 24c24 < LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf --- > #LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf ubuntu@pkmine:~$
2.DHCP情報を書く
ubuntu@pkmine:~$ vim /etc/lxc/dnsmasq.conf ubuntu@pkmine:~$ cat /etc/lxc/dnsmasq.conf dhcp-host=redmine,10.0.3.10 dhcp-host=mysql,10.0.3.11
コンテナ作成
containerユーザーで行う。ここではMySQLとRedmineを動かすためのコンテナを用意する。ディストリはホスト同様Ubuntu14.04を使用する。
$ lxc-create -n mysql -t download -- --dist ubuntu --release trusty --arch amd64 $ lxc-create -n redmine -t download -- --dist ubuntu --release trusty --arch amd64
コンテナ起動
sudo -i -u container
でユーザー切り替えを行うとコンテナが起動しなかったため、ssh container@localhost
としてログインし直すことで可能となった。
$ lxc-start -n mysql -d $ lxc-start -n redmine -d
-d
を付けることでデーモンとして起動してくれる。これを忘れるとフォアグラウンドで立ち上がってしまいログインプロンプトが出てくる。デーモンとして起動した場合は自動的にrootでログインされる。
Redmine用mysql構築
コンテナに入る
$ lxc-attach -n mysql root@mysql#
MySQLのインストールと初期設定
# apt-get update # apt-get install mysql-server mysql-client
- rootパスワードは空欄にした
# mysql_secure_installation - Enter current password for root (enter for none): [Enter] Set root password? [Y/n] Y -> password Remove anonymous users? [Y/n] ->[Enter] Disallow root login remotely? [Y/n] ->[Enter] Remove test database and access to it? [Y/n] ->[Enter] Reload privilege tables now? [Y/n] ->[Enter]
Redmine用DB作成と資格情報の設定
# mysql -uroot -p Enter password: mysql> create database db_redmine default character set utf8; mysql> grant all on db_redmine.* to redmine@localhost identified by 'password'; mysql> grant all on db_redmine.* to 'redmine'@'%' identified by 'password'; mysql> exit
my.cnf設定
# vim /etc/mysql/my.cnf
[mysqld]セクション内に
character-set-server=utf8
を追記。
また、
bind-address: 127.0.0.1
↓
#bind-address: 127.0.0.1
とする。
[mysql]セクション内に
default-character-set=utf8
を追記。
MySQLの再起動
# service mysql restart
コンテナ起動時に自動で実行されるようにする
# update-rc.d mysql defaults
確認
# mysql -uroot -p mysql> show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
Redmine 3.0.3 インストール
mysqlコンテナから抜け(シェルから抜ければOK)redmineコンテナに移る(lxc-attach -n redmine)。
必要となるパッケージのインストール
# apt-get update # apt-get install -y wget build-essential libffi-dev libyaml-dev zlib1g-dev openssl libssl-dev mysql-client libmysqlclient-dev libcurl4-openssl-dev curl
Rubyのコンパイル&インストール
# cd /opt # wget ftp://ftp.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz # tar zxf ruby-2.2.0.tar.gz # cd ruby-2.2.0 && ./configure && make && make install
使用するgemのインストール
# gem install bundle passenger --no-ri --no-rdoc
Redmineダウンロード&展開
# cd /opt # wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz # tar zxf redmine-3.0.3.tar.gz
DB接続設定
# cd redmine-3.0.3/config # cp database.yml{.example,} # vim database.yml
↓のように変更
production: adapter: mysql2 database: db_redmine host: 10.0.3.11 username: redmine password: "password" encoding: utf8
Redmineに必要なライブラリのインストール
# cd /opt/redmine-3.0.3/ # bundle install --without development test --path vendor/bundle
もしrmagickが必要と怒られた場合
# apt-get install imagemagick libmagickcore-dev libmagickwand-dev # bundle install --without development test --path vendor/bundle
IPAフォントのインストール
# apt-get install fonts-ipafont
Redmine設定
# cp configuration.yml{.example,} # vim configuration.yml
↓追記部分(行頭の数字は行数を表す)
82 autologin_cookie_name: redmine_autologin 83 autologin_cookie_path: /redmine/ 84 autologin_cookie_secure: true 197 rmagick_font_path: /usr/share/fonts/truetype/fonts-japanese-gothic.ttf
Redmine初期設定
# bundle exec rake generate_secret_token # RAILS_ENV=production bundle exec rake db:migrate # bundle exec rake redmine:load_default_data RAILS_ENV="production"
↑3番目はデフォルトデータの読み込み。言語を聞かれるので"ja"を入力する。
Passengerのインストール
# gem install passenger --no-rdoc --no-ri # passenger-install-nginx-module
nginxをコンパイルしてもらう。/opt/nginxに展開してもらう。基本的にはずっとEnter。
Nginxの設定
# cd /opt/nginx/conf # vim nginx.conf
以下の通りに設定した。
server { ... location /redmine { index index.html index.htm; root /opt/redmine-3.0.3/; passenger_enabled on; passenger_base_uri /redmine; passenger_app_root /opt/redmine-3.0.3/; } ... }
nginxのinitスクリプトはどこかから落とす。 このあたりとか。 * https://gist.github.com/hisea/1548664
SSL通信の有効化
オレオレ証明書から始めてみる。
コンテナから抜け、ホスト上で操作する
nginxインストール
$ sudo apt-get install nginx
オレオレ証明書(自己署名証明書)の作成
$ sudo mkdir /etc/nginx/ssl $ sudo openssl req -new -x509 -sha256 -newkey rsa:2048 -days 365 -nodes -out /etc/nginx/ssl/nginx.pem -keyout /etc/nginx/ssl/nginx.key $ sudo chmod 700 /etc/nginx/ssl
Nginxコンフィグ
$ sudo vim /etc/nginx/sites-available/default-ssl
server { listen 443; server_name localhost; root html; index index.html index.htm; ssl on; ssl_certificate /etc/nginx/ssl/nginx.pem; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ =404; } include /etc/nginx/sites-available/default-location-ssl/*; }
↑default-sslはsites-enableにシンボリックリンクを張る
$ sudo vim /etc/nginx/sites-available/default
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; server_name localhost; location / { try_files $uri $uri/ =404; } include /etc/nginx/sites-available/default-location/*; }
不要なコメントアウトは見づらいので消しておく。
include対象のディレクトリを作成
# mkdir /etc/nginx/sites-available/default-location # mkdir /etc/nginx/sites-available/default-location-ssl
まずはsslの設定から
$ sudo vim /etc/nginx/sites-available/default-location-ssl/redmine
新規作成。
location /redmine { index index.html index.htm; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://10.0.3.10; proxy_redirect off; }
↑proxy_passの部分にはコンテナのIPアドレスを入れる。
httpアクセス時の設定
$ sudo vim /etc/nginx/sites-available/default-location/redmine
location /redmine { rewrite ^ https://$http_host$request_uri? permanent; }
SSL v3の無効化
$ sudo vim /etc/nginx/nginx.conf
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ↓ ssl_protocols TLSv1 TLSv1.1 TLSv1.2; (Poodle対策)
nginxの再起動
# service nginx restart
エラーが起きた場合は/var/log/nginx/以下参照。
おしまい
http://<サーバアドレス>/redmineにアクセスしてみるとhttpsに切り替わり、アクセスできるようになっている。
VMware ESXiにオンボードNIC I218-Vを認識させる
オンボードNICのドライバを読み込ませる
VMware KB: ホストのネットワーク カードが検出されない より
NICが認識されているかチェックする
~ # lspci -v | grep Ethernet 0000:00:19.0 Ethernet controller Network controller: Intel Corporation Ethernet Connection (2) I218-V 0000:05:00.0 Ethernet controller Network controller: Intel Corporation 82574L Gigabit Network Connection [vmnic0]
このとき"00:19"がPCIスロットとバス番号である。
NICのベンダーIDとデバイスIDを確認する
~ # lspci -n | grep 00:19 0000:00:19.0 Class 0200: 8086:15a1
ベンダーID…8086 デバイスID…15a1
VMware 互換性ガイドを確認する
VMware Compatibility Guide: System Search
なかった…けど
今回のI218-Vはサポートされていないようなので検索してみると、IntelのドライバをESXi用にビルドしたものを配布している方がいらっしゃいました。
ESXi5.1のドライバを作成してみる(intel I217/I218/82579LM/82574L編) | 環境さんぷる
ドライバのインストール
上のページではUSBメモリにコピーしているが、増設したNICは使えていたのでvSphere Clientを用いてデータストアにコピーした。 あとは上の記事の通りに行うと完了です。