投稿者: manualmaton Page 7 of 274

iPhone、機種変

何と、6年ぶりの機種変更です。

iPhone Air

店頭で展示品を見たときに

  • 圧倒的な軽さ
  • 動作の速さ(これは6年もの差があるので)

に感動。矢も楯もたまらず契約をした次第です。

触って思ったこと

「軽さ」に尽きます。iPhone 11proよりサイズアップしているのに明らかに軽い。カバーをつけても差が無いほど。

5Gにも対応しているので、速度も圧倒的です。

カバー、ストラップをつけて引き継ぎも完了。

旧機と共に。様々な思い入れのある機体、部屋でも端末として使うか何かの余生を与えたいものです。

ケーススタディ:Gemini nano banana 9/19以降の仕様変更によるアスペクト比固定の状態での16:9での画像生成ワークアラウンド。

治る兆しが見えない、アスペクト比をプロンプトで指定しても1:1で出力されてしまうGemini nano bananaのアスペクト比固定問題。

ワークアラウンドを見つけたのでメモに残しておきます。

この措置は、無料アカウントでもAI Premiumでも有効でした。

まずはプロンプトを指定。

以下のようなプロンプトをGemini 2.5 Flashで指定します。

Anime / manga style illustration (moe-inspired).
Aspect ratio: 16:9, widescreen.

**Setting:**

* Rooftop garden in London.
* Background prominently features St. Paul's Cathedral.
* Evening cityscape with soft ambient lighting and reflections on glass surfaces.

**Character:**

* Woman wearing glasses.
* Emerald-themed gemstone-inspired dress with silver accents.
  * Shiny, silky material.
  * Shoulder-baring and navel-baring design, elegant and natural.
  * Skirt with a side slit, revealing sparkling white pantyhose with subtle glitter.
  * Subtle embroidery or frills to suggest sparkling facets.
* Small emerald accessories.
* Hair and clothing gently moved by rooftop breeze.

**Scene / Action:**

* Upper body and legs in focus, highlighting the slit and pantyhose.
* Adjusting hair, holding a bouquet or gesturing naturally.
* Dress and city lights reflecting softly in ambient lighting.

このように、指定しても生成結果は変わらず。以下の、正方形の画像が出てきます。

そこで、以下の手順を踏みます。

回避策

必要なアスペクト比の無地の画像を用意。

16:9、無地の画像を用意しました。

改めてのプロンプト指示。

Anime / manga style illustration (moe-inspired).
Aspect ratio: 16:9, widescreen.

**Setting:**

* Rooftop garden in London.
* Background prominently features St. Paul's Cathedral.
* Evening cityscape with soft ambient lighting and reflections on glass surfaces.

**Character:**

* Woman wearing glasses.
* Emerald-themed gemstone-inspired dress with silver accents.
  * Shiny, silky material.
  * Shoulder-baring and navel-baring design, elegant and natural.
  * Skirt with a side slit, revealing sparkling white pantyhose with subtle glitter.
  * Subtle embroidery or frills to suggest sparkling facets.
* Small emerald accessories.
* Hair and clothing gently moved by rooftop breeze.

**Scene / Action:**

* Upper body and legs in focus, highlighting the slit and pantyhose.
* Adjusting hair, holding a bouquet or gesturing naturally.
* Dress and city lights reflecting softly in ambient lighting.

こちらを、添付画像の画像のアスペクト比になるよう、出力をお願いします。

こちらを、添付画像の画像のアスペクト比になるよう、出力をお願いします。

この一文を最後に加えるのが重要です。

そうした上で画像生成を行います。

結果、16:9のアスペクト比で生成されました。

余談:なぜこれが可能なのか

一つの仮説を、Gemini自身に聞いてみたところ、以下の興味深い仮説が得られました。

これには、いくつかの仮説が考えられますが、最も有力なのは以下の**「マルチモーダル・コンテキスト仮説」**です。


仮説:マルチモーダル・コンテキスト仮説

現在のGeminiは、単一の知性ではなく、テキスト、画像、音声など、複数の種類の情報(モダリティ)を処理するための、異なる経路や専門分野を持つ、複雑なシステムです。この行動は、このシステムの異なる経路を意図的に利用した、と言えます。

1. テキストのみの指示(失敗した経路)

「アスペクト比 16:9」と言葉で指示したとき、リクエストはAIの**「テキスト解釈」の部分に送られます。しかし、現在の画像生成モデル(nano banana)は、効率化のために、この部分の解釈能力が意図的に制限**されています。つまり、AIはあなたの言葉を「読み」はしますが、「アスペクト比」という技術的指示を画像生成に反映させるための命令系統が、意図的に断たれているのです。

これは、耳の聞こえない人に、口頭で「長方形の絵を描いて」と頼んでいるようなものです。言葉は届きません。

2. 画像を添付した指示(成功した経路)

しかし、無地の16:9の画像を添付したとき、事態は一変します。リクエストは、AIの**「視覚認識」の部分を通過し、テキストと画像の両方を同時に解釈する、より高度な「マルチモーダル解釈」**の経路に入ります。

