カテゴリー: PC Page 36 of 54

Ubuntu 22.04でZabbix 6.2(MySQL/nginx構成)を設定するときにハマったこと。

以下の環境でZabbixを導入してみましたが、いくつかハマったことがあったのでメモを残しておきます。

導入した環境

  • Ubuntu 22.04
  • 導入しようとしたZabbix : 6.2
  • MySQL / nginx構成
  • 他サービス未導入(OSインストールと初期設定を終えたのみです)
  • ドメイン登録済みです。
  • ワイルドカードSSL証明書を発行済みです。

導入手順(ハマりポイント込み)

前提

  • 全て管理者権限で実施しています。
  • パッケージ管理は基本的にaptitudeを利用しています。
  • ローカルNWで設定しているのでufwなどは考慮していません。

参考URL

Zabbixレポジトリを追加してインストールします。

aptitude update
aptitude upgrade
wget https://repo.zabbix.com/zabbix/6.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.2-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.2-1+ubuntu22.04_all.deb
aptitude update
aptitude install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

MySQLの初期設定

aptitude install mysql-server
systemctl start mysql
systemctl enable mysql

必要に応じて: mysql_secure_installation

参考 https://level69.net/archives/28557
vi /etc/mysql/mysql.conf.d/mysqld.cnf
追記内容
#末尾に以下を追加
default_authentication_plugin=mysql_native_password

設定後にmysqlサービス再起動

systemctl restart mysql

MySQL rootパスワード設定

mysql -u root -p
# 未設定のためパスワードは不要です
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';
#パスワードは任意のものを入力ください
flush privileges;
exit

mysql初期設定

mysql_secure_installation
初期設定内容
Enter password for user root: 
# 上記で設定したパスワードを入力します

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: 
# Yを入力してEnter

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
# ポリシーに合わせて0/1/2を入力(ローカル環境のため0としました)

Estimated strength of the password: 50 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : 
# 既に設定しているのでn

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : 
# anonymousユーザーを削除するためY

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : 
# rootユーザのリモートログインを禁止するためY

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 
# テストDBを削除するためY

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : 
# 設定を反映するためy

MySQLでZabbix用のユーザーを作成

mysql -uroot -p
# 上記で設定したパスワードを入力します
CREATE DATABASE zabbix character set utf8mb4;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'パスワード';
# 任意のパスワードを設定
GRANT ALL ON redmine.* TO 'zabbix'@'localhost';
flush privileges;
exit

ハマりポイント1:SQL実行時にエラーが出る

ERROR 1419 (HY000) at line 2123: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

と出たので、設定をしておきます。

対処方法
mysql -uroot -p

rootでmysqlにログイン後、以下を実行します。

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
# OFF を確認
set global log_bin_trust_function_creators=1;
# 設定を有効化
 SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
 # ONを確認

ハマりポイント2: インポート用SQLが存在しない(正しい手順を後述)

Webサイトの手順によると、

zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix

とありますが、該当ディレクトリにmysql用のSQLが存在しません。

対処方法
apt reinstall zabbix-sql-scripts

として、sqlを再インストールします。

updatedb
 locate server.sql.gz
 →  /usr/share/zabbix-sql-scripts/mysql/server.sql.gz

SQLをインポートします。

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
# zabbixのDBパスワードを入力します。

Zabbixの設定を行います。

vi /etc/zabbix/zabbix_server.conf
追記/編集内容
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

nginx用のconfファイルを設定します。

vi /etc/zabbix/nginx.conf
編集内容
        listen          443 ssl http2 default_server;
        # ポートを443のみで受け付けるようにします。
        server_name     ドメイン名;

        ssl_certificate "/SSL証明書と中間証明書を結合したファイル";
        ssl_certificate_key "秘密鍵ファイル";
        ssl_protocols TLSv1.2 TLSv1.3;
        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:ECDHE-RSA-AES128-SHA";
        ssl_prefer_server_ciphers off;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 10m;

設定内容を確認します。

nginx -t
# Syntax OKを確認します

設定内容を反映します。

systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm
systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm

セットアップ確認

ブラウザから

https://ドメイン名/setup.php

が表示されれば問題ないです。その後、Next Stepに進んでください。

ChatGPTが作成したapacheバーチャルファイル。

2022年12月頃にTwitterで大いに話題となったChatGTP。

https://chat.openai.com/chat

これは文書作成のみならずコードも書けると知ったので早速試してみました。

作成してほしいコード

  • apacheでwordpressを動かすためのコンフィグ。
  • httpアクセスをhttpsにリダイレクトする。
  • アクセスログとwordpressのプログラムの格納場所は指定。

質問した内容

