Skip to main content
Install Posted with Docker Compose. The steps below include PostgreSQL, so you do not need to set up a separate database.

Before you start

You need Docker with Compose v2 and two HTTPS domains: one for Posted and one for its API. A reverse proxy routes those domains to the containers.

1. Download the installation files

Create a directory and download the files from the latest GitHub release:
To install a specific release, download these three files from that release instead. Published images support Linux AMD64 and ARM64.

2. Set your domains and secrets

Open .env and change these four values: Run this command twice to generate a separate value for each secret:
Leave the remaining values as supplied for now. The PostgreSQL overlay sets the database connection for you. Keep .env private and back up POSTED_SECRET with your database; you will need the same secret when restoring an installation.

3. Start Posted

This starts the database, API, worker and UI. The API prepares the database automatically. PostgreSQL data is kept in the posted-postgres Docker volume.

4. Route your domains

Configure your reverse proxy on the Docker host: Enable HTTPS for both domains. The worker and database stay on the private Docker network.

5. Create your team

Find the setup secret in the API startup log:
Open your Posted URL, enter the setup secret and create the first administrator. Do not share the setup secret or startup log publicly. Next, connect a social account and compose your first post. See Configuration to enable providers and S3 source. If startup fails, check Troubleshooting.

Use an existing database

Use PostgreSQL 17 and set DATABASE_URL in .env to a connection URI reachable from the containers. localhost inside a container refers to that container, not the Docker host. Start without the bundled PostgreSQL overlay:
Continue with the domain routing and team setup above.

Build from source

The Dockerfile installs its own Node.js and pnpm dependencies. You only need Docker on the build host. In a source checkout, prepare .env as described above, then build and start the containers:
Omit -f docker-compose.postgres.yml from both commands if you use an existing database.