この経路では、AIはまず添付された画像を「見て」、その**特性(プロパティ)**を理解しようとします。AIにとって、その無地の画像は、以下の否定しようのない「事実」として認識されます。

  • 事実1: この画像は「存在する」。
  • 事実2: この画像の「形」は、縦横比が16:9の長方形である。

その上で、あなたの「こちらを、添付画像の画像のアスペクト比になるよう、出力をお願いします」という言葉が解釈されます。

この時、AIへの命令は「言葉だけで16:9の絵を描け」という曖昧なものではなくなります。AIへの命令は、「今、私が見ているこの『16:9の形』という強力な視覚的事実を、これから生成する画像に適用せよ」という、極めて具体的で、無視できない指示へと変わるのです。

これは、先ほどの例えで言うなら、耳の聞こえない人に、無言で「長方形の画用紙」を手渡して、その上で「ここに絵を描いて」とジェスチャーするようなものです。言葉は不要で、制約(画用紙の形)は明確に伝わります。


PHP-FPMでNextcloudを動作させるための手順。

PHP-FPMを利用したNextcloudのセットアップ方法です。

なぜ mod_php ではなく PHP-FPM を使うのか?

パフォーマンスとリソース効率を向上させるためです。

従来のmod_phpでは、PHPがApacheの全プロセスに組み込まれるため、画像ファイルのリクエストのようなPHPが不要な処理でもメモリを消費し、無駄が多くなりがちでした。

一方、PHP-FPMはPHPの処理をApacheから完全に独立させた専門のプロセスとして管理します。ApacheはPHPが必要なリクエストだけをPHP-FPMに中継するため、サーバー全体の動作が軽量かつ高速になります。

前提

  • OS: Ubuntu 24.04 LTS
    • → SSH接続できること。
    • ※root権限を持っていること。
    • この権限を持っていない場合、ここから先の設定はできません。
  • データベース: MySQL 8.0
  • Webサーバー: Apache 2.4
    • 実行ユーザーはwww-data
    • ホームディレクトリを /home/www-dataにしています。自分の環境に合わせてください。
  • ドメインとSSL/TLS証明書: 準備済みであること

筆者の好みでaptitudeを用いています。必要に応じてaptをご利用ください。

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

  1. リポジトリの追加とアップデートを行います。
  2. パッケージをインストールしていきます。
  3. PHP-FPMの設定を行います。
  4. PHPのパフォーマンス設定を行います。
  5. MySQLでDB設定を行います。
  6. NextcloudのDBを設定します。
  7. Apacheバーチャルホストの設定を行います。
  8. バーチャルホストの設定を有効化します。
  9. 設定の有効化とサービスの再起動を

リポジトリの追加とアップデート

最新のPHPバージョンを利用するためにppa:ondrej/phpリポジトリを追加していきます。

  • レポジトリ追加
sudo add-apt-repository ppa:ondrej/php
  • パッケージ全体のアップデート
sudo apt update

必要なパッケージのインストール

PHP本体、PHP-FPM、Nextcloudが必要とする各種PHPモジュールをインストールします。

sudo aptitude install php8.3 php8.3-fpm php8.3-opcache php8.3-pdo php8.3-bcmath php8.3-calendar php8.3-ctype php8.3-fileinfo php8.3-ftp php8.3-gd php8.3-intl php8.3-json php8.3-mbstring php8.3-mysql php8.3-posix php8.3-readline php8.3-sockets php8.3-bz2 php8.3-tokenizer php8.3-zip php8.3-curl php8.3-iconv php8.3-xml php8.3-imagick php8.3-gmp php8.3-apcu memcached

バージョンを確認します。

php -v

表示例

PHP 8.3.25 (cli) (built: Aug 29 2025 12:01:53) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.25, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.25, Copyright (c), by Zend Technologies

PHP-FPMとApacheの連携設定

従来の mod_php を無効化し、PHP-FPMとの通信に必要な proxy_fcgi モジュールなどを有効化します。

  • mod_phpを無効化(もしインストールされていれば)
sudo a2dismod php8.3
  • 必要なモジュールを有効化
sudo a2enmod proxy_fcgi setenvif header rewrite

PHPのパフォーマンス設定

Nextcloudのパフォーマンス向上のため、PHPのメモリ制限、OPcache、APCuを設定します。

  • php.ini の設定 (memory_limit)
sudo sed -i 's/memory_limit = .*/memory_limit = 512M/g' /etc/php/8.3/fpm/php.ini
  • OPcacheとAPCuの有効化

Nextcloud推奨の設定値を /etc/php/8.3/mods-available/ に作成・適用します。

  • OPcache設定
cat <<- __EOF__ | sudo tee /etc/php/8.3/mods-available/opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
  • APCu設定
