昨年から、丸一年経っての出来事です。
ふと思い立ち、丸善の文具コーナーに訪れたら幸運が待っていました。

レモンのチャーム付きLAMY万年筆。

しかも、一番好きなこの明るい緑で彩られています。


昨年のものとは異なり、二つ切りのレモンとまるごとをあしらった形です。

今回のペン先は極細を選びました。
- 割と気に入っているブランドの
- 一番好きな色
- そして書きやすい極細
と、三拍子が揃った道具を入手しました。
昨年から、丸一年経っての出来事です。
ふと思い立ち、丸善の文具コーナーに訪れたら幸運が待っていました。

レモンのチャーム付きLAMY万年筆。

しかも、一番好きなこの明るい緑で彩られています。


昨年のものとは異なり、二つ切りのレモンとまるごとをあしらった形です。

今回のペン先は極細を選びました。
と、三拍子が揃った道具を入手しました。
Nextcloudにアップロードされた画像をタグ付けしてくれる「recognize」アプリを使っています。
それを用いて運用したところ、以下のエラーに出くわしました。
メニュー > Administration settings > 概要

これを放置していったところ、Webサービスが止まり、SSHにも接続できなくなりました。そのため、以下の対処を施しました。
以下の環境で動いています。
※snapは使わず、オンプレで構築しました。
また、Opcacheモジュールは設定済みです。
以下、管理者権限で実施しています。
mkdir /etc/old
cd /etc/php/7.4/mods-available
cp -pi opcache.ini /etc/old/opcache.ini.`date +%Y%m%d`
vi opcache.ini
opcache.interned_strings_buffer=16
; 8 → 16に修正
apache2ctl configtest
# Syntax OK を確認します
systemctl restart apache2
メニュー > Administration settings > 概要
へと進みます。

「全てのチェックに合格しました。」
を確認します。
万単位のファイルを既にインポートしたため、画像認識とタグ付けのためにかなりのCPUリソースを消費します。(平均オーバーロードが7を超えるときもありました)
そのため、zabbix等で負荷を監視している場合は認識中は閾値を上げておく等の対処が必要です。
Dropboxのようにファイルを保存できて、各種アプリ(プラグイン)で様々な機能を拡張できるOSS、Nextcloudをインストールしました。
この、2台目のChuwi Herobox Proです。redmineのデータ同期サーバのデータをマウントするために選びました。
以下が導入済みです。
全て管理者権限で実施しました。
sudo apt install php7.4-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysqli,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml}
systemctl restart apache2
mysql -u root -p
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'パスワード';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
導入したサーバは/homeディレクトリを別SSDにマウントしているため、以下のようにしました。
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip /home/www-data
chown -R www-data:www-data /home/www-data/nextcloud
mkdir /var/log/apache2/nextcloud
chown -R www-data:www-data /var/log/apache2/nextcloud
vi /etc/apache2/sites-available/nextcloud.conf
<VirtualHost _default_:80>
ServerName [公開するドメイン名]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
CustomLog /var/log/apache2/nextcloud/access.log combined
ErrorLog /var/log/apache2/nextcloud/error.log
</VirtualHost>
<VirtualHost _default_:443>
ServerName [公開するドメイン名]
CustomLog /var/log/apache2/nextcloud/ssl_access.log combined
ErrorLog /var/log/apache2/nextcloud/ssl_error.log
SSLEngine on
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLCertificateFile /etc/certs/ssl.crt
# 証明書のファイルパス
SSLCertificateKeyFile /etc/private/ssl.key
# 秘密鍵のファイルパス
DocumentRoot /home/www-data/nextcloud
<Directory /home/www-data/nextcloud>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
a2ensite nextcloud.conf
apache2ctl configtest
# Syntax ok を確認します
systemctl restart apache2
ブラウザから設定したドメインにアクセスします。
アクセス後、ガイドに従い
を設定後、以下の画面が出てくれば成功です。

