いろいろ業界の勉強してると技術ログを残したいものですが、ブログに書き続けるのも結構辛いものがあります。
昔のやつが埋まっちゃったりとか、一々検索もめんどくさいですからね。
というわけでまとめがしやすいようにローカルPCにDokuwikiを立ててみました。
今のメインPCはUbuntuなのでコンテナ(LXD)で立ててみたいと思います。
コンテナは自分の環境を汚さずにいろいろ立てられるので好きです。
別にDockerでいいじゃんって思ったけどLXDの方がDockerより自由に立てられそうなので、LXDで作ることにしました。
また、Wikiサイトはこの記事を読んでDokuwikiにしました。
qiita.com
WikiのOSSはたくさんありますが、勉強のまとめだけなので、さくっとこいつを作りたいと思います。
LXDのインストール
masashi@PC-ubuntu: ~$ sudo apt-get install lxd
インストール後は一回ログアウトします。
再ログイン後、バージョン確認
masashi@PC-ubuntu: ~$ lxd --version
2.0.11
LXDの初期化
sudoつけないとエラーが出ました。
bridgeが作れないのか。
/usr/sbin/dpkg-reconfigure は root で実行する必要があります
error: Failed to configure the bridge
とりあえず設定は全部デフォルトにします。
masashi@PC-ubuntu: ~$ sudo lxd init
Do you want to configure a new storage pool (yes/no) [default=yes]
Name of the storage backend to use (dir or zfs) [default=dir]:
Would you like LXD to be available over the network (yes/no) [default=no]
Do you want to configure the LXD bridge (yes/no) [default=yes]
Warning: Stopping lxd.service, but it can still be activated by:
lxd.socket
このあとGUIが出ていろいろ設定するんですが、スクショを撮り忘れました。
これも全部デフォルトです。
下記のメッセージがでて初期化完了です。
LXD has been successfully configured.
コンテナイメージ取得
masashi@PC-ubuntu: ~$ lxc launch ubuntu:16.04 ubuntu16
クライアント証明書を生成します。1分ぐらいかかります...
初めて LXD を使う場合、sudo lxd init と実行する必要があります
初めてコンテナを起動するには、"lxc launch ubuntu:16.04" と実行してみてくだ
さい。
ubuntu16 を作成中
(略)
コンテナの確認
コンテナのNWは10.94.47.0/24のようです。
インストール時のGUIで聞かれた気がする。
masashi@PC-ubuntu: ~$ lxc list
+----------+---------+---------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+----------+---------+---------------------+------+------------+-----------+
| ubuntu16 | RUNNING | 10.94.47.134 (eth0) | | PERSISTENT | 0 |
+----------+---------+---------------------+------+------------+-----------+
ブリッジの確認。
ちゃんと出来てますね。
(ローカルIPががっつり出ちゃうけどまあいいか)
masashi@PC-ubuntu: ~$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 6c:62:6d:e9:65:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.10/24 brd 192.168.0.255 scope global dynamic enp3s0
valid_lft 2481sec preferred_lft 2481sec
inet6 fe80::a3b9:45e0:316a:2753/64 scope link
valid_lft forever preferred_lft forever
4: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether fe:2c:4a:3d:4b:fa brd ff:ff:ff:ff:ff:ff
inet 10.94.47.1/24 scope global lxdbr0
valid_lft forever preferred_lft forever
inet6 fe80::c071:faff:feb8:a94c/64 scope link
valid_lft forever preferred_lft forever
6: veth5YLIQG@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
link/ether fe:2c:4a:3d:4b:fa brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::fc2c:4aff:fe3d:4bfa/64 scope link
valid_lft forever preferred_lft forever
コンテナに入ってみます
この辺はDockerと同じですね。
masashi@PC-ubuntu: ~$ lxc exec ubuntu16 -- /bin/bash
root@ubuntu16:~#
プロンプトが変わりました。
バージョン確認。
ホストOSと同じです。
root@ubuntu16:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
パッケージアップデートします。
root@ubuntu16:~# apt-get update ; apt-get upgrade
公式ドキュメントに沿ってインストール
root@ubuntu16:~# apt-get install php7.0
root@ubuntu16:~# apt-get install php7.0-mbstring
root@ubuntu16:~# apt-get install php7.0-xml
Apacheはなんとなく触れるので今回はnginxでやってみます。
root@ubuntu16:~# apt-get install nginx
Dokuwikiを取得
root@ubuntu16:~# wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz
解凍
root@ubuntu16:~# tar xvf dokuwiki-stable.tgz
ディレクトリ移動
私は/var/lib配下に入れるのが好きなのでここに移動します。
ドキュメントルートはどこがベストプラクティスなんですかねえ。
root@ubuntu16:~# mv dokuwiki-2017-02-19e /var/lib/dokuwiki
バックアップとって設定ファイル書き換えます。
root@ubuntu16:~# cp -i /etc/nginx/sites-available/default{,.bk}
root@ubuntu16:~# ls -l /etc/nginx/sites-available/
total 8
-rw-r--r-- 1 root root 2074 Feb 11 2017 default
-rw-r--r-- 1 root root 2074 Feb 7 14:58 default.bk
こんな感じ。
ローカルだしまだnginx慣れてないのでhttpでいいです。
root@ubuntu16:~# cat /etc/nginx/sites-available/default
server {
listen 80;
client_max_body_size 4M;
client_body_buffer_size 128k;
root /var/lib/dokuwiki;
index doku.php;
location ~ /(data/|conf/|bin/|inc/|install.php) { deny all; }
location / { try_files $uri $uri/ @dokuwiki; }
location @dokuwiki {
rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
rewrite ^/(.*) /doku.php?id=$1&$args last;
}
location ~ \.php$ {
try_files $uri $uri/ /doku.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_index doku.php;
fastcgi_pass unix:run/php/php7.0-fpm.sock;
}
}
サービス起動
root@ubuntu16:~# systemctl start nginx
httpが上がりました。ssh使わないし閉じちゃってもいいかも。
root@ubuntu16:~# ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 :::22 :::*
所有ユーザ変更を忘れていました。
root@ubuntu16:~# chown -R www-data:www-data /var/lib/dokuwiki
php-fpmとnginxを再起動。
php-fpmが何者かよくわかってないけどFastCGI実装の一つだそう。
root@ubuntu16:~# systemctl restart php7.0-fpm
root@ubuntu16:~# systemctl restart nginx
ローカルでアクセスしてみます。
root@ubuntu16:~# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 12 Feb 2018 09:45:31 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: DokuWiki=8mbt5hbngnkj4hp92d6l7mlnp1; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-UA-Compatible: IE=edge,chrome=1
大丈夫そうなのでホストからも確認。
masashi@PC-ubuntu:~$ curl -I 10.94.47.134
HTTP/1.1 200 OK
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 12 Feb 2018 09:46:29 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: DokuWiki=7d9kukc20pv85djjrk0imq9s64; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-UA-Compatible: IE=edge,chrome=1
OKですね。
ではブラウザから。
できました!
編集してみる
文章書いてみます。
セーブして...
ページが作れました!
Dokuwikiの使い方含め技術ログもここに書きためていこう思います。
セキュリティ周りの設定がガバガバな気がしますが、とりあえず動いたのでOKです。
細かいのはこれからチューニングしていきます。(できたら)
参考サイト
公式ドキュメントはphp5系なのでこちらを参考に7系で動かしました。
Nginx・PHP7.0・Ubuntu14.04でphpinfoを表示させる - Qiita
ていうかqiitaに書きためとけばいい気がしてきた...