Deploy exif-photo-blog
EXIF Photo Blog with Postgres and persistent S3 photo storage.
Just deployed
Just deployed
/var/lib/postgresql/data
MinIO
Just deployed
/data
Deploy and Host EXIF Photo Blog on Railway
Deploy sambecker/exif-photo-blog on Railway with Postgres and persistent MinIO photo storage.
About Hosting EXIF Photo Blog
EXIF Photo Blog is a Next.js photography site with built-in admin authentication, image uploads, EXIF extraction, albums and tags, infinite scrolling, search, feeds, and optional AI-generated descriptions. This template supplies every stateful dependency the application needs on Railway.
Why Deploy EXIF Photo Blog on Railway
This template turns the upstream Vercel-oriented deployment into a one-click Railway stack. Railway manages the web service, private networking, persistent database volumes, generated credentials, and HTTPS domains in one project. The deploy form asks only for admin credentials and the site's public identity.
Common Use Cases
- Personal photography journals and travel logs
- Public photo portfolios with camera and lens metadata
- Self-hosted galleries with an authenticated upload workflow
- Small team or family photo collections
- Testing and extending the open-source EXIF Photo Blog project
Dependencies for EXIF Photo Blog
The application requires PostgreSQL for metadata and publicly readable object storage for uploaded photos. Redis-based rate limiting is optional upstream and is intentionally omitted from this streamlined template.
Deployment Dependencies
- Railway Postgres and a persistent database volume
- MinIO and a persistent Railway volume
- The upstream
sambecker/exif-photo-blogrepository
Included services
- Web — the Next.js photo blog, sourced directly from
sambecker/exif-photo-blog - Postgres — persistent photo metadata and application data
- MinIO — persistent S3-compatible photo storage with a Railway volume; its startup creates the
photosbucket and applies public-download access
Required configuration
The deploy form asks for only:
ADMIN_EMAIL— email used to sign in at/adminADMIN_PASSWORD— password used to sign in at/admin
All database passwords, storage credentials, AUTH_SECRET, ports, and service references are generated or wired automatically. NEXT_PUBLIC_DOMAIN uses Web's generated Railway hostname by default.
After deployment finishes, open the generated Web domain, visit /admin, and upload your first photo.
Storage choice
Railway Buckets are S3-compatible but private-only. EXIF Photo Blog stores permanent public asset URLs and currently supports Vercel Blob, AWS S3, Cloudflare R2, or MinIO. This deployment uses MinIO on a persistent Railway volume for publicly accessible photo storage.
MinIO startup grants anonymous download access only; writes, deletes, copies, and listings remain credentialed.
Optional variables
The deploy form also offers NEXT_PUBLIC_NAV_TITLE, NEXT_PUBLIC_NAV_CAPTION, NEXT_PUBLIC_META_TITLE, and NEXT_PUBLIC_META_DESCRIPTION, but all four may be left blank. The upstream project supports many additional variables for titles, descriptions, layout, themes, feeds, AI captions, location services, and performance. Add them to the Web service after deployment as described in the upstream README.
For AI descriptions outside Vercel, set either OPENAI_SECRET_KEY, or both AI_GATEWAY_MODEL and AI_GATEWAY_API_KEY, on the Web service.
Notes
- The MinIO deployment is single-node storage backed by a persistent Railway volume. It is appropriate for personal photo blogs and small deployments, but it is not a multi-node/high-availability object store.
- The Web service follows the upstream repository's
mainbranch directly. - Attach a custom domain to Web and set
NEXT_PUBLIC_DOMAINto that hostname if you replace the generated Railway domain.
Template Content
ADMIN_EMAIL
Email used to sign in at /admin.
ADMIN_PASSWORD
Password used to sign in at /admin.
MinIO
minio/minio:latest