Installation
Requirements
Check System Requirements before installing.
Local Development
1. Clone the Repository
git clone https://github.com/ADamCarraway/journalphp.git
cd journalphp2. Add Local Domain
echo "127.0.0.1 journalphp.test adminer.journalphp.test" | sudo tee -a /etc/hostsOn Windows: C:\Windows\System32\drivers\etc\hosts.
3. Start
docker compose up -d --buildOn 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
| Service | URL |
|---|---|
| Application | http://journalphp.test |
| Admin Panel | http://journalphp.test/admin-panel |
| Horizon | http://journalphp.test/horizon |
| Adminer | http://adminer.journalphp.test |
| Reverb | ws://journalphp.test:9001 |
APP_URL in .env is http://journalphp.test.
Default Credentials
| Role | Password | |
|---|---|---|
| Admin | admin@mail.com | password |
Change the password before deploying to production.
Initial Configuration
Open the Admin Panel and configure mail, OAuth providers, AI, and SEO. See Configuration.
Containers
| Container | Role |
|---|---|
app | PHP-FPM, Horizon, Reverb |
frontend | Vite dev server |
nginx | Web server |
db | MySQL 8 |
redis | Cache, sessions, queues |
adminer | DB interface |
Production
Production uses docker-compose.prod.yml and Dockerfile.prod. The frontend is built inside the image during docker compose build.
Preparation
- Copy
.env.exampleto.envon the server and fill in values before starting. - Set a strong
DB_PASSWORD— it is required in production (no default is used). - Set
APP_URLto 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
docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml up -dMigrations do not run automatically:
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:cacheHTTPS
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:
APP_URL=https://your-domain
FORCE_HTTPS=true
REVERB_SCHEME=https
VITE_REVERB_SCHEME=https
VITE_REVERB_PORT=443Rebuild images so VITE_* values are baked into the frontend, then apply configuration cache.
HTTPS
Use HTTPS in production.