こちらの続きです。
パターンがあったので、完全削除を対応しました。
apt-get --purge autoremove php*
これにより、設定ファイルを含めてPHPが削除されました。
add-apt-repository ppa:ondrej/php
aptitude update
aptitude upgrade
apt install php7.4
apt install php7.4-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysqli,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar,xml}
systemctl restart apache2
その後、正常に上がっていることを確認。
[--purge]オプションで完全に削除するのを失念していました。
ひょんな事から無料でドメインを取得。このドメインを軸に「mkcertではなくLet's Encryptでもワイルドカード証明書が発行できないか」と思って試してみました。
以下は準備済みです。
作業対象が手順によって異なります。
sudo certbot certonly --manual \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory \
-m 自分のメールアドレス \
-d *.ドメイン名
入力後、以下のようにTXTレコードを登録するように求められます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.ドメイン名 with the following value:
DNSに登録するレコードの値
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
ここではまだEnterは押しません。
lightsailのDNS設定で

をそれぞれ設定して反映させます。
反映後、別のターミナルで以下を実行します。
nslookup -type=TXT _acme-challenge.登録したドメイン名 8.8.8.8
結果が返ってきたら次のステップに進みます。
手順-2-で押していなかったEnterを押します。
以下のようにパスとファイルが明示されているので、そのパスの内容を控えておきます。(外部に公開しないよう注意します)
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/ドメイン名/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/ドメイン名/privkey.pem
Your certificate will expire on 2023-01-09. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
/etc/hostsファイルを
IPアドレス lightsailで設定したフルドメイン サブドメイン
で修正します。
こちらを元に、証明書を差し替えます。
証明書差し替え → nginx再起動後、「AWS Lightsailで設定したドメイン名」でアクセスします。

