本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
Debain GNU/Linuxで管理されているパッケージにてWordPressサーバを構築します。こちらの方法で構築を進めるとMySQLや、PHPなどの挙動の事を知らない人もWordPressサーバ設定の要所をつかむことができます。最終的には、WordPressを直接ダウンロードして設定する事をお勧めしますが、Debianパッケージで構築を進めるとMySQLやPHPなどほとんど使っていない私でもスムーズに設定する事ができ、なおかつ、どの設定ファイルがどのようにかかわっているかが分かって理解が深まりました。
必要パッケージのインストール
apt-get install wordpress curl apache2 mysql-server wordpress-l10n
※curl
wordpressで利用する
command line tool for transferring data with URL syntax
途中でMySQLのパスワードを設定する必要があります。今回は利用しませんが、後で重要な変更がある場合に利用するので何かに控えておいてください。
apacheにてサイト公開の設定
http://ホスト名/wp にて表示するためのコンフィグです。
# vi /etc/apache2/sites-available/wp.conf Alias /wp/wp-content /var/lib/wordpress/wp-content Alias /wp /usr/share/wordpress <Directory /usr/share/wordpress> Options FollowSymLinks AllowOverride Limit Options FileInfo DirectoryIndex index.php Require all granted </Directory> <Directory /var/lib/wordpress/wp-content> Options FollowSymLinks Require all granted </Directory>
上記設定を有効にし、apacheを再起動します。
サイトを利用できるようにします # a2ensite wp apache2サーバを再起動します # service apache2 reload
WordpressからMySQLに接続するためのconfig作成
ドメイン名によって、WordPressファイルは変更する事が可能です。このファイルを作っておくと、特定のドメイン名にマッチしない場合、このファイルを見ます
/etc/wordpress/config-default.php <?php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'password'); define('DB_HOST', 'localhost'); define('WP_CONTENT_DIR', '/var/lib/wordpress/wp-content'); ?>
パスワードは、セキュリティの高いものを設定してください
WordPressからアクセスできるDBを構築します
SQLファイルを作成します
vi ~/wp.sql CREATE DATABASE wordpress; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
※ユーザ名、パスワードは上記(wp-config.php)で作成したパスワードに合わせてください
データベースを作成します
cat ~/wp.sql | mysql --defaults-extra-file=/etc/mysql/debian.cnf
WordPress初期設定画面
このURLにアクセスしてください
http://ホスト名/wp
5分インストール画面が表示されます
WordPressの初期設定としては、タイムゾーンの設定のみ行います。もし、マルチサイト設定(ディレクトリごとにテーマを分けたいとか、サブドメイン構成でWordpressを設定したい場合)は日本語表示設定はちょっと我慢してください。マルチサイト設定した時に文字化けが発生します。特にマルチサイト設定を考えない場合は、ここで日本語設定します。
パーマリンク設定を変更したい
この状態でパーマリンク設定を変更し、該当ページを表示させようとするとエラー表示になりページを見る事ができません
Not Found
The requested URL /wp/test was not found on this server.
※パーマリンクとは
パーマリンクとは、固定ページやブログ投稿、カテゴリー・タグアーカイブなどの永続的 (パーマネント) な URL のことです。パーマリンクは、コンテンツにリンクするための Web アドレスです。各投稿の URL は永続的で、変更されるべきではありません。このため「パーマリンク」という名称になっています。
WordPressにてパーマリンクの設定を変更する場合に .htaccessファイルを利用してmod_rewriteルールを有効にする必要があります。
まずmod_rewrite.soが有効になっているかを確認します。デフォルト設定では、有効になっていません。
mod_rewrite.soを有効にする
apache2ctl -Mコマンドを利用してmod_rewrite.soが有効になっているか確認します
apache2ctl -M Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) filter_module (shared) mime_module (shared) mpm_prefork_module (shared) negotiation_module (shared) php5_module (shared) setenvif_module (shared) status_module (shared)
rewriteモジュールを有効にします
/etc/apache2/sites-available# a2enmod rewrite Enabling module rewrite. To activate the new configuration, you need to run: service apache2 restart
apacheを再起動します
etc/apache2/sites-available# /etc/init.d/apache2 restart [ ok ] Restarting apache2 (via systemctl): apache2.service.
すると、rewriteモジュールが有効になったことが分かります
/etc/apache2/sites-available# apache2ctl -M Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) filter_module (shared) mime_module (shared) mpm_prefork_module (shared) negotiation_module (shared) php5_module (shared) rewrite_module (shared) setenvif_module (shared) status_module (shared)
.htaccessファイルを作成します
○「AllowOverride」ディレクティブはすでに有効になっているので .htaccessファイルをおく
(というか、事前にDebianでは.htaccessファイルが配置されているが有効な位置関係になっていないため、以下を貼り付ける
/usr/share/wordpress# vi .htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wp/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp/index.php [L] </IfModule>
プラグインやテーマの更新に対応する
テーマなどを更新する際には、直接ダウンロードする設定か、FTP設定を行います。直接ダウンロード設定にされる方が多いようです。Debianでは直接ダウンロード設定した際にコツがあります。
パッケージを展開しています…
ディレクトリを作成できませんでした。
というエラーが表示されます。
Debianのwpコンフィグファイルと、ダウンロードファイルはフォルダ階層が違うので要注意です。
wordpressの基本的なファイルの置き場所
/usr/share/wordpress
wordpressのwp-contentの場所
/var/lib/wordpress/wp-content
まずは wp-config.php の編集。直接ダウンロード設定にします。
以下の一行を 一番下の?>の前に追加する
/usr/share/wordpress# vi wp-config.php define('FS_METHOD', 'direct');
フォルダに書き込みができるようアクセス権の設定を行います。
/var/lib/wordpress/wp-content# mkdir upgrade /var/lib/wordpress/wp-content# chmod 707 plugins/ themes/ upgrade/ var/lib# chown -R www-data:www-data wordpress/
もしくはこのようにします。
chmod 707 wp-settings.php chmod -R 707 wp-includes chmod -R 707 wp-admin chmod -R 777 wp-content/ chown -R www-data:www-data wp-content/
解説しているサイトによって、上記権限設定はまちまちです。どちらがいいのか私には判断ができず最近は下の方の設定で運用していますが、いまのところホームページの改ざんなどは起きていません。
設定がおかしくなったので初期化してやり直したい
WordPressを削除します
dpkg --purge wordpress wordpress-l10n rm -R /var/lib/wordpress rm -R /etc/wordpress
MySQL DBを初期化します
mysql -u ユーザー名 -D データベース名 -p DROP DATABASE wordpress; exit
Debian独特の設定マニュアルを確認したい
less /usr/share/doc/wordpress/README.Debian
But the default themes and plugins (installed in /usr/share/wordpress/wp-content/) are owned by the root user. If you want those to be editable, you should remove the corresponding symlink in
/var/lib/wordpress/wp-content/ and put there a full copy of the default themes and plugins. Then you should re-run the previous chown command.
この辺を読むと、Debainでのフォルダ階層など理解が深まります。
また、debian Wikiがよくまとまっています。英語が読める方はぜひこちら。
サブディレクトリ型での運用
usr/share/wordpress# vi wp-config.php
以下、一行を追記
define(‘WP_ALLOW_MULTISITE’, true); ←Debianでは必要ない?もともと有効になっている
ネットワークの設定
WordPress管理画面で「ツール」→「ネットワークの設置」
画面に書かれている手順でファイルを変更する
blogs.dirのパーミッションを変更する
/var/lib/wordpress/wp-content# chmod -R 707 blogs.dir/
○WordPressに明示的にログインしたい
http://インストールしたホスト/wp/wp-login.php
使えそうなプラグインあれこれ
会員制サイトの構築
Simple Membership
日本語表示されないので日本語化
/var/lib/wordpress/wp-content/plugins/simple-membership/languages# mv swpm-ja_JA.mo swpm-ja.mo
色々な事が出来そうだが、マルチサイトに対応していない。結局利用しなかった。
WordPressマルチサイトにBASIC認証をかける
Basic Authentication
.htaccessに
RewriteRule ^/wp-content/uploads/sites/3/(.*) wp-content/plugins/basic-authentication/basic-auth-fileprotect.php?_folder=$1&_protect=$2 [QSA]
RewriteRule ^/wp-content/themes/(.*) wp-content/plugins/basic-authentication/basic-auth-fileprotect.php?_folder=themes&_protect=$2 [QSA]
を追記する
共通のパスワードでアクセス管理を行い時に、理解しやすく便利
サイトの閲覧をログインユーザのみにする
Members Only
WordPress自体に、ユーザ管理機能がある。基本的にサイトは全公開で、それをどのようにさせるかが権限管理。これをログインしたユーザだけがアクセスできるようにする。一番利用感覚に合っている。
目次を自動的に生成する1
TablePress
見出しに設定したものを自動的に目次にしてくれる。小見出しはインデントして目次に追加してくれて、非常に使い勝手が良い。長文マニュアル系には必須。
目次を自動的に生成する2
Table of Contents Plus
見出しに設定したものを自動的に目次にしてくれる。小見出しはインデントして目次に追加してくれて、非常に使い勝手が良い。長文マニュアル系には必須。このサイトで利用しているのはこのプラグイン。
メール投稿を可能にするプラグイン1
Ktai Entry
Popのメール受信設定をし、メールを受信したらそれを投稿できる
受信したメールは即時公開になる
機能要件として、できたら、新規メールはいったん投稿保留し、内容を精査してから公開したい
公開設定について
下書きにするメール本文のどこかに
DRAFT
と書きます。1行の中に「DRAFT」以外の文字列を書いてはいけません。DRAFT は行頭にある必要があります。
レビュー待ちにするメール本文のどこかに
PENDING
と書きます。1行の中に「PENDING」以外の文字列を書いてはいけません。PENDING は行頭にある必要があります。WordPress 2.2 以前では「レビュー待ち」機能がないため、下書きの指定になります。
未公開にするメール本文のどこかに
PRIVATE
と書きます。1行の中に「PRIVATE」以外の文字列を書いてはいけません。PRIVATE は行頭にある必要があります。
カテゴリ指定について
カテゴリー指定の方法
臨時的にカテゴリーを「メール投稿時のデフォルトカテゴリー」以外に変更したい場合は、メール本文のどこかに、
CAT:カテゴリーID または CAT:カテゴリー名 または CAT:カテゴリースラッグ (WordPress 2.3 以降のみ対応)
- 「CAT:」の文字列は行頭に書くことが必要です。
- コマンド文字列は投稿本文からは削除され、見えなくなります。
うーん、メールからカテゴリ変更のコマンドを送信できるのは魅力だなぁ。とりあえず全ての投稿を下書きに入れてみたいんだけど。基本は、ユーザの権限による。メール投稿のみ下書きに入れたいという要件。
強引に全ての投稿を下書きにする設定は可能。
ktai-entry/inc/post.php の編集
/* ==================================================
* @param none
* @return string $status
*/
private function decide_status() {
/* ==================================================
return $status; 強引に、status決定部分ですべてdraftを返すようにすると、どのユーザからの投稿でも下書きに入る
*/
return ‘draft’;
}
ちなみに、登録のないユーザ(メールアドレス)からメールが送られてくると、何事もなかったように無視される
Gmailで設定した場合のコツ
メールサーバー | ssl://pop.gmail.com |
---|---|
ポート | 995 |
ログイン名 | (Gmail アドレス)例: hanako@gmail.com |
パスワード | (パスワード) |
※Gmailの設定
Gmail の「設定」で「メール転送と POP / IMAP 設定」→「POP ダウンロード」→「今後受信するメールで POP を有効にする」
どうもうまく投稿されたメールが表示されない場合にログを吐かせたい
投稿がうまく処理されないときの問題点の洗い出し、不正アクセスの検出などのために、メール投稿処理のログを取ることができます。ktai_entry.php の 27 行目にある//define('KE_LOGFILE', 'logs/error.log');
のコメントを外します。すると、ktai_entry ディレクトリー配下の log ディレクトリーに error.log が作られます。念のため、手動で log ディレクトリーおよび error.log ファイルを作成して、chmod 0777 および chmod 1666 しておいた方が確実です。
/var/www/wordpress01/wp-content/plugins/ktai-entry# ls DOCUMENTS README.txt ktai_entry.php logs wp-load.php README.ja.html inc languages sunrise.php
define('KTAI_LOGFILE', 'logs/error.log'); define('KTAI_ENTRY_DEBUG', true);
ムム、手動で実行した時以外メール受信してないみたい
Wordpress最新版だとktai entryの定期実行がうまく動かない事があるらしい
CRONに以下を設定して試す
*/2 * * * * /usr/bin/php5 /var/www/wordpress01/wp-content/plugins/ktai-entry/inc/retrieve.php 1> /dev/null
やっとうまく自動受信してくれるようになりました。
ktai entryのメンテナンスは止まっているようです。作者さんのブログは2014で止まっているし。業務用途で利用しようと思うと一抹の不安があります。
メール投稿を可能にするプラグイン2
Postie
Popのメール受信設定をし、メールを受信したらそうれを投稿できる
受信したメールを一度下書き(Draft)にするか、即時公開するか設定が可能⇒要件ぴったり
Gmailを利用して投稿したい場合、POP3-SSLが必要となり追加パッケージのインストールが必要
apt-get install php5-imap apache2ctl graceful
注意
まずは、WordPressで登録されている管理者ユーザのメールアドレスからは投稿可能になっている。登録されていないアドレスからの投稿があった場合、管理者ユーザに登録のないアドレスから投稿があった旨と、もしそれを許可したいならメールアドレスを登録するように促される。
投稿を許可するメールアドレス設定は曲者で、そこにe-mailアドレスを登録するだけで動かない。ユーザを作成して、そこに登録したアドレスで試してみるもやはりだめだった。
メールにショートコードを記載し、掲載をコントロールするAddOnがあるが、費用がかかる
$29
下書き投稿や、カテゴリ、タグ、投稿日付など、ショートコードを記載する事でコントロールできる。さらに自分でショートコードを作成する事も可能。(無料だったら試すけど、、、。)
こちらだと、メールからカテゴリ分けするのは有料だなぁ。と考えると、ktai entryの方が無料で使えていいかも。
ちなみに、メールアドレス登録のないユーザからのメール投稿があると、apacheログファイルに記録が残るのと、管理者にもメルアドレスを登録するよう促すメールが届く
ファイルのダウンロードを可能にする
WordPress Download Manager
PHP設定にてアップロード容量変更可能
アップロードは、投稿するような形で一度追加しておき、表示されるShort-codeをホームページに記載する事でダウンロード可能となる。
ユーザ一括登録を可能にする
Import users from a CSV file
CSVファイルからユーザの一括登録ができる。WordPress標準の権限分けにも対応する。権限表記role項目は「administrator(管理者)」「editor(編集者)」「author(投稿者)」「contributor(寄稿者)」のいずれか。
日本語を入れて登録してみたが、日本語が反映されず残念と思ったら、Shift JISが対応していない。UTF-8に保存しなおして読み込ませたらすべて反映された。CSVの取り扱いは普通Excelでやりますよね?保存するとCSVになるので注意。基本的にExcelでCSV保存の際は、文字コードの変更に対応していないので、保存されたCSVをUTF-8で保存しなおす必要があります。
ユーザー権限を細かく管理する
User Role Editor
ユーザ権限を、新しく作成し、細かく作る事ができる。Inport users from a CSV fileと組み合わせ、ユーザ登録時新しく作成した権限をユーザに割り当てCSVファイルから一括で読み込む事も可能。
ユーザグループを作成し、固定ページや、カテゴリごとに割り当て可能
User Access Manager
グループを作成し、グループにユーザを割り当て、そのグループごとに、公開できるページを設定できる。
ビジュアルエディタの機能アップ
TinyMCE Advanced
HTMLの書き方が分からなくてもビジュアル的に表の挿入などができるようになるなど、ビジュアルエディタの機能を向上させる。
MySQL文字コード統一化
マルチサイト設定にした際に、一番ベースになる日本語ページが文字化けを起こし、どうしても治らなかった。その時に試したのが、MySQL DBの文字コードをUTFに統一する事。マルチサイト設定後の文字化けには効果はなかったが、いつか役に立つかもしれないので記載。
※マルチサイト化で文字化けは日本語設定にするタイミングをマルチサイト化後にしたことがで回避出来た。Wordpressにログイン後、喜んですぐに日本語化し、その後マルチサイト化するとダメ。マルチサイト化が済んでから日本語化する事
/var/lib/wordpress/wp-content/blogs.dir# mysql -u wordpress -D wordpress -p mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
一般的にlatinがあると日本語が文字化けするという情報あり
そこで下記設定を施して、MySQLをリスタート
/etc/my.cnf [mysqld] ... character-set-server=utf8 #mysqldセクションの末尾に追加
[client] default-character-set=utf8 #clientセクションを追加
すべてUTF-8になった
mysql> SHOW VARIABLES LIKE 'char%' -> ; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
リンクがうまく貼れない時に見直すべき事
WordPressに記事を書いてプレビューは見れるのに、公開すると表示できない。指定のURLを開いても見れない場合確認すべきことです。
1)mod_rewriteモジュールは有効になっていますか?apache2ctl -Mコマンドにて、mod_rewriteが出てくるか確認してください。
2).htaccessファイルの内容は合っていますか?WordPressに表示されている.htaccessは、記載が隠れている場合もあります。また、Debianパッケージでインストールした場合、通常のディレクトリ構成と違うのでWordPressに表示されるものをそのまま張り付けると動かない事があります。
RewriteRule . /wp/index.php [L]
がポイントです。こちらを参考にされてください。
3)日本語パーマリンクになっていませんか?WordPressのバージョンによっては404エラーになる事があります。SEOから考えても固定ページなどはキーワードになる英文でのリンクにした方がいいですね。