「さくらのクラウド」 
スタートアップスクリプトを作ってみよう! 
- concrete5を題材に - 
さくらインターネット株式会社 
広報宣伝室 
林 雅也 
2014年8月23日 
※concrete5 は Concrete CMS, Inc および、コンクリートファイブジャパン株式会社の登録商標です 
(C)1996-2014 SAKURA Internet 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 
1996年からサービスを行う 
データセンター・ホスティングの老舗です 
(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月末)
5 
さくらのクラウドとは 
(C)1996-2014 SAKURA Internet Inc.
6 
さくらのクラウドのコンセプト 
• 所謂IaaS型のクラウドサービス 
– 何の変哲もないIaaS型クラウド 
– 物理サーバ、物理ネットワーク 
→ そのまま、まるごと仮想化 
(C)1996-2014 SAKURA Internet Inc.
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 
bootオプションの変更も可能で 
(C)1996-2014 SAKURA Internet Inc.
15 
シングルユーザモードにもできます 
(C)1996-2014 SAKURA Internet Inc.
16 
(C)1996-2014 SAKURA Internet Inc. 
fstabを変更したり
17 
panicが起きた後も確認できます 
(C)1996-2014 SAKURA Internet Inc.
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 
さくらのVPSからワンタッチでコピーできます 
(C)1996-2014 SAKURA Internet Inc.
$ 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 
23 
$ 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, 
(C)1996-2014 SAKURA Internet Inc. 
標準でAPIをサポート 
"Count": 29, 
"Total": 29, 
"Servers": [ 
REST形式でアクセス可能で、/server/ならサーバ一覧など、 
直観的なAPIアクセスを実現。 
{ 
"Index": 0, 
"ID": "112400226821", 
"Name": "git¥u30b5¥u30fc¥u30d01", 
"HostName": "localhost“,
24 
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 | 
(C)1996-2014 SAKURA Internet Inc.
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.
※スタートアップスクリプト機能は現在、CentOS、 
ScientificLinux、Ubuntu、 Debian GNU/Linux 
環境で動作いたします。 
29 
スタートアップスクリプトとは 
スタートアップスクリプトは、新たにサーバを作 
成する際、任意のシェルスクリプトを記述した 
「スタートアップスクリプト」を選択することに 
より、起動時にそれらを自動的に実行する機能で 
す。 
(C)1996-2014 SAKURA Internet Inc. 
※2014年9月2日訂正
サーバ作成画面でスタートアップスクリプトを選択すると、起動 
後のサーバ内で以下の動作が行われます。 
1. 起動時、/etc/rc.localが/root/.sacloud-api/startup.shを実行 
2. startup.shが、「スタートアップスクリプト」で指定したスク 
リプト(“/root/.sacloud-api/notes/スタートアップスクリプト 
ID“に配置)を実行 
と、”/root/.sacloud-api/notes/スタートアップスクリプト 
ID.done”という名前の空ファイルを作成(このファイルが存在 
すると@sacloud-once を指定したスクリプトは実行されない) 
30 
スタートアップスクリプトの動作 
3. スクリプトが実行され、ログが”/root/.sacloud-api/notes/ス 
タートアップスクリプトID.log”に出力される 
4. 各スクリプトが正しく(終了コードが”0″)終了する 
(C)1996-2014 SAKURA Internet Inc.
31 
スタートアップスクリプトの例 
– WordPress - 
(C)1996-2014 SAKURA Internet Inc.
32 
このスタートアップスクリプトの基本構成 
1. 説明 
2. iptablesの設定 
3. Apache、MySQL、PHPのインストール 
4. WordPressのインストール 
(C)1996-2014 SAKURA Internet Inc.
33 
WordPressのスタートアップスクリプト-1 
1回だけ 
実行する 
(C)1996-2014 SAKURA Internet Inc. 
#!/bin/bash 
# @sacloud-once 
# @sacloud-desc WordPressをインストールします。 
# @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。 
# @sacloud-desc http://サーバのIPアドレス/ 
# @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します) 
サーバ作成画面のスタートアップスクリプト 
選択欄に説明文として表示される
34 
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の設定を行う 
(C)1996-2014 SAKURA Internet Inc.
35 
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 
(C)1996-2014 SAKURA Internet Inc. 
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 
WordPressのスタートアップスクリプト-4 
(C)1996-2014 SAKURA Internet Inc. 
#---------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 
concrete5のスタートアップスクリプトの例-1 
1回だけ 
実行する 
(C)1996-2014 SAKURA Internet Inc. 
#!/bin/bash 
# @sacloud-once 
# @sacloud-desc concrete5をインストールします。 
# @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。 
# @sacloud-desc http://サーバのIPアドレス/ 
# @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します) 
サーバ作成画面のスタートアップスクリプト 
選択欄に説明文として表示される
40 
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の設定を行う 
(C)1996-2014 SAKURA Internet Inc. 
※変更点なし
41 
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 
(C)1996-2014 SAKURA Internet Inc. 
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 
concrete5のスタートアップスクリプトの例-4 
concrete5のインストールを行う 
1. concrete5をダウンロードして、展開 
2. インストール支援スクリプト(install-concrete5. 
php)をダウンロード 
3. mysqlにデータベースを作成 
4. httpdのconfigファイルを編集 
5. インストール支援スクリプトにオプションを指定 
して実行 
(C)1996-2014 SAKURA Internet Inc. 
#---------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
43 
実際の画面 
(デモ、もしくは動画でのご紹介) 
(C)1996-2014 SAKURA Internet Inc.
44 
(C)1996-2014 SAKURA Internet Inc. 
残された課題 
1. バージョンが決め打ちになってしまう。 
2. インストールスクリプトの仕様が異なるため、 
アカウント情報の一部を自動生成できない。
45 
今後の機能改良:gitからのインポートに対応予定 
他の人の作ったスタートアップスク 
リプトをベースに、簡単にサーバー 
立ち上げができるように! 
(C)1996-2014 SAKURA Internet Inc.
46 
ご清聴ありがとうございました 
ブログやTwitterでの感想をお待ちしております 
(C)1996-2014 SAKURA Internet Inc. 
• さくらの広報 
– Twitter(公式) @sakura_pr 
• さくらのクラウド 
– ハッシュタグ #sacloud 
– Twitter(公式) @sakuracloud

「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)

  • 1.
    「さくらのクラウド」 スタートアップスクリプトを作ってみよう! -concrete5を題材に - さくらインターネット株式会社 広報宣伝室 林 雅也 2014年8月23日 ※concrete5 は Concrete CMS, Inc および、コンクリートファイブジャパン株式会社の登録商標です (C)1996-2014 SAKURA Internet Inc.
  • 2.
    2 (C)1996-2014 SAKURAInternet Inc. 当セッションの概要 このセッションでは、さくらインターネット株式 会社が提供するパブリッククラウドサービス「さ くらのクラウド」がもつ「スタートアップスクリ プト」という機能をご紹介させていただきます。 また、オープンソースCMSである「concrete5」 を題材に、既存のスクリプトを元に、オリジナル スクリプトを作成する方法について、ご説明させ ていただきます。
  • 3.
    3 (C)1996-2014 SAKURAInternet Inc. 自己紹介 • さくらインターネット株式会社 林 雅也 – 2005年入社。社内インフラ担当など 2014年4月より広報宣伝室 – KOFやOSCに参加するようになり、少しずつオープ ンソースコミュニティに興味を持つようになる。 – Twitter:@haya2_ – Facebook:https://www.facebook.com/haya4
  • 4.
    4 1996年からサービスを行う データセンター・ホスティングの老舗です (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月末)
  • 5.
  • 6.
    6 さくらのクラウドのコンセプト •所謂IaaS型のクラウドサービス – 何の変哲もないIaaS型クラウド – 物理サーバ、物理ネットワーク → そのまま、まるごと仮想化 (C)1996-2014 SAKURA Internet Inc.
  • 7.
    7 (C)1996-2014 SAKURAInternet Inc. たくさんのサーバを
  • 8.
  • 9.
  • 10.
  • 11.
    11 時間割課金にも対応しています (C)1996-2014SAKURA Internet Inc. 時間割料金表
  • 12.
  • 13.
    13 (C)1996-2014 SAKURAInternet Inc. OSの選択も可能で
  • 14.
  • 15.
  • 16.
    16 (C)1996-2014 SAKURAInternet Inc. fstabを変更したり
  • 17.
  • 18.
  • 19.
    19 (C)1996-2014 SAKURAInternet Inc. NICを追加して
  • 20.
  • 21.
    21 物理データセンターとも接続できます ハイブリッド接続を利用すれば 「さくらの専用サーバ」「リモートハウジング」と接続可能 (C)1996-2014 SAKURA Internet Inc.
  • 22.
  • 23.
    $ 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 23 $ 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, (C)1996-2014 SAKURA Internet Inc. 標準でAPIをサポート "Count": 29, "Total": 29, "Servers": [ REST形式でアクセス可能で、/server/ならサーバ一覧など、 直観的なAPIアクセスを実現。 { "Index": 0, "ID": "112400226821", "Name": "git¥u30b5¥u30fc¥u30d01", "HostName": "localhost“,
  • 24.
    24 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 | (C)1996-2014 SAKURA Internet Inc.
  • 25.
    25 スタートアップスクリプト サーバ作成時に任意のシェルスクリプトを 「スタートアップスクリプト」から選択しておけば サーバ起動時に実行させることができます。 (C)1996-2014 SAKURA Internet Inc.
  • 26.
    26 (C)1996-2014 SAKURAInternet Inc. パブリックスクリプト
  • 27.
  • 28.
    28 スタートアップスクリプト の仕組み (C)1996-2014 SAKURA Internet Inc.
  • 29.
    ※スタートアップスクリプト機能は現在、CentOS、 ScientificLinux、Ubuntu、 DebianGNU/Linux 環境で動作いたします。 29 スタートアップスクリプトとは スタートアップスクリプトは、新たにサーバを作 成する際、任意のシェルスクリプトを記述した 「スタートアップスクリプト」を選択することに より、起動時にそれらを自動的に実行する機能で す。 (C)1996-2014 SAKURA Internet Inc. ※2014年9月2日訂正
  • 30.
    サーバ作成画面でスタートアップスクリプトを選択すると、起動 後のサーバ内で以下の動作が行われます。 1.起動時、/etc/rc.localが/root/.sacloud-api/startup.shを実行 2. startup.shが、「スタートアップスクリプト」で指定したスク リプト(“/root/.sacloud-api/notes/スタートアップスクリプト ID“に配置)を実行 と、”/root/.sacloud-api/notes/スタートアップスクリプト ID.done”という名前の空ファイルを作成(このファイルが存在 すると@sacloud-once を指定したスクリプトは実行されない) 30 スタートアップスクリプトの動作 3. スクリプトが実行され、ログが”/root/.sacloud-api/notes/ス タートアップスクリプトID.log”に出力される 4. 各スクリプトが正しく(終了コードが”0″)終了する (C)1996-2014 SAKURA Internet Inc.
  • 31.
    31 スタートアップスクリプトの例 –WordPress - (C)1996-2014 SAKURA Internet Inc.
  • 32.
    32 このスタートアップスクリプトの基本構成 1.説明 2. iptablesの設定 3. Apache、MySQL、PHPのインストール 4. WordPressのインストール (C)1996-2014 SAKURA Internet Inc.
  • 33.
    33 WordPressのスタートアップスクリプト-1 1回だけ 実行する (C)1996-2014 SAKURA Internet Inc. #!/bin/bash # @sacloud-once # @sacloud-desc WordPressをインストールします。 # @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。 # @sacloud-desc http://サーバのIPアドレス/ # @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します) サーバ作成画面のスタートアップスクリプト 選択欄に説明文として表示される
  • 34.
    34 WordPressのスタートアップスクリプト-2 #---------STARTOF 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の設定を行う (C)1996-2014 SAKURA Internet Inc.
  • 35.
    35 WordPressのスタートアップスクリプト-3 #---------STARTOF 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 (C)1996-2014 SAKURA Internet Inc. 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.
    36 WordPressのスタートアップスクリプト-4 (C)1996-2014SAKURA Internet Inc. #---------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.
    37 (C)1996-2014 SAKURAInternet Inc. concrete5とは ・アメリカのデザイン会社より生まれたオープン ソースのCMS。 ・ブラウザ上での直観的な操作によるコンテンツ デザインが可能。 ・concrete5 Japan 日本語公式サイト http://concrete5-japan.org/ ・concrete5 - Free CMS Open Source Content Management System http://www.concrete5.org/
  • 38.
    38 (C)1996-2014 SAKURAInternet Inc. 編集のポイント ・ダウンロードURLの変更 ・展開方法の変更 ・インストールスクリプトの仕様に応じた、スク リプトの変更の要否を確認。
  • 39.
    39 concrete5のスタートアップスクリプトの例-1 1回だけ 実行する (C)1996-2014 SAKURA Internet Inc. #!/bin/bash # @sacloud-once # @sacloud-desc concrete5をインストールします。 # @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。 # @sacloud-desc http://サーバのIPアドレス/ # @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します) サーバ作成画面のスタートアップスクリプト 選択欄に説明文として表示される
  • 40.
    40 concrete5のスタートアップスクリプトの例-2 #---------STARTOF 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の設定を行う (C)1996-2014 SAKURA Internet Inc. ※変更点なし
  • 41.
    41 concrete5のスタートアップスクリプトの例-3 #---------STARTOF 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 (C)1996-2014 SAKURA Internet Inc. 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.
    42 concrete5のスタートアップスクリプトの例-4 concrete5のインストールを行う 1. concrete5をダウンロードして、展開 2. インストール支援スクリプト(install-concrete5. php)をダウンロード 3. mysqlにデータベースを作成 4. httpdのconfigファイルを編集 5. インストール支援スクリプトにオプションを指定 して実行 (C)1996-2014 SAKURA Internet Inc. #---------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
  • 43.
  • 44.
    44 (C)1996-2014 SAKURAInternet Inc. 残された課題 1. バージョンが決め打ちになってしまう。 2. インストールスクリプトの仕様が異なるため、 アカウント情報の一部を自動生成できない。
  • 45.
    45 今後の機能改良:gitからのインポートに対応予定 他の人の作ったスタートアップスク リプトをベースに、簡単にサーバー 立ち上げができるように! (C)1996-2014 SAKURA Internet Inc.
  • 46.
    46 ご清聴ありがとうございました ブログやTwitterでの感想をお待ちしております (C)1996-2014 SAKURA Internet Inc. • さくらの広報 – Twitter(公式) @sakura_pr • さくらのクラウド – ハッシュタグ #sacloud – Twitter(公式) @sakuracloud