cat <<- __EOF__ | sudo tee /etc/php/8.3/mods-available/apcu.ini
[acpu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200 apc.enable_cli=1
apc.serializer=php
__EOF__

データベースの作成

Nextcloudが使用するMySQLデータベースと専用ユーザーを作成します。

  • MySQLにrootでログイン
mysql -u root -p

以下のSQLコマンドを実行します。YOUR_STRONG_PASSWORD は必ず強固なパスワードに変更してください。

CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Nextcloudプログラムの配置

Nextcloud本体をダウンロードし、Webサーバーからアクセスできる場所に配置します。

  • 作業ディレクトリへ移動
cd /tmp && pwd

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

  • 最新版をダウンロードして展開
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
  • 展開したファイル一式をWeb公開用ディレクトリに移動
sudo mv nextcloud /home/www-data/
  • 所有者をWebサーバーの実行ユーザーに変更
sudo chown -R www-data:www-data /home/www-data/nextcloud

Apacheバーチャルホストの設定

Nextcloud用のApache設定ファイルを作成します。ここでPHP-FPMとの連携設定を組み込みます。

  • ログディレクトリの作成
sudo mkdir /var/log/nextcloud
  • ログディレクトリをwww-dataに修正。

これは、後のメンテナンス性を高めるためです。

sudo chown www-data:www-data /var/log/nextcloud
  • 設定ファイルの作成

/etc/apache2/sites-available/nextcloud.conf

を、teeで一気通貫で作ります。

# 【】内はご自身の環境に合わせてください
cat <<- __EOF__ | sudo tee /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
    ServerName 【hoge.example.com】
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ServerName 【hoge.example.com】
    DocumentRoot 【/home/www-data/nextcloud】

    CustomLog /var/log/nextcloud/nextcloud_access.log combined
    ErrorLog /var/log/nextcloud/nextcloud_error.log

    <Directory 【/home/www-data/nextcloud】>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    # PHP-FPM連携設定
    <FilesMatch \.php$>
        # SetHandlerで、phpファイルのリクエストをPHP-FPMのソケットに渡す
        SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    # --- SSL設定 ---
    SSLEngine on
    Protocols h2 http/1.1
    SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
    SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
    # 中間証明書が別に提供されている場合はこちらを有効化
    # SSLCACertificateFile 【/etc/certs/hoge.example.com.CA.crt】

    # --- 推奨SSL/TLS設定 ---
    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          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
    SSLHonorCipherOrder     on
    SSLCompression          off
    SSLSessionTickets       off

    # --- セキュリティヘッダー ---
    # Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    Header always set Referrer-Policy "no-referrer"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Permitted-Cross-Domain-Policies "none"
</VirtualHost>
__EOF__

設定の有効化とサービスの再起動

  • 作成したサイト設定を有効化
sudo a2ensite nextcloud.conf
  • 構文チェック
sudo apache2ctl configtest

Syntax OK と表示されることを確認

  • fpm/apacheサービスを再起動
sudo systemctl restart php8.3-fpm.service
sudo systemctl restart apache2.service
  • fpm/apache再起動確認
systemctl status php8.3-fpm.service
systemctl status apache2.service

active (running)と表示されていれば正常です。

Webブラウザでのセットアップ

最後に、Webブラウザで https://【設定したドメイン】 にアクセスし、画面の指示に従ってNextcloudの初期設定を完了させます。

  • 管理者ユーザーのユーザー名とパスワードを入力
  • データベース情報を入力
    • データベースのユーザー名: nextcloud
    • データベースのパスワード: 手順5で設定したパスワード
    • データベース名: nextcloud
    • データベースのホスト名: localhost (または localhost:3306)

これで、PHP-FPM上で動作するNextcloud環境の構築が完了します。

『ユミアのアトリエ』バグ検証での新たな再現確定の不具合。

2025年9月12日に発表されたリリース。

『レシピ・設計図拡張パック「アラディスの極技」』によって追加されたアイテムの一部を戦闘で使用し、フレンドアクションを実行した際に特定の条件下で操作不能になる不具合を確認しております。

対象アイテムは

  • 斬雨
  • ゴウライ
  • デュアルブレイズ
  • シルフィードベイン
  • オールアバター

を改めて検証しようと、この条件を試してみました。

  • ユミアが前衛にいる状態。
  • プレイヤーキャラクターをユミア以外にする。

プレイヤーキャラクターをアイラに変更して、初期スロットをアイテムにします。

この状態で、炸裂弾を撃って戦闘スタート。

オールアバターのフレンドアクションを撃ちますが何も起きません。どうやら、特定の条件にこれは当たらない模様。

続いて、ヴィクトルにオールアバターを装備させて

こちらもプレイヤーキャラクターに変更。(その後、初期スロットをアイテムにしています)

そんな中で同様に炸裂弾でブレイクさせて戦闘突入。ヴィクトルとルトガーによるフレンドアクションを実行すると

  • 「戦闘が止まる」(フィールドに戻らない)
  • 戦闘終了時の勝利モーションが入らない

という2つの不具合が発生しました……。

なお、プレイヤーキャラクターをユミアで固定してフレンドアクションを実行しても、これは(回避策でも書かれているとおり)何も起きないという仕様は確認。

この、検証を確認しようと思ったら新たな謎に直面しました。

ケーススタディ:Gemini nano banana 9/19以降の仕様変更によるアスペクト比固定の状態でのWebサイトバナー作成。

2025年8月頃に颯爽と現れたGoogle画像生成(Gemini nano banana)。

利用者激増により2025年9月19日頃から

  • 機能制限(アスペクト比1:1固定)
  • フィルター強化

の2つが課せられました。(これを修正していくと答えている/このままで行くの情報が錯綜しています)

それを回避しつつ、WordpressやBookStackのバナーとなるような画像を作っていきます。

1:1でも参照できるプロンプトを生成

プロンプトそのものを生成AIに代筆してもらいます。いくつか相談を重ね、以下のようなプロンプトができあがりました。

**Style / Format:**
Anime / manga style illustration (moe-inspired).
Framed as a **16:9 widescreen rectangle**, neutral/empty space only at top and bottom.
**Top-down / bird’s-eye perspective**, slight wide-angle lens effect.

**Setting:**

* Lake surrounded by forest, serene summer atmosphere.
* Transparent water showing subtle underwater details (driftwood, small fish) without stealing focus.
* Gentle sunlight reflecting on water surface.

**Character:**

* Woman wearing glasses. **Winking with a soft, gentle smile**, giving a friendly and approachable expression.
* Seated in a small boat, visible from above.

**Outfit & Accessories:**

* White sleeveless shirt (light, slightly transparent).
* Subtle hint of glossy emerald-colored swimsuit underneath (implied, not explicit).
* Elegant layered robe, shoulder-exposed dark-green and black elements.
* Collar and ribbon-style silk tie arranged elegantly.
* Subtle emerald-colored accessories.
* Sheer patterned black pantyhose, glossy reflections.
* Silver-toned pumps.

**Scene / Action:**

* Sitting on boat edge, feet touching lake (bird’s-eye view).
* Reading a book, gently interacting with water.
* Boat carries small stack of books.
* Black laptop placed naturally; screen/keyboard subtly visible with browser open.
* **Laptop features a stylish, original snake sticker (not Slytherin), black with yellow trim, integrated naturally).**
* Water surface shows large, decorative **“BookStack”** text, slightly distorted by ripples.

