Skip to content
Run Aperture—an IndieWeb feed aggregator—using Docker and docker-compose.
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
aperture @ d2d9cb3
camo @ e59df56
watchtower @ cdea8c8

Aperture (docker-compose)

Run Aperture—an IndieWeb feed aggregator—using Docker and docker-compose.


Use something like this:

mkdir ~/www
cd ~/www

git clone .

git submodule init
git submodule update

cp .env.example .env

Then, before kicking off the build step, update the values inside .env—and, if needed, docker-compose.yml.

This little README assumes your main site lives at and that Aperture will be set up at, Watchtower at and Camo at You'll want to replace those four URLs with your own.

Make sure, when editing .env:

  • the Camo URL ends in a trailing slash (and the Watchtower and Aperture URLs don't)
  • to fill out an actual Redis password (the way docker-compose.yml is set up, null won't do)

If you're going to go with the prebuilt images in Docker's repository, comment out the build entries for camo, aperture, and watchtower in docker-compose.yml. (This'll save you some time.)

Launch the different containers:

docker-compose build
docker-compose up -d

All files and dependencies are fetched the first time the containers are brought up, and configs are automatically set. This takes a while, so, er, maybe wait a minute or two before moving on?

Now, set up and prepare both databases (replace 1234 with your token of choice—see .env). First Watchtower's:

docker exec -i watchtower_db_1 mysql -u watchtower -psome-random-password watchtower < ./watchtower/html/schema/schema.sql
docker exec watchtower_db_1 mysql -u watchtower -psome-random-password watchtower -e "INSERT INTO users (url, token, created_at) values ('', '1234', NOW());"

And then Aperture's.

docker exec aperture_aperture_1 php /var/www/html/aperture/artisan migrate
docker exec aperture_aperture_1 php /var/www/html/aperture/artisan key:generate

Install the Watchtower service (on the host):

sudo cp ~/www/watchtower/build/watchtower.service /etc/systemd/watchtower.service
sudo systemctl enable watchtower
sudo systemctl start watchtower

This last step, right now, takes 15 seconds because of a pre-start delay that may or may not make sense. (Anyway, don't just terminate it if nothing seems to happen.)

And add the following Watchtower cron job (again, on the host), using crontab -e:

*/5 * * * * docker exec watchtower_watchtower_1 php /var/www/html/scripts/cron.php > /dev/null 2>&1

To make sure Aperture and its dependencies automatically start after a reboot, you may also want to add:

@reboot cd ~/www && docker-compose up -d

Once you've set up a token endpoint for your site, you can finally run:

docker exec aperture_aperture_1 php aperture/artisan create:user

Now all that's left is making sure, and can actually be reached. (Via a web server, and DNS and things.)

Finally, refer to Aperture from your main site, like so:

<link rel="microsub" href="">
You can’t perform that action at this time.