Getting started

Follow these instructions to set up a local farmOS development environment.

The only requirement is Docker.

1. Set up Docker containers

Run the following commands to create a farmOS directory and set up Docker containers for farmOS and PostgreSQL:

mkdir farmOS && cd farmOS
curl -o docker-compose.yml
docker compose up -d

2. Install farmOS

Open http://localhost in a browser and install farmOS with the following database credentials:

  • Database type: PostgreSQL
  • Database name: farm
  • Database user: farm
  • Database password: farm
  • Advanced options > Host: db

3. Develop

After starting the Docker containers, the root farmOS directory will contain two new subdirectories: www and db.

The www directory contains the fully built farmOS codebase, which is bind-mounted into the www container's /opt/drupal directory. The www/web directory is used as the Apache webroot. Loading the www directory in your favorite PHP IDE will provide easy code access to the full Symfony + Drupal + farmOS stack.

The db directory contains the PostgreSQL database files, which is bind-mounted into the db container's /var/lib/postgresql/data directory. With the containers stopped, this directory can be backed up (eg: via tarball) to create snapshots for easy rollback during development.


Configure private filesystem

In order to upload files, a private file path must be configured. The following line must be added to www/web/sites/default/settings.php:

$settings['file_private_path'] = '/opt/drupal/web/sites/default/private/files';

Additionally, create the folder /opt/drupal/web/sites/default/private/.

Set the correct user and permissions:

Folder ownership and group should match the web server user. If you are using the farmOS Docker image (running Apache), this will be www-data.

Folder permissions should be set to 770 or drwxrwx---.

Finally, make sure to clear the caches by visiting Administration > Configuration > Development > Performance and clicking the Clear all caches button, or use Drush via the command line: drush cr.

Configure debugger

See Debugging.

Enable HTTPS