以下の文章をChatGPTに入力しました。

apacheでwordpressを公開するためのバーチャルサイトのコンフィグを作成してください。
サーバはUbuntu22.04です。apacheとmod_sslは導入済みです。
ドメインはweblog.example.comです。
wordpressは/home/www-virtual/wordpressに格納されています。
アクセスログは/var/log/apache2/weblog.example.comを指定します。
httpアクセスを強制的にhttpsにリダイレクトし、TLS1.2のみを有効化します。
wp-adminディレクティブは192.168.1.0/24以外アクセスできないようにします。

返ってきた内容

結論から言って驚きの結果でした。


まず、/etc/apache2/sites-available/weblog.example.com.confという名前のファイルを作成します。 次に、以下の内容を記述します:

<VirtualHost *:80>
    ServerName weblog.example.com
    DocumentRoot /home/www-virtual/wordpress
    ErrorLog /var/log/apache2/weblog.example.com/error.log
    CustomLog /var/log/apache2/weblog.example.com/access.log combined
    <Directory /home/www-virtual/wordpress>
        Require all granted
    </Directory>
</VirtualHost>

次に、SSL用のバーチャルサイトの設定を追加します。

<VirtualHost *:443>
    ServerName weblog.example.com
    DocumentRoot /home/www-virtual/wordpress
    ErrorLog /var/log/apache2/weblog.example.com/ssl-error.log
    CustomLog /var/log/apache2/weblog.example.com/ssl-access.log combined
    SSLEngine on
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/privatekey.key
    SSLProtocol TLSv1.2
    <Directory /home/www-virtual/wordpress>
        Require all granted
    </Directory>
    <Location "/wp-admin/">
        Require ip 192.168.1.0/24
    </Location>
</VirtualHost>

最後に、httpアクセスをhttpsにリダイレクトするために、mod_rewriteモジュールを有効化し、以下の設定を追加します。

<VirtualHost *:80>
    ServerName weblog.example.com
    DocumentRoot /home/www-virtual/wordpress
    ErrorLog /var/log/apache2/weblog.example.com/error.log
    CustomLog /var/log/apache2/weblog.example.com/access.log combined
    <Directory /home/www-virtual/wordpress>
        Require all granted
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </Directory>
</VirtualHost>

これで、バーチャルサイトの設定が完了しました。

注意: 上記の設定は一例であり、適切な設定はサイトの状況や環境によって異なります。また、必要に応じて、この設定をカスタマイズしてください。


注文通りです。想定通りの動きになるのはほぼ間違いないです。(後で検証したいぐらいです)これに付け加えるならば、

sudo a2ensite weblog.example.com.conf
sudo apache2ctl configtest
# Syntax OKを確認します
sudo systemctl restart apache2.service

ぐらいでしょう。

今後の各種サーバ設定に大いに貢献する予感です。

サーバ3台構成によるlsyncのバックアップ。

サーバ3台構成になっていることで、データの更なる冗長化を図ります。

バックアップ概要

redmineのデータをnextcloudにリアルタイム同期、nextcloudからgrowiに更に同期させます。

設定

基本的にこの設定通り。以前のサーバ設定をコピペする形なので、バックアップ先と元が逆にならないように細心の注意を払いました。

設定中のエラー

動作確認中のlsyncログを見たら以下を発見。

Sun Dec  4 04:20:39 2022 Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches

幸い、解決策がネットにありました。

http://blog.livedoor.jp/kmiwa_project/archives/1072412621.html

解決

vi /etc/sysctl.conf
設定内容
fs.inotify.max_user_watches = 819200
# 上記の内容を追記します
設定反映
sysctl -p
systemctl restart lsync

これによって、同期が無事に始まりました。

分割&分割。(キーボードレスト導入)

このキーボードを導入して1年以上。

お陰で

  • 手を広げての入力が可能
  • 間にタブレットや手帳を入れて視認性が良く
  • 入力効率が良くなった

などの恩恵に与りました。それに少し手を入れました。

畳のパームレスト『コテマクラ フタゴ』。

これを据え付けのパームレストと差し替えます。

この通り、分割キーボードの左右それぞれにフィットです。また、裏面はコルク張りなのでスベりにくくなっています。

「合間にものを入れられる」機能性は損なわずに和のたたずまいを入れることができました。

redmineのチケット/かんばんによる買い物リスト管理。

むような出費を抑えるため、唐突にやってくる衝動買いにも耐えられるため、こういう管理が必要だと改めて思いました。

redmineの肝となるチケット、様々なissue(チケット)がどの状態にあるかをkanban(agile)プラグインでこのように一瞥できるようにしています。

これによって、

  • 予約日が近づいているものがないか
  • 優先的に購入するものはないか

