{"id":51462510,"url":"https://github.com/dirnbauer/typo3-camino-vercel","last_synced_at":"2026-07-06T07:00:53.816Z","repository":{"id":368915316,"uuid":"1287492344","full_name":"dirnbauer/typo3-camino-vercel","owner":"dirnbauer","description":"TYPO3 14.3 container starter for Vercel Functions","archived":false,"fork":false,"pushed_at":"2026-07-02T18:45:17.000Z","size":963,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T20:24:23.646Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dirnbauer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-02T18:31:13.000Z","updated_at":"2026-07-02T18:45:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dirnbauer/typo3-camino-vercel","commit_stats":null,"previous_names":["dirnbauer/typo3-camino-vercel"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dirnbauer/typo3-camino-vercel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-camino-vercel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-camino-vercel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-camino-vercel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-camino-vercel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dirnbauer","download_url":"https://codeload.github.com/dirnbauer/typo3-camino-vercel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-camino-vercel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35180933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-06T07:00:52.928Z","updated_at":"2026-07-06T07:00:53.805Z","avatar_url":"https://github.com/dirnbauer.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TYPO3 Camino on Vercel\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fdirnbauer%2Ftypo3-camino-vercel\u0026project-name=typo3-camino-vercel\u0026repository-name=typo3-camino-vercel\u0026demo-title=TYPO3+Camino+on+Vercel\u0026demo-description=Community+Vercel+container+starter+for+TYPO3+14.3+using+the+TYPO3+Camino+distribution.+Not+an+official+TYPO3+package.\u0026demo-url=https%3A%2F%2Ftypo3-camino-vercel.vercel.app\u0026demo-image=https%3A%2F%2Ftypo3-camino-vercel.vercel.app%2Ftemplate-preview.png\u0026from=templates\u0026env=TYPO3_SETUP_ADMIN_USERNAME,TYPO3_SETUP_ADMIN_PASSWORD,TYPO3_ENCRYPTION_KEY\u0026envDescription=Set+a+backend+admin+username%2C+a+long+random+backend+password%2C+and+a+stable+96-character+hex+TYPO3+encryption+key.+Do+not+put+secrets+in+the+URL.\u0026envLink=https%3A%2F%2Fgithub.com%2Fdirnbauer%2Ftypo3-camino-vercel%2Fblob%2Fmain%2Fdocs%2Fquickstart.md)\n\nThis is not an official TYPO3 package. It is a community Vercel container\nstarter for TYPO3 14.3 that uses the TYPO3 Camino distribution, packaged as a\nPHP 8.4 Apache container for Vercel Container Images.\n\nThis is a lab/template starter, not a production recommendation for every\nTYPO3 project. It is useful for testing Vercel's container support with TYPO3\nand for learning what works well on a stateless platform.\n\n## Important: Free Demo Data And Login Are Temporary\n\nThe one-click free demo is usable as a frontend/container smoke test, but it is\nnot durable and the TYPO3 backend login is not stable:\n\n- You can upload files in TYPO3.\n- You can edit pages and records.\n- Those uploaded files and content changes can disappear.\n- The backend can log you out after a few seconds.\n\nWhy: the free demo uses SQLite and runtime `fileadmin` storage inside the\nVercel container. TYPO3 stores backend sessions in the database table\n`be_sessions`. Vercel can start more than one runtime instance, and those\ninstances do not share the SQLite file in `/tmp`.\n\nFor non-temporary files and content, add both:\n\n- a durable database through `DATABASE_URL`\n- external object storage through Vercel Blob or the S3-compatible TYPO3 FAL driver\n\nFor a stable backend login, the durable database is required. For durable\neditor uploads, object storage is also required. Until both are configured, use\nthe free deploy only for checking that the container, TYPO3, and Camino boot.\n\n**Loud and clear:** uploads are durable only after\n`TYPO3_OBJECT_STORAGE_ENABLED=1` and an object-storage driver is configured.\nFor an all-Vercel setup, use `TYPO3_OBJECT_STORAGE_DRIVER=vercel_blob` with a\nconnected Vercel Blob store. For S3-compatible storage, use\n`TYPO3_OBJECT_STORAGE_DRIVER=vercel_s3` and the `TYPO3_S3_*` bucket variables.\nWithout one of those setups, uploaded files still live in Vercel runtime storage\nand can disappear. When object storage is enabled, the container verifies the\nstorage on boot and creates the TYPO3 upload, processing, and temp folders\nthere. If credentials are wrong, startup fails loudly instead of pretending\nuploads are safe.\n\n## Durable Free Demo: Still Free, But Not One-Click Yet\n\nYes, a truly durable demo can still be free, but only if every part stays inside\nits provider's free quota.\n\nBest practical zero-cost shape:\n\n- Vercel Hobby for the container, personal/non-commercial use only.\n- Free database: TiDB Cloud MySQL-compatible, Neon Postgres, or Supabase Postgres.\n- Free object storage: Vercel Blob on Hobby within limits, or Cloudflare R2.\n- TYPO3 storage integration: `vercel_blob` for Vercel Blob, `vercel_s3` for R2/S3.\n\nWhat this means today:\n\n- The current one-click demo is free, but uploaded files are temporary.\n- One-click free demo with durable uploaded files still needs setup steps.\n- A durable free demo needs setup steps for the database and object storage.\n- Vercel Blob can now be wired through the included Blob FAL driver.\n- Cloudflare R2 can still be wired through the included S3-compatible FAL driver.\n- It stays free only while usage remains inside all free-tier limits.\n\n## What Works\n\n- Free one-click Vercel smoke deploy with a pre-seeded Camino SQLite demo\n  database and no external storage requirement.\n- Stable backend login when a durable SQL database is configured.\n- TYPO3 14.3 Composer install with Camino and the current TYPO3 CMS system\n  package set included.\n- Serverless-style runtime paths: TYPO3 writes to `/tmp`, not durable image paths.\n- Durable external SQL database support through `DATABASE_URL` or TYPO3 DB env vars.\n- Durable editor uploads through Vercel Blob or the S3-compatible TYPO3 FAL driver.\n- Vercel Cron compatible endpoint for running TYPO3 Scheduler tasks.\n- Vercel Firewall/WAF in front of the container.\n- Vercel region pinning and runtime-local TYPO3 caches for faster warm requests.\n- Optional Vercel CDN caching for anonymous public frontend HTML.\n\n## What Does Not Work\n\n- No Linux daemon cron inside the container. Use Vercel Cron or an external cron service.\n- No durable local filesystem. Runtime writes in `/tmp`, `var/`, or `fileadmin/` can disappear.\n- SQLite is demo-only on Vercel. It is not reliable for TYPO3 backend sessions.\n- Editor uploads are not durable unless Vercel Blob or S3-compatible object storage is configured.\n- This starter is not a GDPR/legal compliance guarantee.\n\n## Quick Demo\n\n1. Click **Deploy with Vercel** and choose your personal Hobby account for the\n   free demo.\n2. Enter these required values in the Vercel form:\n\n```dotenv\nTYPO3_SETUP_ADMIN_USERNAME=admin\nTYPO3_SETUP_ADMIN_PASSWORD=\u003cstrong-random-password\u003e\nTYPO3_ENCRYPTION_KEY=\u003c96-random-hex-chars\u003e\n```\n\nGenerate the encryption key locally:\n\n```bash\nopenssl rand -hex 48\n```\n\n3. Deploy and open the frontend.\n\nThe first deploy uses the seeded SQLite demo database unless you add a real\ndatabase. For a real database, read [docs/database.md](docs/database.md) before\ndeploying.\n\nFor the free demo, do not add `DATABASE_URL` and do not create an object\nstorage bucket.\nThe demo will reset when Vercel replaces the runtime container, so use it only\nfor testing the package and Camino frontend. Backend login needs a durable\ndatabase.\n\n## Production Shape\n\nFor anything beyond a short test, use:\n\n```dotenv\nTYPO3_CONTEXT=Production/Vercel\nTYPO3_AUTO_SETUP=1\nTYPO3_BOOTSTRAP_EMPTY_DATABASE=1\nTYPO3_SETUP_DISTRIBUTION=theme_camino\nTYPO3_SETUP_ADMIN_USERNAME=admin\nTYPO3_SETUP_ADMIN_PASSWORD=\u003cstrong-random-password\u003e\nTYPO3_SETUP_ADMIN_EMAIL=admin@example.com\nTYPO3_PROJECT_NAME=TYPO3 Camino\nTYPO3_ENCRYPTION_KEY=\u003c96-random-hex-chars\u003e\nTYPO3_TRUSTED_HOSTS_PATTERN=(.+\\.)?vercel\\.app\nDATABASE_URL=\u003cdurable-postgres-or-mysql-url\u003e\nTYPO3_CACHE_BACKEND=file\nTYPO3_ADMIN_PASSWORD_APPLY_ON_BOOT=0\nTYPO3_EXTENSION_SETUP_ON_BOOT=0\n```\n\nFor durable uploads with Vercel Blob, create/connect a public Blob store and add:\n\n```dotenv\nTYPO3_OBJECT_STORAGE_ENABLED=1\nTYPO3_OBJECT_STORAGE_DRIVER=vercel_blob\nTYPO3_OBJECT_STORAGE_VERIFY_ON_BOOT=1\nTYPO3_BLOB_ACCESS=public\nTYPO3_BLOB_PREFIX=typo3/\n```\n\nVercel supplies `BLOB_READ_WRITE_TOKEN` for connected Blob stores. For\nS3-compatible object storage instead, add:\n\n```dotenv\nTYPO3_OBJECT_STORAGE_ENABLED=1\nTYPO3_OBJECT_STORAGE_DRIVER=vercel_s3\nTYPO3_S3_BUCKET=\u003cbucket\u003e\nTYPO3_S3_REGION=auto\nTYPO3_S3_ENDPOINT=\u003cs3-compatible-endpoint\u003e\nTYPO3_S3_ACCESS_KEY_ID=\u003caccess-key\u003e\nTYPO3_S3_SECRET_ACCESS_KEY=\u003csecret-key\u003e\nTYPO3_S3_PUBLIC_BASE_URL=\u003cpublic-bucket-or-cdn-url\u003e\nTYPO3_OBJECT_STORAGE_VERIFY_ON_BOOT=1\n```\n\nThe admin password must satisfy TYPO3's password policy: use uppercase,\nlowercase, numbers, and a symbol.\n\nAfter the first successful setup, set `TYPO3_AUTO_SETUP=0`. For stricter and\nfaster production startup, also set `TYPO3_BOOTSTRAP_EMPTY_DATABASE=0`,\n`TYPO3_EXTENSION_SETUP_ON_BOOT=0`, and `TYPO3_ADMIN_PASSWORD_APPLY_ON_BOOT=0`\nafter the database has been initialized.\n\nFor faster anonymous frontend pages on Vercel, you may enable the opt-in CDN\nHTML cache:\n\n```dotenv\nTYPO3_VERCEL_EDGE_CACHE_TTL=600\nTYPO3_VERCEL_EDGE_CACHE_STALE_WHILE_REVALIDATE=3600\n```\n\nThis only targets anonymous `GET`/`HEAD` HTML requests without cookies, query\nstrings, `Set-Cookie`, `/typo3`, or `/api`. Keep it disabled while testing\nforms, frontend user login, personalization, or uncached plugins.\n\nFor shared TYPO3 caches, Redis is supported when you provide a real Redis TCP\nor TLS URL close to the Vercel region:\n\n```dotenv\nTYPO3_CACHE_BACKEND=redis\nTYPO3_REDIS_URL=rediss://default:\u003cpassword\u003e@\u003chost\u003e:6379/0\n```\n\nFor small demos, `TYPO3_CACHE_BACKEND=file` plus Vercel edge caching is usually\nfaster than a remote Redis hop.\n\n## Costs For Testing\n\nVercel Hobby is free for personal/non-commercial testing within the plan limits.\nThe seeded SQLite demo can run without a paid database or object storage, but\nit is non-durable.\n\nFor a free or low-cost durable database test:\n\n- **Postgres:** Neon or Supabase are the easiest Vercel Marketplace options.\n- **MySQL-compatible:** TiDB Cloud has a Vercel integration and free starter quota.\n- **PlanetScale:** MySQL-compatible and integrated with Vercel, but no free plan.\n\nSee [docs/costs.md](docs/costs.md) for the current caveats.\n\n## Documentation\n\n- [Quickstart](docs/quickstart.md)\n- [Free demo mode](docs/free-demo.md)\n- [Database setup](docs/database.md)\n- [Object storage and durable uploads](docs/object-storage.md)\n- [Included TYPO3 packages](docs/typo3-packages.md)\n- [Backend login and sessions](docs/backend-login.md)\n- [Performance notes](docs/performance.md)\n- [Serverless runtime notes](docs/serverless-runtime.md)\n- [Scheduler and cron](docs/scheduler.md)\n- [Security and firewall](docs/security.md)\n- [GDPR and privacy checklist](docs/gdpr.md)\n- [Operations checklist](docs/operations-checklist.md)\n- [Limitations](docs/limitations.md)\n- [Vercel deployment notes](docs/vercel.md)\n\n## Local Smoke Test\n\n```bash\ndocker compose up --build\nopen http://localhost:8080\n```\n\nThe local Compose setup uses MariaDB and initializes TYPO3 automatically.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Ftypo3-camino-vercel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdirnbauer%2Ftypo3-camino-vercel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Ftypo3-camino-vercel/lists"}