travel-journal / travel-journal
A simple solution to create your own little travel journal
Package info
codeberg.org/travel-journal/travel-journal
Type:project
pkg:composer/travel-journal/travel-journal
Requires
- php: >=8.5
- ext-ctype: *
- ext-fileinfo: *
- ext-gd: *
- ext-iconv: *
- ext-yaml: *
- ext-zip: *
- doctrine/doctrine-bundle: ^3.2.2
- doctrine/doctrine-fixtures-bundle: ^4.3.1
- doctrine/doctrine-migrations-bundle: ^4.0
- doctrine/orm: ^3.6.6
- janwalenda/spectra: dev-main
- league/commonmark: ^2.9
- sentry/sentry-symfony: ^5.10
- symfony/amqp-messenger: 8.0.*
- symfony/console: 8.0.*
- symfony/doctrine-messenger: 8.0.*
- symfony/dotenv: 8.0.*
- symfony/flex: ^2.10
- symfony/form: 8.0.*
- symfony/framework-bundle: 8.0.*
- symfony/intl: 8.0.*
- symfony/mailer: 8.0.*
- symfony/mime: 8.0.*
- symfony/monolog-bundle: ^3.0|^4.0.2
- symfony/rate-limiter: 8.0.*
- symfony/requirements-checker: ^2.0.3
- symfony/runtime: 8.0.*
- symfony/security-bundle: 8.0.*
- symfony/stimulus-bundle: ^2.35
- symfony/translation: 8.0.*
- symfony/twig-bundle: 8.0.*
- symfony/uid: 8.0.*
- symfony/ux-autocomplete: ^2.35
- symfony/ux-dropzone: ^2.35
- symfony/ux-turbo: ^2.35
- symfony/validator: 8.0.*
- symfony/webpack-encore-bundle: ^2.4
- symfony/yaml: 8.0.*
- twig/extra-bundle: ^2.12|^3.24
- twig/markdown-extra: ^3.26
- twig/twig: ^2.12|^3.26
Requires (Dev)
- dama/doctrine-test-bundle: ^8.6
- friendsofphp/php-cs-fixer: ^3.95.2
- pestphp/pest: ^4.7.0
- phpstan/phpstan: ^2.1.55
- phpunit/phpunit: ^12.5.24
- symfony/browser-kit: 8.0.*
- symfony/css-selector: 8.0.*
- symfony/debug-bundle: 8.0.*
- symfony/maker-bundle: ^1.67
- symfony/stopwatch: 8.0.*
- symfony/web-profiler-bundle: 8.0.*
- vimeo/psalm: ^6.16.1
- zenstruck/foundry: ^2.10.1
Conflicts
This package is auto-updated.
Last update: 2026-05-23 21:37:27 UTC
README
A simple solution to create your own little travel book.
(c) 2026 Anna-Lena Schwarz & Thomas Artmann
Released under the GNU General Public License, version 3 (or later). See the LICENSE and NOTICE files for details.
Installation
Requirements: Docker and Docker Compose, Composer, Make.
Create the project:
composer create-project travel-journal/travel-journal my-travel-journal cd my-travel-journalRun the one-time setup (starts containers, installs PHP and frontend dependencies, builds assets, runs migrations, imports map data and loads dev fixtures):
make setupOpen the app in your browser (default: http://localhost:3001). Log in with the dev user:
- Email:
admin@example.com - Password:
admin
- Email:
To change the port, set APPLICATION_PORT in .env (e.g. APPLICATION_PORT=8080) before running make setup, or adjust and run make start again.
Configuration (environment variables)
Configure the app by editing .env (or .env.local for local overrides). After make setup, .env is created from .env.dist; adjust values as needed.
Required / core
| Variable | Description |
|---|---|
APP_SECRET | Secret used for cookies, CSRF, etc. Set to a random string in production. |
DATABASE_URL | PostgreSQL connection URL. Default in .env.dist uses POSTGRES_* for Docker. |
MESSENGER_TRANSPORT_DSN | Messenger transport (e.g. amqp://... for RabbitMQ). Default uses RABBITMQ_USER / RABBITMQ_PASSWORD. |
MAILER_DSN | Mailer DSN (e.g. smtp://... or null:// to disable). Dev default: smtp://mailpit:1025. |
DEFAULT_URI | Base URL of the app (e.g. http://localhost:3001). Used for absolute URLs in mails and links. |
Application
| Variable | Description |
|---|---|
APPLICATION_PORT | Port the web container exposes (default: 3001). |
TIMEZONE | Application timezone (e.g. UTC, Europe/Berlin). |
IS_PREVIEW_SYSTEM | Set to 1 or true to enable preview/system mode (e.g. hides certain UI). |
TRUSTED_PROXIES | Comma-separated list of trusted proxy IPs (or REMOTE_ADDR). Required when behind a reverse proxy. |
Optional
| Variable | Description |
|---|---|
MAILER_FROM_NAME | Sender name used for outgoing emails. |
MAILER_FROM_ADDRESS | Sender email address for outgoing emails. |
ALLOW_FORCE_RESET | Set to true to allow force-reset behaviour (e.g. in staging). |
CREATE_MOCK_JOURNEYS | Set to 1 when loading fixtures to create mock journeys (dev/testing). |
Docker / Compose
These are used by compose.yaml and by the DATABASE_URL / MESSENGER_TRANSPORT_DSN defaults in .env.dist:
| Variable | Description |
|---|---|
POSTGRES_VERSION | PostgreSQL image version (default: 16). |
POSTGRES_DB | Database name. |
POSTGRES_USER | Database user. |
POSTGRES_PASSWORD | Database password. |
RABBITMQ_USER | RabbitMQ user. |
RABBITMQ_PASSWORD | RabbitMQ password. |
Development only
| Variable | Description |
|---|---|
VAR_DUMPER_SERVER | Symfony dump server (e.g. clone for the browser client). |
Deployment
The project includes a script deploy.sh that deploys a branch to a server via SSH: it ensures the server has the repo (clone or pull), creates .env from .env.dist if missing, checks that APPLICATION_PORT is free, then runs make restart-prod on the server (build, composer install --no-dev, frontend build, migrations, cache warmup).
Prerequisites
On the server:
- SSH access (key-based or password) for the user you deploy as.
- Git installed.
- Docker and Docker Compose (v2:
docker compose) installed. - The Git repository must be reachable from the server (e.g. public HTTPS clone URL, or SSH URL if the server has the right keys).
- The deploy path must exist and be writable by that user (the script can create the directory if it does not exist).
- The port you use for the app (
APPLICATION_PORTin.env) must be free on the server (no other service listening).
On your machine (where you run ./deploy.sh):
- Bash, Git, SSH client.
- A
.deploy.envfile in the project root (see below). Do not commit this file; it contains server and path details.
Configure .deploy.env
Create .deploy.env in the project root and set:
| Variable | Description |
|---|---|
REPOSITORY_URL | Git repository URL (HTTPS or SSH) the server will clone/pull from. |
INSTALLATION_PATH | Base path on the server. The branch name is appended (e.g. main → $INSTALLATION_PATH/main). |
SSH_USER | SSH user on the server. |
SSH_HOST | Server hostname or IP. |
SSH_PORT | SSH port (default: 22). |
Example:
REPOSITORY_URL="https://codeberg.org/your-org/travel-journal.git"
INSTALLATION_PATH="/var/www/vhosts/travel-journal"
SSH_USER="deploy"
SSH_HOST="travel-journal.example.com"
SSH_PORT="22"
The script sources .deploy.env, so the same variable names as in deploy.sh (e.g. REPOSITORY_URL) must be set there.
Run a deployment
From the project root:
./deploy.sh [branch]
If you omit branch, it defaults to main. The app is deployed to $INSTALLATION_PATH/$branch.
First-time setup and aftercare on the server
First deploy
Run./deploy.sh(or./deploy.sh main). The script will clone the repo, create.envfrom.env.distif needed, then runmake restart-prod. The app will be available once the containers are up.Configure production
.env
After the first deployment, SSH into the server and edit.envin the release directory (e.g.$INSTALLATION_PATH/main/.env). Set at least:APP_SECRET– random string for production.DATABASE_URL– correct for your server (the default uses Docker service names; keep as-is if you use the same Compose setup).DEFAULT_URI– public URL of the app (e.g.https://travel-journal.example.com).MAILER_DSN– your SMTP or mailer DSN (ornull://to disable mail).- Optionally:
MAILER_FROM_NAME,MAILER_FROM_ADDRESS,TRUSTED_PROXIES(if behind a reverse proxy),TIMEZONE,IS_PREVIEW_SYSTEM, etc.
Then restart so the app picks up the new values:
cd $INSTALLATION_PATH/main # or your branch path make restart-prodAdmin user
The default setup does not load dev fixtures in production. Create an admin user (e.g. via a custom command or by loading a production-safe fixture) and ensure the app is not left with default or example credentials.Ongoing deploys
For later deployments,./deploy.shwill pull the latest code and runmake restart-prodagain. Existing.envis left unchanged. Run migrations and cache warmup as part ofrestart-prod; no extra steps are required unless you change env vars (then edit.envand runmake restart-prodon the server again).
Optional deployment hooks
You can add scripts that run during deployment:
| Script | When it runs |
|---|---|
deployment/hooks/pre-deployment.sh | Before clone/pull (on your machine). |
deployment/hooks/post-deployment.sh | After make restart-prod (on your machine). |
deployment/hooks/on-error.sh | When the script exits due to an error (on your machine). |
Create these files if you need to run custom steps (e.g. notifications, backups). Logs are written to deployment/logs/deploy-YYYY-MM-DD-HH-MM-SS.log.
Further readings
Acknowledgements
- Original idea by Anna-Lena Schwarz
Support
If you have any questions, suggestions, or need support, please feel free to contact us: