別にECcubeに限らないけど、自動であるサイトを構築する際のシェルのTIPs
全体の流れは下記のようになります。OSはLinuxです。ECcube2.1.2を用いて、PostgreSQLをDBにしています。
今回は細切れに説明していきますが、実際は1つのシェルスクリプトで全自動で実行してます。
- 引数チェック(エラーチェック)
- ユーザの追加
- Apacheバーチャルホストファイルの作成
- PostgresにDB作成とユーザ追加
- ECcubeデータコピー(デプロイ)
- ECcube DBデータ登録
- ECcube DBデータの個別箇所を変更
- data/install.phpの変更
- おまけ(htaccess, htpasswdファイルの生成)
1. 引数チェック
引数チェックは、引数の数だけ見ます。
下記の例では、引数の数が6個でなければエラー処理を行います。
エラー処理は、mailコマンドを呼び出して、SubjectにShop construct errorという文字列を入れて、hoge@hogehoge.comに送信します。本文は << HON以降の箇所のヒアドキュメントになります。
if [ $# != 6 ]; then echo "Argment number is not 6." mail -s "Shop construct error" hoge@hogehoge.com << HON shop construct error Argment number is not 6 Argment1 shopname is $1 HON exit; fi
問題がなければ引数を下記のように変数に入れます
変数名に続くイコールの文字の前後はスペースを入れてはいけません。
$1は第一引数です。ここでは第6引数までを変数に展開しています。
PPATH=/home/hoge/program/ SHOPNAME=$1 SHOPPASSWD=$2 HTPASSWD=$3 SHOP_URL=$4 SHOP_HOME=/home/sites/$SHOPNAME SHOP_MAIL=$5 SHOP_TITLE=$6
2.ユーザの追加
ユーザの追加は、先ほどの変数を使って、useraddコマンドでユーザを作成しています。作成と同時に、-dでホームディレクトリの指定、-sで使えるシェルの指定(ここではシェルを使えないように指定)し、-pでパスワードを指定しています
/usr/sbin/useradd $SHOPNAME -d $SHOP_HOME -s /sbin/nologin -p $SHOPPASSWD
3.Apacheバーチャルホストファイルの作成
バーチャルホストのファイルは、/usr/local/apache/conf/vhost/以下に作成し、Apacheのhttpd.conf側でvhost以下のファイルを全て読み込むようにIncludeの設定をしておきます。
echo "<VirtualHost *:80> ServerAdmin root@hogehoge.com DocumentRoot \"$SHOP_HOME/eccube/html\" ServerName $SHOP_URL" <Directory \"$SHOP_HOME/eccube/html\"> AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> " > /usr/local/apache/conf/vhost/$SHOPNAME.conf
4. PostgresにDB作成とユーザ追加
該当のショップが利用するPostgreSQLのDBとユーザを作成します。
下記のようにcreate userのSQL文でユーザとパスワードを設定します。
続けて、create database文でDB名を指定して、そのDBのオーナーとなるユーザ名を指定します
下記のように、pgsqlユーザで-c以降のコマンドを実行しています。
コマンドは、pgsqlコマンドを利用して、-f以降のsqlファイルを実行しています。
echo "create user $SHOPNAME with password '$SHOPPASSWD';" > $PPATH/$SHOPNAME.sql echo "create database zeroshop_$SHOPNAME owner $SHOPNAME;" >> $PPATH/$SHOPNAME.sql su -l pgsql -c "/usr/local/pgsql/bin/psql postgres -f $PPATH/$SHOPNAME.sql"
5. ECcubeデータコピー(デプロイ)
これは適当なディレクトリにECcubeをインストールしておいて、rsyncか、cp -r とかで丸ごとコピー
6. ECcube DBデータ登録
予めECcubeをインストールして基本的な管理情報を登録したら、下記のコマンドでDBデータをダンプしておきます
/usr/local/pgsql/bin/pg_dump -O -U pgsql baseDBdata > baseDBdata.dump
上記のように-Oオプションをつけないと、そのDBのオーナー情報までついてくるので、他のDBにリストアするとオーナが異なってしまいますので注意が必要です。
pg_dumpに関しては下記を参照
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/app-pgdump.html
http://d.hatena.ne.jp/seesaa/20080523
それで、baseDBdata.dumpを作っておいたら、このシェルスクリプトからは下記のように投入します
/usr/local/pgsql/bin/psql -U $SHOPNAME -d $SHOPNAME < baseDBdata.dump
7. ECcube DBデータの個別箇所を変更
psqlコマンドは、-cオプションを使うと任意のSQL文が実行できるためこれを使います。
参考URL http://ash.jp/db/pg_psql_sample.htm
下記は、ECcubeのショップメールアドレスとショップ名をUPDATE文で書き換えてます
/usr/local/pgsql/bin/psql -U $SHOPNAME -d $SHOPNAME -c "UPDATE dtb_baseinfo SET law_email='$SHOP_MAIL', law_url='http://$SHOP_URL',shop_name='$SHOP_TITLE', email01='$SHOP_MAIL', email02='$SHOP_MAIL', email03='$SHOP_MAIL', email04='$SHOP_MAIL', email05='$SHOP_MAIL' ;"
下記は、UPDATE文を使ってECcube管理者ユーザのパスワードを変えてます(管理者ユーザは一人という前提です)
/usr/local/pgsql/bin/psql -U $SHOPNAME -d $SHOPNAME -c "UPDATE dtb_member SET password='$SHA1PASS' ;"
上記のpasswordカラムはSHA1で暗号化したものを指定する必要があります。そのため上記のコマンド実行前に下記を実行します
変数SHA1PASSにsha1.phpを実行した結果を入れてます。 `で囲んだものはそのコマンドの実行結果が返ります。
SHA1PASS=`/home/hoge/program/sha1.php $SHOPPASSWD`
sha1.phpは下記の内容になります
AUTH_MAGICの値は、eccube/data/mtb_constants_init.phpの中のAUTH_MAGICの値と同じにする必要があります。
#!/usr/local/php5/bin/php <?php $passwd_char=$argv[1]; define('AUTH_MAGIC', "hogehogehoge111222233333333"); echo sha1($passwd_char . ':' . AUTH_MAGIC); ?>
上記のphpでは、改行に注意(下記を参照)
http://d.hatena.ne.jp/ichikaway/20080904/1220513091
8. data/install.phpの変更
あとはeccubeのdata/install.phpを環境に合わせて書き換える(生成する)だけです。
下記を参考に
http://d.hatena.ne.jp/ichikaway/20080731
echo '<?php' > $PPATH/$SHOPNAME-install.php echo " define ('ECCUBE_INSTALL', 'ON'); define ('HTML_PATH', '$SHOP_HOME/eccube/html/'); define ('SITE_URL', 'http://$SHOP_URL/'); define ('SSL_URL', 'http://$SHOP_URL/'); define ('URL_DIR', '/'); define ('DOMAIN_NAME', ''); define ('DB_TYPE', 'pgsql'); define ('DB_USER', '$SHOPNAME'); define ('DB_PASSWORD', '$SHOPPASSWD'); define ('DB_SERVER', '127.0.0.1'); define ('DB_NAME', '$SHOPNAME'); define ('DB_PORT', ''); define ('DATA_PATH', '$SHOP_HOME/eccube/data/'); define ('MOBILE_HTML_PATH', HTML_PATH . 'mobile/'); define ('MOBILE_SITE_URL', SITE_URL . 'mobile/'); define ('MOBILE_SSL_URL', SSL_URL . 'mobile/'); define ('MOBILE_URL_DIR', URL_DIR . 'mobile/'); " >> $PPATH/$SHOPNAME-install.php echo '?>' >> $PPATH/$SHOPNAME-install.php cp $PPATH/$SHOPNAME-install.php $SHOP_HOME/eccube/data/install.php
9. おまけ(htaccess, htpasswdファイルの生成)
BASIC認証をかけたいフォルダがあれば、htpasswdを生成します。
- bでパスワード設定、-cで.htpasswdファイルを生成します。
/usr/bin/htpasswd -b -c $SHOP_HOME/eccube/html/フォルダ/.htpasswd $SHOPNAME $HTPASSWD
シェルに関する参考URL
http://www.e.ics.nara-wu.ac.jp/~nogu/tips/shellscript.html
http://www.atmarkit.co.jp/flinux/rensai/shell05/parameter.html
http://www.infoscience.co.jp/technical/rsync/rsync.html