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.30.tar.gz (334.3 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.30-py3-none-any.whl (386.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: focomy-0.1.30.tar.gz
  • Upload date:
  • Size: 334.3 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.30.tar.gz
Algorithm Hash digest
SHA256 eb981345880ad36d4309facd35ad23d6c287afab5cb1bebce5782b2cffb24da1
MD5 ba82df5a30ae149bbd66455f82d8288d
BLAKE2b-256 439eae2e05997c7d8c9f47493fd902270257174b1ce264c925513b37953fca5b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: focomy-0.1.30-py3-none-any.whl
  • Upload date:
  • Size: 386.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.30-py3-none-any.whl
Algorithm Hash digest
SHA256 f2b1a763126e676aac01f5954d6a26a2b2dde7148585e7d3505edaf9ac58acea
MD5 58a0770b5c89daa22d6c3830371eef3f
BLAKE2b-256 4bc4f0095924028ebe2ea8ed68d9a32cb98c458b5735bc3d39b1b15bcd67e96b

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