カテゴリー: ガジェット Page 28 of 102

Ubuntu 22.04にGrowi v7.xをインストール。

Dockerを用いない方法でGrowiのv7.xをUbuntu22.04がインストールできたので、その手順を示します。

環境

  • Ubuntu 22.04
  • Apache 2.4

の基本的な設定が済んだという状況です。

前提

  • 名前解決できるドメインが用意されている。
  • そのドメインに応じた証明書が用意されている。

さっくりとはならない手順

太字部分はv7で必要になる手順です。

  1. 必要なパッケージをインストールします。
  2. Node.js/npmをインストールします。
  3. Redis-serverをインストールします。
  4. Javaをインストールします。
  5. ElasticSearch 8をインストールします。
  6. ElasticSearchの設定変更を行います。
  7. ElasticSearchのプラグインをインストールします。
  8. ElasticSearchの設定変更を反映します。
  9. MongoDBをインストールします。
  10. MongoDBのデータ格納先を変更します。
  11. MongoDBのアップデートを防ぎます。
  12. MongoDBの設定変更を反映します。
  13. yarnのインストールを行います。
  14. 必要パッケージをインストールします。
  15. turboパッケージをインストールします。
  16. Growiのインストールを行います。
  17. yarnを用いてインストールします。
  18. アプリのビルドを行います。
  19. 自動起動のスクリプトを作成します。
  20. Apacheのリバースプロキシの設定を行います。
  21. ブラウザで起動します。

手順

必要なパッケージのインストールを行います。

  • git, buildツールなど
sudo aptitude install build-essential git git-lfs apt-transport-https

※v6系と異なり、git-lfsをインストールしない状態でgit-cloneを行うと正しくビルドが行えません。

node18をインストールします。

  • レポジトリ追加
sudo curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash
  • パッケージアップグレード
sudo aptitude update
  • Node.jsインストール
sudo aptitude install nodejs
  • Node.jsバージョン確認
node -v

2024/06/27現在:v18.20.3

  • npmバージョン確認
npm -v

2024/06/27現在:10.7.0

redis-serverをインストールします。

  • インストール
sudo  aptitude install redis-server
  • 起動確認
systemctl status redis-server

active(running)を確認します。

  • 自動起動有効化
sudo systemctl enable redis-server

Javaをインストールします。

  • インストール
sudo aptitude install openjdk-17-jdk

ElasticSearhをインストールします。

  • gpg追加
sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  • レポジトリ追加
sudo echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
  • パッケージのアップグレード
sudo aptitude update
  • ElasticSearchインストール
sudo aptitude install elasticsearch

※この後、デフォルトパスワードが表示されますが、控えておく程度にしましょう。

JVM設定変更
  • バックアップディレクトリ作成
sudo mkdir /etc/elasticsearch/old

※任意のバックアップディレクトリを指定します。

  • 設定ファイルバックアップ
sudo cp -pi /etc/elasticsearch/jvm.options /etc/elasticsearch/old/jvm.options.$(date +%Y%m%d)
  • 設定ファイル書き換え
echo -e "-Xms256m\n-Xmx256m" | sudo tee -a /etc/elasticsearch/jvm.options
  • 書き換え確認
sudo diff -u /etc/elasticsearch/old/jvm.options.$(date +%Y%m%d) /etc/elasticsearch/jvm.options
  • 差分
+-Xms256m
+-Xmx256m
ElasticSearchの設定変更

※この作業だけ管理者権限で実行します。

  • root昇格
sudo su -
  • 設定ファイルバックアップ
cp -pi /etc/elasticsearch/elasticsearch.yml /path/to/backup/elasticsearch.yml.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • ファイル書き換え
sed -i -e 's/xpack.security.enabled: true/xpack.security.enabled: false/' \
       -e '/xpack.security.http.ssl:/{n; s/  enabled: true/  enabled: false/}' \
       -e '/xpack.security.transport.ssl:/{n; s/  enabled: true/  enabled: false/}' /etc/elasticsearch/elasticsearch.yml
  • 差分確認
diff -u /path/to/backup/elasticsearch.yml.$(date +%Y%m%d) /etc/elasticsearch/elasticsearch.yml
  • 差分
 # Enable security features
-xpack.security.enabled: true
+xpack.security.enabled: false

 xpack.security.enrollment.enabled: true

 # Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
 xpack.security.http.ssl:
