Flaskアプリを引っ越す(4)

前回でやっと終わったと思った Flask アプリの引っ越し、終わってなかった。
動作確認で、表示や検索の確認はできたのでそれで OK と思っていた。ところが、今日データを更新しようとしたらエラーになって更新できないことが判明。どうやらデータベース周りのエラーらしい。
そういえば、データベースを初期化した時にメッセージが出てた。Warning だったのでとりあえずそのままにしたんだけど、あれがダメだったのか?
ともかく新しいデータを登録できない状況で、アプリを改修しなきゃいけなさそう。そのためには、apostrophe で動いているもうひとつの Web アプリ(こっちは Rails 製)の引っ越しをして、apostrophe を 16.04 LTS にアップグレードしなきゃならない。そうでないと開発環境が整わないから。
ああ、道は遠いな。

Flaskアプリを引っ越す(3)

昨日は、Ubuntu 起動時にアプリを自動起動する systemctl enable コマンドでエラーが出る、というところで終わった。

動いている

エラーが出ているのでてっきり自動起動に失敗しているものとばかり思っていたけど、ちゃんと enabled になっていた。

bruschetta@wplj:~$ systemctl list-unit-files | grep bruschetta
bruschetta.service                         enabled
bruschetta@wplj:~$ systemctl status bruschetta
● bruschetta.service - Bruschetta service
   Loaded: loaded (/lib/systemd/system/bruschetta.service; enabled; vendor prese
   Active: active (running) since 火 2017-02-28 22:42:15 JST; 6h ago
  Process: 1105 ExecStart=/etc/init.d/bruschetta start (code=exited, status=0/SU
 Main PID: 1138 (uwsgi)
   CGroup: /system.slice/bruschetta.service
           ├─1138 uwsgi bruschetta.ini
           ├─1569 uwsgi bruschetta.ini
           └─1570 uwsgi bruschetta.ini

試しにリブートしてみても、ちゃんと自動起動していることを確認した。
うーん、ますます訳がわかんなくなってきた。が、まあいい、この件は後でゆっくり調べることにして、先に進めよう。

データベースファイルをコピー

apostrophe からデータベースファイルをコピーする。Sqlite3 なので、単にファイルを上書きコピーすればいいだけだ。

bruschetta@wplj:~/bruschetta/bruschetta$ scp bruschetta@apostrophe:bruschetta/bruschetta/bruschetta.db .
bruschetta@apostrophe's password: 
bruschetta.db                                 100%  876KB 876.0KB/s   00:00

そんで、アプリを再起動。

bruschetta@wplj:~/bruschetta/bruschetta$ sudo systemctl stop bruschetta
[sudo] bruschetta のパスワード: 
bruschetta@wplj:~/bruschetta/bruschetta$ sudo systemctl start bruschetta

service コマンドじゃなくて systemctl コマンドを使ってみた。ブラウザで確認してみると、無事データが移行されていた。

Nginxのヴァーチャルホスト

ヴァーチャルホスト bruschetta でアプリにアクセスできるようにする。これも設定ファイルを apostrophe からコピーしてくる。

bruschetta@wplj:~/bruschetta/bruschetta$ cd /etc/nginx/sites-available
bruschetta@wplj:/etc/nginx/sites-available$ sudo scp bruschetta@apostrophe:/etc/nginx/sites-available/bruschetta .
bruschetta@apostrophe's password: 
bruschetta                                    100%  905     0.9KB/s   00:00

コピーした設定ファイルがこれ。

upstream uwsgi-bruschetta {
    server 127.0.0.1:9090;
}

server {
    # port
    listen 80;

    # server name
    server_name bruschetta;

    # document root
    root /home/bruschetta/bruschetta;

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

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

    keepalive_timeout 60;
    proxy_connect_timeout 60;
    proxy_read_timeout 60;
    proxy_send_timeout 60;

    #client_max_body_size 20M;

    location / {
        #root /home/bruschetta/bruschetta;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://uwsgi-bruschetta;
    }

}

sites-enabled/bruschetta にリンクを張る。

bruschetta@wplj:/etc/nginx/sites-available$ sudo ln -s /etc/nginx/sites-available/bruschetta /etc/nginx/sites-enabled/bruschetta
bruschetta@wplj:/etc/nginx/sites-available$ cd ../sites-enabled
bruschetta@wplj:/etc/nginx/sites-enabled$ ls
bruschetta  default

ログファイル用のディレクトリを作る。

bruschetta@wplj:/etc/nginx/sites-enabled$ sudo mkdir /var/log/nginx/bruschetta

/etc/hosts ファイルを編集して1行追加。

192.168.1.6 bruschetta

そして Nginx を再起動。

bruschetta@wplj:/etc/nginx/sites-enabled$ sudo systemctl restart nginx

OK。あとは他のマシンの hosts ファイルも編集して bruschetta にアクセスできるようにするだけだ。はー、長かった。

Flaskアプリを引っ越す(2)

前のエントリは、/lib/systemd/system/bruschetta.service ファイルの書き方がわからない、というところで終わった。

Unit設定ファイル

その後、なんとなくではあるけど書けたので、とりあえずは動くようになった。参考になったページはここ。

 cf. 第4回 Unit設定ファイルの記述方法 – ITPro

Unit設定ファイルというらしい。ともかく、このページを参考にして書いたのがこれ。

[Unit]
Description=Bruschetta service
After=network.target

[Service]
ExecStart=/etc/init.d/bruschetta start
ExecStop=/etc/init.d/bruschetta stop
Restart=always
Type=forking
PIDFile=/var/run/bruschetta.pid

このファイルから、/etc/systemd/system/bruschetta.service にリンクを張る。

bruschetta@wplj:~$ sudo ln -s /lib/systemd/system/bruschetta.service /etc/systemd/system/bruschetta.service

起動確認

で、起動。

bruschetta@wplj:~$ sudo service bruschetta start

やった!動いた!
startstop を繰り返してみると、ちゃんと起動、停止する。今度は大丈夫そうだ。

ところが

Ubuntu 自体を再起動すると、サービスが動いていない。またもググッて調べた結果、systemctl enable コマンドを使えばいいらしい。

 cf. Systemdを使ってさくっと自作コマンドをサービス化してみる – Qiita

bruschetta@wplj:~$ sudo systemctl enable bruschetta
[sudo] bruschetta のパスワード: 
Synchronizing state of bruschetta.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable bruschetta
insserv: warning: script 'bruschetta' missing LSB tags and overrides
update-rc.d: error: bruschetta Default-Start contains no runlevels, aborting.

あれぇ?

更にググるとこのページを見つけた。

 cf. Systemd入門(4) – serviceタイプUnitの設定ファイル – めもめも

/lib/systemd/system/bruschetta.service ファイルに [Install] セクションを付け足してみる。

[Unit]
Description=Bruschetta service
After=network.target

[Service]
ExecStart=/etc/init.d/bruschetta start
ExecStop=/etc/init.d/bruschetta stop
Restart=always
Type=forking
PIDFile=/var/run/bruschetta.pid

[Install]
WantedBy=multi-user.target

今度はどうだ。

bruschetta@wplj:~$ sudo systemctl enable bruschetta
Synchronizing state of bruschetta.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable bruschetta
insserv: warning: script 'K01bruschetta' missing LSB tags and overrides
insserv: warning: script 'bruschetta' missing LSB tags and overrides
update-rc.d: error: bruschetta Default-Start contains no runlevels, aborting.

ああダメだ。……というところで今日は時間切れ。

Flaskアプリを引っ越す

apostrophe で動いている Flask アプリを wplj に引っ越す。

virtualenvとuwsgiのインストール

takatoh@wplj $ pip install virtualenv
プログラム 'pip' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install python-pip

あれ、pip がインストールされてなかった。

takatoh@wplj $ sudo apt install python-pip

では、あらためて。

takatoh@wplj $ sudo pip install virtualenv
takatoh@wplj $ sudo pip install uwsgi

以前のエントリを見たら sudo をつけていたので、今回もつけて実行した。

takatoh@wplj $ pip list
adium-theme-ubuntu (0.3.4)
dnspython (1.12.0)
pip (8.1.1)
pycrypto (2.6.1)
setuptools (20.7.0)
unity-lens-photos (1.0)
uWSGI (2.0.14)
virtualenv (15.1.0)
wheel (0.29.0)
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

virtualenv と uWSGI がちゃんとインストールされてる。pip をアップグレードしろみたいなメッセージが出てるけど、これはあとでいいや。

ユーザを作る

Flask アプリを動かす専用のユーザを作る。

takatoh@wplj $ sudo adduser bruschetta
ユーザー `bruschetta' を追加しています...
新しいグループ `bruschetta' (1001) を追加しています...
新しいユーザー `bruschetta' (1001) をグループ `bruschetta' に追加しています...
ホームディレクトリ `/home/bruschetta' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください: 
新しい UNIX パスワードを再入力してください: 
passwd: パスワードは正しく更新されました
bruschetta のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
	フルネーム []: 
	部屋番号 []: 
	職場電話番号 []: 
	自宅電話番号 []: 
	その他 []: 
以上で正しいですか? [Y/n] y

sudo する権利をつける。

takatoh@wplj $ sudo gpasswd -a bruschetta sudo
ユーザ bruschetta をグループ sudo に追加

ここで今作ったユーザでログインしなおす。

Flaskアプリの配置

GitHub からクローン。

bruschetta@wplj:~$ git clone https://github.com/takatoh/Bruschetta.git bruschetta
Cloning into 'bruschetta'...
remote: Counting objects: 358, done.
remote: Total 358 (delta 0), reused 0 (delta 0), pack-reused 358
Receiving objects: 100% (358/358), 31.96 KiB | 0 bytes/s, done.
Resolving deltas: 100% (241/241), done.
Checking connectivity... done.

virtualenv を作って必要なライブラリをインストール。

bruschetta@wplj:~/bruschetta$ virtualenv env
New python executable in /home/bruschetta/bruschetta/env/bin/python
Installing setuptools, pip, wheel...done.
bruschetta@wplj:~/bruschetta$ source env/bin/activate
(env) bruschetta@wplj:~/bruschetta$ pip install -r requirements.txt
Collecting Flask (from -r requirements.txt (line 1))
  Downloading Flask-0.12-py2.py3-none-any.whl (82kB)
    100% |████████████████████████████████| 92kB 3.0MB/s 
Collecting Flask-SQLAlchemy (from -r requirements.txt (line 2))
  Downloading Flask_SQLAlchemy-2.2-py2.py3-none-any.whl
Collecting Flask-Script (from -r requirements.txt (line 3))
  Downloading Flask-Script-2.0.5.tar.gz (42kB)
    100% |████████████████████████████████| 51kB 4.0MB/s 
Collecting itsdangerous>=0.21 (from Flask->-r requirements.txt (line 1))
  Downloading itsdangerous-0.24.tar.gz (46kB)
    100% |████████████████████████████████| 51kB 4.6MB/s 
Collecting click>=2.0 (from Flask->-r requirements.txt (line 1))
  Downloading click-6.7-py2.py3-none-any.whl (71kB)
    100% |████████████████████████████████| 71kB 4.4MB/s 
Collecting Werkzeug>=0.7 (from Flask->-r requirements.txt (line 1))
  Downloading Werkzeug-0.11.15-py2.py3-none-any.whl (307kB)
    100% |████████████████████████████████| 317kB 3.0MB/s 
Collecting Jinja2>=2.4 (from Flask->-r requirements.txt (line 1))
  Downloading Jinja2-2.9.5-py2.py3-none-any.whl (340kB)
    100% |████████████████████████████████| 348kB 4.0MB/s 
Collecting SQLAlchemy>=0.8.0 (from Flask-SQLAlchemy->-r requirements.txt (line 2))
  Downloading SQLAlchemy-1.1.5.tar.gz (5.1MB)
    100% |████████████████████████████████| 5.1MB 237kB/s 
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->Flask->-r requirements.txt (line 1))
  Downloading MarkupSafe-0.23.tar.gz
Building wheels for collected packages: Flask-Script, itsdangerous, SQLAlchemy, MarkupSafe
  Running setup.py bdist_wheel for Flask-Script ... done
  Stored in directory: /home/bruschetta/.cache/pip/wheels/e2/ea/d8/8d114e46cef819f7d9879504a7f9cb2a88a479af2858223d9f
  Running setup.py bdist_wheel for itsdangerous ... done
  Stored in directory: /home/bruschetta/.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a
  Running setup.py bdist_wheel for SQLAlchemy ... done
  Stored in directory: /home/bruschetta/.cache/pip/wheels/8d/0a/3b/2109101a4052e58ad64f83661383a6b483a1c383eb09aad6d6
  Running setup.py bdist_wheel for MarkupSafe ... done
  Stored in directory: /home/bruschetta/.cache/pip/wheels/a3/fa/dc/0198eed9ad95489b8a4f45d14dd5d2aee3f8984e46862c5748
Successfully built Flask-Script itsdangerous SQLAlchemy MarkupSafe
Installing collected packages: itsdangerous, click, Werkzeug, MarkupSafe, Jinja2, Flask, SQLAlchemy, Flask-SQLAlchemy, Flask-Script
Successfully installed Flask-0.12 Flask-SQLAlchemy-2.2 Flask-Script-2.0.5 Jinja2-2.9.5 MarkupSafe-0.23 SQLAlchemy-1.1.5 Werkzeug-0.11.15 click-6.7 itsdangerous-0.24

データベースの初期化。

(env) bruschetta@wplj:~/bruschetta$ python manage.py init_db
manage.py:2: ExtDeprecationWarning: Importing flask.ext.script is deprecated, use flask_script instead.
  from flask.ext.script import Manager
/home/bruschetta/bruschetta/bruschetta/__init__.py:2: ExtDeprecationWarning: Importing flask.ext.sqlalchemy is deprecated, use flask_sqlalchemy instead.
  from flask.ext.sqlalchemy import SQLAlchemy

なんか SQLAlchemy がらみでメッセージが出てるな。まあいい、先に進めよう。
起動確認。

(env) bruschetta@wplj:~/bruschetta$ python manage.py runserver
manage.py:2: ExtDeprecationWarning: Importing flask.ext.script is deprecated, use flask_script instead.
  from flask.ext.script import Manager
/home/bruschetta/bruschetta/bruschetta/__init__.py:2: ExtDeprecationWarning: Importing flask.ext.sqlalchemy is deprecated, use flask_sqlalchemy instead.
  from flask.ext.sqlalchemy import SQLAlchemy
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [28/Feb/2017 20:14:23] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [28/Feb/2017 20:14:23] "GET /static/style.css HTTP/1.1" 200 -
127.0.0.1 - - [28/Feb/2017 20:14:23] "GET /favicon.ico HTTP/1.1" 404 -

OK。ブラウザでも確認できた。
ここで virtualenv から抜ける。

(env) bruschetta@wplj:~/bruschetta$ deactivate

uWSGIで起動

uWSGI の設定ファイルを apostrophe からコピーしてくる。

bruschetta@wplj:~/bruschetta$ scp bruschetta@apostrophe:bruschetta/bruschetta.ini .
bruschetta@apostrophe's password: 
bruschetta.ini                                100%  350     0.3KB/s   00:00

内容はこんな感じ。

[uwsgi]
uid = www-data
gid = www-data
http = :9090
venv = /home/bruschetta/bruschetta/env
python-path = /home/bruschetta/bruschetta
wsgi-file = /home/bruschetta/bruschetta/manage.py
callable = app
master=true
pidfile=/var/run/bruschetta.pid
daemonize=/home/bruschetta/bruschetta/bruschetta.log

ディレクトリ構成は一緒だから、このまま行けるはずだ。

bruschetta@wplj:~/bruschetta$ sudo uwsgi bruschetta.ini
sudo bruschetta のパスワード: 
uWSGI getting INI configuration from bruschetta.ini

OK。今度もブラウザで確認できた。

起動スクリプト

これも以前のスクリプトと同じ。

#!/bin/sh

PATH=/usr/local/bin:/usr/bin:/bin:/sbin
APP_ROOT=/home/bruschetta/bruschetta

case "$1" in
start)
cd ${APP_ROOT}
uwsgi bruschetta.ini
;;
stop)
PID_FILE=/var/run/bruschetta.pid
PID=`cat ${PID_FILE}`
kill -INT ${PID}
rm ${PID_FILE}
;;
*)
echo "Usage: bruschetta {start|stop}" >&2
exit 1
;;
esac

exit 0

起動確認。

bruschetta@wplj:~/bruschetta$ sudo service bruschetta start
Failed to start bruschetta.service: Unit bruschetta.service not found.

あれ、ダメだ。bruschetta.service ってなんだ?
ググってみると、/lib/systemd/system/bruschetta.service ファイルを作ってやればいいようだけど、書き方がよくわからない。どうしたもんか……

20auto-upgrades.ucf-distファイルについて

Ubuntu 16.04 にパッケージをインストールしたとき、最後にこんなメッセージが出る。

N: ディレクトリ '/etc/apt/apt.conf.d/' の '20auto-upgrades.ucf-dist' が無効なファイル名拡張子を持っているため、無視します

ググってみたら、このページを見つけた。

 cf. Ubuntu 16.10 その53 – aptコマンド実行時に20auto-upgrades.ucf-distに関するメッセージが表示される – kledgeb

このページによると、システムに影響を与えないので無視しておいても構わないようだ。対処法として「放置する」と「削除する」が紹介されている。
どっちでもいいなら削除しよう。

takatoh@wplj $ sudo rm /etc/apt/apt.conf.d/20auto-upgrades.ucf-dist

これでOKかな。

sqlite3をインストールする

wplj に sqlite3 をインストールする。

takatoh@wplj $ sudo apt install sqlite3
[sudo] takatoh のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libpango1.0-0 libpangox-1.0-0 ubuntu-core-launcher
これを削除するには 'sudo apt autoremove' を利用してください。
提案パッケージ:
  sqlite3-doc
以下のパッケージが新たにインストールされます:
  sqlite3
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
515 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,938 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 sqlite3 amd64 3.11.0-1ubuntu1 [515 kB]
515 kB を 0秒 で取得しました (3,497 kB/s)
N: ディレクトリ '/etc/apt/apt.conf.d/' の '20auto-upgrades.ucf-dist' が無効なファイル名拡張子を持っているため、無視します
以前に未選択のパッケージ sqlite3 を選択しています。
(データベースを読み込んでいます ... 現在 216083 個のファイルとディレクトリがインストールされています。)
.../sqlite3_3.11.0-1ubuntu1_amd64.deb を展開する準備をしています ...
sqlite3 (3.11.0-1ubuntu1) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
sqlite3 (3.11.0-1ubuntu1) を設定しています ...
N: ディレクトリ '/etc/apt/apt.conf.d/' の '20auto-upgrades.ucf-dist' が無効なファイル名拡張子を持っているため、無視します

今日はこれで終わり。

と思ったけど、やっぱり最後のメッセージが気になるので調べてみた。エントリを分けて書く。

wikiを引っ越し

apostrophe で運用している wiki を wplj に引っ越す。
参考ページ:
 cf. wikiの引越し – blog.panicblanket.com

データのバックアップ

バックアップというか、apostrophe の wiki のデータを吐き出させる。データベースのデータは mysqldump コマンドで、画像などのデータは tar コマンドで固める。

takatoh@wplj $ ssh takatoh@apostrophe
takatoh@apostrophe's password: 
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-110-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

New release '16.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Sat Feb 25 17:14:03 2017 from wplj
takatoh@apostrophe $ mysqldump -u root -p wiki > wiki.sql
Enter password:
takatoh@apostrophe $ cd /var/www/html/wiki
takatoh@apostrophe $ sudo tar czf images.tar.gz images
takatoh@apostrophe $ cp images.tar.gz /home/takatoh
takatoh@apostrophe $ exit
ログアウト
Connection to apostrophe closed.

データの移動

apostrophe から wplj へ移動。scp コマンド使用。

takatoh@wplj $ scp takatoh@apostrophe:wiki.sql .
takatoh@apostrophe's password: 
wiki.sql                                      100%   20MB  20.5MB/s   00:01    
takatoh@wplj $ scp takatoh@apostrophe:images.tar.gz .
takatoh@apostrophe's password: 
images.tar.gz                                 100%  326MB  81.4MB/s   00:04

データベースへの読み込みとimagesの展開

takatoh@wplj $ mysql -u root -p wiki < wiki.sql
Enter password: 
takatoh@wplj $ cd /var/www/html/wiki
takatoh@wplj $ sudo cp /home/takatoh/images.tar.gz .
[sudo] takatoh のパスワード: 
takatoh@wplj $ ls
COPYING               autoload.php                maintenance
CREDITS               cache                       mw-config
FAQ                   composer.json               opensearch_desc.php
Gemfile.lock          composer.local.json-sample  phpcs.xml
Gruntfile.js          docs                        profileinfo.php
HISTORY               extensions                  resources
INSTALL               images                      serialized
LocalSettings.php     images.tar.gz               skins
README                img_auth.php                tests
RELEASE-NOTES-1.27    includes                    thumb.php
Rakefile              index.php                   thumb_handler.php
StartProfiler.sample  jsduck.json                 vendor
UPGRADE               languages                   wiki.phtml
api.php               load.php
takatoh@wplj $ sudo tar xzf images.tar.gz
takatoh@wplj $ sudo chown -R www-data:www-data images

これで完了。ブラウザでアクセスすると、ちゃんと表示された。
今回は、前回の引っ越しの時のように、MediwWiki のインストールやり直しみたいな事にはならなかった。
これでしばらく様子を見よう。

MediaWikiをインストール

参考にしたページ:
 cf. How to install MediaWiki on an Ubuntu 16.04 VPS – RoseHosting
 cf. UbuntuでMediaWikiを動かす – blog.panicblanket.com

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

takatoh@wplj $ sudo apt update
takatoh@wplj $ sudo apt upgrade
takatoh@wplj $ sudo apt install imagemagick php7.0-intl php7.0-curl php7.0-gd php7.0-mbstring php7.0-mysql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
imagemagick はすでに最新バージョン (8:6.8.9.9-7ubuntu5.4) です。
imagemagick は手動でインストールしたと設定されました。
php7.0-gd はすでに最新バージョン (7.0.15-0ubuntu0.16.04.2) です。
php7.0-gd は手動でインストールしたと設定されました。
php7.0-mysql はすでに最新バージョン (7.0.15-0ubuntu0.16.04.2) です。
php7.0-mysql は手動でインストールしたと設定されました。
php7.0-mbstring はすでに最新バージョン (7.0.15-0ubuntu0.16.04.2) です。
php7.0-mbstring は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libpango1.0-0 libpangox-1.0-0 ubuntu-core-launcher
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  php7.0-curl php7.0-intl
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
153 kB のアーカイブを取得する必要があります。
この操作後に追加で 637 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0-curl amd64 7.0.15-0ubuntu0.16.04.2 [27.5 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 php7.0-intl amd64 7.0.15-0ubuntu0.16.04.2 [126 kB]
153 kB を 0秒 で取得しました (1,457 kB/s)
N: ディレクトリ '/etc/apt/apt.conf.d/' の '20auto-upgrades.ucf-dist' が無効なファイル名拡張子を持っているため、無視します
以前に未選択のパッケージ php7.0-curl を選択しています。
(データベースを読み込んでいます ... 現在 216065 個のファイルとディレクトリがインストールされています。)
.../php7.0-curl_7.0.15-0ubuntu0.16.04.2_amd64.deb を展開する準備をしています ...
php7.0-curl (7.0.15-0ubuntu0.16.04.2) を展開しています...
以前に未選択のパッケージ php7.0-intl を選択しています。
.../php7.0-intl_7.0.15-0ubuntu0.16.04.2_amd64.deb を展開する準備をしています ...
php7.0-intl (7.0.15-0ubuntu0.16.04.2) を展開しています...
php7.0-fpm (7.0.15-0ubuntu0.16.04.2) のトリガを処理しています ...
php7.0-curl (7.0.15-0ubuntu0.16.04.2) を設定しています ...

Creating config file /etc/php/7.0/mods-available/curl.ini with new version
php7.0-intl (7.0.15-0ubuntu0.16.04.2) を設定しています ...

Creating config file /etc/php/7.0/mods-available/intl.ini with new version
php7.0-fpm (7.0.15-0ubuntu0.16.04.2) のトリガを処理しています ...
N: ディレクトリ '/etc/apt/apt.conf.d/' の '20auto-upgrades.ucf-dist' が無効なファイル名拡張子を持っているため、無視します

なんか最後のメッセージが気になるな。まあ、いいか。次に進めよう。

MediaWikiのインストール

takatoh@wplj $ cd /var/www/html
takatoh@wplj $ sudo wget https://releases.wikimedia.org/mediawiki/1.27/mediawiki-1.27.1.tar.gz
takatoh@wplj $ tar -xvzf mediawiki-1.27.1.tar.gz
takatoh@wplj $ ls
index.nginx-debian.html  mediawiki-1.27.1.tar.gz  phpmyadmin
mediawiki-1.27.1         phpinfo.php
takatoh@wplj $ sudo mv mediawiki-1.27.1 wiki
takatoh@wplj $ ls
index.nginx-debian.html  mediawiki-1.27.1.tar.gz  phpinfo.php  phpmyadmin  wiki

wiki ディレクトリのオーナーを変更。

takatoh@wplj $ sudo chown www-data:www-data -R wiki
takatoh@wplj $ ls -l
合計 30780
-rw-r--r--  1 root     root          612  2月 24 21:19 index.nginx-debian.html
-rw-r--r--  1 root     root     31504507  8月 23  2016 mediawiki-1.27.1.tar.gz
-rw-r--r--  1 root     root           23  2月 25 17:16 phpinfo.php
lrwxrwxrwx  1 root     root           21  2月 26 13:53 phpmyadmin -> /usr/share/phpmyadmin
drwxr-xr-x 15 www-data www-data     4096  8月 23  2016 wiki

ブラウザで http://localhost/wiki に接続してセットアップする。
最後に LocalSettings.php ファイルをダウンロード(これは自動で行われる)して /var/www/html/wiki ディレクトリにコピー。

takatoh@wplj $ sudo cp /home/takatoh/Downloads/LocalSettings.php wiki
takatoh@wplj $ ls -l wiki
合計 1136
-rw-r--r--  1 www-data www-data  19419  8月 23  2016 COPYING
-rw-r--r--  1 www-data www-data   4181  8月 23  2016 CREDITS
-rw-r--r--  1 www-data www-data     77  8月 23  2016 FAQ
-rw-r--r--  1 www-data www-data   2606  8月 23  2016 Gemfile.lock
-rw-r--r--  1 www-data www-data   2578  8月 23  2016 Gruntfile.js
-rw-r--r--  1 www-data www-data 784935  8月 23  2016 HISTORY
-rw-r--r--  1 www-data www-data   3625  8月 23  2016 INSTALL
-rw-r--r--  1 root     root       4093  2月 26 14:45 LocalSettings.php
-rw-r--r--  1 www-data www-data   1453  8月 23  2016 README
-rw-r--r--  1 www-data www-data  35118  8月 23  2016 RELEASE-NOTES-1.27
-rw-r--r--  1 www-data www-data    530  8月 23  2016 Rakefile
-rw-r--r--  1 www-data www-data   1703  8月 23  2016 StartProfiler.sample
-rw-r--r--  1 www-data www-data  11830  8月 23  2016 UPGRADE
-rw-r--r--  1 www-data www-data   4159  8月 23  2016 api.php
-rw-r--r--  1 www-data www-data 112767  8月 23  2016 autoload.php
drwxr-xr-x  2 www-data www-data   4096  8月 23  2016 cache
-rw-r--r--  1 www-data www-data   2693  8月 23  2016 composer.json
-rw-r--r--  1 www-data www-data    102  8月 23  2016 composer.local.json-sample
drwxr-xr-x  8 www-data www-data   4096  8月 23  2016 docs
drwxr-xr-x 19 www-data www-data   4096  8月 23  2016 extensions
drwxr-xr-x  2 www-data www-data   4096  2月 26 14:34 images
-rw-r--r--  1 www-data www-data   7440  8月 23  2016 img_auth.php
drwxr-xr-x 62 www-data www-data   4096  8月 23  2016 includes
-rw-r--r--  1 www-data www-data   1590  8月 23  2016 index.php
-rw-r--r--  1 www-data www-data   1690  8月 23  2016 jsduck.json
drwxr-xr-x  6 www-data www-data   4096  8月 23  2016 languages
-rw-r--r--  1 www-data www-data   1685  8月 23  2016 load.php
drwxr-xr-x 17 www-data www-data  12288  8月 23  2016 maintenance
drwxr-xr-x  4 www-data www-data   4096  8月 23  2016 mw-config
-rw-r--r--  1 www-data www-data   3859  8月 23  2016 opensearch_desc.php
-rw-r--r--  1 www-data www-data   1735  8月 23  2016 phpcs.xml
-rw-r--r--  1 www-data www-data  11811  8月 23  2016 profileinfo.php
drwxr-xr-x  5 www-data www-data   4096  8月 23  2016 resources
drwxr-xr-x  2 www-data www-data   4096  8月 23  2016 serialized
drwxr-xr-x  6 www-data www-data   4096  8月 23  2016 skins
drwxr-xr-x  6 www-data www-data   4096  8月 23  2016 tests
-rw-r--r--  1 www-data www-data  21655  8月 23  2016 thumb.php
-rw-r--r--  1 www-data www-data   1087  8月 23  2016 thumb_handler.php
drwxr-xr-x 18 www-data www-data   4096  8月 23  2016 vendor
-rw-r--r--  1 www-data www-data     98  8月 23  2016 wiki.phtml
takatoh@wplj $ sudo chown www-data:www-data wiki/LocalSettings.php
takatoh@wplj $ ls -l wiki
合計 1136
-rw-r--r--  1 www-data www-data  19419  8月 23  2016 COPYING
-rw-r--r--  1 www-data www-data   4181  8月 23  2016 CREDITS
-rw-r--r--  1 www-data www-data     77  8月 23  2016 FAQ
-rw-r--r--  1 www-data www-data   2606  8月 23  2016 Gemfile.lock
-rw-r--r--  1 www-data www-data   2578  8月 23  2016 Gruntfile.js
-rw-r--r--  1 www-data www-data 784935  8月 23  2016 HISTORY
-rw-r--r--  1 www-data www-data   3625  8月 23  2016 INSTALL
-rw-r--r--  1 www-data www-data   4093  2月 26 14:45 LocalSettings.php
-rw-r--r--  1 www-data www-data   1453  8月 23  2016 README
-rw-r--r--  1 www-data www-data  35118  8月 23  2016 RELEASE-NOTES-1.27
-rw-r--r--  1 www-data www-data    530  8月 23  2016 Rakefile
-rw-r--r--  1 www-data www-data   1703  8月 23  2016 StartProfiler.sample
-rw-r--r--  1 www-data www-data  11830  8月 23  2016 UPGRADE
-rw-r--r--  1 www-data www-data   4159  8月 23  2016 api.php
-rw-r--r--  1 www-data www-data 112767  8月 23  2016 autoload.php
drwxr-xr-x  2 www-data www-data   4096  8月 23  2016 cache
-rw-r--r--  1 www-data www-data   2693  8月 23  2016 composer.json
-rw-r--r--  1 www-data www-data    102  8月 23  2016 composer.local.json-sample
drwxr-xr-x  8 www-data www-data   4096  8月 23  2016 docs
drwxr-xr-x 19 www-data www-data   4096  8月 23  2016 extensions
drwxr-xr-x  2 www-data www-data   4096  2月 26 14:34 images
-rw-r--r--  1 www-data www-data   7440  8月 23  2016 img_auth.php
drwxr-xr-x 62 www-data www-data   4096  8月 23  2016 includes
-rw-r--r--  1 www-data www-data   1590  8月 23  2016 index.php
-rw-r--r--  1 www-data www-data   1690  8月 23  2016 jsduck.json
drwxr-xr-x  6 www-data www-data   4096  8月 23  2016 languages
-rw-r--r--  1 www-data www-data   1685  8月 23  2016 load.php
drwxr-xr-x 17 www-data www-data  12288  8月 23  2016 maintenance
drwxr-xr-x  4 www-data www-data   4096  8月 23  2016 mw-config
-rw-r--r--  1 www-data www-data   3859  8月 23  2016 opensearch_desc.php
-rw-r--r--  1 www-data www-data   1735  8月 23  2016 phpcs.xml
-rw-r--r--  1 www-data www-data  11811  8月 23  2016 profileinfo.php
drwxr-xr-x  5 www-data www-data   4096  8月 23  2016 resources
drwxr-xr-x  2 www-data www-data   4096  8月 23  2016 serialized
drwxr-xr-x  6 www-data www-data   4096  8月 23  2016 skins
drwxr-xr-x  6 www-data www-data   4096  8月 23  2016 tests
-rw-r--r--  1 www-data www-data  21655  8月 23  2016 thumb.php
-rw-r--r--  1 www-data www-data   1087  8月 23  2016 thumb_handler.php
drwxr-xr-x 18 www-data www-data   4096  8月 23  2016 vendor
-rw-r--r--  1 www-data www-data     98  8月 23  2016 wiki.phtml

これで完了。

設定の変更

LocalSettings.php を編集する。ロゴを変更。

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

ファイルのアップロードを有効に。

$wgEnableUploads = true;

Windows マシンからでもアクセスできるように。

$wgServer = "http://wplj";

アップロード可能なファイルサイズを設定。これは MediaWiki じゃなくて PHP の設定。/etc/php/7.0/fpm/php.ini を編集。

upload_max_filesize = 8M

MySqlとphpMyAdminをインストール

wplj で MySql を使えるようにする。参考にしたのは過去のエントリ。
 cf. UbuntuにMySqlをインストール – blog.panicblanket.com
 cf. phpMyAdminをインストール – blog.panicblanket.com

MySqlのインストール

takatoh@wplj $ sudo apt install mysql-server

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

takatoh@wplj $ mysql --version
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

設定ファイルを編集

/etc/mysql に移動して、my.cnf を編集する。一応バックアップをとっておく。

takatoh@wplj $ cd /etc/mysql
takatoh@wplj $ ls
conf.d        debian.cnf  my.cnf.fallback  mysql.conf.d
debian-start  my.cnf      mysql.cnf
takatoh@wplj $ sudo cp my.cnf my.cnf.orig

で、以下を追記。

[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@wplj $ sudo service mysql restart

ログインして、ステータスを確認。

takatoh@wplj $ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

Connection id:		4
Current database:	
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.7.17-0ubuntu0.16.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:			55 sec

Threads: 1  Questions: 6  Slow queries: 0  Opens: 107  Flush tables: 1  Open tables: 26  Queries per second avg: 0.109
--------------

大丈夫そうかな。プロセスも確認してみる。

takatoh@wplj $ ps aux | grep mysqld
mysql    14000  0.2  3.5 1236388 139200 ?      Ssl  13:41   0:00 /usr/sbin/mysqld
takatoh  14055  0.0  0.0  15256   936 pts/20   S+   13:43   0:00 grep --color=auto mysqld

phpMyAdminのインストール

takatoh@wplj $ sudo apt install phpmyadmin

インストールの途中で設定する Web サーバを訊いてくるけど、Apache2 と Lighttpd しか選択肢がないので、 ESC キーを押して続行。しばらくして「phpmyadmin 用のデータベースを dbconfig-common で設定しますか?」と訊かれるので「はい」を選択。phpmyadmin 用のパスワードを入力。
これでインストールは完了。
/usr/share/phpmyadmin から /var/www/html/phpmyadmin にリンクを張る。

takatoh@wplj $ ls -l /var/www/html
合計 8
-rw-r--r-- 1 root root 612  2月 24 21:19 index.nginx-debian.html
-rw-r--r-- 1 root root  23  2月 25 17:16 phpinfo.php
takatoh@wplj $ ls -l /usr/share | grep phpmyadmin
drwxr-xr-x   10 root root  4096  2月 26 13:46 phpmyadmin
takatoh@wplj $ sudo ln -s /usr/share/phpmyadmin /var/www/html
takatoh@wplj $ ls -l /var/www/html
合計 8
-rw-r--r-- 1 root root 612  2月 24 21:19 index.nginx-debian.html
-rw-r--r-- 1 root root  23  2月 25 17:16 phpinfo.php
lrwxrwxrwx 1 root root  21  2月 26 13:53 phpmyadmin -> /usr/share/phpmyadmin

動作確認

http://localhost/phpmyadmin にログインしたところ。

良さそうだ。

PHPをインストールしてNginxで動くようにする

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

 cf. nginx + php-fpmでphpを動かす – Qiita

インストール

takatoh@wplj $ sudo apt install php-fpm

php-fpmサービスの確認

takatoh@wplj $ systemctl status php7.0-fpm
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor prese
   Active: active (running) since 土 2017-02-25 17:00:15 JST; 47s ago
 Main PID: 16510 (php-fpm7.0)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/se
   CGroup: /system.slice/php7.0-fpm.service
           ├─16510 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)      
           ├─16514 php-fpm: pool www                                            
           └─16515 php-fpm: pool www                                            

 2月 25 17:00:15 wplj systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
 2月 25 17:00:15 wplj systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

active (running) とか出てるからこれでいいのかな。

socket

/etc/php/7.0/fpm/pool.d/www.conf にソケットの記述あり。

    listen = /run/php/php7.0-fpm.sock
takatoh@wplj $ ls -l /run/php/php7.0-fpm.sock
srw-rw---- 1 www-data www-data 0  2月 25 17:00 /run/php/php7.0-fpm.sock

Nginxから使えるようにする

/etc/nginx/sites-available/default を編集。

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    #
    # # With php7.0-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # With php7.0-fpm:
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

で、Nginx の設定ファイルを読みなおし。

takatoh@wplj $ sudo service nginx reload

動作確認

/var/www/html に phpinfo.php ファイルを作る。

<?php
 phpinfo();
?>

ブラウザで確認。

OK。