Tag Archives: Apache

WordPress + SQLite3 + Docker で1分もかけずにブログを作る

最近、Dockerイメージの作成がマイブームかも知れません。
今回はイメージさえあればWordPressを1分もかけずに構築できるイメージを作成してみました。

# vi Dockerfile

FROM centos:7

# 必要なパッケージをインストール
RUN yum -y update
RUN yum -y install httpd httpd-devel zip unzip tar wget
RUN yum -y install php php-xml php-pdo php-gd php-mbstring sqlite sqlite-devel

# WordPressをインストールしてSQLite3で動作するように設定
RUN wget https://ja.wordpress.org/latest-ja.tar.gz
RUN wget https://downloads.wordpress.org/plugin/sqlite-integration.1.8.1.zip
RUN tar xvfz ./latest-ja.tar.gz
RUN unzip ./sqlite-integration.1.8.1.zip
RUN rm -f ./latest-ja.tar.gz
RUN rm -f ./sqlite-integration.1.8.1.zip
RUN mv wordpress /var/lib/wordpress
RUN chown -R apache.apache /var/lib/wordpress
RUN mv /var/lib/wordpress/wp-config-sample.php /var/lib/wordpress/wp-config.php
RUN mv sqlite-integration /var/lib/wordpress/wp-content/plugins/
RUN mv /var/lib/wordpress/wp-content/plugins/sqlite-integration/db.php \
       /var/lib/wordpress/wp-content/

# ひな形を公開ディレクトリにコピーする
RUN cp -rpf /var/lib/wordpress/* /var/www/html/

# ログイン時にひな形から展開するように定義する
RUN echo "yes n | cp -ripf /var/lib/wordpress/* /var/www/html/ > /dev/null 2>&1" >> /root/.bash_profile

EXPOSE 80
VOLUME /var/www/html

RUN systemctl enable httpd

EXPOSE 80

# docker run --privileged -itd -p 8080:80 -v /root/wordpress/public_html:/var/www/html wordpress-sqlite bash -l -c "/sbin/init"

ブログの実態はホスト側で持つので保管先のディレクトリを作成
# mkdir -p /root/wordpress/public_html
# chmod 777 /root/wordpress/public_html

コンテナ起動
# docker run –privileged -itd -p 8080:80 -v /root/wordpress/public_html:/var/www/html wordpress-sqlite bash -l -c “/sbin/init”

ブラウザで http://127.0.0.1:8080 にアクセスしてWordPressのインストール画面が表示されれば成功です。

MySQLのコンテナを作成してDBとユーザを作ってボーリュームの指定をして・・・
というのが面倒だったので小規模ならSQLite3でもいいでしょ?っというノリで作ってみました。

Apacheを使いましたが、よくよく考えて見ればNginxでも良かったなと失敗した感が・・・。
そのうち、Nginxとphp-fpmとSQLite3を組み合わせたDockerイメージを作成してみたいと思います。

Webアプリケーションファイアウォール mod_security を導入した上でmuninでApacheのグラフを表示させる方法

中々、mod_securityを導入した中でmuninでApacheのグラフを表示させてる人がいないのか対策方法が紹介されていないのでメモします。

muninはApacheのデータを取得するためlocalhostのserver-statusにアクセスする。
しかし、mod_securityを導入している環境だとError 406 で取得できない。
(wget http://127.0.0.1 と実行すると分かりやすい。)
そのため、muninが通るようにWebアプリケーションファイアウォールに穴を開ける。

対象となるルール ユーザエージェントでボットを判別している。
# /etc/httpd/modsecurity.d/base_rules/modsecurity_crs_35_bad_robots.conf
アクセス規制対象のロボット一覧から対象のボット名を探し削除する。
# vi /etc/httpd/modsecurity.d/base_rules/modsecurity_35_bad_robots.data

削除対象
perl
libwww-perl
wget ←必要があれば削除

Apacheに設定適用
# service httpd restart

Apache 2 Test Page powered by CentOS を表示させない

ずいぶん前にサンプルページが表示されないように設定していたはずなのに何故か度々表示されるようになったので調べてみたところ、設定ファイルwelcome.confが復活していた。

削除してもバージョンアップすれば自動で作成されるとのこと。
一応表示させない為に下記のコマンドを実行した。

mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.backup

Apacheのアクセスログを一斉にIPからHOSTへ変換する方法 CentOS

Apacheのアクセスログ(/var/log/httpd/access_log)に含まれるIPアドレスを一斉にHOST名に変更したいと思うことがしばしばある。
しかし、あまり方法が紹介されていないようなので今回書いておこうと思った。

Apachjeにはログに含まれるIPアドレスを自動的にHOST名に変換してくれるlogresolveというコマンドがある。今回これを使い一括して変換を行なおうと思う。

コマンドの形式
# logresolve < 生ログのファイル > 変換した出力先ファイル
例:
# logresolve < /var/log/httpd/access_log > ./laccess_log

これにより/var/log/httpd/access_logに含まれるIPアドレスを一括して変換し./laccess_logへ結果を保存することができる。

特定のサイトからのアクセスを強制転送させる

リファラから特定のサイトからのアクセスか判断し、指定したページにリダイレクトする.htaccessを公開します。

例:2chからのアクセスをhttp://jump.orsx.net/リファラに転送させてジャンプ確認画面を表示させます。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} .*ime.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*2ch.*$ [NC]
RewriteRule ^(.*)$ http://jump.orsx.net/%{HTTP_HOST}/$1
</IfModule>