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.31.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.31-py3-none-any.whl (386.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: focomy-0.1.31.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.31.tar.gz
Algorithm Hash digest
SHA256 080718cf5d5ebaefbd10e8cab3a5cfe7c2a66f26dabc885d053c827d030eebdf
MD5 2e561debd987a8b47dbb7505d1626ff5
BLAKE2b-256 7090ba33342f29570e145ea1234cdf418a962f83e72e84d42d19308716557221

See more details on using hashes here.

File details

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

File metadata

  • Download URL: focomy-0.1.31-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.31-py3-none-any.whl
Algorithm Hash digest
SHA256 fe4b82967cc7d2177e46c607a0320d0af240b2afb643af90df17344e6246d49b
MD5 4b9af1082068a5197e3dc583c9768a7e
BLAKE2b-256 6ed2ee7331037f471816764ba55d605b41057327e0a665474c70227b3afabdbb

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