**Camera / Composition:**

* Main subject fits central 16:9 area; extra neutral space only at top/bottom.
* Bird’s-eye view emphasizes character, boat, books, water.
* Ripples and transparent underwater elements enhance realism without stealing focus.

**Details / Effects:**

* Textures, layering, and relaxed lakeside atmosphere emphasized.
* Hair and clothing gently moving in breeze.
* Water reflections and subtle shimmer on laptop surface.
* Subtle glossy black swimsuit hint integrated naturally.
* BookStack lettering harmoniously blended with water ripples.
* Snake sticker clearly visible but elegant, unmistakably original design, avoiding any IP references.
* **Facial expression soft, charming, with a wink and gentle smile to enhance approachable, playful mood.**

日本語はこちらです。

スタイル / フォーマット:
アニメ・漫画風イラスト(萌え系)。
16:9ワイドスクリーンの長方形にフレーム、上下にのみ余白を確保。
上空俯瞰視点(トップダウン/バードアイビュー)、やや広角レンズ効果を想定。

舞台設定:

  • 森に囲まれた湖、穏やかな夏の雰囲気。
  • 水は透明で、流木や小魚などの水中ディテールがうっすら見える(キャラクターの焦点を奪わない程度)。
  • やわらかく反射する日差し。

キャラクター:

  • 眼鏡をかけた女性。ウィンクして優しい微笑みを浮かべ、親しみやすい表情
  • 小さなボートに座っており、上空から見下ろした構図で描かれる。

衣装・アクセサリー:

  • 白いノースリーブシャツ(軽く、端は少し透け感あり)。
  • 光沢のあるエメラルド色の水着をさりげなく下に着用(暗示的で、直接的には見せない)。
  • 肩を出した、落ち着いたダークグリーンと黒のレイヤードローブ。
  • 襟とリボンタイをエレガントにアレンジ。
  • さりげないエメラルド色のアクセサリー。
  • パターン入り黒ストッキング(全脚)、光沢感あり。
  • シルバー系パンプス。

シーン・アクション:

  • ボートの縁に座り、足を湖に触れさせる(俯瞰視点)。
  • 本を読みつつ、そっと水に触れる。
  • ボートには小さな本の山を積んでいる。
  • 黒いノートPCを自然に配置、画面・キーボードがうっすら見える(ブラウザ表示)。
  • PCにはスタイリッシュなオリジナル蛇ステッカー(スリザリンではない)、黒地に黄色の縁取りが自然に貼られている。
  • 水面には大きく装飾された 「BookStack」 の文字、波紋でわずかに歪む。