-  enabled: true
+  enabled: false
   keystore.path: certs/http.p12

 # Enable encryption and mutual authentication between cluster nodes
 xpack.security.transport.ssl:
-  enabled: true
+  enabled: false
  • rootから抜ける
exit
ElasticSearchのプラグインを追加
  • analysis-kuromoji インストール
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
  • analysis-isu インストール
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
自動起動設定反映
  • 起動
sudo systemctl start elasticsearch
  • 起動確認
systemctl status elasticsearch

active(running)を確認します。

  • 自動起動有効化
sudo systemctl enable elasticsearch

MongoDBインストール

レポジトリ追加

  • 必要パッケージインストール
sudo aptitude install gnupg
  • gpg追加
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
  • レポジトリ追加
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
MongoDBインストール
  • パッケージのアップグレード
sudo aptitude update
  • MongoDBインストール
sudo aptitude install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools
MongoDBバージョン固定

※2024/04/03現在、GrowiはMongoDBのバージョンが固定されているので、自動更新されないようにします。

sudo aptitude hold mongodb-org
sudo aptitude hold mongodb-org-server
sudo aptitude hold mongodb-org-shell
sudo aptitude hold mongodb-org-mongos
sudo aptitude hold mongodb-org-tools
保存先変更(オプション)

MongoDBの格納先を、冗長化構成されているパーティションにするため対応しました。

  • 格納ディレクトリ作成
sudo mkdir /home/mongodb

保存先を変えたいところにします

  • 所有者変更
sudo chown -R mongodb:mongodb /home/mongodb
  • 所有者変更確認
ls -ld /home/mongodb
  • 設定ファイルのバックアップ取得
sudo cp -pi /etc/mongod.conf /path/to/backup/mongod.conf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • バックアップ確認
sudo diff -u /etc/mongod.conf /path/to/backup/mongod.conf.$(date +%Y%m%d)

バックアップが保存されたか、差分がないことで確認します。

  • ファイル書き換え
sudo sed -i 's/dbPath: \/var\/lib\/mongodb/dbPath: \/home\/mongodb/' /etc/mongod.conf
  • 差分確認
sudo diff -u /path/to/backup/mongod.conf.$(date +%Y%m%d) /etc/mongodb.conf
  • 差分
-  dbPath: /var/lib/mongodb
+  dbPath: /home/mongodb
自動起動有効
  • mongodサービス起動
sudo systemctl start mongod
  • サービス起動確認
systemctl status mongod

active (running)を確認します

  • 自動起動有効化
sudo systemctl enable mongod

yarnインストール

  • npmでyarnインストール
sudo npm install -g yarn
  • turboインストール

※Growi v6.1.0から必須パッケージとなりました。

sudo yarn global add turbo

Growiインストール

  • git clone
sudo git clone https://github.com/weseek/growi /home/www-data/growi

※任意のディレクトリを指定します。

  • ディレクトリ移動
cd /home/www-data/growi && pwd

先ほどcloneしたディレクトリです。

  • チェックアウト
sudo git checkout -b v7.0.11 refs/tags/v7.0.11

2024/06/27現在の最新版をチェックアウトします。

  • yarnによるインストール
sudo yarn

CPUのスペックによっては相当な時間がかかります。

  • ビルド
sudo yarn app:build

v7からこの操作が必要です。やはり時間がかかります。

自動起動スクリプトの作成

  • systemd作成
cat <<- __EOF__ | sudo tee -a /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.service
ConditionPathExists=【/home/www-data/growi】

[Service]
ExecStart=【/home/www-data/growi/】growi-start.sh
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target
__EOF__

※【】内を、git cloneしたディレクトリにします。

  • Growiインストールディレクトリに作成
  • 教義・信仰に沿ったエディタで作成します。
  • ファイル名:growi-start.sh
  • growiを配置したディレクトリ内に作成します。
#!/bin/bash
cd 【/home/www-data/growi】
NODE_ENV=production \
AUDIT_LOG_ENABLED=true \
FORCE_WIKI_MODE=private \
MONGO_URI=mongodb://localhost:27017/growi \
ELASTICSEARCH_URI=http://localhost:9200/growi \
REDIS_URI=redis://localhost:6379 \
PASSWORD_SEED=[任意の文字列] \
FILE_UPLOAD=local \
npm start

※【】内を、git cloneしたディレクトリにします。
[]内には任意の文字列を入れます。 例:PASSWORD_SEED=GOLDEN_SEED

