System requirements
JournalPHP runs in Docker: PHP, MySQL, Redis, Nginx and Node.js run in containers, and the server only needs Docker and Git.
Overview
The local and production environments use different Docker Compose configurations: docker-compose.yml and docker-compose.prod.yml. Both need Docker with Docker Compose v2 and Git.
Server
Recommendations for production:
| Minimum | Recommended | |
|---|---|---|
| OS | Linux | Ubuntu 22.04 LTS or newer |
| RAM | 2 GB | 4 GB |
| CPU | 1 vCPU | 2 vCPU |
| Disk | 20 GB | 40 GB SSD |
The frontend is built together with the application image. The build is limited to 2 GB of Node.js memory; the limit is set by the NODE_MEMORY_MB build argument in Dockerfile.prod.
Components
| Component | Version |
|---|---|
| PHP | 8.4 (FPM) |
| Laravel | 13 |
| MySQL | 8.0 |
| Redis | redis:alpine image |
| Nginx | nginx:alpine image |
| Node.js | 22 in the local environment, 24 when building the production image |
Ports
Local environment:
| Port | Service |
|---|---|
80 | Nginx: site and Adminer |
5173 | Vite dev server |
9001 | Reverb WebSocket server |
33061 | MySQL, access from the host |
7700 | Meilisearch, only with the meilisearch profile |
Production:
| Port | Service |
|---|---|
127.0.0.1:8080 | Nginx in Docker, reachable only by the reverse proxy on the host |
9001 | Reverb WebSocket server |
80, 443 | Reverse proxy on the host |
External services
All integrations are optional and are connected in the admin panel:
- SMTP server: sending email, see Email
- OAuth providers: sign-in with Google, Yandex, VK, Facebook, Apple and GitHub, see Users
- YooKassa or T-Bank: payment processing, see Subscriptions
- DeepSeek, OpenAI, Gemini or YandexGPT: AI features, see AI features
- Yandex Vision: image moderation, see AI features
- Algolia or Meilisearch: external search engine, see Search
- Cloudinary or Yandex Cloud Object Storage: media storage, see Site settings
- Tenor or Giphy: GIF search, see Site settings