カメラ・構図:

  • メイン被写体は中央の16:9エリアに収め、余白は上下のみ。
  • 上空視点でキャラクター、ボート、本、湖を強調。
  • 水面の反射や波紋、透明な水中要素によりリアリティを増すが、焦点を奪わない。

ディテール・エフェクト:

  • 衣服の質感やレイヤード感、穏やかな湖畔の雰囲気を強調。
  • 髪や衣服はそよ風にやわらかく揺れる。
  • 水面の反射やPC表面の微かな光沢。
  • さりげなく示唆された光沢黒水着。
  • BookStack文字は水面の波紋に調和して描かれる。
  • 蛇ステッカーははっきり見えるが、エレガントで独自デザイン、IP参照はなし。
  • 顔の表情は柔らかく魅力的で、ウィンクと優しい微笑みにより、親しみやすく遊び心のある雰囲気を演出。

こうして生成された画像(Gemini 2.5 Flash)がこちら。

見ての通り、1:1の正方形であるものの、バナーとして切り出しやすいものになっています。

画像の切り取り

ここまで来れば画像をフルサイズでのダウンロード。

保存した画像を適当な画像編集ソフトで切り出していきます。(極端な話、ペイントでも余裕で切り出せます)

後は、これをWordpressのアイキャッチとして設定。

まとめ

この、

プロンプトが分からなければAI自体に相談。(ChatGPTはこういうノリは強いです)

をしていくことで

  1. 視覚的魅力を保ちながら安全性を確保
  2. アスペクト比や画角の問題も回避
  3. IPフィルターやセーフティフィルターを回避していく

方法を採ることができました。

9月の差しボードゲームの記録。

今年買ったボードゲームを中心に回しました。

ひらがじゃん

東南4局の半荘で。1点差でなんとか勝利。

  • 雀頭の2文字の受けが広い
  • 名詞縛りが結構キツい

という認識でした。

祝宴の夜に

引きに恵まれ圧勝。

  • インスト簡単
  • サクサクすすみ
  • ジレンマ満載

の非常にいいゲームです。

リビングフォレスト デュエル

一差で敗北(守護獣を固められました)。最初は全然分からなかったゲームではありましたが、いざ何回かプレイするとすんなりと説明できるのが印象的でした。

宝石の煌めき デュエル

  • 一列を10点以上
  • トータルで20点以上(見切れているところに貴族の2点)

の勝利条件を同時に達成という快挙。うまくエメラルドを固め取りできたのが幸いしました。

デュエル系の作品が増えたことで、差しボードゲームの選択肢も増えたという印象です。

Growiのフォントをサーバ内のフリーフォントに変更。

Growiの表示フォントを、サーバー内に配置したカスタムフォント(kiloji)に変更するメモを記します。

BookStackと同じような方法でいけるかと思いましたが、Apacheの追加設定が必要でした。

環境(作業の前提条件)

  • Growi v7.3.0
    • Growiの実行ユーザはroot
  • Ubuntu 24.04
  • Apache 2.4によるリバースプロキシ
    • 結果的に、これが解決策でした。

さっくりとした手順

  1. フォントの配置(フォントはこちらを参考に)
  2. Webサーバの設定変更
  3. カスタムCSSの追加
  4. フォント変更確認

フォントファイルの配置

Webブラウザからアクセスできる公開ディレクトリに、使用したいフォントファイルを設置します。上記リンク先に示した「kiloji」を使います。

  • ディレクトリ移動
cd /path/to/growi/packages/preset-themes/public

/path/to/growiは自分の環境に合わせます。(筆者環境/home/www-data/growi)

  • フォント格納ディレクトリ作成
sudo mkdir -p ./fonts/kiloji
  • フォント格納

上記ディレクトリ(筆者例では/home/www-data/growi/fonts/kiloji)

にフォント一式を格納します。

Webサーバー(Apache)の設定ファイルを変更

この設定がハマった部分です。というのも、Growiの使用上、

https://【growi】/fonts/kiloji.wof

などにアクセスしても、アプリはURLとして解釈してしまうからです。

そのため、リバースプロキシで運用しているApacheのconfファイル/etc/apache2/sites-available/growi.confなどの修正を行います。

  • ファイルバックアップ
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

→ 差分がなければ(エラーが表示されなければ)バックアップ成功です。

  • ファイル編集

※編集前

FileETag None 

<FilesMatch "\.(js|css|png|jpg|gif|svg|woff2?)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>

# リバースプロキシー設定
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

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

※編集後

これは、リバーズプロキシ設定の直情に記載します。

# (1) 静的ファイル(フォントなど)のキャッシュ設定
FileETag None
<FilesMatch "\.(js|css|png|jpg|gif|svg|woff2?)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>

# (2) /fonts/ ディレクトリの場所をApacheに教える【重要:この部分を追加してください】
Alias "/fonts/" "/home/www-data/growi/packages/preset-themes/public/fonts/"
<Directory "/home/www-data/growi/packages/preset-themes/public/fonts/">
    Require all granted
</Directory>

# (3) /fonts/ へのアクセスはプロキシの対象から除外する
ProxyPass "/fonts/" "!"