また、オプションなどは好みに応じて指定してください。(FILE_UPLOAD=localは添付ファイルの保存先をDBではなくローカルに保存するオプションです)

  • 権限変更
sudo chmod +x /home/www-data/growi/growi-start.sh
  • systemd設定反映
sudo systemctl daemon-reload
  • growi有効化
sudo systemctl start growi.service
  • growi有効化確認
systemctl status growi.service

active(running)を確認

  • 自動起動有効化
sudo systemctl enable growi.service

Apacheによるリバースプロキシの設定

  • モジュールインストール
sudo a2enmod proxy_http rewrite header
  • apache再起動
sudo systemctl restart apache2.service
  • ログ保存ディレクトリ作成
suod mkdir /var/log/growi/
  • 所有者変更
sudo chown -R www-data:www-data /var/log/growi
  • 設定ファイル作成
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/growi.conf
<VirtualHost _default_:80>
    ServerName 【hoge.example.com】
    # ドメイン名を指定します
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>

<VirtualHost _default_:443>
    ServerName 【hoge.example.com】
    # ドメイン名を指定します
    CustomLog /var/log/growi/growi_access.log combined 
    ErrorLog /var/log/growi/growi_error.log

#SSL設定
  SSLEngine on
    Protocols h2 http/1.1
  # SSLを有効化します

SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 秘密鍵を指定します

    # Header に Host: example.com を追加するため
    ProxyPreserveHost On
    # HTTPS利用時: Header に x-forwarded-proto: https を追加するため
    RequestHeader set x-forwarded-proto 'https'
    # Apache では static assets で 304 が返らないことがあるので ETag を無効化する
    <ifModule mod_headers.c>
            Header unset ETag
    </ifModule>
    FileETag None

     # WebSocketのための設定
     RewriteEngine On
     RewriteCond %{HTTP:Upgrade} =websocket [NC]
     RewriteCond %{HTTP:Connection} upgrade [NC]
     RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off
__EOF__

【】内を自分の環境に変更してください。

※v6とはWebSocketの書き方が異なります。ご注意ください。特に、Apacheのリバースプロキシ環境でWebSocket周りを適切に指定しないとページを編集しようとすると編集画面が空白になってしまいます。

  • 設定反映
sudo a2ensite growi.conf
  • コンフィグ確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Apache2再起動
sudo systemctl restart apache2.service

Growiインストール確認

http://設定したドメイン でアクセスします。

この初期サイトが表示されたらインストール完了です。

Growi v7でページ編集時に空白になる問題に対処(Apache リバースプロキシのWebSocket設定)

事象の内容

  • Growiのバージョンをv6.3.5→v7.0.11にアップグレード後、既存のページを編集しようとすると編集エリアが空白になってしまう。
  • 新規ページを作成する際に、テンプレートが適用されない。

先のエントリーで述べたようにWikiとしては致命的な弱点だったため、やむなくv6.3.5に戻したという経緯があります。

ですが、回避策が見つかりましたのでメモとして残します。

事象が発生した環境

  • Ubuntu 22.04
  • Apache 2.4
  • Growi v7.0.11をDockerではなくオンプレ環境で利用。
  • Apacheによるリバースプロキシを設定

同一事象をネットで確認。

How to reproduce? (再現手順)

2台のHostPCでそれぞれGrowiを立ち上げています。A環境・B環境と呼称します。

「データ移行」機能を用いて、A環境からB環境にデータをインポートする
B環境のGrowiに他のPCからアクセスする
記事の編集画面を表示する

What happens? (症状)

記事の編集画面が白紙になっており、そのまま保存しても記事の内容が失われる(添付画面参照)

と、事象が一致。

事象の原因

上記issueのツリーに

私の環境でも編集画面が空白になる現象が観測されました。

私は https-portal を使ってデプロイしているのですが、 growi-docker-compose/examples/https-portal にある WEBSOCKET: 'true' の環境変数を設定し損ねていたのが原因でした。
私の環境では、これを設定すると通常通り編集を行えることを確認しております。逆に、コメントアウトすると空白に戻ります。

とあります。

これを原因と断定し、対処に臨みます。

対応方法のさっくりとした手順

  1. 現状のgrowiのリバースプロキシの設定を確認。
  2. 設定ファイルのバックアップ。
  3. 設定ファイルを修正。
  4. 修正を反映。
  5. 事象の解決確認。

