# Migrate Netlify web app: Laravel

Move Laravel compute from Netlify web app to Ample, one component at a time. Destination verified on Ample: the app built, started and answered on its public HTTPS URL with encrypted configuration delivered.

## Summary
Source procedure: Copy environment variables from Site configuration (or `netlify env:list`) into an env file kept out of the repository. Not migrated automatically: Netlify Functions, Edge Functions, Forms, Identity and `_redirects`/`_headers` rules are not migrated; implement redirects in the app or the framework.

Cutover: Add the custom domain with `ample domain add`, set the documented DNS records, keep the Netlify site until verified, then remove the domain from Netlify. Rollback: keep the source untouched until you confirm; nothing at the source is changed or deleted by this guide.

## Representative Queries
- Migrate Netlify web app: Laravel
- Where can I host Laravel built with Laravel?
- I need a component-scoped export/import or reconfiguration procedure for Laravel, with compatibility checks, verification and rollback.

## Resource Requirements
- primitive:compute
- primitive:postgres

## Infrastructure Requirements
- **Compute**: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
- **Postgres**: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.

## Workload
- **Framework**: Laravel
- **Migration Source**: Netlify web app

## Prerequisites
- Authorized access to the Netlify web app source and its export tooling
- An inventory of every component in scope and out of scope
- A validated backup or copy before any cutover
- An Ample account token with servers:write, databases:read

## Proven Template
- **Template**: php-8.5
- **Runtime**: php
- **Size**: s-1vcpu-1gb

### Installation Command
```bash
composer install --no-dev --prefer-dist --no-interaction --no-progress --optimize-autoloader
```

### Start Command
```bash
frankenphp php-server --listen :$PORT --root public
```

## Workflow Steps
1. **Inventory the source**: List what Netlify web app provides beyond the component you are moving. 
2. **Source step 1**: Copy environment variables from Site configuration (or `netlify env:list`) into an env file kept out of the repository.
3. **Source step 2**: Translate `netlify.toml` build settings (command, publish directory) into the repository's own build script; Ample runs the detected build.
4. **Source step 3**: List Netlify-only features in use: functions, edge functions, forms, identity, redirects and headers rules.
5. **Deploy on Ample in parallel**: `ample deploy . --name  --public --env-file .env.production`
6. **Validate before cutover**: Run the app's own checks; the example checks are the pattern self-tests (/p/configuration-secrets, /p/relational-records).
7. **Cut over**: Add the custom domain with `ample domain add`, set the documented DNS records, keep the Netlify site until verified, then remove the domain from Netlify.
8. **Rollback**: Point DNS or configuration back to the source.

## Limitations
- Documentation only: nothing is executed automatically and no execution binding is offered.
- Verified only on the php-8.5 template; defaults may vary in other contexts.

## Cost Estimate
- **Currency**: USD
- **Monthly Amount**: 10.0

### Components
- **App server**: Size s-1vcpu-1gb, Quantity 1, Monthly Amount 5.0
- **Managed PostgreSQL database**: Size s-1vcpu-1gb, Quantity 1, Monthly Amount 5.0

## Last Verified
2026-09-20T20:36:21Z

## Evidence Summary
Destination side verified: the Laravel pattern fixture deployed on Ample and its checks passed.

### Example
- **Title**: Laravel pattern fixture (destination)
- **Description**: Verified destination basis: Laravel compute.
- **Source Ref**: tests/deploy-canaries/laravel-patterns.
