For development, clone repository and run it via docker-compose up
When running for the first time, user will be automatically created for you, with username and password peon.
To get into Docker container (etc for development or debugging):
docker-compose run --rm dashboard bashvendor/bin/phpunit (in PHP container)
or docker-compose run --rm dashboard vendor/bin/phpunit outside of container.
To run application tests, webpack must be built: yarn install && yarn run dev
If you are using Docker for development, this is take care of already by js-watch service.
In order to run end-to-end tests, you need to create .env.test.local and provide variable values there (see .env.test for list of variables).
Xdebug extension is installed and enabled. If you need to overwrite defaults, please set PEON_XDEBUG_CONFIG which gets propagated into XDEBUG_CONFIG variable. Read more in the xdebug documentation:
export SHARRY_XDEBUG_CONFIG="client_host=localhost log=/tmp/xdebug.log"
Peon is available as Docker image: ghcr.io/peon-dev/peon
Inspiration for docker-compose.yml:
version: "3.7"
volumes:
unit-state:
postgres-data:
caddy_data:
caddy_config:
# Reusable variables for php services to not repeat yourself
# Make sure that credentials in DATABASE_URL matches credentials in postgres service
x-php-common-variables: &php-common-variables
DATABASE_URL: "postgresql://peon:peon@postgres:5432/peon?serverVersion=13&charset=utf8"
MERCURE_JWT_SECRET: '!ChangeMe!'
services:
# Helper service to run database migrations
db-migrations:
image: ghcr.io/peon-dev/peon:main
environment:
<<: *php-common-variables
depends_on:
- postgres
command: "bash -c 'wait-for-it postgres:5432 -- sleep 3 && bin/console doctrine:migrations:migrate --no-interaction'"
dashboard:
image: ghcr.io/peon-dev/peon:main
environment:
<<: *php-common-variables
# Change to match your host:
MERCURE_PUBLIC_URL: "http://localhost:8081/.well-known/mercure"
volumes:
- unit-state:/var/lib/unit/state
restart: unless-stopped
depends_on:
- db-migrations
- postgres
- mercure
ports:
- "8080:8080"
worker:
image: ghcr.io/peon-dev/peon:main
depends_on:
- db-migrations
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $PWD/working_directories:/peon/var/working_directories
environment:
<<: *php-common-variables
HOST_WORKING_DIRECTORIES_PATH: $PWD/working_directories
restart: unless-stopped
command: "bash -c 'wait-for-it postgres:5432 -- sleep 6 && bin/worker'"
scheduler:
image: ghcr.io/peon-dev/peon:main
depends_on:
- db-migrations
environment:
<<: *php-common-variables
restart: unless-stopped
command: "bash -c 'wait-for-it postgres:5432 -- sleep 6 && bin/scheduler'"
postgres:
image: postgres:13
environment:
POSTGRES_USER: peon
POSTGRES_PASSWORD: peon
POSTGRES_DB: peon
volumes:
- postgres-data:/var/lib/postgresql/data
mercure:
image: dunglas/mercure
restart: unless-stopped
environment:
SERVER_NAME: ':80'
MERCURE_PUBLISHER_JWT_KEY: '!ChangeMe!'
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeMe!'
# Set the URL of your instance (without trailing slash!) as value of the cors_origins directive
MERCURE_EXTRA_DIRECTIVES: |
cors_origins *
volumes:
- caddy_data:/data
- caddy_config:/config
ports:
- "8081:80"Then run docker-compose up
It is recommended to set up daily cron that will pull newer Docker images:
0 0 * * * docker-compose -f /path/to/docker-compose.yml pull
It is good idea to restart containers after pulling new image as well.
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
Check out who owns the Docker socket, for example by running ls -l /var/run/docker.sock and set the group id to the worker process:
Overwrite worker service group/user in docker-compose.override.yml:
version: "3.7"
services:
worker:
user: "peon:<docker group id or name>"
# in safe environment, you can use root user
# be aware of it can mess with ownership of the peon source code (for example cache files owned by root)
user: "root"