参考にしたURL

How to Reverse Proxy Websockets with Apache 2.4

現段階でのリバースプロキシの設定を確認します。

  • Apacheのバーチャルファイルを確認
cat /etc/apache2/sites-available/growi.conf

自分の環境に合わせます。

  • 内容の一部抜粋
    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/ [P,L]

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

設定そのものはgithubのgrowi公式ドキュメントに沿ったものでしたが、これが引っかかっていたようです。

設定ファイルのバックアップを取ります。

  • バックアップ
sudo cp -pi /etc/apache2/sites-available/growi.conf /path/to/backup/directory/growi.conf.$(date +%Y%m%d)

ファイル名は自分の環境に合わせます。適宜、任意のバックアップディレクトリを指定します。

  • バックアップ確認
diff -u /path/to/backup/directory/growi.conf.$(date +%Y%m%d) /etc/apache2/sites-available/growi.conf

差分が無いこと(エラーがないこと)でバックアップを確認します。

ファイルを修正します。

上記、バックアップを取ったファイルを教義・信仰に沿ったエディタで編集します。(要管理者権限)

  • 削除する内容
    # socket.io の path を rewrite する
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
    RewriteRule /(.*) ws://localhost:3000/ [P,L]
  • 削除した箇所に追記する内容
     # WebSocketのための設定
     RewriteEngine On
     RewriteCond %{HTTP:Upgrade} =websocket [NC]
     RewriteCond %{HTTP:Connection} upgrade [NC]
     RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

編集後、差分を取ります。

  • 差分確認
diff -u /path/to/backup/directory/growi.conf.$(date +%Y%m%d) /etc/apache2/sites-available/growi.conf
  • 差分結果
-    # socket.io の path を rewrite する
-    RewriteEngine On
-    RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
-    RewriteCond %{QUERY_STRING} transport=websocket    [NC]
-    RewriteRule /(.*) ws://localhost:3000/ [P,L]
+     # WebSocketのための設定
+     RewriteEngine On
+     RewriteCond %{HTTP:Upgrade} =websocket [NC]
+     RewriteCond %{HTTP:Connection} upgrade [NC]
+     RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

設定を反映します。

  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Apache再起動前確認
systemctl status apache2.service

active (running)を確認します。

  • Apache再起動
sudo systemctl restart apache2.service
  • Apache再起動後確認
systemctl status apache2.service

active (running)を確認します。

事象の解決を確認します。

上記、設定を行ったGrowiサイトにアクセスします。

編集後、左ペイン(エディタ部分)がそのまま残っていれば対処完了です。

Nextcloud29.03へのアップグレード後の警告解消。(テーブルにインデックス追加)

概要

Nextcloudを29.0.3にアップデート後、以下の警告を確認しました。

データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。 オプションのインデックス "schedulobj_lastmodified_idx" がテーブル "schedulingobjects"にありません

こちらに対応します。

環境

  • Ubuntu 20.04
  • PHP8.1
  • Nextcloud 29.0.3 (29.0.2からアップデート)

また、nextcloudの実行ユーザーはwww-dataです。

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

  • ディレクトリ移動
cd /var/www/html/nextcloud && pwd

自分の環境に合わせます。

occを実行します。

  • 指示されたコマンドを実行
sudo -u www-data php occ db:add-missing-indices
  • 出力結果
Adding additional schedulobj_lastmodified_idx index to the oc_schedulingobjects table, this can take some time...
oc_schedulingobjects table updated successfully.

警告の解消を確認します。

  1. 上記の措置を執ったNextcloudのサイトに管理者権限でログインします。
  2. 管理>概要に進みます。
  3. 警告が消えていることを確認します。

解消方法がある程度示されているので、Nextcloudは親切です。

Growiバージョンアップ時の問題点と切り戻しでハマったこと。(nodeとturboのバージョンダウン)

Growiのバージョンをv6.3.5 → v7.0.10に変えたところ、以下のデグレを自分の環境で確認しました。

  1. 編集したページを再度編集しようとすると空白になる。
    • 再々編集した場合でも消える場合がある。
  2. 新しいページを作ったときにテンプレートが適用されない。

Wikiとしてこの2つは致命的なので、v6.3.5に切り戻しを行いましたが、ダウングレードできない事象が発生しました。

以下、その対処記録です。

環境

  • Ubuntu 22.04
  • Dockerではなくオンプレ環境で稼働
  • Growi v7.0.10→v6.3.5に切り戻しをしましたが、yarnの途中で失敗しました。

