UbuntuでMediaWikiを動かす

関連パッケージをインストール。

takatoh@nightschool $ sudo -s
root@nightschool # apt-get install php5-intl php5-gd texlive php5-xcache

MediaWiki を公式サイトからダウンロード。

root@nightschool # wget http://releases.wikimedia.org/mediawiki/1.24/mediawiki-1.24.2.tar.gz

ファイルを展開して、出来たフォルダの名前を変更。

root@nightschool # tar zxvf mediawiki-1.24.2.tar.gz
root@nightschool # mv mediawiki-1.24.2 wiki

あとはブラウザで http://localhost/wiki/ にアクセスするとセットアップ画面になるので、Wiki の名前とかデータベースとかを促されるとおりに入力して行けばOK。最後に LocalSettings.php をダウンロードして、/var/www/html/wiki にコピー。

root@nightschool # cp /home/takatoh/Downloads/LocalSettings.php wiki

これでインストールは完了。Wiki のページにアクセスするとちゃんとできていた。

wiki-mainpage

[追記]

ついでにちょっと設定をかえておく。
まずはロゴ。$wgLogo を設定しろと表示されてるんではかっこ悪いので、標準で付属しているロゴを表示するようにする。LocalSettings.php の $wgLogo を変更。

wgLogo = "$wgScriptPath/skins/MonoBook/wiki.png";

ファイルのアップロードを有効にする。LocalSettings.php の $wgEnableUploads を true にする。

$wgEnableUploads = true;

それから、アップロード可能なファイルサイズを変更。これは MediaWiki じゃなくて PHP の設定。/etc/php5/fpm/php.ini を次のように変更。

upload_max_filesize = 8M

phpMyAdminをインストール

昨日、PHP をインストールしたので、MySQL のついでに phpMyAdmin をインストールしてみた。

参考ページ:

 cf. UbuntuにphpMyAdminをインストールするには – 初心者がWEB開発に挑戦

takatoh@nightschool $ sudo apt-get install phpmyadmin

インストールの途中で、Webサーバを聞いてくるけど Apache と Lighttpd しか選択肢がないので、Esc キーを押して続行。少しすると今度は phpmyadmin を設定するかと訊かれるので、YES。ユーザーとパスワードを設定しただけであとは何やらやっているよう。しばらくすると終わる。

これで http://localhost/phpmyadmin にアクセスすると行けるようだけど…あれ?だめだ。やっぱりさっきの Webサーバ選択のところで Nginx がなかったからか。ググってみた結果、/usr/share/phpmyadmin のシンボリックリンクを Nginx のドキュメントルートに作ればいいようだ。

takatoh@nightschool $ sudo ln -s /usr/share/phpmyadmin /var/www/html

今度はどうだ。
phpmyadmin

うまくいったようだ。

UbuntuにMySqlをインストール

apt-get でインストール。

takatoh@nightschool $ sudo apt-get install mysql-server

途中で root ユーザーのパスワードを入力するように促されるので、入力する(2回)。
バージョンの確認。

takatoh@nightschool $ mysql --version
mysql  Ver 14.14 Distrib 5.5.41, for debian-linux-gnu (x86_64) using readline 6.3

/etc/mysql に移動して、設定ファイル my.cnf に文字コードなど追記。…の前にバックアップをとっておく。

takatoh@nightschool $ sudo cp my.cnf my.cnf.orig
takatoh@nightschool $ sudo vim my.cnf

以下を追記。

[client]
default-character-set = utf8