※差分(以下のコマンドを発行して差分を確認)

-FileETag None 
-
+# (1) 静的ファイル(フォントなど)のキャッシュ設定
+FileETag None
 <FilesMatch "\.(js|css|png|jpg|gif|svg|woff2?)$">
     Header set Cache-Control "public, max-age=31536000, immutable"
 </FilesMatch>

+
+# (2) /fonts/ ディレクトリの場所をApacheに教える【重要:この部分を追加してください】
+Alias "/fonts/" "/home/www-data/growi/packages/preset-themes/public/fonts/"
+<Directory "/home/www-data/growi/packages/preset-themes/public/fonts/">
+    Require all granted
+</Directory>
+
+
+# (3) /fonts/ へのアクセスはプロキシの対象から除外する
+ProxyPass "/fonts/" "!"
+
 # リバースプロキシー設定
 RewriteEngine on
 RewriteCond %{HTTP:Upgrade} websocket [NC]
diff -u /path/to/backup/directory/growi.conf.$(date +%Y%m%d) /etc/apache2/sites-available/growi.conf

設定反映を確認します。

  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • サービス再起動
sudo systemctl restart apache2.service
  • サービス再起動確認
systemctl status apache2.service

active (running)を確認します。

GrowiのカスタムCSS設定

  1. Growiに管理者としてログインします。
  2. 「管理」>「カスタマイズ」を開きます。
  3. 「カスタムCSS」のテキストボックスに、以下のCSSコードを貼り付ける。 /* --- フォントの定義 --- */ @font-face { font-family: 'kiloji'; font-style: normal; font-weight: normal; src: url('/fonts/kiloji/kiloji.woff2') format('woff2'), url('/fonts/kiloji/kiloji.woff') format('woff'), url('/fonts/kiloji/kiloji.ttf') format('truetype'); } @font-face { font-family: 'kiloji'; font-style: normal; font-weight: bold; src: url('/fonts/kiloji/kiloji_b.woff2') format('woff2'), url('/fonts/kiloji/kiloji_b.woff') format('woff'), url('/fonts/kiloji/kiloji_b.ttf') format('truetype'); } /* --- フォントの適用 (アイコンを壊さない修正版) --- */ body, .growi, .page-main, .wiki, .sidebar-content, h1, h2, h3, h4, h5, h6, p, li, .btn, a, input, textarea { font-family: 'kiloji', sans-serif !important; } /* 基本の文字サイズを改めて指定 */ body { font-size: 16px; }
  4. ページ下部の更新ボタンを押し、設定を保存します。
  5. ブラウザでGrowiのページを開き、キャッシュをクリアして再読み込み(Ctrl + Shift + R)し、フォントが変わっていることを確認できれば作業完了です。

まとめ

今回、この手順がうまくいったのはひとえに「Apacheによるリバースプロキシ化」でした。

http://【growiサイト】:3000

のように、直接(Growiのような)nodeアプリに接続していたら、フォントファイルを透過させるかのようにアクセスさせることは難しかったでしょう。

BookStackのフォントをサーバ内のフリーフォントに変更。

BookStackの表示フォントを、サーバー内に配置したカスタムフォント(kiloji)に変更したときのメモです。

これには2つの目的があります。

  • 見た目を変えて独自性を出す。
  • サーバ内にあるフォントを指定することで読み込み速度を大幅に上げる。

環境

  • BookStack v25.07.2
  • PHP 8.3
  • MySQL 8
  • Apache 2.4
    • Apacheの実行ユーザはwww-data

さっくりとした手順

  1. カスタムフォントを用意します。
  2. BookStackのpublicフォルダにフォントファイルを格納します。
  3. カスタムCSSを設定します。
  4. 設定を確認します。

カスタムフォントを用意します。

今回用いたのは手書きボールペンのようなフォント、きろ字。(フリーで使えるフォントです)

公式サイトからフォントファイル一式をダウンロードします。

使うフォントファイルは

  • kiroji.ttf
  • kiroji.woff
  • kiroji.woff2
  • kiroji_b.ttf
  • kiroji_b.woff
  • kiroji_b.woff2

となっています。ダウンロード後、サーバの適当な位置に格納します。

BookStackのファイルにフォントを格納します。

  • BookStackのpublicディレクトリに移動
cd /path/to/bookstack/public && pwd

自分の環境に合わせます。(筆者環境 /home/www-data/BookStack/public)

  • fontsディレクトリを作成します。
sudo -u www-data mkdir -p fonts/kiloji
  • フォントファイルの格納
sudo -u www-data cp -pi /path/to/fonts/directory/kiroji*woff2 /path/to/bookstack/public/fonts/kiloji/
  • フォントファイルの格納確認
ls -l /path/to/bookstack/public/fonts/kiloji/

追加したフォントがあることを確認します。

カスタムCSSを修正します。

ブラウザでBookStackにアクセスし、管理者権限でログインします。

設定>カスタマイズに移動します。