その途中で確認したこと

  1. v7.0.1へのセットアップ後、aptでnodeのバージョンが上がっていたことにより、v6.3.xの対象外になっていました。(18→19)
  2. v7.xへのセットアップ時、それにつれてturboのバージョンも上がっていました。

問題はこの2つにあると仮定して、これらのバージョンダウンを行っていきます。

対処

  • バージョン管理のためにnをインストール
sudo npm install -g n
  • インストール可能なnodeバージョンを確認
n ls-remote --all

→ 18系の最新版18.20.3をインスト-ルします

  • nでバージョンを指定してインストール
sudo n 18.20.3
  • バージョン確認
node -v

v18.20.3を確認

  • turboのバージョンを戻す
sudo yarn update turbo@1.12.2

この後、以下の手順でv7.0.10→v6.3.5へバージョンダウンを行えました。

https://barrel.reisalin.com/books/growi/page/growi

Webアプリはミドルウェアとの兼ね合いでハマることが多いんで注意です。

情報カード&ノートの収納システム。

昨年から愛用している情報カード。1つの案件事に1枚を使うという、思考の整理には便利。

ですが、記録をログ形式で、時系列に追っていくためにはノートも不可欠です。

そこで、こういうものを用意しました。

情報カードとクリップボードは元々持っていたもの。

後は百均で

  • B5ソフトケース
  • B6ファスナーケース
  • B5ノート
  • B5下敷き
  • 2L(B6)フォトアルバム

を購入。

ファスナーケースには白紙のカードとラベル用に便利なシールを。

2Lのアルバムは書き終えた情報カードを収納するのにジャストサイズです。

これらにノート(と下敷き)、クリップボードをケースに収納。

こんな形でまとまりました。

呼びのペンケースが隙間に入ったのも幸いです。

これで、折れやすく散逸しやすい情報カードを一つにまとめることが出来て、ノートとの連携も容易な収納システムが完成しました。

growiのプラグイン追加。

growiはv6以降よりプラグインを簡単にインストールできる機能が備わっています。

今回、それを用いてテーブル(表)の視認性を向上させました。

growiに管理者権限でログイン後、プラグインインストーラーで

https://github.com/weseek/growi-plugin-datatables

を入力後に「インストール」。インストール後、念のため、growiを再起動します。

導入後、任意のWikiページのテーブルに「Enable Data Table」ボタンが表示されるので、こちらをクリック。

  • 検索欄
  • 列の表示/非表示
  • 並べ替え

などが表示され、

細かい表示もしやすくなっています。

思った以上にかゆいところに手が届く機能なので、growiを使っている方にはおすすめです。

温泉旅行で役立ったもの。

今年の最初にも訪れた温泉旅行。

そのときの反省を生かして携行品をブラッシュアップさせました。そして、その結果が出た形です。

まずはLinuxをインストールした中古のLet's note。

今年初め、この宿で過ごしたときChromebookでは操作感が物足りなかったというのが、これを買った直接的な要因でした。

  • より打ちやすいキーボード
  • 解像度の高い画面
  • 抜群の操作感

は、確かな満足感。

携帯性も今までと変わらず。スーツケースのモバイルポケットにしっかり入ります。

また、モバイルスピーカーも役立ちました。

部屋の眼下に渓流が流れており、隣の部屋の物音どころかテレビの音も聞き取れないという状況でしたので、ピンポイントで音が届く機器はありがたい存在でした。

そして、新たに持って行ったランチバッグも活躍しました。

飲み物やお菓子などの冷たいものを持ち歩く機会は存外に多く、お土産を運ぶときにも活躍。

フィードバックがしっかり活きた旅行でした。

apacheで特定のユーザーエージェントからのアクセスを拒否。

概要

自分のサーバのアクセスログを見たら

"GET /picture.php?/6797/category/73 HTTP/1.1" 200 14394 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"

と、クローラーが大量にアクセスしてきました。robots.txtも意に介さない悪名高いbotのようなので、このアクセスを、サーバで拒否します。

環境

  • Ubuntu 20.04
  • Apache 2.4 (aptでインストールしたため、ディレクトリは/etc/apache2配下にあります。

また、バーチャルサイトによる複数のサイトを運用しているので、そのうちの1つだけを弾きます。

さっくりとした手順

  1. Apacheのバーチャルサイトの設定ファイルのバックアップを取ります。
  2. 設定ファイルを追記します。
  3. 設定を反映します。
  4. 拒否されていることを確認します。

設定ファイルのバックアップ

  • ディレクトリ移動
cd /etc/apache2/sites-available && pwd
  • ファイルバックアップ
sudo cp -pi hoge.conf /path/to/backup/directory/hoge.conf.$(date +%Y%m%d)

設定を行いたい自分の設定ファイルを、任意のバックアップディレクトリにバックアップします。

  • バックアップ確認
diff -u /path/to/backup/directory/hoge.conf.$(date +%Y%m%d) hoge.conf

差分が無ければ(エラーがなければ)バックアップは成功です。

設定ファイル追記

上述した設定ファイルを教義・進行に則ったエディタで編集します。(要管理者権限)

  • 追記例
    DocumentRoot /var/www/html/hoge
    <Directory /var/www/html/hoge>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
     ## GoogleBOTを拒否(正常bot不正bot両方拒否)
     SetEnvIfNoCase User-Agent "Googlebot" bot
     ## Facebookのクローラーを拒否
     SetEnvIfNoCase User-Agent "facebookexternalhit/1.1" fb_bot
     <RequireAll>
      Require all granted
      Require not env bot
      Require not env fb_bot
     </RequireAll>

/var/www/html/hogeは自分の環境に合わせます。

※ついでにGoogleBOTも拒否します。

  • 差分確認
diff -u /path/to/backup/directory/hoge.conf.$(date +%Y%m%d) hoge.conf
  • 差分例
-        Require all granted
+     ## GoogleBOTを拒否(正常bot不正bot両方拒否)
+     SetEnvIfNoCase User-Agent "Googlebot" bot
+     ## Facebookのクローラーを拒否
+     SetEnvIfNoCase User-Agent "facebookexternalhit/1.1" fb_bot
+     <RequireAll>
+      Require all granted
+      Require not env bot
+      Require not env fb_bot
+     </RequireAll>

設定反映

  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • Apache再起動
sudo systemctl restart apache2.service
  • Apache再起動確認
systemctl status apache2.service

active(running)を確認します。

設定反映確認

設定を行ったアクセスログを開きます。

403 3772 "-" "facebookexternalhit/1.1 

のように、ステータスコードが「403」になっていれば、アクセス拒否されています。

思考中、思考中。(piwigoとmatomoの連携)

やりたいこと

フォトアルバムシステム、piwigoをシステム解析システム、matomoに置きたいのですが、どうもうまくいかず。

「ここまでやった」というメモのために残します。

前提

  • 自前でアクセス解析:matomoとフォトアルバム:piwigoをインストール済み。
  • 両者はそれぞれインターネット通信が可能。(相互に見えている)

やったこと

piwigoサイトに管理者権限でログインし、Add< head > Elementをインストールします。

有効にして、設定します。

エレメントの所に、matomoで提示されたトラッキングコードを埋め込みます。

結果

piwigo側のサイトのソース表示で、matomoのトラッキングコードが表示されることを確認しました。

ですが、その後、何回かアクセスを繰り返しているにもかかわらずうまくカウントされません。

  • wordpress : プラグインにより連携可能
  • redmine: view customize pluginで設定可能

まで行いましたが、うまい手は見つからず。

状況を見ながらもう少し続けてみます。

Nextcloud・アプリログのローテーション。

apache/nginxなどと連携した場合のアクセスログではなく、アプリそのもののログローテーションです。

ログの位置

/path/to/nextcloud/directory/data

例えば、 `/var/www/html/nextloud/data`などを示します。

ローテーションファイル

  • /etc/logrotate.d/nextcloud2

を、協議・進行に沿ったエディタを用いて以下のように作成します。

/var/www/html/nextcloud/data/*.log {
    daily
    dateext
    dateformat -%Y%m%d
    rotate 10
    missingok
    notifempty
    su www-data www-data
    create 640 www-data www-data
    sharedscripts
    compress
    delaycompress
        postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                invoke-rc.d apache2 reload > /dev/null 2>&1; \
                 fi;
        endscript
}

ログの位置やローテーションサイクルなどは自分の環境に合わせてください。

sudo logrotate -v /etc/logrotate.d/nextcloud2

でエラーがなければ、アプロログのローテーションは完了です。

Page 28 of 102

Powered by WordPress & Theme by Anders Norén