archiveは、メディアビューアー、メモ管理、ユーザー管理機能を統合したWebベースのホームサーバーシステムです。
- JWTトークンベース認証: 安全なトークン管理
- 権限管理: 管理者と一般ユーザーの権限分離
- トークン期限: 設定可能な有効期限(デフォルト: 1週間)
- メディアファイルの閲覧・管理
- タグの編集
- 検索機能とフィルタリング
- レスポンシブデザイン対応
- メモの作成・編集・管理
- 共有メモの作成・編集・管理
- ユーザーの登録・削除
- 権限の昇格・降格
- 管理者権限による管理機能
事前にnginxの設定を行う必要があります.
# 依存関係のインストール
sudo apt install build-essential cmake libssl-dev pkg-config
# Crowのインストール
git clone https://github.com/CrowCpp/Crow.git
mkdir build && cd build
cmake .. -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF
make install
# ビルドと実行
make install- C++23対応のコンパイラ (GCC 13.0以上)
- OpenSSLライブラリ
- systemd (Linux)
- nginx または Apache
sudo apt install nginx
cd /etc/nginx/sites-available
sudo vim default設定ファイルにconfig/nginx.default.exampleを参考に必要な情報を追加.
sudo systemctl reload nginx# 依存関係のインストール
sudo apt install build-essential cmake libssl-dev pkg-config
# C++23対応のためGCC 13+をインストール(Ubuntu 22.04以降)
apt search '^g\+\+-[0-9]+$' # これで見つかる一番新しいバージョンを使う
sudo apt install gcc-14 g++-14
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 130 \
--slave /usr/bin/g++ g++ /usr/bin/g++-13
# Crowのインストール
git clone https://github.com/CrowCpp/Crow.git
mkdir build && cd build
cmake .. -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF
make install
# ビルドとsystemdへの登録と実行
# このコマンドは`config/param.json`の設定が終わってから行うこと
# このコマンドはsystemdへ登録する`.service`ファイルを配置し終わった後に行うこと
make installmake installはmakefile.envにSERVICE=service_nameで指定された名前のサービスとして起動します.
/etc/systemd/system/service_name.serviceを必要とします.
.serviceファイルはconfig/home-server.service.inを参考に記述してください.
システムは起動時に config/param.json ファイルから設定パラメータを読み込みます。
詳しくはconfig/param.json.exampleを参照.
JWTの秘密鍵(JWT_SECRET_KEY)は十分な長さのランダムな文字列を使用してください。
Linux/macOSターミナルで安全なランダムキーを生成する例:
# 32バイトのランダムな英数字(Base64)
openssl rand -base64 32
# 64バイトの16進数文字列
openssl rand -hex 64生成した文字列を config/param.json の JWT_SECRET_KEY に設定してください。
初回起動時は、任意のユーザー名とパスワードで管理者アカウントを作成できます。
システム起動後、ブラウザでアクセスして初回ユーザー登録を行ってください。
初回起動時に登録するユーザー以外のすべてのユーザーは管理者権限を持つユーザーが登録しなければ登録できません.
データはusers.jsonに保存されます.
パスワードはソルトが付加されハッシュ化されるため,内部を閲覧されても直ちに問題にはなりません.
nginxの設定でweb/とsrc/frontend/にアクセスを限定しているため,nginxの設定が不適切な場合は流出する可能性があるので管理には注意が必要です.
# systemdに登録し起動
make install
# サービス状態確認
make see
# サービス監視
make watch
# サービス再起動
make reload
# サービス停止
make stop- ブラウザで
https://your-domain.com/にアクセス - 任意のユーザー名とパスワードで管理者アカウントを作成
- 初回ユーザーは自動的に管理者権限を取得
ローカル用を想定しているのでドメインは直接IPアドレスを入力することになるだろう.
サーバーマシンのIPアドレスはルーターの設定で固定することを推奨する.
- ブラウザで
https://your-domain.com/にアクセス - 登録済みのユーザー名とパスワードを入力してログイン
- セッションIDが自動的に保存され、以降のリクエストで使用されます
- Viewer: 画像ビューアーにアクセス
- Memo: メモ管理にアクセス
- ハンバーガーメニュー: ユーザー管理とログアウト
- 画像/動画/音声/テキストの閲覧とナビゲーション
- タグの編集
- 検索機能による画像検索
- ディレクトリベースの検索
ディレクトリの移動はシンボリックリンクも許可されているので,セキュリティホールにならないように注意が必要.
また,シンボリックリンクを再帰的に走査するため,無限にノードを生成する可能性があることにも注意.
- 新規メモの作成
- 既存メモの編集・削除
- ログに残らない共有メモ
- ハンバーガーメニューから「ログアウト」をクリック
- 自動ログアウトの時間は
config/param.jsonで分単位で指定する.
archive/
├── CMakeLists.txt
├── config
│ ├── home-server.service.in
│ ├── nginx.default.example
│ ├── param.json
│ └── param.json.example
├── server
│ ├── include
│ │ ├── app
│ │ │ ├── memo/
│ │ │ └── viewer/
│ │ ├── lib/
│ │ └── manager
│ │ ├── auth/
│ │ └── users/
│ └── src
│ ├── app
│ │ ├── memo/
│ │ └── viewer/
│ ├── main.cpp
│ └── manager
│ ├── auth/
│ └── users/
├── client
│ ├── public
│ │ ├── index.html
│ │ ├── memo.html
│ │ ├── user_register.html
│ │ └── viewer.html
│ └── src
│ ├── common.css
│ ├── common_mobile.css
│ ├── common.js
│ ├── memo/
│ └── viewer/
│ └── api/
├── LICENSE
├── Makefile
├── makefile.env
├── README.md
├── users.json
└── doc
├── arch/
└── code.md
- 全機能にアクセス可能
- ユーザーの登録・削除・権限変更が可能
- viewerのディレクトリの更新をサーバー側に指示することができる
- 基本機能(ビューアー、メモ)にアクセス可能
- ユーザー管理機能にはアクセス不可
- 初回起動時は誰でも管理者アカウントを作成可能
- 初回ユーザーは自動的に管理者権限を取得
- ユーザー名とパスワードが正しいか確認
- セッションIDが期限切れになっていないか確認
- ブラウザのlocalStorageが有効になっているか確認
- ユーザーが正しく登録されているか確認
- 管理者権限でログインしているか確認
- 対象ユーザーが存在するか確認
- 権限操作の対象が自分自身でないか確認
- 必要なライブラリ(OpenSSL)がインストールされているか確認
- C++23対応のコンパイラを使用しているか確認
- ブラウザがCSS GridとFlexboxをサポートしているか確認
- JavaScriptが有効になっているか確認
- フォント(Inter)が正しく読み込まれているか確認
- 言語: C++23
- Webフレームワーク: CrowCpp/nginx
- 認証: JWTトークンベース
- データ保存: JSONファイル
- 暗号化: OpenSSL
- HTML5: セマンティックマークアップ
- CSS3: Grid、Flexbox、カスタムプロパティ
- JavaScript: ES6+、Fetch API
- フォント: Inter (Google Fonts)
- アイコン: Font Awesome 6.0
- デスクトップ: 1200px以上
- タブレット: 768px - 1199px
- モバイル: 767px以下
- セッションIDはブラウザのlocalStorageに保存されるため、セキュリティに注意してください
- 定期的にパスワードを変更することを推奨します
- 管理者アカウントは適切に管理し、不要なユーザーは削除してください
- ユーザー情報は
users.jsonファイルに保存されるため、ファイルのバックアップを定期的に行ってください - メディアファイルは適切なディレクトリ構造で管理してください
このプロジェクトはMITライセンスの下で公開されています。詳細は LICENSE ファイルを参照してください。