April 4, 2015

Redmine をコンソールも見ずに一撃で SoftLayer にデプロイする

最近 SoftLayer が結構お気に入り。『SoftLayer といえばベアメタルがすごいんだよねー』という感覚の人が多いのかな。実際自分も触るまでそう思ってたし実際そうなんだけど。

けど、純粋に Virtual Server も結構使いやすいのね。AWS や OpenStack だとサーバのデプロイ時に #cloud-config で始まる cloud-init でいろいろカスタマイズしたりコマンド流したりするんだけど、これ結構ディストリビューションやバージョンよって方言が違ったり、OS の /etc/cloud の状態に左右されたりして辛い。

SoftLayer の場合、Provisioning Script というもので似たようなことができるんだけど、cloud-init とはちょっと違って、任意のスクリプトをダウンロードしてきて実行する、という塩梅なので、方言とか気にせず動くスクリプトをゴリゴリ書けて幸せ感ある。(まぁ cloud-init でも同じ動作させられるけどな。。。)

というわけでこの Provisioning Script で SoftLayer のマシンに一撃で Redmine をデプロイするスクリプトを書いた。ついでにみんな大好きオレオレ証明書の SSL がデフォルト有効じゃ。

やり方

Post Install Script

  • CentOS7.x minimal でデバイス(サーバ)をオーダーするなり、既存のデバイスの OS Reload をする
  • Post Install Script として上で登録したのを指定する
  • SSH Keys を指定する
  • 5〜10分くらい待つ
  • ブラウザでアクセスする

やっていること

  • ファイアウォールを設定する
  • ssh のパスワード認証を止める
    • SoftLayer では root パスワード有効な状態でデプロイされるのだけど、そのままだとめっさアタック来てヤなので鍵ログインのみにスクリプトで絞ってる
  • yum で必要そうなパッケージを導入
  • MariaDB のセットアップ
    • my.cnf
    • sha256sum と base64 で日付を捻ったパスワードを生成して /root/db_password.txt に保管
    • CREATE DATABASEGRANT
    • mysql_secure_installation 相当の設定 (test データベース消したりリモート root ログイン閉じたり)
  • gem install bundler の実施 (システム汚さないよう $HOME/.gem/ruby に入れてる)
  • Redmine のダウンロードと展開
    • database.yml , configuration.yml 生成
    • Unicorn 用に config.ru 修正
    • Unicorn 用の systemd スクリプトの生成
  • Nginx のセットアップ
    • el7 用の Nginx を nginx.org から引くための yum repo conf 生成
    • Nginx 用に sysctl の修正、再読み込み
    • Nginx のインストール
    • Nginx の設定流し込み
  • オレオレ SSL 証明書の作成
    • SoftLayer の API からサーバの fqdn を引いて証明書作成
  • Nginx のスタート

© Kazuhisa Hara 2014-2022