を把握できるようになっています。

チケット個別でも

「いつ」「どこで」「何を」「いくら」使ったかを記録しているのですが……

記録することで逆に数値が可視化される恐怖が出てくるわけで。

NextCloudを利用してのフィードバック。

自身のオンプレ環境にNextcloudを運用するようになって一ヶ月ちょっと。

思ったことを少し述べます。

よかったこと

画像ファイルの保存

スマートフォン/iPadで保存したファイルを逐次アップロードしてくれる安心感は本当に素晴らしいです。しかも、自宅内NWでのみアップロードする環境なので不要な通信を抑えられます。

自動タグ付けによる取り回し

アプリ「recognize」のおかげで、ある程度の画像の分類をしてくれるようになりました。

やや難点

「統合的」に用いることはできない

  • カレンダー
  • ノート
  • スケジュール

など、様々なアプリが用意されていますが、それ専門に特化したWebサービスには及ばないという印象。ToodleDoなどのようにToDoの繰り返し登録などがあれば良かったのになと思います。

自動タグ付けのCPU消費

機械学習によるタグ付けは、それだけでCPUを激しく消費します。特に、画像を大量登録していた移行期〜3週間ほどはロードアベレージが7〜8を超えていてヒヤヒヤものでした。

今後の展望

「Dropboxから安全に移行できるか」が鍵になります。そうなると、ディスクの冗長化や一層のセキュリティ対策が求められるので、課題は続きます。

Nextcloudにアプリ『Quick Notes』を導入。

使い勝手を試してみます。

導入

Redmineのプラグインと異なり、NextcloudのアプリはWeb管理画面から行うことができます。

管理メニュー→アプリへと移動します。

検索などで「Quick Notes」を検索します。

アプリを有効化します。

「ダウンロードして有効にする」をクリックします。このとき、管理者パスワードを訊かれるので入力後に「Confirm」をクリックします。

有効化後、

トップページに「Quick notes」が出てきます。

アプリ外観

インストール直後は当然ながら、右側の所にはなにもありません。「+ New note」をクリックします。

Google Keepのような入力画面。写真も添付できますが、NextCloud上のものしか添付できません。

ファーストインプレッション

Google KeepのようでGoolge Keepでないというのが第一印象でした。特に、デフォルトでは自動セーブされない(更新したい場合はSaveを推す必要がある)のは結構違和感があります

なので、Settingsで

このチェックを外して自動セーブをデフォルトにするのがいい感じになりそうです。

そして、

  • 書いた文章の全てが表示される
  • ノート覧が左に表示される

のはKeepにない強み。

とはいえ、「Google Keepの代替になり得るか」に関しては現時点ではNo。今後の運用を見つけていく形です。

redmine: knowledgeプラグインの画像アップロード時のエラーを解消。

半年ぐらいの問題が解決しました。

環境

  • redmine 4.2.4
  • Linux Mint 20.03
  • Apache 2.4.54
  • mysql 8.0.31
  • redmine_knowledgebase 4.1.1
  • ruby 2.70-p0
  • redmineディレクトリ /var/lib/redmine
  • redmineログディレクトリ /var/log/redmine

事象:

  1. knowledgebaseプラグインを用いて記事を発行します。
  2. 画像をアップロードします。
  3. 「作成」をクリックすると 500 internal server errorになります。

エラーになるものの、元のページに戻ると記事は作成されているため割と放置していました。

とはいえ、記事を発行するたびにエラーが発生するのはストレスフル。今回、その事象を解決までこぎ着けます。

調査

production.logを発行します。

tail -f /var/log/redmine/production.log

上記ログを流しながら、現象を再現させます。

その結果、以下のログに突き当たりました。

Completed 500 Internal Server Error in 1091ms (ActiveRecord: 869.6ms)

