Skip to main content

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つの抽象で全てを表現:

  1. Entity - 全コンテンツは統一エンティティ
  2. Field - メタデータ駆動フィールド定義
  3. 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.49.tar.gz (343.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

focomy-0.1.49-py3-none-any.whl (394.6 kB view details)

Uploaded Python 3

File details

Details for the file focomy-0.1.49.tar.gz.

File metadata

  • Download URL: focomy-0.1.49.tar.gz
  • Upload date:
  • Size: 343.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for focomy-0.1.49.tar.gz
Algorithm Hash digest
SHA256 51b7c58c03c6b4d0ce7ce9aa0976482be866047243440d608ebd3de64736354b
MD5 e2139fdc244a56f9b30bb73da3893b34
BLAKE2b-256 0a23036d06ed58f8192d56752efdbf92c69e08b4beb6b93f7615c79be57cabff

See more details on using hashes here.

File details

Details for the file focomy-0.1.49-py3-none-any.whl.

File metadata

  • Download URL: focomy-0.1.49-py3-none-any.whl
  • Upload date:
  • Size: 394.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for focomy-0.1.49-py3-none-any.whl
Algorithm Hash digest
SHA256 88cd0a76dbc401f6eba1dad4986f115e392da37db87d71b89414b75be9ef055d
MD5 badc9cd21bd579c2a868d1ebcdc69c5a
BLAKE2b-256 b31876f91d3cfdefc8914d8f997ccd39f6be51fe414a3be75b6513a9c2d0e784

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page