The Open Journal Systems Docker Template gives you a Docker Compose repository for running Open Journal Systems. It includes Traefik, MariaDB, and the LibOps OJS PHP/nginx image, and is designed to be managed with sitectl-ojs.
Docs:
- sitectl installed on the host that will run the site.
sitectl-ojsinstalled for OJS create, validation, healthcheck, and helper commands.- Docker with the Compose v2 plugin installed on the same host.
Create a new OJS site from this template:
sitectl create ojs/default \
--template-repo https://github.com/libops/ojs \
--path ./my-ojs-site \
--type local \
--checkout-source template \
--default-contextThe site is served through Traefik at http://localhost. The first boot installs OJS automatically. The default admin account is admin; its password is generated in ./secrets/OJS_ADMIN_PASSWORD.
The ojs service builds this checkout on top of the LibOps OJS base image. The Dockerfile downloads the pinned OJS release before copying local plugins so Docker can reuse dependency layers when only site customizations change. Local builds use the platform selected by the Docker CLI and do not push images.
Run these from the generated checkout, or add --context <name> when operating from elsewhere.
Start or update the stack with sitectl compose:
sitectl compose up --remove-orphans -dCheck the site and context configuration with sitectl healthcheck and sitectl validate:
sitectl healthcheck
sitectl validateUpdate image tags or pin a full image reference with sitectl image:
sitectl image set --tag ojs=nginx-1.30.3-php84
sitectl image set --image ojs=libops/ojs:nginx-1.30.3-php84@sha256:...Enable local development bind mounts with sitectl set, then apply the component change with sitectl converge:
sitectl set dev-mode enabled
sitectl convergePublish a domain, switch HTTP/TLS mode, configure Let's Encrypt, trust upstream proxies, or tune upload limits with the ingress component:
sitectl set ingress enabled --mode https-default --domain ojs.localhost
sitectl set ingress enabled --mode https-letsencrypt --domain ojs.example.org --acme-email ops@example.org
sitectl set ingress enabled --trusted-ip 203.0.113.10/32 --max-upload-size 2G --upload-timeout 10m
sitectl convergeSee the OJS sitectl plugin docs for lifecycle operations, OJS tools, PKP tools, and recurring maintenance.
The Makefile is intentionally small. It only keeps template-specific targets that are not core sitectl operations:
sitectl deploy
make test
make lintUse sitectl compose ... and sitectl set ... directly for normal stack operations.
traefikis the only published ingress.ojsis built from this repository and based on the LibOps OJS PHP/nginx image.mariadbstores application data.- Secrets are generated into
./secrets/. - Custom plugins can be added under
plugins/.
OJS sends mail through the Docker host by default. For local SMTP testing, use the override example to add Mailpit and point OJS at mailpit:1025.
The Docker Compose template and LibOps-specific setup in this repository are licensed under the MIT License. Open Journal Systems is licensed separately under the GNU General Public License v3; see LICENSE.ojs.