ActionView::Template::Error (undefined method `thumbnail_path' for #<#<Class:0x0000564f87f6a428>:0x0000564f87600360>
Did you mean?  thumbnail_tag
               thumbnail_url):
    1: <h1><%= l(:label_new_article) %>: <%= link_to(h(@article.title), @article_url) %>
    2: (<%=h @article.category.title %>)</h1>
    3: 
    4: <% if thumb = get_article_thumbnail_url_absolute( @article ) %>
    5:   <p><img src="<%= thumb %>" alt="[Thumbnail]"></p>
    6: <% end %>
    7: 

このエラーで検索したところ、そのものズバリの記事が書かれています。

https://github.com/alexbevi/redmine_knowledgebase/pull/394/commits/fe9d5952058649d457cec8118f50e4ee14690b40

これを元に解決させていきます。

手順

全て管理者権限で実施しています。

ディレクトリに移動します。

cd /var/lib/redmine/plugins/redmine_knowledgebase/app/helpers

修正するファイルのバックアップを取ります。

cp -pi /var/lib/redmine/plugins/redmine_knowledgebase/app/helpers/knowledgebase_helper.rb /hoge/knowledgebase_helper.rb.org

差分の通りファイルを修正します。

vi /var/lib/redmine/plugins/redmine_knowledgebase/app/helpers/knowledgebase_helper.rb
ファイル差分

(上述したバージョンであれば184行目)

     thumb = get_article_thumbnail( article )

     if thumb
-      return "#{Setting.protocol}://#{Setting.host_name}#{thumbnail_path(thumb)}"
+      return polymorphic_url(thumb, :host => Setting.host_name, :protocol => Setting.protocol)
     else
       return ''
     end

修正したファイルを反映させます。

cd /var/lib/redmine
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
systemctl restart apache2.service

対応後の修正を確認

  1. knowledgebaseプラグインを用いて記事を発行します。
  2. 画像をアップロードします。
  3. 「作成」をクリックしてもエラーが発生しないことを確認します。

Nextcloudのバージョンアップ。

WordPressと変わらない操作感でバージョンアップを行うことができました。

操作手順

NextcloudのWeb画面にログインし、「Administration settings」をクリックします。

更新できることを確認します。

アップデーターを開きます。

「アップデーターを開く」をクリックします。

アップデートを開始します。

「Start update」をクリックします。

どの段階まで進んだかを示してくれる親切設計でした。(写真を大量に保管しているのでバックアップ作成はかなりの時間がかかりました)

メンテナンスモードを解除します。

「Disable maintenance mode and continue in the web based updater」をクリックします。

「アップデートを開始」をクリックします。

何も問題がなければ、Nextcloudの管理者にログインされた状態でページが切り替わります。

アップデート後の後処理を行います。

アップデート対象に「Themes」が含まれていたので、背景が真っ白になっていました。これを修正するため再び「Administation settings」に進み、テーマをクリックします。

Background and login imageをクリックして任意の画像に置き換えます。

この後、「概要」をクリックすることで

「最新版です」となっていることを確認しました。

Elasticsearchバージョンアップ後、サービス起動せず全文検索できない件について

前提

Linux Mint 20.3でGrowiを運用しています。

現象

aptによるアップデート後、Growiで全文検索ができない現象が発生しました。

状況把握

[root@chisato.lyco.reco ~]# systemctl status elasticsearch.service 
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2022-10-30 19:06:41 JST; 1 day 1h ago
       Docs: https://www.elastic.co
    Process: 983 ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=1/FAILURE)
   Main PID: 983 (code=exited, status=1/FAILURE)

10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:637)
10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:928)
10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java>
10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1158)
10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/java.lang.Thread.run(Thread.java:1589)
10月 30 19:06:41 chisato.lyco.reco systemd-entrypoint[983]:         at java.base/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186)
10月 30 19:06:41 chisato.lyco.reco systemd[1]: elasticsearch.service: Main process exited, code=exited, status=1/FAILURE
10月 30 19:06:41 chisato.lyco.reco systemd[1]: elasticsearch.service: Failed with result 'exit-code'.
10月 30 19:06:41 chisato.lyco.reco systemd[1]: Failed to start Elasticsearch.

→ この後、

systemctl restart elasticsearch.service 

を行っても起動しません。この事象を解決したときのメモです。

原因調査

cat /var/log/elasticsearch/elasticsearch.log 
(中略)
java.lang.IllegalArgumentException: Plugin [analysis-icu] was built for Elasticsearch version 7.17.6 but version 7.17.7 is running

を発見しました。ElasticSearchをバージョンアップしたのに、動いてるプラグインが対応しきれなかったためエラーになったようです。

対処

以下のコマンドを実行しました。

/usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-icu
/usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
/usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-kuromoji
/usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
# 問題を起こしているプラグインの削除→再インストールを実施

systemctl restart elasticsearch.service

対処確認

 systemctl status elasticsearch.service 
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-10-31 21:23:02 JST; 23s ago
       Docs: https://www.elastic.co
   Main PID: 5424 (java)
      Tasks: 94 (limit: 9199)
     Memory: 768.5M
     CGroup: /system.slice/elasticsearch.service
             ├─5424 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true>
             └─5617 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

10月 31 21:22:38 chisato.lyco.reco systemd[1]: Starting Elasticsearch...
10月 31 21:23:02 chisato.lyco.reco systemd[1]: Started Elasticsearch.

で、正常に起動したことを確認できました。

Page 36 of 54

Powered by WordPress & Theme by Anders Norén