[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

MySQL を再起動。

takatoh@nightschool $ sudo service mysql restart
mysql stop/waiting
mysql start/running, process 30969

MySQL にログイン。

takatoh@nightschool $ mysql -u root -p

ステータスを確認。

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.41, for debian-linux-gnu (x86_64) using readline 6.3

Connection id:		36
Current database:	
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.5.41-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
UNIX socket:		/var/run/mysqld/mysqld.sock
Uptime:			1 min 48 sec

Threads: 1  Questions: 109  Slow queries: 0  Opens: 171  Flush tables: 1  Open tables: 41  Queries per second avg: 1.009
--------------

うまくいってるっぽい?
プロセスの確認。

takatoh@nightschool $ ps aux | grep mysqld
mysql    30969  0.0  1.0 484440 42984 ?        Ssl  21:44   0:00 /usr/sbin/mysqld
takatoh  31111  0.0  0.0  16904   932 pts/4    S+   21:47   0:00 grep --color=auto mysqld

参考にしたページ:

 cf. UbuntuにMySQLをインストール – うまとま君の技術めも

UbuntuのNginxでPHPを動かす

ここのページが参考になった。

 cf. ubuntuのnginxでphpの環境設定と動作確認と使い方 – Joppot

php5-fpm をインストール

まずは、apt-get のリポジトリを最新にする。

takatoh@nightschool $ sudo add-apt-repository ppa:ondrej/php5
[sudo] password for takatoh: 
 This branch follows latest PHP packages as maintained by me & rest of the Debian pkg-php team.

You can get more information about the packages at https://sury.org

If you need to stay with PHP 5.4 you can use the oldstable PHP repository:

    ppa:ondrej/php5-oldstable

BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/pages/bugreporting.html

PLEASE READ: If you like my work and want to give me a little motivation, please consider donating: https://deb.sury.org/pages/donate.html
 詳しい情報: https://launchpad.net/~ondrej/+archive/ubuntu/php5
[ENTER] を押すと続行します。ctrl-c で追加をキャンセルできます

gpg: 鍵輪「/tmp/tmpbrietwz8/secring.gpg」ができました
gpg: 鍵輪「/tmp/tmpbrietwz8/pubring.gpg」ができました
gpg: 鍵E5267A6Cをhkpからサーバーkeyserver.ubuntu.comに要求
gpg: /tmp/tmpbrietwz8/trustdb.gpg: 信用データベースができました
gpg: 鍵E5267A6C: 公開鍵“Launchpad PPA for Ondřej Surý”を読み込みました
gpg: 処理数の合計: 1
gpg:               読込み: 1  (RSA: 1)
OK

apt-get の情報をアップグレード。

takatoh@nightschool $ sudo apt-get upgrade

出力は長いので省略。

php5-fpm のインストール。

takatoh@nightschool $ sudo apt-get install php5-fpm
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  ax25-node firefox-locale-en libax25 linux-headers-3.13.0-34
  linux-headers-3.13.0-34-generic linux-image-3.13.0-34-generic
  linux-image-extra-3.13.0-34-generic openbsd-inetd
これを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
  php5-common php5-json
提案パッケージ:
  php5-user-cache php-pear
以下のパッケージが新たにインストールされます:
  php5-common php5-fpm php5-json
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
2,667 kB のアーカイブを取得する必要があります。
この操作後に追加で 10.6 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main php5-json amd64 1.3.2-2build1 [34.4 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main php5-common amd64 5.5.9+dfsg-1ubuntu4.7 [442 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/universe php5-fpm amd64 5.5.9+dfsg-1ubuntu4.7 [2,191 kB]
2,667 kB を 1秒 で取得しました (1,354 kB/s)
以前に未選択のパッケージ php5-json を選択しています。
(データベースを読み込んでいます ... 現在 635170 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../php5-json_1.3.2-2build1_amd64.deb ...
Unpacking php5-json (1.3.2-2build1) ...
以前に未選択のパッケージ php5-common を選択しています。
Preparing to unpack .../php5-common_5.5.9+dfsg-1ubuntu4.7_amd64.deb ...
Unpacking php5-common (5.5.9+dfsg-1ubuntu4.7) ...
以前に未選択のパッケージ php5-fpm を選択しています。
Preparing to unpack .../php5-fpm_5.5.9+dfsg-1ubuntu4.7_amd64.deb ...
Unpacking php5-fpm (5.5.9+dfsg-1ubuntu4.7) ...
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
php5-common (5.5.9+dfsg-1ubuntu4.7) を設定しています ...

Creating config file /etc/php5/mods-available/pdo.ini with new version
php5_invoke: Enable module pdo for fpm SAPI

Creating config file /etc/php5/mods-available/opcache.ini with new version
php5_invoke: Enable module opcache for fpm SAPI
php5-fpm (5.5.9+dfsg-1ubuntu4.7) を設定しています ...

Creating config file /etc/php5/fpm/php.ini with new version
php5_invoke pdo: already enabled for fpm SAPI
php5_invoke opcache: already enabled for fpm SAPI
php5-fpm start/running, process 10089
php5-json (1.3.2-2build1) を設定しています ...
php5_invoke: Enable module json for fpm SAPI
Processing triggers for ureadahead (0.100.0-16) ...

これでインストール完了。

php-fpmのsocketを変更

/etc/php5/fpm/pool.d に www.conf というファイルがある。これを編集…と思ったら、すでにソケットを利用する設定になっていた。

listen = /var/run/php5-fpm.sock

なので、変更なし。変更してないので、すでにソケットがあるはず。

takatoh@nightschool $ ls /var/run
NetworkManager  lock                        sendsigs.omit.d
acpid.pid       motd.dynamic                shm
acpid.socket    mount                       sshd
alsa            network                     sshd.pid
atd.pid         network-interface-security  systemd
avahi-daemon    nginx.pid                   udev
crond.pid       php5-fpm.pid                udisks2
crond.reboot    php5-fpm.sock               upstart-file-bridge.pid
cups            plymouth                    upstart-socket-bridge.pid
dbus            pm-utils                    upstart-udev-bridge.pid
initramfs       pppconfig                   user
kerneloops.pid  resolvconf                  utmp
lightdm         rsyslogd.pid                wpa_supplicant
lightdm.pid     sdp

php5-fpm.sock というのがそうだ。

Nginxの設定を変更

昨日作ったデフォルトホストの設定ファイル(/etc/nginx/sites-available/nightschool)を編集して、以下を追加する。

# For PHP
location ~ \.php$ {
    root /var/www/html;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Nginx に設定を反映。

takatoh@nightschool $ sudo nginx -s reload

PHPファイルを作成

/var/www/html の中に phpinfo.php を作成。

<!--?php
  phpinfo();
?-->

ブラウザで確認

phpinfo

http://localhost/phpinfo.php にアクセスすると次のようになった。

めでたく完了。

Nginxにデフォルトのバーチャルホストを設定する

家庭内 LAN 向けにバーチャルホストをたてようというのが動機。現状では、サーバに HTTP でアクセスすると Sinatra アプリが応答してしまっていた。
設定方法は↓このページが参考になった。

 cf. nginxでデフォルトのバーチャルホストを設定する方法 – Linux入門

答えは簡単で、listen ディレクティブに default_server と書き足すだけでいい。これがないと、最初に読み込まれたバーチャルホストがデフォルトになるので、今まで Sinatra アプリのサーバが応答していたってわけだ。

/etc/nginx/sites-available に nightschool という名前で設定ファイルを作って、/etc/nginx/sites-enabled 以下にシンボリックリンクを作成。作った設定ファイルはこれ。

server {
    # port
    listen 80 default_server;

    # server name
    server_name nightschool;

    # document root
    root /var/www/html;

    # index
    index index.php index.html index.htm;

    # log files
    access_log /var/log/nginx/nightschool/access.log combined;
    error_log /var/log/nginx/nightschool/error.log warn;
}

ドキュメントルートとログファイルのためのディレクトリを作って、ドキュメントルートには index.html ファイルをおいた。

<html>
  <body>
    <h1>Hello, welcome!</h1>
    This is nightschool.
  </body>
</html>

あとは Nginx を再起動して完了。

takatoh@nightschool $ sudo service nginx stop
takatoh@nightschool $ sudo service nginx start

確認のために Windows PC からアクセスしたところ、ちゃんと index.html の内容が表示された。

default-vhost

Windows7のhostsファイルに書き込む方法

hosts ファイルは C:\Windows\System32\drivers\etc にあるんだけど、普通にやったんでは権限がないとか言われて保存できない。管理者権限を持ったユーザーでも。

どうやるのか調べた結果、次のとおりにする。

  1. スタートメニューから、メモ帳を「管理者として実行」
  2. メモ帳のファイルメニューから hosts ファイルを開く
  3. 編集して上書き保存

このやり方だとちゃんと保存できる。

Nginx+Unicorn:静的ファイルをNginxで配信しようとしてハマった

目的

Nginx + Unicorn でアプリを動かしている状態で、/static 以下の URL に対するリクエストだけ /var/www/html_doc から配信したい。

ダメだった設定

ググっていくつかのページを参照しながら、次のように location ディレクティブを設定した。

location /static {
    root /var/www/html_doc/;
    break;
}

これだとうまくいかない。

原因と解決

error.log を見てみると、/static/path/to/file.html にアクセスした時に /var/www/html_doc/static/path/to/file.html を探しているのが分かった。どうも URL の一部である /static は置き換えてくれるわけじゃないらしい。
というわけで、下のように自前で rewrite したらうまくいった。

location /static {
    root /var/www/html_doc/;
    rewrite '^/static(.*)$' $1;
    break;
}

Nginxで同一IPからのコネクションを制限する

limit_conn_zone ディレクティブと limit_conn ディレクティブを使う。
ここのページが参考になった。

 cf. http://wiki.nginx.org/HttpLimitConnModuleJa

まずはゾーンの設定。これは制限の対象を何にするかの定義みたい。/etc/nginx/nginx.conf の http セクションの中で定義する。こんな感じ。

limit_conn_zone $binary_remote_addr zone=addr:2m;

$binary_remote_addr という変数は Nginx に標準で定義されている変数で、アクセスして来たクライアントのIPアドレス(バイナリ)が入っている。これをキーにしている、つまり制限の対象にしているわけだ。で、その設定に、addr という名前をつけている。2m と書いてあるのは、キーを保存するためのメモリーを確保しているみたい。

さて、次は実際に制限を設定するほう。例えば、vhost.example.com というバーチャルホストに対するアクセスを制限したければ、/etc/nginx/sites-enabled/vhost.exmaple.com の
server セクションに次のように設定する。

limit_conn addr 1;

これで、同一IPからのコネクションを同時に1つだけに制限できる。

なんか情報が少なくて自信がないけど、EC2 で動かしてるサーバーで試してみたら、ちゃんと制限されて2つ目のコネクションには 503 が帰ってきたので、多分あってる。

Amazon EC2を試してみた:(4)インスタンスに固定IPをつける

Elastic IP というのを使うようだ。

EC2 の Dashboard ページから、Elastic IPs を選んでページを移動、Allocate New Address をクリックする。
これだけで、新しい IP アドレスが作成された。

今できたアドレスを右クリックして Associate Address を選ぶ。出てきたダイアログでひもづけるインスタンスを選んで、Associate ボタンをクリック。
これで OK のようだ。

ちゃんと Elastic IP がひもづけられているのを、次の2つで確認した。

  • ssh で接続できる
  • ブラウザで接続できる(Nginx のページが表示される)

追記

インスタンスをいったん停止して、再度起動してからも同じ IP で接続できることも確認した。