{"id":17642619,"url":"https://github.com/hughbris/cadaver","last_synced_at":"2025-07-30T12:10:50.987Z","repository":{"id":137595015,"uuid":"370181957","full_name":"hughbris/cadaver","owner":"hughbris","description":"Docker image build files for running Grav CMS under Caddy webserver","archived":false,"fork":false,"pushed_at":"2024-12-04T00:01:52.000Z","size":60,"stargazers_count":1,"open_issues_count":6,"forks_count":1,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2024-12-04T01:18:48.005Z","etag":null,"topics":["caddy","docker","docker-compose","docker-image","grav"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hughbris.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["hughbris"],"custom":["https://ko-fi.com/hughbris","https://www.buymeacoffee.com/hughbris"]}},"created_at":"2021-05-24T00:02:10.000Z","updated_at":"2024-12-04T01:00:25.000Z","dependencies_parsed_at":"2023-10-04T09:32:28.094Z","dependency_job_id":"3445b846-7ca0-4798-b967-1ac48a2c731b","html_url":"https://github.com/hughbris/cadaver","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"bfe5f551d67391aa7d2d35e8e5aaaf3bf8ac1c25"},"previous_names":["hughbris/grav-daddy"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hughbris%2Fcadaver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hughbris%2Fcadaver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hughbris%2Fcadaver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hughbris%2Fcadaver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hughbris","download_url":"https://codeload.github.com/hughbris/cadaver/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230603662,"owners_count":18251976,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["caddy","docker","docker-compose","docker-image","grav"],"created_at":"2024-10-23T08:23:25.489Z","updated_at":"2025-07-30T12:10:50.975Z","avatar_url":"https://github.com/hughbris.png","language":"Shell","funding_links":["https://github.com/sponsors/hughbris","https://ko-fi.com/hughbris","https://www.buymeacoffee.com/hughbris"],"categories":[],"sub_categories":[],"readme":"# Cadaver\n\nRun Grav CMS under Caddy webserver in a docker container.\n\n## Usage\n\n### Sourcing the docker image\n\nThis image is currently [available from Github's container repository](https://github.com/hughbris/cadaver/pkgs/container/cadaver) only. It's not hosted on Dockerhub, because I dislike it and also because someone squatted on my username :/\n\nPull or use the image from its canonical URL:\n\n```sh\n$ docker pull ghcr.io/hughbris/cadaver\n```\n\n### Building the docker image\n\nYou can use one of the [packaged images already built](https://github.com/hughbris/cadaver/pkgs/container/cadaver) or [build your own](docs/BUILDING.md) if you want to deploy some custom options.\n\nIf you want to build a custom image for local development (PHP warnings, XDebug etc), there are some [extra steps to follow and a suggested setup](docs/DEVELOPMENT.md).\n\n### Running containers\n\n#### Mount points\n\nContainer path             | Mount usage\n-------------------------- | ---------------\n`/var/www/grav/backup`     | Mount this if you want to keep Grav backups. Bear in mind that Grav's scheduler may not run if cron is not running in your container. Also bear in mind that a collection of Grav backups, especially created on a schedule, can get very large.\n`/var/www/grav/logs`       | Mount this to persist Grav's logs. You may not care about this on a development or temporary installment.\n`/var/www/grav/user`       | Be sure to bind mount this to your host if you want your website to persist between reboots. You almost always want to mount this.\n`/etc/timezone`            | Standard best practice for many container images to inherit the host's timezone, _bind mount read-only_.\n`/etc/localtime`           | Standard best practice for many container images, _mount read-only_.\n`/var/www/grav/robots.txt` | You can bind mount this read-only to a fully custom `robots.txt` file on your host. If your requirements are standard, you can also use the[`ROBOTS_DISALLOW`](docs/ENVIRONMENT.md#robots_disallow) environment variable for common preset options. You can also set up a custom _/robots.txt_ within Grav's user directory using the [recipe on Grav Learn](https://learn.getgrav.org/17/cookbook/general-recipes#display-different-robots-txt-contents-for-different-environments).\n\nIf you are running a development build, there are some [other development-specific mount points](docs/DEVELOPMENT.md#additional-mount-points) you'll want to make.\n\n#### Runtime environment variables\n\nThere is a selection of [environment variables](https://docs.docker.com/get-started/docker-concepts/running-containers/overriding-container-defaults/#setting-environment-variables) you can pass to a Cadaver container when you start it which affect its behaviour:\n\nVariable           | Default    | Description\n-----------------: | :--------------- | :---------------\n[`LOG_LEVEL`](docs/ENVIRONMENT.md#log_level)             | 8       | Set how verbosely the startup script outputs log messages\n[`ROBOTS_DISALLOW`](docs/ENVIRONMENT.md#robots_disallow) | _false_ | Control which indexing bots your container's website encourages\n[`GRAV_SCHEDULER`](docs/ENVIRONMENT.md#grav_scheduler)   | _false_ | Toggle your container's built-in scheduling process\n[`FILE_SIZE_LIMIT`](docs/ENVIRONMENT.md#file_size_limit) | 8192    | Change the container's file descriptor limit (`ulimit`)\n\nIf you run a container using the [`:developer` image tag](https://github.com/hughbris/cadaver/pkgs/container/cadaver/330205655?tag=developer) or your own custom development image, it's worth looking at the [suggested development setup](docs/DEVELOPMENT.md).\n\n#### Example docker-compose\n\nMy compose file looks something like this, tweak as needed:\n\n```yaml\nname: cadaver_dev\n\nservices:\n\n   grav:\n        image: ghcr.io/hughbris/cadaver\n        container_name: cadaver\n        domainname: localhost\n        hostname: cadavertest\n        restart: unless-stopped\n        ports:\n            - target: 2015\n              host_ip: 127.0.0.1\n              published: 666\n            # - 127.0.0.1:666:2015 if you prefer stupid shorthands\n        volumes:\n            # there's a traditional short, confusing shorthand for volumes too\n            - type: bind\n              source: /var/data/containers/cadavertest/backup\n              target: /var/www/grav/backup\n            - type: bind\n              source: /var/data/containers/cadavertest/logs\n              target: /var/www/grav/logs\n            - type: bind\n              source: /var/data/containers/cadavertest/user\n              target: /var/www/grav/user\n            - type: bind\n              source: /etc/timezone\n              target: /etc/timezone\n              read_only: true\n            - type: bind\n              source: /etc/localtime\n              target: /etc/localtime\n              read_only: true\n        environment:\n            - ACME_AGREE=true\n            # - GRAV_SCHEDULER=true # defaults to false currently\n            # - ROBOTS_DISALLOW=true\n            # - LOG_LEVEL=10\n            # - FILE_SIZE_LIMIT=8192\n\n            # ** PERMISSIONS_* variables all default to empty string **\n            # - PERMISSIONS_GLOBAL=-xdev # global find arguments for permission setting\n            # - PERMISSIONS_FILES='! -path \"*/.git/*\"' # find arguments for files permission setting\n            # - PERMISSIONS_DIRS='! -path \"*/.git\" ! -path \"*/.git/*\"' # find arguments for directories permission setting\n            # ** the last example value produces a find command like:\n            # **  find . -type d -xdev ! -path \"*/.git\" ! -path \"*/.git/*\" -print0\n\n            # - GRAV_MULTISITE=dir # yet to be implemented\n```\n\nThis serves the site at http://127.0.0.1:666. The first test I usually perform is `curl -I 127.0.0.1:666` and look for `200 OK`.\n\n## Caveats\n\nCron and Grav's scheduler are enabled using the `GRAV_SCHEDULER` environment setting. Support for running `cron` in the service container using this variable [may be removed in future](docs/ENVIRONMENT.md#grav_scheduler).\n\n## Credits\n\nI started this project trying to marry concepts and techniques found in [dsavell/docker-grav](https://github.com/dsavell/docker-grav) and [seffyroff/caddy-grav-alpine](https://github.com/seffyroff/caddy-grav-alpine).\n\nFancy ASCII log splash created using [FIGlet](http://www.figlet.org).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhughbris%2Fcadaver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhughbris%2Fcadaver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhughbris%2Fcadaver/lists"}