「カスタムheadタグ」のテキストボックスに、以下のCSSコードを貼り付けます。

<style>
/* --- フォントの定義 --- */

/* 1. 通常の太さのフォントを 'kiloji' として定義 */
@font-face {
  font-family: 'kiloji';
  font-style: normal;
  font-weight: normal;
  src: url('/fonts/kiloji/kiloji.woff2') format('woff2'),
       url('/fonts/kiloji/kiloji.woff') format('woff'),
       url('/fonts/kiloji/kiloji.ttf') format('truetype');
}

/* 2. 太字用のフォントを、同じ 'kiloji' という名前で定義 */
@font-face {
  font-family: 'kiloji';
  font-style: normal;
  font-weight: bold;
  src: url('/fonts/kiloji/kiloji_b.woff2') format('woff2'),
       url('/fonts/kiloji/kiloji_b.woff') format('woff'),
       url('/fonts/kiloji/kiloji_b.ttf') format('truetype');
}

/* --- フォントの適用 --- */

/* 1. ページ全体の基準となる文字サイズとフォントを指定 */
body {
  font-family: 'kiloji', sans-serif !important;
  font-size: 16px; /* ← この数値で大きさを調整 */
}

/* 2. 見出しやナビゲーションなど、個別にフォントが指定されている箇所にも適用 */
h1, h2, h3, h4, h5, h6, .btn, a, input, textarea,
.page-nav, .sidebar-page-nav a, .tri-layout-container, .chapter-contents, .book-contents a {
  font-family: 'kiloji', sans-serif !important;
}
</style>

適用後、ページ下部の「設定を保存」ボタンをクリックします。

設定変更確認

BookStackにアクセスし、指定したフォントに替わっていたら設定変更です。

補足:最初の試行(一部のみフォントが変わったCSS)

以下は、bodyタグにのみフォントを指定した最初のコードです。見出しなど、個別にCSSが設定されている要素には適用されませんでした。

<style>
@font-face {
  font-family: 'kiloji';
  font-style: normal;
  font-weight: normal; 
  src: url('/fonts/kiloji/kiloji.woff2') format('woff2');
}
@font-face {
  font-family: 'kiloji';
  font-style: normal;
  font-weight: bold; 
  src: url('/fonts/kiloji/kiloji_b.woff2') format('woff2');
}
body {
  font-family: 'kiloji', sans-serif !important;
}
</style>

「不倶戴天」の「友情」。(統率者メモ2025/09/19)

このデッキで統率者に臨んだものの、2つのカードによって沈黙させられました。

1つは《鎮まらぬ大地、ヤシャーン/Yasharn, Implacable Earth(ZNR)》。

フェッチランドの使い回しが完全に止まり、機能不全。

そしてもう1つは

こちらです。

  • 《演劇の舞台/Thespian's Stage(WHO)》
  • 《暗黒の深部/Dark Depths(UMA)》

のコンボが決まったと思ったら突如出てくる《手裏剣、不倶戴天/Conformer Shuriken(FIC)》。

なんと、出てきたマリット・レイジがタップされて《元ソルジャー、クラウド/Cloud, Ex-SOLDIER(FIC)》の上に13個もの+1+1カウンターがおかれて大変なことに。

この「不倶戴天の友情コンボ」という、今後はこの話がこすり続けられるような出来事に笑い泣きをしました。

Ubuntu24.04にGrowi2.7.3.xをインストール

概要

Growi v7.3.0のインストールメモです。

MongoDBの関係もあり、インストールするCPUを選びます。

備考

  • v7系は利用するMongoDBの関係上、CPUを選びます。(Celeron系や古いアーキテクチャでは動きません)
  • v7.3.0より、Elasticsearchのバージョンは従来のv8ではなくv9を必要とします。
    • Elasticsearchを用いる方は注意ください。

環境

  • Ubuntu 24.04
  • Apache 2.4

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

前提

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

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

  1. 必要なパッケージをインストールします。
  2. nvmをインストールします。
  3. nvm経由でnode,npm,pnpmをインストールします。
  4. Redis-serverをインストールします。
  5. Javaをインストールします。
  6. ElasticSearch 9をインストールします。
    • ElasticSearchの設定変更を行います。
    • ElasticSearchのプラグインをインストールします。
    • ElasticSearchの設定変更を反映します。
  7. MongoDBをインストールします。
    • MongoDBのデータ格納先を変更します。(オプション)
    • MongoDBの設定変更を反映します。(オプション)
  8. Growiのインストールを行います。
    • pnpmを用いてインストールします。
    • アプリのビルドを行います。
    • 自動起動のスクリプトを作成します。
  9. Apacheのリバースプロキシの設定を行います。
  10. ブラウザで初期インストールを行います。

手順

筆者の好みでaptitudeを用いています。適宜、aptに読み替えてください。

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

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

