Files
ttvfx/DEPLOY.md
T
twotalesanimation 829d415324 Switch domain to twotalesvfx.com
Site URL (sitemap, robots, Open Graph), footer and deploy guide now target
twotalesvfx.com behind Cloudflare.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 19:59:16 +02:00

2.3 KiB

Deploying twotalesvfx.com

The site is a fully static export, so there is no Node process to run in production.

1. Build

npm ci
npm run build        # outputs ./out

Or build on the server straight from git:

git clone https://git.twotalesvfx.com/pinto/ttvfx.git /opt/ttvfx
cd /opt/ttvfx && npm ci && npm run build

2. DNS (Cloudflare)

twotalesvfx.com is already on Cloudflare (proxied). Point the apex and www at the VPS and leave the existing review and git records alone:

Type Name Value Proxy
A @ <VPS IPv4> Proxied
A www <VPS IPv4> Proxied

At the time of writing the apex returned Cloudflare 522 (origin unreachable), so the current @ record needs updating.

SSL/TLS mode: Full (strict), using either certbot (below) or a Cloudflare Origin Certificate installed in nginx.

3. Upload

If building locally:

rsync -avz --delete out/ user@your-vps:/var/www/twotalesvfx.com/

If building on the server, copy or symlink /opt/ttvfx/out to /var/www/twotalesvfx.com.

4. nginx

/etc/nginx/sites-available/twotalesvfx.com:

server {
    listen 80;
    server_name twotalesvfx.com www.twotalesvfx.com;
    root /var/www/twotalesvfx.com;

    # www -> apex
    if ($host = www.twotalesvfx.com) { return 301 https://twotalesvfx.com$request_uri; }

    location / {
        try_files $uri $uri/ $uri.html =404;
    }

    # Hashed build assets can be cached forever
    location /_next/static/ {
        add_header Cache-Control "public, max-age=31536000, immutable";
    }

    # Video: allow range requests to be cached
    location ~* \.mp4$ {
        add_header Cache-Control "public, max-age=604800";
    }

    error_page 404 /404.html;

    gzip on;
    gzip_types text/css application/javascript image/svg+xml application/json;
}
sudo ln -s /etc/nginx/sites-available/twotalesvfx.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d twotalesvfx.com -d www.twotalesvfx.com   # HTTPS via Let's Encrypt

(For Apache, set DocumentRoot to the same folder plus ErrorDocument 404 /404.html. Because the build uses trailingSlash, every page is a folder with its own index.html.)