運用中の本番CMSと同じ環境でUbuntu開発環境を構築する

CMS運用開発でアルアルなやつです。
運用中のCMSを止めずに、開発環境で修正を行い、本番環境へポンッとアップロードするような場合です。こういった場合に、いちいち本番環境のデータベースからdumpした内容を書き換えたり、設定ファイルを書き換えたりは避けたいので、開発環境のドキュメントルートパスやデータベース名を本番環境と同じものにしておいたりします。なので、まったく同じサーバーという意味ではないです。あくまで 公開環境⇔開発環境 のデータやデータベースデータの移行が簡素に行える環境の構築パターンです。ドメインもディレクトリ構成も、本番と同じように見える環境にしておくことで、アップロードした際の状態が確認しやすくなります。勿論、その代わりに、開発環境を本番サイトと混同したり、同じユーザー名やパスワードも使用するなら、セキュリティリスクへの注意は更に必要ではあります。何かの便利さをとれば何かは失います、いつも反対側を把握しておくことは必要です、そういうとこには気をつけましょう。
以下、サンプルのコマンドやコードでは、仮に本番環境のドメイン名やデータベース名を下記のように過程して記載していきます。コマンドやコードを利用する際は、ご自身の環境に置き換えてください。
ドメイン名 | cms.domain.jp |
アカウント名 | accountname |
ドキュメントルート | /virtual/useracount/public_html/sitename/ |
cgiの実行ディレクトリ | /virtual/useracount/public_html/sitename/cgi |
ログイン時のカレントディレクトリ | /virtual/useracount |
作業ディレクトリ | /virtual/useracount/tmp |
データベース名 | dbname |
データベースユーザー名 | db_user |
データベースパスワード | db_passwd |
例えば本番環境のCMS(Wordpressの場合)のwp-config.phpが下記のようになっている場合です。
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'dbname' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'db_user' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'db_passwd' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
環境については人それぞれですので、上記をご自分の携わる環境に合わせて読み替えてください。
なお、Ubuntu、Apache、MySQL、PHP等のインストールと設定については、済ませているものとして話を進めます。(インストール他については、以前の記事「ParallelsでUbuntuが快適だった件 -【MacとUbuntuで快適LAMP構築】」など、当ブログでもいろいろ書いていますので、それらを参照してください)
手順
本番環境(公開サイト)からデータをダウンロードする
ローカルPCのMacでターミナルを開き、本番環境サーバーへsshでログインします。
本番環境サーバーの accountname のパスワードが求められます。
ログインしたら作業ディレクトリ tmp を作成して移動します。
pwd でルートからのパスも確認しておきましょう。
$ ssh -l accountname cms.domain.jp
$ mkdir tmp
$ cd tmp
$ pwd
↑の pwd で表示されるカレントディレクトリは、 /virtual/useracount/tmp と仮定します。
データベースが MySQL の場合は、データをエクスポートする方法として mysqldump を使います。
db_user で dbname のデータベース情報を dump します。
$ mysqldump -u db_user -p dbname --opt --hex-blob > dbname.dump
/virtual/useracount/tmp に dbname.dump が出力されます。
$ ls -la
などで確認しておきましょう。dumpしたファイルのサイズが小すぎる場合は、失敗している場合があります。そんな場合はテキストエディタなどで、中身を確認しましょう。エラーの1文しか入っていなかったら失敗しています。
dumpに成功していたら、次にドキュメントルートのファイルをダウンロードしやすく圧縮しましょう。
$ tar -czvf public_html_sitename.tar.gz /virtual/useracount/public_html/sitename/
先程のディレクトリに、 public_html_sitename.tar.gz ができているはずです。ls で確認しましょう。
これでデータのエクスポートできました。
公開サーバーからはログアウトします。
つづいてローカルPCで再度ターミナルを開き、scpコマンドで先程エクスポートして作成した dbname.dump と public_html_sitename.tar.gz をダウンロードします。
$ scp accountname@samplesite.domain.jp:/virtual/useracount/tmp/dbname.dump .
$ scp accountname@samplesite.domain.jp:/virtual/useracount/tmp/public_html_sitename.tar.gz .
本番環境のパスワードが求められます。ダウンロードが始まり100%になったら完了です。サイズが大きい場合やネットワークが遅い場合はリトライです。どうしてもダメな場合はsplitコマンドで小分けにしてダウンロードしましょう。
$ open .
openコマンドにカレントディレクトリを示すドットを指定すると、カレントディレクトリのフォルダを開けます。必要なデータがローカルPCへダウンロードできていることを確認してください。
開発環境にサイトを作成する
開発環境のUbuntuへ、ドキュメントルートになるディレクトを作成します。Ubuntuのターミナルから mkdir でディレクトリを掘りましょう。
$ sudo mkdir -p /virtual/useracount/public_html/sitename
cdコマンドで作成したディレクトリへ移動し、openコマンドでフォルダをオープンします。
Parallels Tools のおかげで簡単にMacからドラッグドロップでファイルの移動ができます。
$ cd /virtual/useracount/public_html/sitename
$ open .
開発環境のドキュメントルートを変更しましょう、000-default.confを編集します。
$ sudo gedit /etc/apache2/sites-available/000-default.conf
12行目あたりの下記の箇所を、
DocumentRoot /var/www/html
下記のように、
DocumentRoot /virtual/useracount/public_html/sitename
へ変更して、最後に下記を追記します。
<Directory /virtual/useracount/public_html/sitename/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
URLが https://〜 のサイトの場合は default-ssl.conf を編集してドキュメントルートを変更します。
$ sudo gedit /etc/apache2/sites-available/default-ssl.conf
5行目の、
DocumentRoot /var/www/html
を、
DocumentRoot /virtual/useracount/public_html/sitename
に書き換えます。
Apache2には、デフォルトでサンプルの証明書が入っていますので、d有効化しておきます。
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
反映するためにApache2をリスタートします。
$ sudo service apache2 restart
新しいドキュメントルートにファイルも作成して、ブラウザで127.0.0.1を確認しましょう。
$ sudo gedit index.html
This is new Document root.
It works!
などとして記入して保存してみましょう、ブラウザで見て記入した文字が表示されていたらOKです。
cgiディレクトリも変更しておきましょう。
$ sudo gedit /etc/apache2/conf-available/cgi-enabled.conf
<Directory "/virtual/useracount/public_html/sitename/cgi">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
さて、ブラウザから 127.0.0.1 ではなく cms.domain.jp で確認できるように変更しましょう。
hostsファイルを開いて、
$ sudo gedit /etc/hosts
127.0.0.1 cms.domain.jp
を追記しましょう。
Apache2をリスタートします。
$ sudo service apache2 restart
ブラウザで cms.domain.jp を見てみましょう、同じものが表示されましたね。OKです。
HTTPSのサイトの場合は https://cms.domain.jp へアクセスします。
証明書は仮のものなので、警告が出ますがスルーして閲覧します。見れたらOK。
新しいドキュメントルートのフォルダをブックマークしておきましょう。フォルダはopenコマンドで開けます。
$ open /virtual/useracount/public_html/sitename
sitenameフォルダをフォルダパネルの左側にフォルダをドラッグすると「新しいブックマーク」が出ますのでそこへドロップします。
作成したフォルダへ公開サイトのドキュメントルートからもってきたtar.gzを解凍して入れます。
データベースの作成とインポート
mysqlデータベース、ユーザーを作成し、ユーザーに権限を付与します。
$ sudo mysql
mysql> CREATE DATABASE dbname;
mysql> CREATE USER 'db_user'@'%' IDENTIFIED WITH mysql_native_password BY 'db_passwd';
mysql> GRANT ALL ON dbname.* TO 'db_user'@'%';
作成したユーザーでmysqlへログインして確認しておきます。
$ mysql -u db_user -p
mysql > show databases;
mysql> quit;
mysqlからquit;します。
dumpファイルをインポートします。
Ubuntuのカレントディレクトリに dbname.dump を置いて、
$ mysql -u db_user -p dbname < dbname.dump
としてインポートします。
ドキュメントルートのファイルを編集するために所有者とグループを設定します。
新しいグループをつくりpallelsとwww-dataを追加します。(詳しい手順は別記事「Tips – 所有者とグループ – ディレクトリを775にファイルを664にをchmodでいっぺんにやる」へ書きました)
$ sudo chown -R www-data:cms /virtual/useracount/public_html/sitename
これでCMS管理画面からも直接テキストエディタからも編集ができるようになりました。
/virtual/useracount/public_html/sitename フォルダへ圧縮ファイルを展開したものを全て入れましょう。
これでdumpのSQL文や設定ファイルを書き換えずに、公開中のWordpressサイトをローカルのUbuntuに持ってきたり、その逆もできるようになりましたね。
以上、TTでした。