This wrapper runs OpenPost, a workspace for creating, adapting, scheduling, and publishing content across social platforms.
Cloud in a Bottle signs the owner in automatically. The first authenticated request creates an OpenPost user and workspace, so there is no separate signup or first-run form. SQLite data, uploaded media, and OpenPost's cryptographic keys live in the platform's backed-up app-data directory.
Deploy this repository with Cloud in a Bottle. The app opens at
https://openpost.<your-zone-domain>.
Connect each social account from OpenPost's Settings page. Provider OAuth apps may require callback URLs based on your OpenPost domain. See the OpenPost provider setup guides.
- runs the official OpenPost container behind an unprivileged Nginx proxy
- converts Cloud in a Bottle's owner assertion into OpenPost's trusted proxy authentication
- replaces client-supplied OpenPost authentication headers at the proxy boundary
- disables local registration and public profiles
- persists the database, media, and generated application keys under
BOTTLE_APP_DATA_DIR - leaves health checks, signed media URLs, and Telegram webhooks public
The upstream OpenPost port is not published. Nginx is the only public process in the container, and it uses a fresh proxy secret in its private temporary directory on every start.
Run the wrapper checks with Python 3.9 or newer:
python -m unittest discover -s testsThe canonical platform manifest is cloudinabottle.toml. openhost.toml is an
identical compatibility copy for the current catalog verifier, and the test
suite prevents the two from drifting.
The wrapper and OpenPost are licensed under AGPL-3.0-only.