The Most Beautiful CMS - A metadata-driven, zero-duplicate-code content management system
Project description
Focomy
世界一美しいCMS - メタデータ駆動 / 重複コードゼロ / リレーション完璧
要件
- Python 3.10+
- PostgreSQL 13+
インストール
pip install focomy
クイックスタート
# 1. サイト作成
focomy init mysite
cd mysite
# 2. PostgreSQL データベース作成
createdb mysite
# 3. 初期ユーザー作成
focomy createuser -e admin@example.com -n Admin -r admin
# 4. サーバー起動
focomy serve
# 5. 管理画面にアクセス
open http://localhost:8000/admin
CLI コマンド
| コマンド | 説明 |
|---|---|
focomy init <name> |
新規サイト作成 |
focomy serve |
開発サーバー起動 |
focomy createuser -e <email> |
ユーザー作成 |
focomy migrate |
マイグレーション実行 |
focomy makemigrations -m "msg" |
マイグレーション生成 |
focomy validate |
コンテンツタイプ定義検証 |
focomy update |
最新版に更新 |
focomy update --check |
更新確認のみ |
focomy backup |
バックアップ作成 |
focomy backup --include-db |
DB含めてバックアップ |
focomy restore <file> |
バックアップ復元 |
createuser オプション
focomy createuser -e <email> [-n <name>] [-r <role>] [-p <password>]
# -e, --email : メールアドレス(必須)
# -n, --name : 表示名(デフォルト: Admin)
# -r, --role : 権限 admin/editor/author(デフォルト: admin)
# -p, --password : パスワード(省略時は対話入力、12文字以上)
serve オプション
focomy serve [--host <host>] [--port <port>] [--reload]
# --host : バインドホスト(デフォルト: 0.0.0.0)
# --port : ポート番号(デフォルト: 8000)
# --reload : 自動リロード有効
環境変数
| 変数 | 必須 | 説明 | 例 |
|---|---|---|---|
FOCOMY_DATABASE_URL |
○ | PostgreSQL接続URL | postgresql+asyncpg://user:pass@localhost:5432/dbname |
FOCOMY_SECRET_KEY |
○ | セッション暗号化キー | ランダム文字列(32文字以上推奨) |
FOCOMY_DEBUG |
- | デバッグモード | true / false |
.env ファイルで設定可能(focomy init で自動生成)
ディレクトリ構造
mysite/
├── .env # 環境変数
├── config.yaml # サイト設定
├── relations.yaml # リレーション定義
├── content_types/ # コンテンツタイプ定義
│ ├── post.yaml
│ ├── page.yaml
│ └── category.yaml
├── themes/ # テーマ
│ └── default/
├── uploads/ # アップロードファイル
└── static/ # 静的ファイル
設定ファイル
config.yaml
site:
name: "My Site"
tagline: "A beautiful CMS"
url: "https://example.com"
language: "ja"
timezone: "Asia/Tokyo"
admin:
path: "/admin"
per_page: 20
security:
secret_key: "your-secret-key"
session_expire: 86400
media:
upload_dir: "uploads"
max_size: 10485760
image:
max_width: 1920
quality: 85
format: webp
コンテンツタイプ定義
content_types/post.yaml:
name: post
label: 投稿
path_prefix: /blog
fields:
- name: title
type: string
required: true
- name: slug
type: slug
unique: true
- name: body
type: blocks
- name: status
type: select
options: [draft, published]
default: draft
リレーション定義
relations.yaml:
post_categories:
from: post
to: category
type: many_to_many
label: カテゴリ
post_author:
from: post
to: user
type: many_to_one
required: true
label: 著者
デプロイ
Fly.io
fly launch
fly postgres create --name mysite-db
fly postgres attach mysite-db
fly secrets set FOCOMY_SECRET_KEY="your-secret-key"
fly deploy
Docker
docker-compose up -d
開発(ソースから)
git clone https://github.com/makoronu/focomy.git
cd focomy
pip install -e ".[dev]"
# 開発サーバー起動
cd core && uvicorn main:app --reload --port 8000
設計思想
詳細は focomy_specification.md を参照。
3つの抽象で全てを表現:
- Entity - 全コンテンツは統一エンティティ
- Field - メタデータ駆動フィールド定義
- Relation - リレーションは第一級市民
ライセンス
MIT License - LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
focomy-0.1.79.tar.gz
(372.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
focomy-0.1.79-py3-none-any.whl
(459.4 kB
view details)
File details
Details for the file focomy-0.1.79.tar.gz.
File metadata
- Download URL: focomy-0.1.79.tar.gz
- Upload date:
- Size: 372.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffe30d85a90fecfbde6b8ed6c0c4aa1323bc56bf5986adcb1bea96c19bd93ade
|
|
| MD5 |
4fb5b653ccdb07bfc36891a87e6f8735
|
|
| BLAKE2b-256 |
2582365c4e38952f6ed0c5fab8afea147ab021badb4dd282bc0d177907f17d6e
|
File details
Details for the file focomy-0.1.79-py3-none-any.whl.
File metadata
- Download URL: focomy-0.1.79-py3-none-any.whl
- Upload date:
- Size: 459.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b927fc09248cc5fc4df6622c20dabce288d013a7fce269e7e66e4a68e393247
|
|
| MD5 |
93a1735a63a75200206caeaa015e2064
|
|
| BLAKE2b-256 |
5ca5d66cb72def82d83ea1a9dc88ee5b20598c6b4bec0b156e01896cea6f656f
|