20140823_「さくらのクラウド」スタートアップスクリプトを作ってみよう!...
DESCRIPTION
2014年8月23日開催「オープンソースカンファレンス2014 Shimane」の当社講演資料です。 セミナー詳細はこちら⇒ http://www.ospn.jp/osc2014-shimane/TRANSCRIPT
(C)1996-2014 SAKURA Internet Inc.
「さくらのクラウド」 スタートアップスクリプトを作ってみよう!
- concrete5を題材に -
2014年8月23日
さくらインターネット株式会社 広報宣伝室
林 雅也
※concrete5 は Concrete CMS, Inc および、コンクリートファイブジャパン株式会社の登録商標です
2 (C)1996-2014 SAKURA Internet Inc.
当セッションの概要
このセッションでは、さくらインターネット株式会社が提供するパブリッククラウドサービス「さくらのクラウド」がもつ「スタートアップスクリプト」という機能をご紹介させていただきます。
また、オープンソースCMSである「concrete5」を題材に、既存のスクリプトを元に、オリジナルスクリプトを作成する方法について、ご説明させていただきます。
3 (C)1996-2014 SAKURA Internet Inc.
自己紹介
• さくらインターネット株式会社 林 雅也
– 2005年入社。社内インフラ担当など 2014年4月より広報宣伝室
– KOFやOSCに参加するようになり、少しずつオープンソースコミュニティに興味を持つようになる。
– Twitter:@haya2_
– Facebook:https://www.facebook.com/haya4
4 (C)1996-2014 SAKURA Internet Inc.
さくらインターネット
1996年 京都府舞鶴市にて創業
1998年 大阪市中央区へ移転
1999年 株式会社化、東京支社開設
大阪・東京へIDCを新設
2005年 東証マザーズへ上場
2011年 石狩IDCを新設
商 号 さくらインターネット株式会社
本 社 所 在 地 大阪市中央区南本町一丁目8番14号
設 立 年 月 日 1999年8月17日
(サービス開始は1996年12月23日)
取 締 役
代表取締役 社長 田中 邦裕
取締役 副社長 舘野 正明
取締役 川田 正貴
取締役 村上 宗久
取締役(非常勤)森田 勝也
取締役(非常勤)辻 壮
上 場 年 月 日 2005年10月12日(東証マザーズ)
決 算 3月末日
資 本 金 8億9,530万円
従 業 員 数 236名 (2014年3月末)
1996年からサービスを行う データセンター・ホスティングの老舗です
5 (C)1996-2014 SAKURA Internet Inc.
さくらのクラウドとは
6 (C)1996-2014 SAKURA Internet Inc.
さくらのクラウドのコンセプト
• 所謂IaaS型のクラウドサービス
–何の変哲もないIaaS型クラウド
–物理サーバ、物理ネットワーク → そのまま、まるごと仮想化
7 (C)1996-2014 SAKURA Internet Inc.
たくさんのサーバを
8 (C)1996-2014 SAKURA Internet Inc.
アップグレード・ダウングレードしたり
9 (C)1996-2014 SAKURA Internet Inc.
複製してスケールアウトしたり
10 (C)1996-2014 SAKURA Internet Inc.
転送量課金のない固定制の料金形態で
月額料金表
11 (C)1996-2014 SAKURA Internet Inc.
時間割課金にも対応しています
時間割料金表
12 (C)1996-2014 SAKURA Internet Inc.
ブラウザからサーバにアクセスでき
13 (C)1996-2014 SAKURA Internet Inc.
OSの選択も可能で
14 (C)1996-2014 SAKURA Internet Inc.
bootオプションの変更も可能で
15 (C)1996-2014 SAKURA Internet Inc.
シングルユーザモードにもできます
16 (C)1996-2014 SAKURA Internet Inc.
fstabを変更したり
17 (C)1996-2014 SAKURA Internet Inc.
panicが起きた後も確認できます
18 (C)1996-2014 SAKURA Internet Inc.
ネットワークも自由に組めます
19 (C)1996-2014 SAKURA Internet Inc.
NICを追加して
20 (C)1996-2014 SAKURA Internet Inc.
線を伸ばしてスイッチに接続もできます
21 (C)1996-2014 SAKURA Internet Inc.
物理データセンターとも接続できます
ハイブリッド接続を利用すれば 「さくらの専用サーバ」「リモートハウジング」と接続可能
22 (C)1996-2014 SAKURA Internet Inc.
さくらのVPSからワンタッチでコピーできます
23 (C)1996-2014 SAKURA Internet Inc.
標準でAPIをサポート
REST形式でアクセス可能で、/server/ならサーバ一覧など、直観的なAPIアクセスを実現。
$ curl --user “APIKEY":“SECRET" https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/
Index":0,"ID":"112400226821","Name":"git¥u30b5¥u30fc¥u30d01","HostName":"localhost","Description":"","ServiceCla
ss":"cloud¥/plan¥/1","CreatedAt":"2012-05-07T00:19:44+09:00“,"Icon":{"ID":"112500078923",
"URL":"https:¥/¥/secure.sakura.ad.jp¥/cloud¥/zone¥/is1a¥/api¥/cloud¥/1.1¥/icon¥/112500078923.png","Name":"¥u30c
d¥u30b3","Sc
$ curl --user “APIKEY":“SECRET" -H 'X-Sakura-API-Beautify:1'
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server/
"From": 0,
"Count": 29,
"Total": 29,
"Servers": [
{
"Index": 0,
"ID": "112400226821",
"Name": "git¥u30b5¥u30fc¥u30d01",
"HostName": "localhost“,
24 (C)1996-2014 SAKURA Internet Inc.
CLI “sacloud”も用意しています
$ sudo ~/.nave/nave.sh usemain stable
[sudo] password for tanaka:
######################################################################## 100.0%
installed from binary
$ sudo npm install -g sacloud
$ sacloud config --apiRoot="https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/"
/home/tanaka/.sacloudcfg.json:
{
"apiRoot": "https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/"
}
$ sacloud config --accessToken=APIKEY --accessTokenSecret=SECRET
/home/tanaka/.sacloudcfg.json:
{
"apiRoot": "https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/",
"accessToken": “APIKEY",
"accessTokenSecret": “SECRET"
}
$ sacloud show server
GET https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/server.json?{} -> 200 OK (1/1) ~1.539sec
+--------------+--------------------+--------+---------------------+ | id | name | status | created at | +--------------+--------------------+--------+---------------------+ | 112400226821 | gitサーバ1 | up | 2012-05-07 00:19:44 | +--------------+--------------------+--------+---------------------+ | 112500271369 | www2 | up | 2013-06-20 00:27:33 | +--------------+--------------------+--------+---------------------+ | 112400258152 | rp1 | up | 2012-05-28 15:35:11 |
25 (C)1996-2014 SAKURA Internet Inc.
スタートアップスクリプト
サーバ作成時に任意のシェルスクリプトを 「スタートアップスクリプト」から選択しておけば
サーバ起動時に実行させることができます。
26 (C)1996-2014 SAKURA Internet Inc.
パブリックスクリプト
27 (C)1996-2014 SAKURA Internet Inc.
自作スタートアップスクリプトも作れます
28 (C)1996-2014 SAKURA Internet Inc.
スタートアップスクリプトの仕組み
29 (C)1996-2014 SAKURA Internet Inc.
スタートアップスクリプトとは
スタートアップスクリプトは、新たにサーバを作成する際、任意のシェルスクリプトを記述した「スタートアップスクリプト」を選択することにより、起動時にそれらを自動的に実行する機能です。
※スタートアップスクリプト機能は現在、CentOS、ScientificLinux、Ubuntu、 Debian GNU/Linux環境で動作いたします。
※2014年9月2日訂正
30 (C)1996-2014 SAKURA Internet Inc.
スタートアップスクリプトの動作
サーバ作成画面でスタートアップスクリプトを選択すると、起動後のサーバ内で以下の動作が行われます。 1. 起動時、/etc/rc.localが/root/.sacloud-api/startup.shを実行 2. startup.shが、「スタートアップスクリプト」で指定したスク
リプト(“/root/.sacloud-api/notes/スタートアップスクリプトID“に配置)を実行
3. スクリプトが実行され、ログが”/root/.sacloud-api/notes/スタートアップスクリプトID.log”に出力される
4. 各スクリプトが正しく(終了コードが”0″)終了すると、”/root/.sacloud-api/notes/スタートアップスクリプトID.done”という名前の空ファイルを作成(このファイルが存在すると@sacloud-once を指定したスクリプトは実行されない)
31 (C)1996-2014 SAKURA Internet Inc.
スタートアップスクリプトの例 – WordPress -
32 (C)1996-2014 SAKURA Internet Inc.
このスタートアップスクリプトの基本構成
1. 説明
2. iptablesの設定
3. Apache、MySQL、PHPのインストール
4. WordPressのインストール
33 (C)1996-2014 SAKURA Internet Inc.
WordPressのスタートアップスクリプト-1
#!/bin/bash
# @sacloud-once
# @sacloud-desc WordPressをインストールします。
# @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。
# @sacloud-desc http://サーバのIPアドレス/
# @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します)
1回だけ 実行する
サーバ作成画面のスタートアップスクリプト選択欄に説明文として表示される
34 (C)1996-2014 SAKURA Internet Inc.
WordPressのスタートアップスクリプト-2
#---------START OF iptables---------#
cat <<'EOT' > /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH
-A INPUT -p TCP -m state --state NEW ! --syn -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A fail2ban-SSH -j RETURN
COMMIT
EOT
service iptables restart
#---------END OF iptables---------#
iptablesの設定を行う
35 (C)1996-2014 SAKURA Internet Inc.
WordPressのスタートアップスクリプト-3
#---------START OF LAMP---------#
yum -y install expect httpd-devel mod_ssl php-devel php-pear mysql-server php-mbstring php-xml php-gd php-mysql|| exit 1
service httpd status >/dev/null 2>&1 || service httpd start
for i in {1..5}; do
sleep 1
service httpd status && break
[ "$i" -lt 5 ] || exit 1
done
chkconfig httpd on || exit 1
service mysqld status >/dev/null 2>&1 || service mysqld start
for i in {1..5}; do
sleep 1
service mysqld status && break
[ "$i" -lt 5 ] || exit 1
done
chkconfig mysqld on || exit 1
NEWMYSQLPASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`
/usr/bin/mysqladmin -u root password "$NEWMYSQLPASSWORD" || exit 1
cat <<EOT > /root/.my.cnf
[client]
host = localhost
user = root
password = $NEWMYSQLPASSWORD
socket = /var/lib/mysql/mysql.sock
EOT
chmod 600 /root/.my.cnf
#---------END OF LAMP---------#
Apache、MySQL、PHPの インストールを行う
36 (C)1996-2014 SAKURA Internet Inc.
WordPressのスタートアップスクリプト-4
#---------START OF WordPress---------#
USERNAME="wp_`mkpasswd -l 10 -C 0 -s 0`"
PASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`
curl -L http://ja.wordpress.org/latest-ja.tar.gz | tar zxf - -C /var/www/ || exit 1
mv /var/www/wordpress /var/www/$USERNAME
cat <<EOT > /var/www/$USERNAME/wp-config.php
<?php
/** WordPress のためのデータベース名 */
define('DB_NAME', '$USERNAME');
/** MySQL データベースのユーザー名 */
define('DB_USER', '$USERNAME');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', '$PASSWORD');
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
¥$table_prefix = 'wp_';
define('WPLANG', 'ja');
define('WP_DEBUG', false);
EOT
curl -L https://api.wordpress.org/secret-key/1.1/salt/ >> /var/www/$USERNAME/wp-config.php
cat <<'EOT' >> /var/www/$USERNAME/wp-config.php
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
EOT
mysql --defaults-file=/root/.my.cnf <<-EOT
CREATE DATABASE IF NOT EXISTS $USERNAME;
GRANT ALL ON $USERNAME.* TO '$USERNAME'@'localhost' IDENTIFIED BY '$PASSWORD';
FLUSH PRIVILEGES;
EOT
cat <<EOT > /etc/httpd/conf.d/$USERNAME.conf
<VirtualHost *:80>
DocumentRoot /var/www/$USERNAME
AllowEncodedSlashes On
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/$USERNAME">
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
EOT
service httpd reload || exit 1
chown -R apache:apache /var/www || exit 1
WordPressのインストールを行う 1. WordPressをダウンロードして、展開 2. 設定ファイル(wp-config.php)を編集 3. mysqlにデータベースを作成 4. httpdのconfigファイルを編集
37 (C)1996-2014 SAKURA Internet Inc.
concrete5とは
・アメリカのデザイン会社より生まれたオープンソースのCMS。
・ブラウザ上での直観的な操作によるコンテンツデザインが可能。
・concrete5 Japan 日本語公式サイト
http://concrete5-japan.org/
・concrete5 - Free CMS
Open Source Content Management System
http://www.concrete5.org/
38 (C)1996-2014 SAKURA Internet Inc.
編集のポイント
・ダウンロードURLの変更
・展開方法の変更
・インストールスクリプトの仕様に応じた、スクリプトの変更の要否を確認。
39 (C)1996-2014 SAKURA Internet Inc.
concrete5のスタートアップスクリプトの例-1
#!/bin/bash
# @sacloud-once
# @sacloud-desc concrete5をインストールします。
# @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。
# @sacloud-desc http://サーバのIPアドレス/
# @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します)
1回だけ 実行する
サーバ作成画面のスタートアップスクリプト選択欄に説明文として表示される
40 (C)1996-2014 SAKURA Internet Inc.
concrete5のスタートアップスクリプトの例-2
#---------START OF iptables---------#
cat <<'EOT' > /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH
-A INPUT -p TCP -m state --state NEW ! --syn -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A fail2ban-SSH -j RETURN
COMMIT
EOT
service iptables restart
#---------END OF iptables---------#
iptablesの設定を行う
※変更点なし
41 (C)1996-2014 SAKURA Internet Inc.
concrete5のスタートアップスクリプトの例-3
#---------START OF LAMP---------#
yum -y install expect httpd-devel mod_ssl php-devel php-pear mysql-server php-mbstring php-xml php-gd php-mysql|| exit 1
service httpd status >/dev/null 2>&1 || service httpd start
for i in {1..5}; do
sleep 1
service httpd status && break
[ "$i" -lt 5 ] || exit 1
done
chkconfig httpd on || exit 1
service mysqld status >/dev/null 2>&1 || service mysqld start
for i in {1..5}; do
sleep 1
service mysqld status && break
[ "$i" -lt 5 ] || exit 1
done
chkconfig mysqld on || exit 1
NEWMYSQLPASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`
/usr/bin/mysqladmin -u root password "$NEWMYSQLPASSWORD" || exit 1
cat <<EOT > /root/.my.cnf
[client]
host = localhost
user = root
password = $NEWMYSQLPASSWORD
socket = /var/lib/mysql/mysql.sock
EOT
chmod 600 /root/.my.cnf
#---------END OF LAMP---------#
Apache、MySQL、PHPの インストールを行う
※変更点なし
42 (C)1996-2014 SAKURA Internet Inc.
concrete5のスタートアップスクリプトの例-4
#---------START OF concrete5---------#
USERNAME="c5_`mkpasswd -l 10 -C 0 -s 0`"
PASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`
curl -L http://direct.concrete5-japan.org/index.php/download_file/view/1310/45/ > c5.zip || exit 1
unzip c5.zip
mv concrete5.6.3.1.ja /var/www/$USERNAME
cd /var/www
curl -s -f -L https://raw2.github.com/concrete5/concrete5/master/cli/install-concrete5.php -O
chmod 777 /var/www/install-concrete5.php
cat <<EOT > /var/www/install-command-sample
./install-concrete5.php
--db-server=localhost
--db-username=$USERNAME
--db-password=$PASSWORD
--db-database=$USERNAME
--starting-point=blank
--admin-password=(パスワード)
--admin-email=(メールアドレス)
--target=./$USERNAME
--site=concrete5sample
--core=./$USERNAME/concrete
--reinstall=no
EOT
mysql --defaults-file=/root/.my.cnf <<-EOT
CREATE DATABASE IF NOT EXISTS $USERNAME;
GRANT ALL ON $USERNAME.* TO '$USERNAME'@'localhost' IDENTIFIED BY '$PASSWORD';
FLUSH PRIVILEGES;
EOT
cat <<EOT > /etc/httpd/conf.d/$USERNAME.conf
<VirtualHost *:80>
DocumentRoot /var/www/$USERNAME
AllowEncodedSlashes On
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/$USERNAME">
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
EOT
service httpd reload || exit 1
chown -R apache:apache /var/www || exit 1
./install-concrete5.php --db-server=localhost --db-username=$USERNAME --db-password=$PASSWORD --db-database=$USERNAME --starting-point=blank --admin-password=(パスワード) --admin-email=(メールアドレス) --target=./$USERNAME --site=concrete5sample --core=./$USERNAME/concrete --reinstall=no
concrete5のインストールを行う 1. concrete5をダウンロードして、展開 2. インストール支援スクリプト(install-
concrete5.php)をダウンロード 3. mysqlにデータベースを作成 4. httpdのconfigファイルを編集 5. インストール支援スクリプトにオプションを指定
して実行
43 (C)1996-2014 SAKURA Internet Inc.
実際の画面 (デモ、もしくは動画でのご紹介)
44 (C)1996-2014 SAKURA Internet Inc.
残された課題
1. バージョンが決め打ちになってしまう。
2. インストールスクリプトの仕様が異なるため、アカウント情報の一部を自動生成できない。
45 (C)1996-2014 SAKURA Internet Inc.
今後の機能改良:gitからのインポートに対応予定
他の人の作ったスタートアップスクリプトをベースに、簡単にサーバー
立ち上げができるように!
46 (C)1996-2014 SAKURA Internet Inc.
ご清聴ありがとうございました
ブログやTwitterでの感想をお待ちしております
• さくらの広報 – Twitter(公式) @sakura_pr
• さくらのクラウド – ハッシュタグ #sacloud
– Twitter(公式) @sakuracloud