とりあえず動かすとこまでの「Ansible入門」:nginx, php-fpm, mysql編
Chefよりも手軽に使えるということでAnsibleを試してみました。
今回は、nginx、php-fpm、mysqlを入れて、さらにmysqlでデータベースとユーザーを作成するところまでをやってみます。とりあえずの使用感を知りたかったので、Ansibleの環境はlocalhostです。
Ansibleを使うには
CentOS6でAnsibleを使うには、yumでansibleをインストールするだけでOKです。インストールしたらサーバー構築の手順書であるPlaybookを書いて、実行すればOKです。
簡単な流れは以下の通り。
・Ansibleをyumでインストール ・Playbookでサーバー構築の設定を書く ・Playbookを実行
1. Ansibleのインストール
$ yum clean all
$ yum -y update
$ yum -y install ansible
$ cd /etc/ansible/
構成は以下のようになってます。
$ ls
ansible.cfg hosts roles
ansible.cfgはansibleの設定ファイル。hostsはansibleの対象となるサーバーや、グループなどを設定できます。
今回はlocalhostのみが対象でさくっとお試しなので、特に設定することはありません。
2. Playbookを作成
rolesディレクトリや好きなディレクトリに移動してplaybookを作ります。
使えるコマンド(モジュール)は、公式のModule Indexに記載があります。
$ cd roles
- hosts: 127.0.0.1 connection: local sudo: yes tasks: - name: add nginx repository yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present - name: add remi repository yum: name=http://rpms.famillecollet.com/enterprise/remi-release-6.rpm state=present - name: add epel repository yum: name=http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm state=present - name: install nginx yum: name=nginx state=present - name: install php packages yum: name={{ item }} state=present enablerepo=remi with_items: - php - php-cli - php-devel - php-mbstring - php-gd - php-pear - php-xml - php-fpm - name: install mysql packages yum: name={{ item }} state=present enablerepo=remi with_items: - mysql.x86_64 - mysql-server.x86_64 - php-mysql - name: be sure php-fpm is running and enabled service: name=php-fpm state=running enabled=yes - name: be sure mysqld is running and enabled service: name=mysqld state=running enabled=yes - name: be sure nginx is running and enabled service: name=nginx state=running enabled=yes - name: install MySQL-python yum: name=MySQL-python state=present - name: add root user of mysqld mysql_user: name: root host: localhost password: samplepassword - name: create n edit ~/.my.cnf lineinfile: dest: ~/.my.cnf line: "[client]\nuser=root\npassword=samplepassword" create: yes - name: create new database mysql_db: name: wordpress state: present - name: add new user mysql_user: name: wordpress password: wordpress priv: "wordpress.*:ALL" host: localhost state: present
3. Ansibleを実行
Playbookの実行にはansible-playbookコマンドを使います。–syntax-checkなどをつけることで、構文チェックなどができます。
# 構文チェック
$ ansible-playbook playbook.yml --syntax-check
# タスクを確認
$ ansible-playbook playbook.yml --list-tasks
# 仮実行
$ ansible-playbook playbook.yml --check
# 実行
$ ansible-playbook playbook.yml
使ってみた感想としては、手軽に使えてYAMLで記述できるので見通しもよく扱いやすい印象。
その反面、ほかの人も指摘していますが複雑な処理は苦手そうといったイメージ。
ドメイン移転した時のウェブマスターツールの設定変更の方法
ドメイン移転をした時に忘れがちなウェブマスターツールの設定方法を紹介します。
1. 新しいドメインのプロパティを追加
まずは、既に追加してある旧ドメインのプロパティとは別に、新しいドメインのプロパティを追加します。
ウェブマスターツールから「プロパティを追加」をクリック。
2. 設定の「アドレス変更」を選択
サイトのダッシュボードの右上にある設定(歯車マーク)をクリックすると、「アドレス変更」があるのでこれを選びます。
もし「アドレス変更」が出ない場合は、サイトの「所有者」となっていない可能性があります。「管理者」と「所有者」は異なるので、注意が必要です。
3. アドレス変更リクエストを送信
・リストから新しいサイトを選択する ・301リダイレクトが正常に動作していることを確認する ・確認方法がまだ残っていることを確認する
の順にリダイレクトなどの各種確認をしていきます。
まず、リストから先ほど追加した新しいアドレスのプロパティを選択します。その後は、リダイレクトが適切に行われていれば「確認」ボタンを押すことで、緑のチェックマークが付きます。
そして、最後に「アドレス変更のリクエスト」を送信します。
4. Google Analyticsと連携している場合
忘れがちですが、Google Analyticsと連携している場合は、その再設定もする必要があります。
アナリティクス設定> プロパティ設定の一番下あたりにある「Search Consoleを調整」をクリック。
「Search Console のサイト」のURLの横にある編集ボタンをクリック。あとは新しいドメインのウェブマスターツールのプロパティを選択すれば完了です。
vimで日本語が文字化けした時に確認すべきこと&対処法
よくあるVimでの「文字化け」。
日本語がマルチバイトである以上、切っても切れない「文字化け」の対処法を紹介します。
文字化けファイルを開いて文字コードを確認
ここで確認する文字コードは、Vim本体の文字コードとファイルの文字コードです。
それぞれ、ファイルを開いて以下のコマンドで確認ができます。
コマンド | 結果例 | |
---|---|---|
vimの文字コード確認 | :set enc? | encoding=utf-8 |
ファイルの文字コード確認 | :set fenc? | encoding=sjis |
vimrcに設定を追加
Vim本体の文字コードとファイルの文字コードが異なっている場合は、文字コードを修正する必要があります。
「:set fenc=文字コード」でインスタントに変更することもできますが、設定ファイルvimrcを修正したほうが良いでしょう。
追記または修正するのは以下です。
set encoding=utf-8
set fileencodings=utf-8
set fileformats=unix,dos,mac
vimは文字コードの自動判定をするようなのですが、そこで誤判定をすることもけっこうあるようです。
なので、今回は使う文字コードをvimとファイルともにUTF-8に固定しています。
これで文字コードが原因の文字化けは対処できると思います。
Laravel4をCentOS6+nginx+PHP5.4でインストールする
最近人気があるLaravelを使うためのメモです。
【環境】 CentOS release 6.7 (Final) PHP 5.4.44
composerからLaravelをインストール
composerを入れてない場合は以下のコマンドでインストール。
$curl -sS https://getcomposer.org/installer | php
$mv composer.phar /usr/local/bin/composer
その後、以下のコマンドでLaravelを入れます。PHPのバージョンが5.4だったので、最新のLaravel5ではなくLaravel4(日本語注釈付き)にします。
$composer create-project "laravel-ja/laravel=~4.2" your_app --prefer-dist
Mcrypt PHP extension required.が発生した場合
composerでLaravelを入れる時に以下のようなエラーが出ることがあります。これはPHP拡張機能である暗号化モジュールmcryptがPHPに入っていないために発生するようです。
Mcrypt PHP extension required. Script php artisan clear-compiled handling the post-install-cmd event returned with an error [RuntimeException] Error Output:
yumでlibmcryptとphp-mcryptを入れます。
$yum --enablerepo=epel install libmcrypt
$yum --enablerepo=remi update
$yum install --enablerepo=remi php-mcrypt
PHPのバージョンや環境によっては上手くいかないこともあります。
どうしてもエラーが解決できない場合は、PHPをソースからビルドする時に「$./configure –with-mcrypt」のように–with-mcryptパラメータをつけることで拡張機能を入れることもできるようです。
mcrypyを入れたら以下のコマンドで「mcrypt support => enabled」となればOKです。
$php -i | grep -i mcrypt
nginxを使っているので、php-fpmをリスタートをしてmcryptを有効化させます。
$service php-fpm restart
nginxでLaravelを動かす
まず、app/storageのパーミッションを変更しておきます。
$chmod -R 777 app/storage
すでにnginxを利用している場合は、rootをLaravelのpublicディレクトリに向けるだけでOKです。
$vi /etc/nginx/conf.d/your_app.conf
root /var/www/html/your_app/public;
$service nginx restart
URLにアクセスし「You have arrived.」と表示されていれば完了です。
PHPで文字化けせずにCSVファイルを読み込む方法
CSVを読み込むと「文字化けしている…」ってことがよくありますよね。そんな時の対処法です。
文字化けせずにCSVファイルを読み込む
まず、SplFileObjectでCSVファイルを読み込みます。
fgetcsv()でもいいのですが、参考にさせて頂いた「【PHP】その CSV 変換、本当に「fgetcsv」でいいの?」によると、一番速くメモリの使用量も少ないのはSplFileObjectだそうなのでコレを使います。
また、エンコーディングは文字列ではないのでmb_convert_encoding()ではなく、mb_convert_variables()を使ってUTF8にエンコードします。
/**
* CSVから配列を作成する関数
*
* @param $csv string CSVファイルのパス
* @return $array array UTF8エンコード済の配列
*/
function csv_to_array($csv) {
$file = new SplFileObject($csv);
$file->setFlags(SplFileObject::READ_CSV);
$array = array();
foreach ($file as $line) {
//空行はスキップ
if (empty($line)) continue;
$array[] = $line;
}
mb_convert_variables("UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"), $array);
return $array;
}
こんな感じで読み込めます。
$data = csv_to_array("ファイル名.csv");
PHPでスクレイピング&本文抽出をする方法・ライブラリ
引用する記事のタイトル&本文の抜粋を取得したい!
ということで、PHPでスクレイピング&本文抽出する方法を調べてみました。
[amazonjs asin=“4839956472” locale=“JP” title=“実践 Webスクレイピング&クローリング-オープンデータ時代の収集・整形テクニック”]
本文抽出に使用するライブラリ
いろいろと選択肢はあったのですが、今回はfivefilters.orgのPHP Readabilityを使ってみることにしました。
BitBucketのPHP Readabilityのレポジトリのものより、同じfivefilters.orgのFull-Text RSSレポジトリに使われているPHP Readabilityのほうが新しいっぽいのでこっちを使います。
ちなみにFull-Text RSS最新版のダウンロードは有償ですが、古いバージョンは無料で利用できます。また、APIの提供などもされているようなので気になる人は公式サイトをチェックしてみてください。
git cloneして、libraries / readability を好きなディレクトリに移動します。
$ git clone https://bitbucket.org/fivefilters/full-text-rss.git
PHP Readabilityの使い方
PHP Readabilityの使い方は簡単で、Readability.phpをrequireしてnew Readability($html, $url)とするだけです。
require_once '/PathToLibrary/readability/Readability.php';
//取得する記事URLを指定
$url = 'http://web-tsukuru.com/270';
//URLからHTMLを取得してUTF8にエンコーディング
$html = file_get_contents($url);
$html = mb_convert_encoding($html, "UTF-8", "ASCII,JIS,UTF-8,EUC-JP,SJIS" );
//tidy_parse_stringが使用可能であれば、
//tidy::cleanRepairでHTMLの誤りなどを修正
if (function_exists('tidy_parse_string')) {
$tidy = tidy_parse_string($html, array(), 'UTF8');
$tidy->cleanRepair();
$html = $tidy->value;
}
//Readabilityを初期化
$readability = new Readability($html, $url);
$result = $readability->init();
if ( empty($result) ) return false;
//タイトルを取得
$title = $readability->getTitle()->textContent;
//記事本文を取得
$content = $readability->getContent()->innerHTML;
//再度、tidy_parse_stringを使用
if (function_exists('tidy_parse_string')) {
$tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8');
$tidy->cleanRepair();
$content = $tidy->value;
}
タイトルの取得は、
$title = $readability->getTitle()->textContent;
記事本文の取得は、
$content = $readability->getContent()->innerHTML;
のようにできます。
記事本文はHTMLをそのまま取得しているので、strip_tags()などでHTMLを除去すると良さそうです。
そのほかのPHPで本文抽出する方法
有名なReadabilityは本文抽出に使えるAPIを非商用で提供しているみたいです。APIだと提供終了する可能性があるので、ちょっと微妙ですが軽く使ってみるには良さそうですね。
そのほか、今回は使ってないですが以下のようなライブラリがあるみたいです。 https://github.com/scotteh/php-goose https://github.com/essence/essence
また、Quoraに投げられた「HTMLから本文抽出する一番の方法は?」という質問も参考になります。
Quora | What’s the best method to extract article text from HTML documents?
Mecabにユーザー辞書を導入する(はてな、Wikipedia、ニコニコ大百科など)
Mecabにはてなキーワード、Wikipedia、ニコニコ大百科などを元にしたユーザー辞書を追加します。公式マニュアルはこちら。
ユーザー辞書を追加する流れは、
1.元データを取得してCSVファイルに変換 2.CSVファイルを辞書ファイルにコンパイル 3.Mecabの設定ファイルに追加
となります。
[amazonjs asin=“489476654X” locale=“JP” title=“Rで学ぶ日本語テキストマイニング”]
1.元データを取得してCSVを作成
今回は、例としてはてなキーワードを追加します。
まずは元データを取得します。
$ wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
次に「mecabにはてなキーワードのタイトルリストを追加する」を参考に以下のPHPスクリプトを実行してMecabのユーザー辞書用CSVファイルを作成します。
$v) {
if (preg_match("/[\",\n]/", $v)) {
$data[$k] = '"' . str_replace('"', '""', $v) . '"';
}
}
$line = implode(',', $data);
return $line;
}
//インポート元CSVとエクスポート先CSVを引数に指定
make_csv("keywordlist_furigana.csv","hatena.csv");
なおニコニコ大百科とWikipediaについては、以下のサイトの通りすれば追加できると思います。
ニコニコ大百科データからMeCab辞書を生成する mecabにwikipediaのタイトルリストを追加する
2.CSVからユーザー辞書を作成
下記のコマンドを実行して、csvファイルからユーザー辞書ファイル(.dic)にコンパイルします。
$ /usr/local/libexec/mecab/mecab-dict-index -d/usr/local/lib/mecab/dic/ipadic -u 辞書名.dic -f utf-8 -t utf-8 インポート元.csv
以下のコマンドで辞書を指定してmecabが使えれば問題なくコンパイルできています。
$ mecab -u 辞書名.dic
3.辞書をユーザー辞書として登録
任意のディレクトリに作成した辞書名.dicを移動します。今回は/usr/local/lib/mecab/dicにuserを作成して移動します。
$ mkdir /usr/local/lib/mecab/dic/user
$ mv 辞書名.dic /usr/local/lib/mecab/dic/user/辞書名.dic
/usr/local/lib/mecab/dic/ipadic/dicrc もしくは /usr/local/etc/mecabrc に以下を追加します。
userdic = /usr/local/lib/mecab/dic/user/辞書名.dic
これで完了です!