Changes between Initial Version and Version 1 of HowTo/SakuraVpsSetup3b


Ignore:
Timestamp:
Oct 29, 2019, 5:45:05 AM (5 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/SakuraVpsSetup3b

    v1 v1  
     1[[PageOutline]]
     2= さくらの VPS セットアップメモ 〜2G プラン据え置き Ubuntu16.04 入れ替え編 (パート2)〜 =
     3
     4[wiki:HowTo/SakuraVpsSetup3 パート1] からの続きです…。
     5
     6== Web サーバー設定ふたたび (Nginx 移行) ==
     7
     8 * https://github.com/murachi/nop/issues/1
     9
     10最近は割といろんなものが Nginx で動くっぽいですね (というより大抵 FastCGI でどうにかするっぽい)。一度触ってみておきたかったというのもあるのですが、 Apache のモジュールモデルに若干疲れたというのもあり…。
     11
     12で、構成を単純化するため、全般的に Nginx で動かす想定で、まずは Apache2 を削除してしまうことにしました。上の方で書いた内容が全て無駄になりますが… (((((((;/!^o!^)/
     13
     14{{{
     15#!console
     16$ sudo su -
     17# apt remove apache2
     18# apt install nginx
     19}}}
     20
     21MySQL は代わりに mariadb をインストール済みなので不要ですね。手元 PC の HOSTS 書き換えでとりあえず Nginx がちゃんと動いているのは確認。
     22
     23=== SSL 設定 ===
     24
     25たまたまこの時点で Let's Encrypt による `mail.harapeko.jp` ドメインが証明期限切れ近かったので、 `certbot-auto` を実行。なお Apache から Nginx に環境を換えた影響か、この時点では `./certbot-auto renew` はうまく動かなかった。
     26
     27{{{
     28#!console
     29# exit
     30$ cd ~/certbot
     31$ ./certbot-auto
     32Requesting to rerun ./certbot-auto with root privileges...
     33
     34(中略... 何故か名前の設定が見つからんと言われるのでドメイン名を入力)
     35No names were found in your configuration files. Please enter in your domain
     36name(s) (comma and/or space separated)  (Enter 'c' to cancel): mail.harapeko.jp
     37Cert is due for renewal, auto-renewing...
     38
     39(中略... どうやら Apache を使う場合と Nginx を使う場合とで設定を残す場所が異なる模様)
     40Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default
     41
     42(ここからおせっかい機能が走り出す... せっかくなので HTTPS へリダイレクトする設定を施してもらった)
     43Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
     44- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     451: No redirect - Make no further changes to the webserver configuration.
     462: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
     47new sites, or if you're confident your site works on HTTPS. You can undo this
     48change by editing your web server's configuration.
     49- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     50Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
     51Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default
     52
     53(残りの出力は略... どうやらうまくいったようだ)
     54$
     55}}}
     56
     57実際 `http://mail.harapeko.jp/` にアクセスすると `https://mail.harapeko.jp/` にリダイレクトされるようになった。メーラーも問題なく動いている模様。
     58
     59certbot による Nginx の設定の変更は `/etc/nginx/sites-available/default` に対して行われた模様。
     60
     61=== メインコンテンツ ===
     62
     63`/etc/nginx/sites-available/default` の設定内容によれば、メインコンテンツは `/var/www/html` を参照している模様。ここに配置すれば良いはず。
     64(以下、コメント行の類は概ね省略しています)
     65
     66{{{
     67server {
     68        listen 80 default_server;
     69        listen [::]:80 default_server;
     70
     71        root /var/www/html;
     72
     73        # Add index.php to the list if you are using PHP
     74        index index.html index.htm index.nginx-debian.html;
     75
     76        server_name _;
     77
     78        location / {
     79                try_files $uri $uri/ =404;
     80        }
     81}
     82}}}
     83
     84既に当該ディレクトリには旧会社時代のコンテンツを置いていたものの、 PHP 駆動だったので `index.html` は置いておらず、 `http://www.harapeko.jp/` としてアクセスすると nginx のデフォルトページが表示される状態でした。試しに `index.html` を配置してみたところ、それが代わりに表示されるようになりました。
     85
     86と、ここで [https://mail.harapeko.jp/] にアクセスしてみたら同じものが表示される状態だったので、こちらは別のファイルが表示されるよう設定を修正。
     87
     88{{{
     89server {
     90        root /var/www/vhosts/mail/html; # <--- ここを修正
     91
     92        # Add index.php to the list if you are using PHP
     93        index index.html index.htm index.nginx-debian.html;
     94    server_name mail.harapeko.jp; # managed by Certbot
     95
     96        location / {
     97                try_files $uri $uri/ =404;
     98        }
     99
     100    listen [::]:443 ssl ipv6only=on; # managed by Certbot
     101    listen 443 ssl; # managed by Certbot
     102    ssl_certificate /etc/letsencrypt/live/mail.harapeko.jp/fullchain.pem; # managed by Certbot
     103    ssl_certificate_key /etc/letsencrypt/live/mail.harapeko.jp/privkey.pem; # managed by Certbot
     104    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
     105    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
     106}
     107}}}
     108
     109当該ディレクトリを作成し、 `index.html` も別途作成したところ、そちらが表示されるようになりました。
     110
     111=== メインサイトの名前解決 ===
     112
     113サブドメイン www を新サーバーに切り替えます。ついでなのでこのタイミングでネームサーバーの切り替えも行ってしまうことにします。
     114
     115まずは旧サーバー側のネームサーバーで www の IP アドレスを新サーバーに向くように変更。
     116
     117{{{
     118#!console
     119# vim /var/named/chroot/var/named/harapeko.jp.zone
     120
     121(...設定を修正)
     122
     123# service named restart
     124}}}
     125
     126{{{
     127$TTL    1D
     128@               IN      SOA     onaka.harapeko.jp. root.onaka.harapeko.jp. (
     129                        2019102101      ; serial
     130                        3600            ; refresh 1h
     131                        900             ; retry 15m
     132                        3600000         ; expiry 1000h
     133                        3600            ; minimum 24h
     134                )
     135;
     136                IN      NS      ns.harapeko.jp.
     137                IN      MX      0 mail.harapeko.jp.
     138mail            IN      MX      0 mail.harapeko.jp.
     139onaka           IN      A       49.212.128.142
     140ns              IN      A       49.212.128.142
     141mail            IN      A       153.126.157.107
     142www             IN      CNAME   mail    ; <--- 現状新サーバー用に使っている mail サブドメインを参照するよう変更
     143daiyokujo       IN      CNAME   onaka   ; for harapeko.asablo.jp/blog
     144blog            IN      CNAME   onaka
     145developer       IN      CNAME   onaka
     146svn             IN      CNAME   onaka
     147test            IN      CNAME   onaka
     148}}}
     149
     150すぐには反映されない模様。やっぱりしばらくは待つ必要があるか…。
     151
     152新サーバーの設定もやってしまうことにした。 chroot で動かすつもりだったが、うまく動かせなかったので、一旦 chroot を使わない設定を施しました。
     153chroot を使う設定については[https://grasso0210.hatenadiary.org/entry/20170526/1495802750 この辺のサイト]にまとまっているようなので、後ほど再チャレンジしてみることにします。
     154
     155設定に際しては、[https://www.eis.co.jp/bind9_src_build_4/ この辺の記事]を参考にさせていただきました…。
     156
     157設定対象ファイルをまるっと編集してしまいましょう。
     158
     159{{{
     160#!console
     161# cd /etc/bind
     162# vim -p named.conf
     163}}}
     164
     165`named.conf` は他の設定ファイルを include しているだけですが、そのうち、デフォルトゾーンの設定を記述した `named.conf.default-zones` は権威 DNS サーバーを設定するなら不要なので、コメントアウトしてしまいます。
     166
     167{{{
     168include "/etc/bind/named.conf.options";
     169include "/etc/bind/named.conf.local";
     170//include "/etc/bind/named.conf.default-zones";  // <--- 不要
     171}}}
     172
     173`named.conf.options` では `notify no` と `recursion no` を追記、 `auth-nxdomain` は `yes` に変更しました。
     174
     175{{{
     176options {
     177        directory "/var/cache/bind";
     178
     179        //========================================================================
     180        // If BIND logs error messages about the root key being expired,
     181        // you will need to update your keys.  See https://www.isc.org/bind-keys
     182        //========================================================================
     183        dnssec-validation auto;
     184
     185        //auth-nxdomain no;    # conform to RFC1035
     186        auth-nxdomain yes;     // <--- ドメインが存在しない場合の応答時に AA ビットを必ず立てる設定。いちおう。
     187        listen-on-v6 { any; };
     188
     189        notify no;     // <--- ゾーンデータの更新通知はデフォルトで no にしておき、個別のゾーンに対して yes に設定する。
     190        recursion no;  // <--- 自分がマスターではないゾーンについてのクエリーを、再帰的に問い合わせしない設定。権威 DNS サーバーの場合は必須。
     191};
     192}}}
     193
     194`named.conf.local` はコメントアウトされている `zones.rfc1918` を include するの **ではなく** 、独自に作成するファイル `zones.harapeko.jp` を include するようにします。
     195
     196{{{
     197// Consider adding the 1918 zones here, if they are not used in your
     198// organization
     199// include "/etc/bind/zones.rfc1918";   // <--- これはこのまま
     200include "/etc/bind/zones.harapeko.jp";  // <--- こっちを追記
     201}}}
     202
     203そして新たに `:tabe zones.harapeko.jp` して、以下の内容を書いて保存。
     204
     205{{{
     206zone "harapeko.jp" {
     207    type master;
     208    file "/var/cache/bind/harapeko.jp.zone";
     209    notify yes;
     210};
     211zone "107.157.126.153.in-addr.arpa" {
     212    type master;
     213    file "/var/cache/bind/harapeko.jp.rev";
     214    notify yes;
     215};
     216}}}
     217
     218実際の正引き・逆引きファイルも作成します。
     219
     220{{{
     221#!console
     222# cd /var/cache/bind
     223# vim harapeko.jp.zone
     224
     225(...正引きファイル編集)
     226
     227# vim harapeko.jp.rev
     228
     229(...逆引きファイル編集)
     230}}}
     231
     232正引きファイルは旧サーバーからコピったものを一部編集。
     233
     234{{{
     235$TTL    1D
     236@               IN      SOA     onaka.harapeko.jp. root.onaka.harapeko.jp. (
     237                        2019102102      ; serial
     238                        3600            ; refresh 1h
     239                        900             ; retry 15m
     240                        3600000         ; expiry 1000h
     241                        3600            ; minimum 24h
     242                )
     243;
     244harapeko.jp     IN      NS      ns.harapeko.jp.    ; <-- このへんちょこっと書き方を変えてみた
     245harapeko.jp     IN      MX  0   mail.harapeko.jp.  ; <--
     246onaka           IN      A       49.212.128.142
     247ns              IN      A       153.126.157.107    ; <---- レジストラに登録するネームサーバーを新サーバーに切り替えた想定
     248mail            IN      A       153.126.157.107
     249www             IN      CNAME   mail
     250daiyokujo       IN      CNAME   onaka   ; for harapeko.asablo.jp/blog
     251blog            IN      CNAME   onaka
     252developer       IN      CNAME   onaka
     253svn             IN      CNAME   onaka
     254test            IN      CNAME   onaka
     255}}}
     256
     257逆引きファイルはまんまコピってシリアル番号だけ書き換えただけなので略。
     258
     259あとは bind9 を登録、再起動すれば ok 。
     260
     261{{{
     262#!console
     263# systemctl enable bind9
     264# service bind9 restart
     265# nslookup ns.harapeko.jp localhost
     266Server:         localhost
     267Address:        ::1#53
     268
     269Name:   ns.harapeko.jp
     270Address: 153.126.157.107
     271
     272#
     273}}}
     274
     275旧サーバーで設定した www サブドメインの参照先変更はこの時点でとっくに反映されていましたが、せっかくなので JPDirect のホスト登録も変更します。
     276サイトログイン後、「ドメイン名共通 > ホスト情報変更申請」を選択し、ホスト名に「NS.HARAPEKO.JP」と入力 (ドロップメニューによる選択肢ではありません)。新しい IP アドレスを入力して完了。
     277
     278=== www の SSL を設定 ===
     279
     280ふつうに certbot を動かすだけでいいはず。これは root からではなく一般ユーザーから。
     281
     282{{{
     283#!console
     284$ ./certbot-auto -d www.harapeko.jp
     285Requesting to rerun ./certbot-auto with root privileges...
     286
     287(中略 ...HTTP アクセス検証)
     288Performing the following challenges:
     289http-01 challenge for www.harapeko.jp
     290Waiting for verification...
     291Cleaning up challenges
     292Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default
     293
     294(おせっかい機能のリダイレクト設定)
     295Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
     296- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     2971: No redirect - Make no further changes to the webserver configuration.
     2982: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
     299new sites, or if you're confident your site works on HTTPS. You can undo this
     300change by editing your web server's configuration.
     301- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     302Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
     303Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default
     304
     305(どうやら成功したらしい)
     306- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     307Congratulations! You have successfully enabled https://www.harapeko.jp
     308
     309You should test your configuration at:
     310https://www.ssllabs.com/ssltest/analyze.html?d=www.harapeko.jp
     311- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     312
     313(後略...認証鍵の在り処などの情報が表示されます)
     314
     315murachi@ik1-314-17353:~/certbot$
     316}}}
     317
     318certbot による HTTPS へのリダイレクト設定は、 `/etc/nginx/sites-available/default` にひたすら追記する形で施されるらしい。
     319あとで手でファイルを分けたほうが良いかもしれんね(´・_・`)
     320
     321=== ブログの稼働と名前解決 ===
     322
     323ブログの引っ越し自体は済んでいるので、 PHP を動かせるようにして名前解決と SSL 化までやってしまいましょう。
     324
     325ちなみに今更ですが、 `/etc/nginx/nginx.conf` を確認すると、ユーザーは apache2 の場合と同じ `www-data` で動いているようですね。
     326
     327{{{
     328user www-data;
     329worker_processes auto;
     330pid /run/nginx.pid;
     331}}}
     332
     333さて、 PHP を FastCGI で動かすため、 php-fpm パッケージを導入します。
     334
     335{{{
     336#!console
     337# apt install php-fpm
     338}}}
     339
     340Nginx の設定にブログドメイン用の設定を追加します。まず `/etc/nginx/sites-available/blog-wp` を作成。
     341
     342{{{
     343#!console
     344# cd /etc/nginx/sites-available
     345# vim blog-wp
     346}}}
     347
     348内容は、いくつかのサイトを参考にさせていただいた結果、以下の通りになりました。この時点ではまだ SSL は考慮していません。
     349
     350{{{
     351server {
     352  listen 80;
     353  server_name blog.harapeko.jp;
     354
     355  location / {
     356    root /var/www/vhosts/blog/html;
     357    index index.php;
     358    try_files $uri $uri/ @wordpress;  # パーマリンクのための設定
     359  }
     360
     361  location ~* /wp-config.php {
     362    deny all;
     363  }
     364
     365  location ~ \.php$ {
     366    root /var/www/vhosts/blog/html;
     367    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
     368    fastcgi_index index.php;
     369    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     370    include fastcgi_params;
     371  }
     372
     373  # パーマリンク URI の場合、 index.php を使うようにする
     374  location @wordpress {
     375    root /var/www/vhosts/blog/html;
     376    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
     377    fastcgi_index index.php;
     378    fastcgi_split_path_info ^(.+\.php)(.*)$;
     379    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
     380    include fastcgi_params;
     381  }
     382
     383  location ~ /\.ht {
     384    deny all;
     385  }
     386}
     387}}}
     388
     389で、これのシンボリックリンクを `/etc/nginx/sites-enabled` の下に作ります。
     390
     391{{{
     392#!console
     393# cd ../sites-enabled
     394# ln -s ../sites-available/blog-wp
     395}}}
     396
     397PHP の FastCGI 用の設定ファイル `/etc/php/7.0/fpm/pool.d/www.conf` については、 Nginx のユーザーを `www-data` のまま変更していないため、こちらも特に変更すべき点はありません。
     398(この辺、 Apache2 と併用して動かす場合なんかはユーザーを別途作って区別したほうが良いのかもしれません)
     399
     400PHP-FPM をサービス登録し、 Nginx と共に再起動すれば準備完了です。
     401
     402{{{
     403#!console
     404# systemctl enable php7.0-fpm
     405Synchronizing state of php7.0-fpm.service with SysV init with /lib/systemd/systemd-sysv-install...
     406Executing /lib/systemd/systemd-sysv-install enable php7.0-fpm
     407# service php7.0-fpm restart
     408# service nginx restart
     409}}}
     410
     411ローカルマシンの `/etc/hosts` を書き換えてアクセスしてみたところ、ちゃんとブログが動いているのを確認できました。
     412
     413名前解決は `/var/cache/bind/harapeko.jp.zone` を書き換えて bind9 を restart させるだけです。 `blog` サブドメインの `CNAME` 先を `mail` に切り替えるだけなのでこれは流石に略。
     414
     415ローカルマシンからサブドメイン名で新サーバーにアクセスできることを確認後、一般ユーザーから `certbot-auto` を実行し、 `blog` サブドメインも SSL 化。これも他のサブドメインの場合とやってることは変わらないので略。なお、 `https` へのリダイレクト設定もやってもらったところ、ちゃんとよしなに `/etc/nginx/sites-available/blog-wp` に対して設定を施してくれた。ホント便利 (´・_・`)
     416
     417=== 大浴場の画像等 ===
     418
     419まだファイルを移動してなかったですね。空っぽの perl ディレクトリはおいら自身用途を覚えていないので (!^_!^;、とりあえずスタティックファイルだけガッと移動します。
     420
     421まず新サーバー側で場所を用意。
     422
     423{{{
     424#!console
     425# mkdir -p /var/www/vhosts/daiyokujo/html
     426# chown murachi:www-data /var/www/vhosts/daiyokujo/html
     427}}}
     428
     429新サーバーに旧サーバーへアクセスするための秘密鍵は持ってきていないので、旧サーバーから新サーバーへ rsync 。
     430
     431{{{
     432#!console
     433$ cd /var/www/vhosts/daiyokujo/htdocs
     434$ rsync -ae ssh * murachi@mail.harapeko.jp:/var/www/vhosts/daiyokujo/html/
     435Enter passphrase for key '/home/murachi/.ssh/id_rsa':
     436$
     437}}}
     438
     439新サーバー側でコピーされたファイルの所有権が `murachi:murachi` になっちゃっているのを `murachi:www-data` に修正。
     440
     441{{{
     442#!console
     443$ cd /var/www/vhosts/daiyokujo/html
     444$ sudo chown -R murachi:www-data *
     445}}}
     446
     447`/etc/nginx/sites-available/daiyokujo` を作成。
     448
     449{{{
     450#!console
     451$ sudo su -
     452# cd /etc/nginx/
     453# vim sites-available/daiyokujo
     454
     455(...大浴場用ファイル置き場の設定を記述)
     456
     457# cd sites-enabled/
     458# ln -s ../sites-available/daiyokujo
     459# service nginx restart
     460}}}
     461
     462内容は以下の通り。
     463
     464{{{
     465server {
     466  listen 80;
     467  listen [::]:80;
     468 
     469  root /var/www/vhosts/daiyokujo/html;
     470  index index.html index.htm;
     471  server_name daiyokujo.harapeko.jp;
     472 
     473  location / {
     474    try_files $uri $uri/ =404;
     475  }
     476}
     477}}}
     478
     479後は名前解決と SSL 化。この辺は略。
     480
     481=== Trac 設定 ===
     482
     483Trac インストールしてから大分時間が経っているので、 Python モジュール関連を一通り最新に upgrade してしまうことにします。
     484
     485{{{
     486#!console
     487$ sudo su -
     488# pip install --upgrade pip
     489# pip list --outdated --format=freeze | perl -pe 's/^(.+?)==(.+)$/$1/' | xargs pip install --upgrade
     490}}}
     491
     492かなり強引ですが…。
     493
     494最後の最後に
     495
     496{{{
     497OSError: [Errno 2] No such file or directory: '/usr/local/lib/python2.7/dist-packages/Trac-1.2.3-py2.7.egg'
     498}}}
     499
     500とかいうエラーが出ちゃいましたが、その後 `pip list --outdated` しても何も出てこないので、まぁ良しとします。
     501
     502ていうかリスト確認したら Trac が 1.4 になってる…。
     503
     504{{{
     505#!console
     506# pip list
     507
     508(2.7系は 2020年からはサポート無くなるぜという警告メッセージは略)
     509
     510Package           Version
     511----------------- -------
     512Babel             2.7.0 
     513docutils          0.15.2
     514Genshi            0.7.3 
     515Jinja2            2.10.3
     516MarkupSafe        1.1.1 
     517MySQL-python      1.2.5 
     518pip               19.3.1
     519Pygments          2.4.2 
     520pytz              2019.3
     521setuptools        41.4.0
     522Trac              1.4   
     523TracFootNoteMacro 1.6   
     524virtualenv        16.7.7
     525wheel             0.33.6
     526#
     527}}}
     528
     529いつの間に 1.4 がリリースされてたの… orz
     530
     531そんなわけで ideanote を upgrade
     532
     533{{{
     534#!console
     535# exit
     536$ cd /var/Developer/trac/original/ideanote
     537$ trac-admin .
     538Trac [/var/Developer/trac/original/ideanote]> upgrade
     539エラー: Unable to check for upgrade of trac.db.api.DatabaseManager: TracError: "mysql" データベースをサポートしていません
     540Trac [/var/Developer/trac/original/ideanote]>
     541}}}
     542
     543ひぇっ(´・_・`)
     544
     545[https://trac.edgewall.org/wiki/TracDev/ReleaseNotes/1.4#MaintenanceReleases リリースノート]見てみたら MySQL-python から PyMySQL に乗り換えていらっさった模様…(´・_・`)
     546
     547{{{
     548#!console
     549$ sudo pip install PyMySQL
     550
     551(...インストール)
     552
     553$ trac-admin .
     554trac-admin 1.4 へようこそ
     555Trac 管理コンソール(対話モード)です。
     556Copyright (C) 2003-2019 Edgewall Software
     557
     558'?' コマンドか 'help' コマンドでヘルプを表示します。
     559       
     560Trac [/var/Developer/trac/original/ideanote]> upgrade
     561アップグレードが失敗しました。問題を解消させてもう一度試してください。
     562
     563TracError: すべてのテーブルは照合順序として utf8_bin または utf8mb4_bin で作成されている必要があります。次のテーブルがその照合順序で作成されていません: attachment, auth_cookie, cache, component, enum, milestone, node_change, permission, report, repository, revision, session, session_attribute, system, ticket, ticket_change, ticket_custom, version, wiki
     564Trac [/var/Developer/trac/original/ideanote]>
     565}}}
     566
     567あー、前回中断したときと同じエラーまでたどり着きました(´・_・`)
     568
     569えーっと。こんな感じかな。
     570
     571{{{
     572#!console
     573$ cd
     574$ echo attachment, auth_cookie, cache, component, enum, milestone, node_change, permission, report, repository, revision, session, session_attribute, system, ticket, ticket_change, ticket_custom, version, wiki >trac_tables.txt
     575$ perl -e '$l=<>; chomp $l; @t=split /\s*,\s*/, $l; print "alter table $_ collate utf8mb4_bin;\n" for @t' trac_tables.txt > trac_tables_mod_u8b.sql
     576$ mysql -u trac_master -pパスワード trac_ideanote < trac_tables_mod_u8b.sql
     577}}}
     578
     579これでどうか。
     580
     581{{{
     582#!console
     583$ cd /var/Developer/trac/original/ideanote/
     584$ trac-admin .
     585trac-admin 1.4 へようこそ
     586Trac 管理コンソール(対話モード)です。
     587Copyright (C) 2003-2019 Edgewall Software
     588
     589'?' コマンドか 'help' コマンドでヘルプを表示します。
     590       
     591Trac [/var/Developer/trac/original/ideanote]> upgrade
     592アップグレードが失敗しました。問題を解消させてもう一度試してください。
     593
     594TracError: データベースのキャラクタセットと照合順序が 'utf8' と 'utf8_general_ci' になっています。データベースは (('utf8', 'utf8_bin'), ('utf8mb4', 'utf8mb4_bin')) の1つでなければいけません。
     595Trac [/var/Developer/trac/original/ideanote]>
     596}}}
     597
     598(゚Д゚)ハァ?
     599
     600そもそも今の DB の状態で utf8mb4 を選ぶべきではなかったかも(´・_・`)
     601`'utf8', 'utf8_bin'` の組み合わせで行きますか(´・_・`)
     602
     603{{{
     604#!console
     605$ cd
     606$ perl -e '$l=<>; chomp $l; @t=split /\s*,\s*/, $l; print "alter table $_ collate utf8_bin;\n" for @t' trac_tables.txt > trac_tables_mod_u8b.sql
     607$ mysql -u trac_master -pパスワード trac_ideanote < trac_tables_mod_u8b.sql
     608murachi@ik1-314-17353:~$ sudo mysql -u root
     609[sudo] murachi のパスワード:
     610Welcome to the MariaDB monitor.  Commands end with ; or \g.
     611Your MariaDB connection id is 6829
     612Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
     613
     614Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
     615
     616Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     617
     618MariaDB [(none)]> alter database trac_ideanote collate utf8_bin;
     619Query OK, 1 row affected (0.01 sec)
     620
     621MariaDB [(none)]> Bye
     622$
     623}}}
     624
     625今度こそどうだ…
     626
     627{{{
     628#!console
     629$ cd /var/Developer/trac/original/ideanote/
     630$ trac-admin .
     631trac-admin 1.4 へようこそ
     632Trac 管理コンソール(対話モード)です。
     633Copyright (C) 2003-2019 Edgewall Software
     634
     635'?' コマンドか 'help' コマンドでヘルプを表示します。
     636       
     637Trac [/var/Developer/trac/original/ideanote]> upgrade
     638レポート 1, 2, 3, 4, 5, 7, 8 をアップグレードできなかったため
     639"ambiguous column name" エラーが起きないように手動で変更する必要が
     640あるかも知れません。
     641詳細は https://trac.edgewall.org/wiki/1.3/TracUpgrade#enum-description-field を参照してください。
     642
     643アップグレードが終了しました。
     644
     645次のコマンドを実行すると Trac のドキュメントをアップグレードできます:
     646
     647  trac-admin "/var/Developer/trac/original/ideanote" wiki upgrade
     648Trac [/var/Developer/trac/original/ideanote]>
     649}}}
     650
     651一部で失敗しているみたいですが、とりあえずアップグレードを完了させられました。
     652
     653さて、ここまでやったところで Trac リポジトリの所有者が `murachi:murachi` になっちゃっていたことに気づいたので、所有者を変更。
     654
     655{{{
     656#!console
     657$ cd /var/Developer/
     658$ sudo chown -R murachi:www-data trac
     659$ sudo chmod g+s trac
     660}}}
     661
     662uWSGI をインストール。 pip で入れちゃいましょう。
     663
     664{{{
     665#!console
     666$ sudo su -
     667# pip install uWSGI
     668Collecting uWSGI
     669  Downloading https://files.pythonhosted.org/packages/e7/1e/3dcca007f974fe4eb369bf1b8629d5e342bb3055e2001b2e5340aaefae7a/uwsgi-2.0.18.tar.gz (801kB)
     670     |████████████████████████████████| 808kB 2.1MB/s
     671Building wheels for collected packages: uWSGI
     672  Building wheel for uWSGI (setup.py) ... done
     673  Created wheel for uWSGI: filename=uWSGI-2.0.18-cp27-cp27mu-linux_x86_64.whl size=519527 sha256=0e76554e1428e185c0ccb066bb4afaeac1c3c97da5af73c127dd86ccc531f89a
     674  Stored in directory: /root/.cache/pip/wheels/2d/0c/b0/f3ba1bbce35c3766c9dac8c3d15d5431cac57e7a8c4111c268
     675Successfully built uWSGI
     676Installing collected packages: uWSGI
     677Successfully installed uWSGI-2.0.18
     678#
     679}}}
     680
     681WSGI ファイルは既にあるので、 `uwsgi` コマンドを使えば適当なポートで動作確認できるはず。動作確認用に穴を開けますか。
     682
     683{{{
     684#!console
     685# cd
     686# vim -p ip*tables.sh
     687
     688(両方とも編集...)
     689
     690# ./iptables.sh
     691# ./ip6tables.sh
     692# service netfilter-persistent save
     693# service netfilter-persistent reload
     694}}}
     695
     696`iptables.sh` と `ip6tables.sh` は以下の通りに穴を開けたいポート番号を追記するだけ。
     697
     698{{{
     699#/sbin/ip6tables -A INPUT -p tcp -m state --state NEW -m multiport --dports 22,25,587,993,80,443 -j ACCEPT
     700/sbin/ip6tables -A INPUT -p tcp -m state --state NEW -m multiport --dports 22,25,587,993,80,443,6543 -j ACCEPT
     701}}}
     702
     703uwsgi を実行してみます。
     704
     705{{{
     706#!console
     707# exit
     708$ cd /var/Developer/trac/original
     709$ uwsgi --http=0.0.0.0:6543 --wsgi-file=trac-original.wsgi --callable=application
     710}}}
     711
     712http://mail.harapeko.jp:6543/ideanote にアクセスしてみたところ、それっぽい画面が表示されました。ちなみに `--callable` 引数に指定するのは実際の WSGI ファイルが caller として用意しているオブジェクト名 (関数名) で良いみたいです。