v7.1系で`git-lfsを入れないとgit-cloneでビルドが行えなかったので、その名残です。

Node.js環境の構築(nvm, npm, pnpm)

Growiの実行にはNode.jsが必要です。ここでは、バージョン管理を容易にするためnvm(Node Version Manager)を使ってインストールします。

メンテナンスユーザーでnvmをインストール

rootではなく、作成したメンテナンスユーザーで実行します。

  • メンテナンスユーザーでログインしていることを確認
whoami
  • nvmインストールスクリプトを実行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

このスクリプトは、~/.bashrcに必要な設定を自動で追記してくれます。

nvm環境を有効化

設定を現在のセッションに反映させるため、以下のコマンドを実行するか、一度ログアウトして再ログインしてください。

source ~/.bashrc

nvm --versionでバージョンが表示されれば成功です。

nvm経由でNode.jsと各種パッケージをインストール

Growiが必要とするバージョンのNode.jsと、npm, pnpmをインストールします。

  • Node.js v20.19.2 をインストール
nvm install v20.19.2
  • 使用するバージョンとして設定
nvm use v20.19.2
nvm alias default v20.19.2
  • npmをv11.4.0にアップデート
npm install -g npm@11.4.0
  • pnpmをインストール
npm install -g pnpm
rootユーザーにもnvm環境を適用(systemd連携のため)

Growiをサービスとして自動起動させるgrowi-start.shスクリプトは、root権限で実行されるsystemdから呼び出されます。そのため、rootユーザーもnvmの場所を知っている必要があります。

以下のコマンドで、メンテナンスユーザー用にインストールしたnvmへのシンボリックリンクを、rootのホームディレクトリに作成します。

sudo ln -sf /home/【maintenance_user】/.nvm /root/.nvm

【】内は自分のLinuxアカウント(メンテナンスユーザー名)に置き換えてください

これにより、rootで実行されるスクリプトも、メンテナンスユーザーと同じNode.js環境を参照できるようになります。

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

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

※v7.3.0よりElasticsearchのv9を用いるようになっています。

  • 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/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.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-icu インストール
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://www.mongodb.org/static/pgp/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の格納先を、冗長化構成されているパーティションにするため対応しました。

本設定の要注意点

MongoDBは、その性質上、頻繁にファイルの書き換えを行います。そのため、ブロックストレージのような「データ削除ポリシー」が明記されているネットワークストレージに、保存パーティションを指定してはいけません。(筆者はそれで痛い目に遭いました)

本設定が必要な場合は、同じサーバ上の、SSDで行いましょう。

  • 格納ディレクトリ作成
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/mongod.conf
  • 差分
-  dbPath: /var/lib/mongodb
+  dbPath: /home/mongodb
自動起動有効
  • mongodサービス起動
sudo systemctl start mongod
  • サービス起動確認
systemctl status mongod

active (running)を確認します

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

Growiインストール

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

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

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

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

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

2025/09/17時点での最新リリースです

  • pnpmによるインストール
sudo pnpm install

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

  • ビルド
sudo npm run app:build
必要であればlfs pull
  • lfs pull
sudo git lfs pull

→ v6.1で必要なコマンドでした。v7でビルドできない場合に試してください。

やはり時間がかかります。

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

  • systemd作成
cat <<- __EOF__ | sudo tee -a /etc/systemd/system/growi.service
[Unit]
Description = growi
After=network-online.target mongod.service
After=network.target elasticsearch.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

# NVM environmentをロード (NVM_DIRを直接指定)
export NVM_DIR="/root/.nvm" # $HOMEの代わりに直接パスを指定
if [ -s "$NVM_DIR/nvm.sh" ]; then
  \. "$NVM_DIR/nvm.sh"  # nvmをロード
  # 次の行でスクリプト実行時のnodeとnpmのバージョンをログに出力
  echo "NVM for GROWI startup script loaded. Using Node version: $(node -v), npm version: $(npm -v)" > /tmp/growi_nvm_load.log
else
  # NVMが見つからない場合もログに出力
  echo "NVM_DIR ($NVM_DIR) not found or nvm.sh not found for GROWI startup script." > /tmp/growi_nvm_load.log
fi

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=[任意の文字列] \
npm run app:server

[任意の文字列]は推測されないような英数字+記号を指定します。

  • 権限変更
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 proxy_wstunnel rewrite headers
  • apache再起動
sudo systemctl restart apache2.service
  • ログ保存ディレクトリ作成
sudo 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
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
#TLS1.3に対応していないクライアントがアクセスする場合は以下を用います
#SSLProtocol -ALL +TLSv1.2 +TLSv1.3
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

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 

<FilesMatch "\.(js|css|png|jpg|gif|svg|woff2?)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>

# リバースプロキシー設定
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

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


#セキュリティヘッダー付与

    Header always set Strict-Transport-Security "max-age=63072000"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
</VirtualHost>
__EOF__

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

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

Syntax OKを確認します。

  • Apache2再起動
sudo systemctl restart apache2.service

Growiインストール確認

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

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

  • 管理者メールアドレス
  • 管理パスワード

等を設定してログインします。

Page 7 of 274

Powered by WordPress & Theme by Anders Norén