English | 日本語 | Français | Deutsch | 简体中文 | 繁體中文 | Español | Português (Brasil) | Português (Portugal) | 한국어
Laravel 13、Inertia 3、Svelte 5で構築した、Discord風UIのプロジェクト型グループウェアです。
プロジェクトごとにチャンネルを作り、チャット、タスク、ファイル、ガントチャートを一元管理します。リアルタイム配信にはLaravel Reverb、Officeファイルの読取専用プレビューにはONLYOFFICE Document Serverを使用します。
- プロジェクト管理: プロジェクト名、内容、開始日、終了日、メンバーを設定
- チャンネル: プロジェクト内の会話・タスク・ファイルをチャンネル単位で整理
- リアルタイムチャット: Laravel Reverbによるメッセージ、スレッド、返信数の同期
- 安全なMarkdown: HTMLエスケープ、HTTP(S) URL制限、Shikiコードハイライト
- 添付ファイル: ファイル/フォルダのD&D、10件単位アップロード、画像・PDF・Officeサムネイル
- ファイルプレビュー: 画像・PDFの中央ビューア、ONLYOFFICEによるOfficeプレビュー、Escで終了
- Office/PDFのマークダウン変換保存: バックグラウンドでMarkdown化してAI学習に利用しやすくします
- タスク管理: 開始日・開始時刻・終了日・終了時刻、優先度、メモ、完了状態
- ガントチャート: プロジェクトまたはチャンネル単位の期間表示
- 期限リマインダー: スケジューラとキューワーカーによる自動通知
- テーマ: ダーク/ライトモード対応
- キーボード操作: メッセージ送信とタスク作成は
Cmd+EnterまたはCtrl+Enter。IME確定Enterは送信しません
| レイヤー | 技術 |
|---|---|
| Backend | Laravel 13 / PHP 8.5+ |
| Frontend | Inertia 3 / Svelte 5 / Tailwind CSS 4 / Vite 8 |
| Database | SQLiteまたはPostgreSQL |
| Realtime | Laravel Reverb(WebSocket) |
| Preview | Shiki / ONLYOFFICE / poppler / ImageMagick |
| Conversion | Microsoft MarkItDown 0.1.7(PDF / DOCX / XLSX / PPTX) |
| Queue | Redis / Laravel queue worker |
| Office | ONLYOFFICE Document Server Community Edition(JWT、読取専用) |
| Production | Ubuntu nginx-extras / PHP-FPM / Supervisor / Certbot |
- Ubuntu 24.04 LTSまたはUbuntu 26.04 LTS(amd64)
- PHP 8.5 CLI/FPMとRedis拡張
- Python 3.10以上、MarkItDown 0.1.7、Redis Server
- sudoを使用できる一般ユーザー、またはrootユーザー
- 2 CPU、2 GB RAM、30 GB空きディスク以上(ONLYOFFICE公式推奨は40 GB以上)
- 4 GB以上のswapを推奨
- TCP 80/443をインターネットから到達可能にする
- アプリ用のDNS名
例:
chat.example.com A/AAAA -> サーバー
ONLYOFFICEはアプリと同じドメインの/onlyoffice/で公開します。ONLYOFFICE、Reverb、アプリ内部取得用の8080、8081、8090番ポートは外部公開しないでください。クラウドファイアウォールやホスト側ファイアウォールでは、SSH用ポートと80/443だけを許可します。
新規のUbuntu Serverで本リポジトリを取得してsetup.shを実行します。ドメイン、データベース、Let's Encryptメールアドレスを対話的に確認します。一般ユーザーまたはrootユーザーで実行できます。
apt install -y git
git clone https://github.com/askdkc/chatterrow.git
cd chatterrow
./setup.shローカル開発・検証環境や閉域網など、インターネットからアクセスできる公開ドメインとHTTPSが不要な場合は、--no-sslを付けて実行してください。Let's Encryptは使用せず、HTTPのみで構成します。chatterrow.testなどのローカルドメインを使用する場合は、事前にDNSまたは/etc/hostsでこのサーバーへ名前解決できるようにしてください。
./setup.sh --domain chatterrow.test --database sqlite --no-sslsetup.sh 実行時にsudoのパスワードを聞かれます。sudoパスワード不要でsudo可能なユーザーの場合は下記の例のように--sudo-nopasswdオプションを付けて実行します。
./setup.sh --sudo-nopasswd仮にオプションなしで実行した場合、パスワード不要のsudoが検出されると、セットアップを開始せず--sudo-nopasswdの使用方法を表示して終了します。
setup.shを実行後の入力例:
Application domain (e.g. chat.example.com): chat.example.com
Application database:
1) sqlite
2) postgresql
Select database (default: 1): 2
Let's Encrypt email (optional): admin@example.com
(中略)
PostgreSQL password (leave blank to generate):
ONLYOFFICEの公開URLはhttps://<アプリドメイン>/onlyofficeです。上の例ではhttps://chat.example.com/onlyofficeです。
セットアップは以下を自動実行します。
- Ubuntu公式
nginx-extras、PHP 8.5、PostgreSQL、Redis、RabbitMQ、Node.js 24を構成 - PHP拡張、Poppler、ImageMagick、Ghostscript、日本語フォントをaptで導入し、ImageMagickの絶対パスを
.envへ設定 - Python仮想環境
.markitdown/venvへMarkItDown 0.1.7を構築し、pip checkとCLIバージョンを検証 - PostgreSQLをCPU数と搭載RAMに合わせて調整
- PostgreSQL選択時は、実行ユーザー(
DEPLOY_USER)と同名のSUPERUSER LOGINロールを構成 - ONLYOFFICE Document ServerをJWT有効、内部8080番(
ONLYOFFICE_PORTで変更可能)で導入 - クローン済みリポジトリへ依存関係、フロントエンド、マイグレーションを適用
- nginxでアプリ、ONLYOFFICE、Reverb、ONLYOFFICE内部ダウンロード経路を構成
- SupervisorでRedisキュー10プロセス、Reverb、スケジューラを
www-dataとして常駐 - Certbotで証明書を発行し、
certbot.timerとnginx reload hookを有効化 unattended-upgradesでnginxを含むUbuntuセキュリティ更新を日次適用- PHP 8.5、Redis、PostgreSQL、ONLYOFFICE、Supervisor、アプリのヘルスチェックを実行
nginxはUbuntuのAPTパッケージだけを使用します。
macOSではLinux用のOnlyOfficeパッケージをインストールせず、AppleのcontainerでDocumentServerを起動します。Apple siliconとmacOS 26以降が必要です。
- Apple Containerをインストールします。
brew install imagemagickでImageMagickをインストールします。- Laravelアプリの
.envを用意します。存在しない場合、setup.shは.env.exampleをコピーします。 APP_URLを実際のローカルURLに合わせます。- リポジトリのルートでセットアップを実行します。macOSでは
--domainと--databaseは不要です。
cd /path/to/chatterrow
./setup.sh既存の.env全体を上書きすることはありません。更新対象は次のONLYOFFICE設定と、検出したImageMagickの絶対パスです。
ONLYOFFICE_ENABLED
ONLYOFFICE_DOCUMENT_SERVER_URL
ONLYOFFICE_PUBLIC_URL
APP_ONLYOFFICE_INTERNAL_URL
ONLYOFFICE_JWT_SECRET
ONLYOFFICE_ALLOW_DOWNLOAD
ONLYOFFICE_ALLOW_PRINT
IMAGEMAGICK_PATHsetup.shはvaletとherdコマンドの有無、APP_URL/up、127.0.0.1:<ポート>/upの応答を確認して接続方法を選択します。Valet/Herd側とartisan serve側の両方が応答する場合は、APP_URLのValet/Herd側を優先します。
| 開発サーバー | .envのAPP_URL例 |
自動設定されるAPP_ONLYOFFICE_INTERNAL_URL |
|---|---|---|
| Laravel Valet | http://chatterrow.test |
http://chatterrow.test |
| Laravel Herd | http://chatterrow.test |
http://chatterrow.test |
php artisan serve |
http://localhost:8000 |
http://chatter-host.container.internal:8000 |
artisan serveを使う場合は、セットアップ前またはプレビューを開く前に起動します。
php artisan serve --host=127.0.0.1 --port=8000自動判定を上書きする場合:
MACOS_APP_SERVER=artisan ./setup.sh
MACOS_APP_SERVER=artisan MACOS_ARTISAN_PORT=9000 ./setup.sh
MACOS_APP_SERVER=valet ./setup.sh
MACOS_APP_SERVER=herd ./setup.shセットアップは以下を行います。
container system startでApple Containerを起動onlyoffice/documentserver:latestを毎回pullし、arm64で起動- OnlyOfficeを
127.0.0.1:8086へ公開 - CPU 4、メモリ4 GB、共有メモリ2 GBを割り当て
- コンテナのDNSサーバーを
1.1.1.1へ固定 - JWTを有効化し、
.envへ共有秘密鍵を設定 - macOSで
setup.shを実行するたび、名前付きボリュームを残してOnlyOfficeコンテナを再作成 chatter-host.container.internalを203.0.113.150経由でmacOSのloopbackへ接続- Valet/Herdではアプリのホスト名をコンテナ内だけ
203.0.113.150へ割り当て - 選択言語に対応するSource Han Sans/Noto Serif CJKを取得・検証し、OnlyOfficeのフォント一覧を再生成
ONLYOFFICE_DOCUMENT_SERVER_URL、ONLYOFFICE_PUBLIC_URL、APP_ONLYOFFICE_INTERNAL_URLを更新- DocumentServerとLaravelの
/upをヘルスチェック
DNSサーバーを上書きする場合は環境変数を指定します。値はIPv4アドレスで指定してください。
Cloudflareの1.1.1.1からGoogleの8.8.8.8に変更して実行する例:
MACOS_CONTAINER_DNS=8.8.8.8 ./setup.sh永続データには次の名前付きボリュームを使用します。
chatterrow-onlyoffice-data
chatterrow-onlyoffice-logs
chatterrow-onlyoffice-cache
chatterrow-onlyoffice-postgresql
コンテナの確認・停止:
container list
container logs chatterrow-onlyoffice-documentserver
container stop chatterrow-onlyoffice-documentserverヘルスチェック:
curl -fsS http://127.0.0.1:8086/healthcheck
container exec chatterrow-onlyoffice-documentserver \
curl -fsS --max-time 5 "$(sed -n 's/^APP_ONLYOFFICE_INTERNAL_URL=//p' .env)/up"次の操作はOnlyOffice内部のPostgreSQL、設定、キャッシュ、ログを削除します。必要なデータがある場合は実行しないでください。
container stop chatterrow-onlyoffice-documentserver
container delete chatterrow-onlyoffice-documentserver
container volume delete \
chatterrow-onlyoffice-data \
chatterrow-onlyoffice-logs \
chatterrow-onlyoffice-cache \
chatterrow-onlyoffice-postgresql
./setup.shApple Containerの名前付きボリュームはcontainer run --volume <名前>:<パス>で存在しない場合に暗黙に作成されるため、上記手順でボリューム作成を含む初期構築を確認できます。
--languageにja、zh_CN、zh_TW、koを指定すると、地域ごとに異なる漢字字形を混在させないため、対応するCJKフォントを選択します。Ubuntuではfonts-noto-cjkをOnlyOffice導入前にインストールし、中国語・韓国語を選んだ場合は下表の固定フォントも/usr/share/fonts/opentype/chatterrowへ取得してOnlyOfficeカタログを再生成します。macOSでは隔離されたOnlyOfficeコンテナのカスタムフォント領域へ同じフォントを登録します。
| 言語 | ゴシック/画面向け | 明朝・宋体向け |
|---|---|---|
ja |
Source Han Sans JP | Noto Serif CJK JP |
zh_CN |
Source Han Sans CN | Noto Serif CJK SC |
zh_TW |
Source Han Sans TW | Noto Serif CJK TC |
ko |
Source Han Sans KR | Noto Serif CJK KR |
Source Han Sansは2.005Rの地域別subset OTF(Light / Regular / Bold)、Noto Serif CJKはSerif2.003の言語別OTF(Regular / Bold)に固定しています。いずれもSIL Open Font License 1.1です。
ガントチャートのPDF出力では、zh_CN、zh_TW、koを選択したセットアップ時に、jsPDFで検証済みのSource Han Sans 2.005R地域別Variable TTFもpublic/fontsへダウンロードします。日本語版TTFはリポジトリに同梱済みです。PDF生成時は現在の表示言語からJP/CN/TW/KRを選択します。
フォントはchatterrow-onlyoffice-dataボリューム内の/var/www/onlyoffice/Data/custom-fontsへ保存されます。セットアップを再実行した場合はコンテナ内ファイルのSHA-256を確認し、一致していれば再ダウンロードしません。
固定ウェイト版の登録後、setup.shは既存のAllFonts.jsとfont_selection.binを削除してからallfontsgenを実行します。既存ファイルを残すとallfontsgenがカタログを再利用し、新しいフォントを登録しない場合があるためです。
OnlyOffice 9.4のconverterは、Microsoft OfficeのCJKテーマフォントをNanumGothicやDroid Sans Fallbackへ置換する場合があります。fontconfigのaliasだけではこの変換経路に効きません。そのためscripts/patch-onlyoffice-font-catalog.phpが、サーバー側font_selection.binとブラウザ側2個のAllFonts.jsへ言語別の補正を適用します。
- 日本語: Yu Gothic/Meiryo系とYu Mincho/MS Mincho系
- 簡体字: Microsoft YaHei/SimHei系とSimSun/FangSong系
- 繁体字: Microsoft JhengHei系とMingLiU/PMingLiU系
- 韓国語: Malgun Gothic/Gulim系とBatang系
- converterの
NanumGothicとDroid Sans Fallback参照を、選択言語のSans/Serif実体へ変更
このカタログはDOCX、XLSX、PPTXの変換とブラウザ表示で共用されます。補正後にJSキャッシュを生成し、docserviceとconverterを再起動してからDocumentServerのキャッシュを消去します。カタログ形式や必須フォント名が将来のlatestで変わった場合は、誤ったカタログを使わずセットアップをエラー終了します。
標準のdocumentserver-generate-allfonts.shは不要なプレゼンテーションテーマも再生成し、Apple Container環境ではその工程が終了しない場合があるため呼び出しません。
フォントカタログ更新時はOnlyOfficeの文書キャッシュ世代も変わるため、既に開いたDOCXも古いEditor.binを再利用せず再変換されます。
既存コンテナがGenerating presentation themesで応答しなくなっている場合も、そのまま./setup.shを再実行してください。macOSでは実行のたびにonlyoffice/documentserver:latestをpullし、既存のOnlyOfficeコンテナを強制的に作り直します。上記4個の名前付きボリュームは削除しないため、OnlyOfficeの永続データは保持されます。
MicrosoftのCJKフォントは同梱・再配布しません。OnlyOfficeコンテナ内では次の代替設定を使用します。
| Office指定フォント(DOCX / XLSX / PPTX) | 代替フォント |
|---|---|
| 游明朝 / Yu Mincho / MS Mincho | Noto Serif CJK JP |
| 游ゴシック / Yu Gothic / Meiryo / MS Gothic | Source Han Sans JP |
| Microsoft YaHei / SimHei | Source Han Sans CN |
| SimSun / NSimSun / FangSong | Noto Serif CJK SC |
| Microsoft JhengHei | Source Han Sans TW |
| MingLiU / PMingLiU | Noto Serif CJK TC |
| Malgun Gothic / Gulim / Dotum | Source Han Sans KR |
| Batang / BatangChe | Noto Serif CJK KR |
文字欠けと不適切な欧文フォントへの置換は解消しますが、游フォントとの字幅差があるため改行位置やページ数まで完全一致する保証はありません。完全一致が必要なら、利用許諾を確認した游フォント実体をOnlyOfficeのカスタムフォント領域へ別途配置してください。
登録状態の確認:
container exec chatterrow-onlyoffice-documentserver \
awk '$1 == "nameserver" { print $2 }' /etc/resolv.conf
container exec chatterrow-onlyoffice-documentserver \
fc-match '游明朝:lang=ja'
container exec chatterrow-onlyoffice-documentserver \
fc-match '游ゴシック Light:lang=ja'期待値は順に1.1.1.1、NotoSerifCJKjp-Regular.otf、SourceHanSansJP-Light.otfです。
macOSではOnlyOfficeの編集権限は付与せず、ReadOnlyプレビューのままです。DocumentServerの変換APIを利用する場合も、このReadOnly設定とは独立して使用できます。
Ubuntuの自動化環境では--domainと--databaseが必須です。macOSローカルOnlyOfficeセットアップでは不要です。
./setup.sh \
--domain chat.example.com \
--email admin@example.com \
--database postgresql| オプション | デフォルト | 説明 |
|---|---|---|
--domain <domain> |
対話入力 | アプリの公開ドメイン |
--email <email> |
空 | Let's Encrypt登録・期限通知メール |
--database <driver> |
対話時はsqlite |
sqliteまたはpostgresql |
--language <locale> |
既存.envまたはja |
en、ja、zh_CN、zh_TW、koなど |
--db-name <name> |
chatterrow |
アプリ用PostgreSQL DB名 |
--db-user <name> |
chatterrow |
アプリ用PostgreSQLロール |
--db-password <password> |
自動生成 | アプリ用PostgreSQLパスワード |
--app-dir <path> |
setup.shのあるリポジトリ |
/homeまたは/var/www配下の配備先 |
--repo <url> |
GitHub SSH URL | 配備するGitリポジトリ |
--onlyoffice-image <image> |
onlyoffice/documentserver:latest |
macOSで毎回pullして使用するDocumentServerイメージ |
--sudo-nopasswd |
off | パスワード無しsudoユーザー向け。sudo -vを省略 |
--no-ssl |
off | Certbotを省略しHTTPで構成 |
同名の大文字環境変数も使用できます。例: DOMAIN、DATABASE、DB_NAME、DB_USER、DB_PASSWORD、DEPLOY_USER、SUDO_NOPASSWD、ONLYOFFICE_PORT、ONLYOFFICE_JWT_SECRET。
PostgreSQLパスワードを省略すると64桁のランダム値を生成し、次の場所へ保存します。
/etc/chatterrow/database-password root:root 0600
/home/ubuntu/chatterrow/.env <deploy-user>:www-data 0640
PostgreSQLを選択した場合、実行ユーザー(DEPLOY_USER、未指定時は一般ユーザー実行ならid -un、root実行ならroot)と同名のPostgreSQLロールをLOGIN SUPERUSERとして作成または更新します。アプリ接続用のDB_USERは別の非特権ロールとして維持されます。
PostgreSQLはONLYOFFICEでも必要なため、アプリでSQLiteを選んだ場合もインストール・調整します。Ubuntu上に複数のPostgreSQLクラスタがある場合は、誤ったクラスタを変更しないようセットアップを停止します。
設定ファイル:
/etc/postgresql/<version>/<cluster>/conf.d/99-chatterrow-tuning.conf
主な計算基準:
| 設定 | 基準 |
|---|---|
shared_buffers |
RAMの20%、128 MBから8 GBの範囲 |
effective_cache_size |
RAMの60%、256 MBから64 GBの範囲 |
maintenance_work_mem |
RAMの5%、64 MBから1 GBの範囲 |
work_mem |
RAM、shared_buffers、最大接続数から安全側に算出 |
max_connections |
CPUとRAMから50から300の範囲で算出 |
| parallel workers | CPU数から算出し上限を設定 |
このサーバーではPHP、ONLYOFFICE、Redis、RabbitMQも同居するため、PostgreSQL専用サーバーより保守的な割り当てです。再実行すると現在のCPU数とRAMから再計算されます。
Ubuntu本番環境:
| ポート | 用途 | 公開範囲 |
|---|---|---|
| 80 / 443 | nginx、Certbot、公開Web | インターネット |
| 8080 | ONLYOFFICE Document Server | localhost向け |
| 8081 | Laravel Reverb | localhost向け |
| 8090 | ONLYOFFICEから署名済みファイルを取得 | 127.0.0.1のみ |
| 5432 | PostgreSQL | ローカル接続を推奨 |
macOSローカル環境:
| ポート | 用途 | 公開範囲 |
|---|---|---|
| 8086 | Apple Container上のONLYOFFICE Document Server | 127.0.0.1のみ |
| 8000 | php artisan serveの既定ポート |
127.0.0.1のみ |
Valet/Herd使用時、LaravelアプリはAPP_URLのホスト名と通常のHTTP/HTTPSポートで動作します。artisan serveのポートはAPP_URLまたはMACOS_ARTISAN_PORTから決定します。
Certbotは/var/www/letsencryptを固定ACME webrootとして使用し、challengeをLaravelへ渡さずにアプリドメインの証明書をnginxへ設定します。同じ証明書で/onlyoffice/も配信します。certbot.timerが更新時期を定期確認し、更新成功後にnginxをreloadします。セットアップ時にはdry-runも実行します。
unattended-upgradesはUbuntuのsecurity originを日次で確認し、nginx、nginx-extras、対応するlibnginx-mod-*を依存関係ごと更新します。nginx以外のセキュリティ更新も維持します。通常の-updates pocketは自動適用しません。
sudo systemctl status certbot.timer
sudo certbot certificates
sudo certbot renew --dry-run
sudo systemctl status apt-daily-upgrade.timer
sudo unattended-upgrade --dry-run --debugphp8.5 --version
php8.5 -m | grep -E 'redis|pdo_sqlite|pdo_pgsql'
redis-cli ping
sudo supervisorctl status 'chatterrow-queue:*'
sudo supervisorctl restart 'chatterrow-queue:*'
sudo supervisorctl restart chatterrow-reverb chatterrow-schedule
sudo tail -f /var/log/chatterrow-queue_*.log /var/log/chatterrow-queue-error_*.logQueueワーカーは/usr/bin/php8.5 artisan queue:work redis --sleep=3 --tries=5 --max-time=3600を10プロセスで実行します。10件すべてがRUNNINGであることを確認してください。
失敗したファイルと、一定時間更新されていないpending/processingファイルを再投入します。
php artisan files:markdown
php artisan files:markdown --server=1 --stale-after=900
php artisan queue:work redis --oncefiles:markdownは旧Office形式(DOC、XLS、PPT、ODF)をMarkdown変換対象にしません。これらのONLYOFFICEプレビュー機能は引き続き利用できます。
同じ設定でsetup.shを再実行できます。既存のPostgreSQLパスワードとTLS有効nginx設定は保持され、Gitはfast-forward可能な場合だけ更新されます。
cd /path/to/chatterrow-source
./setup.sh --domain chat.example.com --database postgresql --email admin@example.comSQLite:
sudo install -d /backup
sudo -u www-data sqlite3 /home/ubuntu/chatterrow/database/database.sqlite \
".backup /backup/chatterrow-$(date +%F).sqlite"
sudo rsync -a /home/ubuntu/chatterrow/storage/app/ /backup/storage-app/
sudo rsync -a /home/ubuntu/chatterrow/storage/markdowned-docs/ /backup/markdowned-docs/PostgreSQL:
sudo install -d /backup
sudo -u postgres pg_dump --format=custom chatterrow > /backup/chatterrow-$(date +%F).dump
sudo rsync -a /home/ubuntu/chatterrow/storage/app/ /backup/storage-app/
sudo rsync -a /home/ubuntu/chatterrow/storage/markdowned-docs/ /backup/markdowned-docs/| 変数 | 説明 |
|---|---|
APP_URL |
アプリの公開URL |
DB_CONNECTION |
sqliteまたはpgsql |
QUEUE_CONNECTION |
Redisキュー(redis) |
MARKITDOWN_PATH |
MarkItDown CLIのパス。未指定時は.markitdown/venv内 |
MARKITDOWN_TIMEOUT |
1ファイルあたりの変換タイムアウト秒数 |
MARKITDOWN_PYTHON_MIN_VERSION |
MarkItDown環境に必要なPythonの最低バージョン(3.10) |
IMAGEMAGICK_PATH |
magickまたはconvertの絶対パス |
REVERB_APP_ID/KEY/SECRET |
Reverb認証情報 |
REVERB_HOST/PORT/SCHEME |
ブラウザとLaravelが接続する公開WebSocket |
REVERB_SERVER_HOST/PORT |
Reverbの内部listen先。セットアップでは127.0.0.1:8081 |
REVERB_ALLOWED_ORIGINS |
Reverbへの接続を許可する公開ドメイン |
ONLYOFFICE_DOCUMENT_SERVER_URL |
Laravelから接続するONLYOFFICE内部URL(Ubuntuでは127.0.0.1) |
ONLYOFFICE_PUBLIC_URL |
ブラウザから見えるONLYOFFICE公開URL |
APP_ONLYOFFICE_INTERNAL_URL |
ONLYOFFICEがファイルを取得する内部アプリURL |
ONLYOFFICE_JWT_SECRET |
ONLYOFFICEと共有するJWT秘密鍵 |
| 症状 | 確認 |
|---|---|
| 502 Bad Gateway | sudo systemctl status php*-fpm、sudo nginx -t |
| リアルタイム更新されない | sudo supervisorctl status chatterrow-reverb、ブラウザNetworkの/app/接続 |
| 添付プレビューが生成されない | /var/log/chatterrow-queue-error_*.log、ONLYOFFICE/Poppler/ImageMagick |
exec: convert: not found |
command -v magickまたはcommand -v convertの絶対パスをIMAGEMAGICK_PATHへ設定後、php artisan optimize:clear |
| Markdown変換に失敗する | storage/logs/laravel.log、/var/log/chatterrow-queue-error_*.log、php artisan files:markdown |
| Redisキューが処理されない | redis-cli ping、php8.5 -mのredis、sudo supervisorctl status 'chatterrow-queue:*' |
| Officeプレビューが開かない(Ubuntu) | curl http://127.0.0.1:8080/healthcheck、JWT秘密鍵、8090番内部URL、php artisan files:previews |
| Officeプレビューが開かない(macOS) | curl http://127.0.0.1:8086/healthcheck、JWT秘密鍵、APP_ONLYOFFICE_INTERNAL_URL、コンテナ内から/upへの到達性 |
| PostgreSQLへ接続できない | .env、sudo -u postgres pg_isready、/etc/chatterrow/database-password |
| 証明書を発行できない | アプリドメインのA/AAAA、インターネットからの80番到達性、/var/log/letsencrypt/ |
composer install
composer markitdown:install
cp .env.example .env
php artisan key:generate
touch database/database.sqlite
php artisan migrate
npm ci
npm run dev別ターミナルでLaravelとReverbを起動します。
php artisan serve
php artisan reverb:start --port=8081
php artisan queue:work redisRedis Serverが起動していない場合は、macOSではbrew services start redis、Ubuntuではsudo systemctl enable --now redis-serverを実行してください。
検証:
php artisan test
php artisan files:markdown
npm run test:unit
npm run lint:check
npm run types:check
npm run buildMIT。ONLYOFFICE Docs Community Editionを導入する場合はAGPLv3の条件も確認してください。