DNS情報がインターネット上に公開されているので
のがLet's Encrypのいいところです。
この記事で設定していたgrowiサーバ、ログの設定が漏れていたので追加しました。
すべて管理者権限で実施しています。
vi /etc/logrotate.d/growi
/var/log/nginx/chisataki.lyco.reco/*.log {
daily
rotate 10
missingok
notifempty
sharedscripts
compress
delaycompress
postrotate
/usr/sbin/nginx -s reopen >/dev/null 2>&1 || true
endscript
}
今回は
としています。
logrotate -d /etc/logrotate.d/growi
でエラーが出ないことを確認しました。
自室のサーバに専用redmineを運用するようになって半年ほど。一つの課題が浮かび上がりました。
現状、
を自宅サーバ群で運用中。Webサービスが増えるたびに「証明書更新をサーバ毎に行うのが面倒」です。ワイルドカード証明書を用いて、シンボリックリンクの張り替えで済むようにしてもなお各サーバに同じ設定を行うのは手間がかかる上にミスが生じる温床となります。
そこで、既にgrowiサーバで運用しているnginxのリバースプロキシーをredmineにも拡張するようにしました。
やりたいことは以下です。(IPアドレスとドメインは便宜上です)
サクッとまとめると
これにより、SSLを導入する箇所をnginxサーバのみとします。
以下を用意しています。
ともにUbuntu Linux 20.04系で動いています。
全て管理者権限で実施します
以下、ファイルを編集します。
vi /etc/apache2/sites-available/redmine.conf
<Location /redmine>
PassengerBaseURI /redmine
PassengerAppRoot /var/lib/redmine
Require all granted
</Location>
Alias /redmine /var/lib/redmine/public
<VirtualHost 192.168.1.99:80>
ServerName abc.local
ErrorLog /var/log/redmine/error.log
CustomLog /var/log/redmine/access.log combined
RewriteEngine On
RewriteCond %{HTTP_HOST} ^abc\.local
RewriteRule ^/$ http://abc.local/redmine/ [R]
</VirtualHost>
a2ensite redmine.conf
apache2ctl configtest
#Syntax OKを確認
systemctl restart apache2
vi /etc/hosts
192.168.1.30 abc.local
vi /etc/nginx/sites-available/redmine.conf
upstream abc {
server 192.168.1.99:80;
}
server {
listen 80;
server_name abc.local;
server_tokens off;
return 301 https://$host$request_uri;
access_log /var/log/nginx/redmine/access.log;
error_log /var/log/nginx/redmine/error.log warn;
}
server {
listen 443 ssl http2;
server_name abc.local;
server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/dhparam.pem;
#openssl dhparam -out /etc/nginx/dhparam.pem 2048 として作成します(環境によっては5分以上かかります)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security 'max-age=63072000';
ssl_certificate /etc/certs/local.crt;
# 証明書のパスに読み替えます
ssl_certificate_key /etc/private/local.key;
# 秘密鍵のパスに読み替えます
access_log /var/log/nginx/redmine/ssl_access.log;
error_log /var/log/nginx/redmine/ssl_error.log warn;
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;
proxy_set_header X-Forwarded-Proto https;
proxy_max_temp_file_size 10240m;
client_max_body_size 10240m;
proxy_buffer_size 10240m;
proxy_buffers 10 10240m;
proxy_busy_buffers_size 10240m;
proxy_redirect off;
set $proxy_target 'abc';
location / {
proxy_pass http://$proxy_target;
}
}
ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/site-enabled/redmine.conf
nginx -t
# syntax is ok と test is successfulを確認します
systemctl restart nginx -t
ローカルNWに接続されているクライアントのブラウザから
http://abc.local
にアクセスし、
を確認します。
apt(aptitude)でパッケージをインストール後、以下の判断に迷うことがあります。
これらをチェックするコマンドがありました。
sudo aptitude install debian-goodies update-notifier-common
カーネルなどのアップデートがされて、システム全体の再起動が必要な場合、以下のファイルが作成されます。
/var/run/reboot-required
cat /var/run/reboot-required
*** System restart required ***
また、サービスの再起動が必要な場合は、次のコマンドを実行してその判断が可能です。
sudo checkrestart
Found 27 processes using old versions of upgraded files
(14 distinct programs)
(10 distinct packages)
Of these, 9 seem to contain systemd service definitions or init scripts which can be used to restart them.
The following packages seem to have definitions that could be used
to restart their services:
accountsservice:
441 /usr/lib/accountsservice/accounts-daemon
networkd-dispatcher:
470 /usr/bin/networkd-dispatcher
policykit-1:
471 /usr/lib/policykit-1/polkitd
rsyslog:
473 /usr/sbin/rsyslogd
modemmanager:
511 /usr/sbin/ModemManager
unattended-upgrades:
567 /usr/share/unattended-upgrades/unattended-upgrade-shutdown
openssh-server:
683 /usr/sbin/sshd
246134 /usr/sbin/sshd
246245 /usr/sbin/sshd
apache2-bin:
15285 /usr/sbin/apache2
238252 /usr/sbin/apache2
238253 /usr/sbin/apache2
238254 /usr/sbin/apache2
238255 /usr/sbin/apache2
238258 /usr/sbin/apache2
238559 /usr/sbin/apache2
238902 /usr/sbin/apache2
244571 /usr/sbin/apache2
244580 /usr/sbin/apache2
packagekit:
246707 /usr/lib/packagekit/packagekitd
These are the systemd services:
systemctl restart accounts-daemon.service
systemctl restart networkd-dispatcher.service
systemctl restart polkit.service
systemctl restart ModemManager.service
systemctl restart packagekit-offline-update.service
systemctl restart packagekit.service
These are the initd scripts:
service rsyslog restart
service unattended-upgrades restart
service ssh restart
service apache2 restart
These processes (1) do not seem to have an associated init script to restart them:
passenger:
238230 /usr/lib/passenger/support-binaries/PassengerAgent
238235 /usr/lib/passenger/support-binaries/PassengerAgent
上記で再起動の必要性があったのでシステム全体を再起動。
sudo checkrestart
# Found 0 processes using old versions of upgraded filesと表示されること
cat /var/run/reboot-required
# ファイルがないこと
を確認し、システムを最新の状態に保ちました。
Powered by WordPress & Theme by Anders Norén