Skip to content

Installation

Requirements

Check System Requirements before installing.

Local Development

1. Clone the Repository

bash
git clone https://github.com/ADamCarraway/journalphp.git
cd journalphp

2. Add Local Domain

bash
echo "127.0.0.1 journalphp.test adminer.journalphp.test" | sudo tee -a /etc/hosts

On Windows: C:\Windows\System32\drivers\etc\hosts.

3. Start

bash
docker compose up -d --build

On first start the app container automatically copies .env.example to .env, generates APP_KEY, waits for MySQL, applies migrations with seeds, and creates the storage:link symlink.

4. Done

ServiceURL
Applicationhttp://journalphp.test
Admin Panelhttp://journalphp.test/admin-panel
Horizonhttp://journalphp.test/horizon
Adminerhttp://adminer.journalphp.test
Reverbws://journalphp.test:9001

APP_URL in .env is http://journalphp.test.

Default Credentials

RoleEmailPassword
Adminadmin@mail.compassword

Change the password before deploying to production.

Initial Configuration

Open the Admin Panel and configure mail, OAuth providers, AI, and SEO. See Configuration.

Containers

ContainerRole
appPHP-FPM, Horizon, Reverb
frontendVite dev server
nginxWeb server
dbMySQL 8
redisCache, sessions, queues
adminerDB interface

Production

Production uses docker-compose.prod.yml and Dockerfile.prod. The frontend is built inside the image during docker compose build.

Preparation

  1. Copy .env.example to .env on the server and fill in values before starting.
  2. Set a strong DB_PASSWORD — it is required in production (no default is used).
  3. Set APP_URL to your domain.

In production the application listens on 127.0.0.1:8080. Typically, a reverse proxy (nginx, Caddy) handles ports 80/443 on the host.

Build and start

bash
docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml up -d

Migrations do not run automatically:

bash
docker compose -f docker-compose.prod.yml exec app php artisan migrate --force
docker compose -f docker-compose.prod.yml exec app php artisan config:cache
docker compose -f docker-compose.prod.yml exec app php artisan route:cache
docker compose -f docker-compose.prod.yml exec app php artisan view:cache

HTTPS

Recommended setup: host nginx + certbot → proxy to http://127.0.0.1:8080.

See docker/nginx/host-ssl.example.conf for a sample config.

After issuing the certificate, update .env:

ini
APP_URL=https://your-domain
FORCE_HTTPS=true
REVERB_SCHEME=https
VITE_REVERB_SCHEME=https
VITE_REVERB_PORT=443

Rebuild images so VITE_* values are baked into the frontend, then apply configuration cache.

HTTPS

Use HTTPS in production.


Next Steps

Released under the MIT License.