設定したことを忘れないように書いてあります。
作業メモなどは、すべてMarkDownで記述し、保管しているディレクトリをApacheで公開している。 この文書をブラウザで開くと単なるテキスト表示されてしまうが、これを成形した形で表示したい。
同じようなことを考えている人はおり、それを参考にして実施したが,全く同じでは動作しなかったので修正点などをメモとしてする。
markdown文書を成形するために、php-markdonwをインストールする。 インストールにあたって、依存性管理のために、まずはcomposerをインストール。
https://getcomposer.org/download/ に従い、以下のコマンドを実施。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
composer-setup.phpを実施するとphpのjson拡張が無いといわれる。 当方、CentOS-8なので、以下のパッケージをインストールした。
$ sudo dnf install -y php-json
composerを/var/lib/php/composerにインストール。
$sudo php composer-setup.php --install-dir=/var/lib/php/composer All settings correct for using Composer Downloading... Composer (version 2.0.13) successfully installed to: /var/lib/php/composer/composer.phar Use it: php /var/lib/php/composer/composer.phar
グローバルで使えるように/usr/binにシンボリックリンクを張る。これは直パスで打つなら必要のない作業。
$ sudo ln -sf /var/lib/php/composer/composer.phar /usr/bin/composer
いくつか種類はあるようだが、参考にしたページにあるphp-markdownをインストール。 インストール先は/var/lib/php/composerとした。
$ cd /var/lib/php/composer $ sudo composer require michelf/php-markdown Using version ^1.9 for michelf/php-markdown ./composer.json has been updated Running composer update michelf/php-markdown Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking michelf/php-markdown (1.9.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Downloading michelf/php-markdown (1.9.0) - Installing michelf/php-markdown (1.9.0): Extracting archive Generating autoload files
markdownを保存しているディレクトリの.htaccessに以下を追加する。
AddTypeにより、拡張子".md"の場合に、コンテンツタイプとして"text/markdown"を追加し、 Actionディレクティブにより、"text/markdown"に対して、指定したファイルを実行する。
Actionで指定したmd.phpは、phpが動作するディレクトリに置き、ドキュメントルートからのパスで指定する。
AddType text/markdown md Action text/markdown /Memo/md.php
md.phpを上記の場所に設置する。内容は以下のとおり。
<?php set_include_path(get_include_path().PATH_SEPARATOR."/var/lib/php/composer/vendor/"); require 'autoload.php'; use Michelf\MarkdownExtra; if ( isset($_SERVER['PATH_TRANSLATED']) ) { $file = realpath($_SERVER['PATH_TRANSLATED']); $ext = substr($file, strrpos($file, '.') + 1); $title = $_SERVER['REQUEST_URI']; } if ( $file and is_readable($file) and strtolower($ext) === 'md') $body = MarkdownExtra::defaultTransform(file_get_contents($file)); else $body = '<p>cannot read file</p>'; header('Content-Type: text/html;'); echo '<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="/css/markdown.css" title="MarkDown Style" /> <title>'.$title.'</title> </head> <body> ' . $body . ' </body> </html>'; ?>
include_pathは、php.iniに記述しても良いが、md.phpに記述することとした。 include_pathは、composerのautoload.phpがある場所を、URLではなくローカルディレクトリのパスで指定する。 composerでインストールしたパッケージは、autoload.phpをrequireすることで使用できる。
useでMarkdownExtraではなく、Markdownとすると、TraditionalなMarkdown記法となる。 あえてTraditionalなフォーマットを指定する理由がないので、MarkdownExtraを使用した。
MarkdownExtraでは、テーブルタグも利用できる。
stylesheetをlinkタグで指定しておき、自分の見やすいようにcssで成形する。
dockerをインストールできたので、smokepingをdocker上に構築してみる
dockerのイメージを取得する。-pオプションにより、smokepingの内部ポート80に対して、外部のポート番号1888を接続している。
$ sudo docker run -it --name smokeping -p 1880:80 -e TZ=Asia/Tokyo -d dperson/smokeping fa9d04d50cb41fe7886f1ae03b3239074df5a94319237965029f168584c7e45c
コンテナに対する操作は、コンテナIDを使用する。コンテナIDを確認するためには以下のコマンドを使用。
$ sudo docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fa9d04d50cb4 dperson/smokeping "smokeping.sh" 17 minutes ago Up 17 minutes 0.0.0.0:1880->80/tcp smokeping
監視ターゲットとして、googleのDNSを設定してみる。
$ sudo docker exec -it smokeping smokeping.sh -t "Google;DNS1;8.8.8.8" Service already running, reloading configuration HUP signal sent to the running SmokePing process, exiting.
ターゲットファイルを直接編集する場合は、一度ホスト側にファイルを持ってきてから編集する。
$ sudo docker cp fa9d04d50cb4:/etc/smokeping/config.d/Targets ~
$ sudo docker cp ~/Targets fa9d04d50cb4:/etc/smokeping/config.d/
$ sudo docker exec -it fa9d04d50cb4 /bin/cat /etc/smokeping/config.d/Targets
設定を反映させるために、コンテナを再起動する
$sudo docker restart fa9d04d50cb4
サーバ再起動時等にコンテナを再起動するように設定する。alwaysはコンテナが停止した場合は自動再起動。その他のオプションは以下の通り。
sudo docker update --restart=always smokeping
オプション | 意味 |
---|---|
no | コンテナを自動的に再起動しない |
on-failure | エラー発生時にコンテナを再起動する |
always | コンテナが停止すると常に再起動 |
unless-stopped | 手動でコンテナを停止した場合は再起動しない |
設定がされたことを確認するには、docker inspectを使用する。
sudo docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' fa9d04d50cb4 always
今どきはSSL証明書がほぼ必須となっているので、lets encryptを使ってサーバ証明書を作成した。
まずは、証明書の取得・更新を行うためのスクリプトであるcertbotを取得する。 上記のページからディストリビューションとサーバ種別を指定すると取得するための方法を示すpageが表示される。 Cent-OS 8では以下のように、wgetして適当なディレクトリに移動し、パーミッション/オーナを設定する。
# wget https://dl.eff.org/certbot-auto --2020-05-15 11:51:11-- https://dl.eff.org/certbot-auto dl.eff.org (dl.eff.org) をDNSに問いあわせています... 151.101.64.201, 151.101.0.201, 151.101.128.201, ... dl.eff.org (dl.eff.org)|151.101.64.201|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 79712 (78K) [application/octet-stream] `certbot-auto' に保存中 certbot-auto 100%[=================================================>] 77.84K --.-KB/s 時間 0.01s 2020-05-15 11:51:11 (6.88 MB/s) - `certbot-auto' へ保存完了 [79712/79712] # mv certbot-auto /usr/local/bin/certbot-auto # chown root /usr/local/bin/certbot-auto # chmod 0755 /usr/local/bin/certbot-auto
今までは、pound+ ApacheでWebを構成していたが、今どきはnginxだろうとリバプロを変更してみた。
インストールは普通にパッケージから。
$ sudo dnf -y install nginx
'/etc/nginx/nginx.conf'のserver定義はすべてコメントアウトし、'/etc/nginx/conf.d'に'virtual.conf'を作成。 以下の設定は、外部からは、www.example.comとwww.foo.example.netというfqdnでアクセスし、実態としては、 bar.example.netというサーバ上のポートベースのバーチャルホストに振り分ける。
server { server_name www.example.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://bar.example.net:8888/; } } server { server_name www.foo.example.net; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://bar.example.net:8080/; } }
リロードによる反映と、自動起動の設定を行う。
# systemctl reload nginx # systemctl enable nginx Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
リモートアドレスをログに残すように`/etc/httpd/conf/httpd.conf`のLogFormatを下記に変更する。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined