Debian GNU/LinuxパッケージでWordPress

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

 

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のパスワードを設定する必要があります。今回は利用しませんが、後で重要な変更がある場合に利用するので何かに控えておいてください。

01mysqlのrootパスワード設定


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ファイルは変更する事が可能です。このファイルを作っておくと、特定のドメイン名にマッチしない場合、このファイルを見ます

 /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');
?>

パスワードは、セキュリティの高いものを設定してください


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

このURLにアクセスしてください
http://ホスト名/wp

02Wordpress初期設定

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

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がよくまとまっています。英語が読める方はぜひこちら。

WordPress - 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のメール受信設定をし、メールを受信したらそれを投稿できる
受信したメールは即時公開になる
機能要件として、できたら、新規メールはいったん投稿保留し、内容を精査してから公開したい

http://wppluginsj.osdn.jp/ktai_entry/

公開設定について

下書きにするメール本文のどこかに

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で止まっているし。業務用途で利用しようと思うと一抹の不安があります。

http://www.yuriko.net/cat/wordpress/

 

 

メール投稿を可能にするプラグイン2

Postie
Popのメール受信設定をし、メールを受信したらそうれを投稿できる
受信したメールを一度下書き(Draft)にするか、即時公開するか設定が可能⇒要件ぴったり
Gmailを利用して投稿したい場合、POP3-SSLが必要となり追加パッケージのインストールが必要

apt-get install php5-imap
apache2ctl graceful

 注意

まずは、WordPressで登録されている管理者ユーザのメールアドレスからは投稿可能になっている。登録されていないアドレスからの投稿があった場合、管理者ユーザに登録のないアドレスから投稿があった旨と、もしそれを許可したいならメールアドレスを登録するように促される。

投稿を許可するメールアドレス設定は曲者で、そこにe-mailアドレスを登録するだけで動かない。ユーザを作成して、そこに登録したアドレスで試してみるもやはりだめだった。

メールにショートコードを記載し、掲載をコントロールするAddOnがあるが、費用がかかる

Shortcodes 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 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から考えても固定ページなどはキーワードになる英文でのリンクにした方がいいですね。

タイトルとURLをコピーしました