Skip to content

Deployment

You have a static site ready to go. Now you need to get it live on Cloudflare Pages with a custom domain, SSL, and automated deployments. This guide covers every deployment method, DNS configuration, and CI/CD setup.


Three ways to deploy to Cloudflare Pages, from simplest to most automated:

Wrangler CLI

Best for: Quick deploys, local testing

Setup time: 5 minutes

Auto-deploy: No (manual)

Run a single command from your terminal. Fastest way to get a site live.

Git Integration

Best for: Ongoing projects with a team

Setup time: 15 minutes

Auto-deploy: Yes (on push)

Connect GitHub/GitLab for automatic deployments on every push.

Dashboard Upload

Best for: One-off deploys, no Git

Setup time: 2 minutes

Auto-deploy: No (manual)

Upload files directly through the Cloudflare Dashboard.

The fastest way to deploy. Run a single command from your terminal.

  1. Install Wrangler

    Terminal window
    npm install -g wrangler
    # Or as a project dependency
    npm install --save-dev wrangler
  2. Authenticate

    Terminal window
    npx wrangler login
    # Opens browser -> authorize Cloudflare account
  3. Deploy

    Terminal window
    # Deploy the public/ directory to Cloudflare Pages
    npx wrangler pages deploy public
    # First deploy: creates the project (prompts for project name)
    # Subsequent deploys: updates the existing project

Deploy with options:

Terminal window
# Specify project name (skip prompt)
npx wrangler pages deploy public --project-name=my-practice-site
# Deploy to a specific branch (creates preview deployment)
npx wrangler pages deploy public --project-name=my-practice-site --branch=staging
# Deploy with a commit message
npx wrangler pages deploy public --project-name=my-practice-site \
--commit-message="Updated contact page"

Common package.json scripts:

{
"scripts": {
"build": "npm run optimize:images && npm run build:site",
"deploy": "npm run build && npx wrangler pages deploy public",
"deploy:staging": "npm run build && npx wrangler pages deploy public --branch=staging",
"cf:login": "npx wrangler login",
"cf:deploy": "npx wrangler pages deploy public"
}
}

Connect your GitHub or GitLab repository to Cloudflare Pages for automatic deployments on every push.

  1. Go to Cloudflare Dashboard -> Workers & Pages -> Create

  2. Select Pages tab -> Connect to Git

  3. Authorize Cloudflare to access your GitHub/GitLab account

  4. Select the repository

  5. Configure build settings:

    SettingValueNotes
    Project namemy-practice-siteBecomes my-practice-site.pages.dev
    Production branchmainDeploys from this branch go live
    Framework presetNone (static) or AstroSelect your framework
    Build commandnpm run buildOr leave blank for static sites
    Build output directorypublicWhere your built files live
    Root directory/Or subdirectory if monorepo
  6. Click Save and Deploy

After setup:

  • Push to main — automatic production deployment
  • Push to any other branch — automatic preview deployment
  • Pull request — preview URL posted as a comment

For sites without Git, upload files directly through the Cloudflare Dashboard.

  1. Go to Workers & Pages -> Create -> Pages -> Upload assets
  2. Name your project
  3. Drag and drop your public/ folder contents
  4. Click Deploy

The wrangler.toml file configures your Cloudflare Pages project. Place it in the project root.

# wrangler.toml - Cloudflare Pages configuration
name = "my-practice-site"
compatibility_date = "2026-02-11"
pages_build_output_dir = "public"
# Optional: Cloudflare account ID (useful for CI/CD)
# account_id = "your-account-id-here"
# Environment variables for build
[vars]
SITE_NAME = "My Medical Practice"
SITE_URL = "https://www.mypractice.com"
# KV Namespace bindings (if using Cloudflare KV)
# [[kv_namespaces]]
# binding = "FORM_SUBMISSIONS"
# id = "your-kv-namespace-id"
# D1 Database bindings (if using Cloudflare D1)
# [[d1_databases]]
# binding = "DB"
# database_name = "my-database"
# database_id = "your-database-id"
FieldRequiredDescription
nameYesProject name (becomes <name>.pages.dev)
compatibility_dateYesCloudflare Workers runtime version date
pages_build_output_dirYesDirectory containing built files to deploy
account_idNoYour Cloudflare account ID (auto-detected if logged in)
[vars]NoEnvironment variables available during build and in Functions
[[kv_namespaces]]NoCloudflare KV storage bindings
[[d1_databases]]NoCloudflare D1 database bindings

Set these environment variables in your Cloudflare Pages project settings or wrangler.toml:

VariableRecommended ValueWhy
NODE_VERSION20 or 18Default 12.18.0 will break most modern builds
NPM_VERSION10Matches Node.js 20 LTS
HUGO_VERSION0.128.0 (if using Hugo)Default Hugo is outdated; pin your version
[vars]
NODE_VERSION = "20"
NPM_VERSION = "10"
IssueCauseSolution
Build fails with syntax errorsDefault Node.js 12 doesn’t support modern JSSet NODE_VERSION=20
sharp module fails to installNative dependencies need correct platformAdd npm_config_platform=linux and npm_config_arch=x64 env vars
Git submodules not clonedPages doesn’t clone submodules by defaultUse git submodule update --init in build command
Build times out at 20 minutesLarge sites with many imagesOptimize build scripts; pre-process images
Functions not deploying via DashboardKnown Cloudflare bugUse Wrangler CLI or Git integration instead

  1. Create a GitHub repository

    Terminal window
    # In your project directory
    git init
    git add .
    git commit -m "Initial commit"
    # Create repo on GitHub (using GitHub CLI)
    gh repo create my-practice-site --private --source=. --push
  2. Connect to Cloudflare Pages

    Go to Cloudflare Dashboard -> Workers & Pages -> Create -> Pages -> Connect to Git -> Select GitHub -> Authorize the Cloudflare Pages GitHub App -> Select your repository -> Configure build settings -> Deploy.

  3. Verify auto-deploy

    Terminal window
    # Make a change
    echo "<!-- Updated -->" >> public/index.html
    # Push to main
    git add . && git commit -m "Test auto-deploy" && git push
    # Watch Cloudflare Dashboard -> Pages -> Deployments
    # Should show "Building" -> "Success" within 1-2 minutes

Once connected, every push triggers a deployment:

Git ActionCloudflare ActionURL
Push to mainProduction deploymy-site.pages.dev
Push to stagingPreview deploystaging.my-site.pages.dev
Push to feature/xyzPreview deployfeature-xyz.my-site.pages.dev
Pull RequestPreview deploy<hash>.my-site.pages.dev

Every non-production branch gets its own preview URL. This is incredibly useful for staging and client review.

Terminal window
# Create a staging branch
git checkout -b staging
git push -u origin staging
# Preview URL: staging.my-site.pages.dev
# Create a feature branch
git checkout -b feature/new-hero
# Make changes...
git push -u origin feature/new-hero
# Preview URL: feature-new-hero.my-site.pages.dev
# Create a PR - Cloudflare posts the preview URL as a comment
gh pr create --title "New hero section" --body "Updated hero design"

Limit which branches trigger deployments:

  1. Go to Cloudflare Dashboard -> Pages -> your project -> Settings -> Builds & deployments
  2. Set Production branch to main (or master)
  3. Configure Preview branches:
    • All non-production branches (default)
    • None (disable previews)
    • Include/exclude patterns (e.g., only staging and release/*)

  1. Go to Cloudflare Dashboard -> Pages -> your project -> Custom domains
  2. Click Set up a custom domain
  3. Enter your domain (e.g., www.mypractice.com)
  4. Cloudflare configures DNS automatically if the domain is already on Cloudflare DNS. If not, it provides CNAME records to add at your registrar.
SetupDomainDNS RecordExample
Root domainmypractice.comCNAME -> my-site.pages.devMain website
WWW subdomainwww.mypractice.comCNAME -> my-site.pages.devMain website (www)
Landing page subdomainlp.mypractice.comCNAME -> my-lp.pages.devLanding pages
Staging subdomainstaging.mypractice.comCNAME -> staging.my-site.pages.devStaging preview

Most sites should work on both mypractice.com and www.mypractice.com:

  1. Add mypractice.com as a custom domain on your Pages project
  2. Add www.mypractice.com as a custom domain on the same project
  3. Cloudflare handles both — no redirect rules needed

To redirect one to the other (e.g., mypractice.com -> www.mypractice.com), use a Cloudflare Redirect Rule (Dashboard -> Rules -> Redirect Rules):

FieldValue
Rule nameRedirect root to www
When incoming requests matchHostname equals mypractice.com
ThenDynamic redirect
Expressionconcat("https://www.mypractice.com", http.request.uri.path)
Status code301 (Permanent)

If your main site stays on WordPress but landing pages go to Cloudflare Pages:

mypractice.com -> WordPress (unchanged)
www.mypractice.com -> WordPress (unchanged)
lp.mypractice.com -> Cloudflare Pages (landing pages)

DNS configuration:

Type Name Content Proxy
CNAME lp my-landing-pages.pages.dev Proxied

Two approaches depending on whether you want Cloudflare to manage all DNS:

Move your domain’s nameservers to Cloudflare. This gives you full control over DNS, CDN, security, and performance features.

  1. Add domain to Cloudflare

    Go to Cloudflare Dashboard -> Add a site -> Enter your domain (mypractice.com) -> Select the Free plan -> Cloudflare scans existing DNS records.

  2. Review DNS records

    Cloudflare imports your existing records. Verify critical records:

    TypeNameContentProxy Status
    A@Your server IP (if WordPress still running)Proxied
    CNAMEwwwmy-site.pages.devProxied
    MX@Mail server (e.g., aspmx.l.google.com)DNS only
    TXT@SPF recordDNS only
    TXT@Google verificationDNS only
  3. Update nameservers at your registrar

    Cloudflare provides two nameservers (e.g., ada.ns.cloudflare.com and bob.ns.cloudflare.com). Update these at your domain registrar:

    RegistrarPath
    GoDaddyMy Products -> DNS -> Nameservers -> Change
    NamecheapDomain List -> Manage -> Nameservers -> Custom DNS
    Google/SquarespaceMy domains -> DNS -> Custom name servers
    Cloudflare RegistrarAlready set (no action needed)

    Propagation time: 1-24 hours (usually under 2 hours).

  4. Verify activation

    Terminal window
    # Check nameservers
    dig NS mypractice.com +short
    # Should show:
    # ada.ns.cloudflare.com.
    # bob.ns.cloudflare.com.
Record TypePurposeProxy StatusExample
APoints domain to IP addressProxied (for web traffic)@ -> 192.0.2.1
AAAAPoints domain to IPv6 addressProxied (for web traffic)@ -> 2001:db8::1
CNAMEPoints domain to another domainProxied (for web traffic)www -> site.pages.dev
MXMail server routingDNS only (never proxy)@ -> mail.google.com
TXTVerification, SPF, DKIMDNS only@ -> v=spf1 include:...
SRVService recordsDNS onlyVarious

Cloudflare Pages provides free, automatic SSL certificates for all custom domains. No configuration needed.

  1. Add a custom domain to your Pages project
  2. Cloudflare automatically provisions a certificate (usually within 15 minutes)
  3. Certificate auto-renews before expiration
  4. Supports both root domain and www

If using Cloudflare DNS (full migration), configure the SSL mode:

ModeDescriptionSecurityRecommendation
OffNo encryptionNoneNever use
FlexibleEncrypted browser->Cloudflare, unencrypted Cloudflare->originPartialAvoid
FullEncrypted both ways, origin cert not validatedGoodAcceptable
Full (Strict)Encrypted both ways, origin cert validatedBestRecommended

Ensure all HTTP traffic redirects to HTTPS:

Go to SSL/TLS -> Edge Certificates -> Enable Always Use HTTPS.

After HSTS has been active for several weeks, submit your domain to the browser HSTS preload list so browsers always use HTTPS, even on the first visit.

  1. Ensure HSTS header includes preload directive
  2. Submit at https://hstspreload.org/
  3. Inclusion takes several months (added to browser source code)

Environment variables store configuration values and secrets (API keys, site URLs) outside your code.

  1. Go to Pages -> your project -> Settings -> Environment variables
  2. Click Add variable
  3. Enter name and value
  4. Choose scope: Production, Preview, or Both

Different values for production and preview environments:

VariableProductionPreviewPurpose
SITE_URLhttps://www.mypractice.comhttps://staging.mypractice.comCanonical URL
SENDGRID_API_KEYSG.prod_key...SG.test_key...Email delivery
FORM_RECIPIENTinfo@mypractice.comdev@mypractice.comForm submissions
ANALYTICS_IDG-PROD123(not set)Google Analytics
DEBUGfalsetrueDebug logging

Accessing Variables in Cloudflare Functions

Section titled “Accessing Variables in Cloudflare Functions”

Environment variables are available in the env parameter of Cloudflare Pages Functions:

functions/api/submit-form.js
export async function onRequestPost(context) {
const { env } = context;
const apiKey = env.SENDGRID_API_KEY;
const recipient = env.FORM_RECIPIENT;
const siteName = env.SITE_NAME;
// Use variables in your function logic
const response = await fetch('https://api.sendgrid.com/v3/mail/send', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
personalizations: [{ to: [{ email: recipient }] }],
from: {
email: `noreply@${env.SITE_URL.replace('https://', '')}`,
name: siteName
},
subject: `New form submission from ${siteName}`,
content: [{ type: 'text/plain', value: 'Form data here...' }]
})
});
return new Response(JSON.stringify({ success: true }), {
headers: { 'Content-Type': 'application/json' }
});
}

Every push to a non-production branch creates a unique preview deployment with its own URL.

flowchart TD
    A[Push Code] --> B{Which Branch?}
    B -->|main| C[Production Deploy]
    B -->|staging| D[Preview Deploy]
    B -->|feature/*| E[Preview Deploy]
    B -->|Pull Request| F[Preview Deploy]

    C --> G["my-site.pages.dev<br/>www.mypractice.com"]
    D --> H["staging.my-site.pages.dev"]
    E --> I["feature-name.my-site.pages.dev"]
    F --> J["hash.my-site.pages.dev"]

Preview deployments are perfect for getting client approval before going live:

Terminal window
# Create a branch with changes
git checkout -b client-review/homepage-update
# Make changes...
git add . && git commit -m "Updated homepage hero and services"
git push -u origin client-review/homepage-update
# Get the preview URL from Cloudflare Dashboard
# Or use GitHub PR comments (auto-posted by Cloudflare)

Share the preview URL with clients:

"Here's a preview of the updated homepage:
https://client-review-homepage-update.my-site.pages.dev
Please review and let us know if you'd like any changes."

Preview deployments use their own set of environment variables:

  • Forms can send to a test email address instead of production
  • Analytics tracking can be disabled
  • Debug mode can be enabled
FeatureFree PlanPro Plan
Preview deploymentsUnlimitedUnlimited
Concurrent builds15
Build minutes/month5005,000
Preview retention30 days30 days

Every deployment to Cloudflare Pages is preserved. Rolling back to a previous version takes seconds.

  1. Go to Cloudflare Dashboard -> Pages -> your project -> Deployments
  2. Find the deployment you want to revert to
  3. Click the three-dot menu (…)
  4. Select Rollback to this deploy
  5. Confirm

Speed: Instant (seconds)

Git history: No change

Side effects: None

Best for: Emergencies when you need to revert immediately.

Cloudflare Pages keeps a history of all deployments:

InformationAvailable
Deployment IDYes
TimestampYes
Git commit hashYes (if Git-connected)
Branch nameYes
Build logsYes
Status (success/fail)Yes
Preview URLYes (each deploy has a unique URL)

Automate testing and deployment with GitHub Actions. This example runs tests before deploying, ensuring broken code never reaches production.

Create .github/workflows/deploy.yml:

name: Deploy to Cloudflare Pages
on:
push:
branches: [main, staging]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Run tests
run: npm test
- name: Run Lighthouse CI
uses: treosh/lighthouse-ci-action@v12
with:
urls: |
http://localhost:4173/
configPath: '.lighthouserc.json'
uploadArtifacts: true
deploy:
needs: test
if: github.event_name == 'push'
runs-on: ubuntu-latest
permissions:
contents: read
deployments: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy public --project-name=my-practice-site

Add these secrets to your GitHub repository:

  1. Go to GitHub -> your repo -> Settings -> Secrets and variables -> Actions

  2. Add the following secrets:

    Secret NameValueHow to Get
    CLOUDFLARE_API_TOKENYour API tokenCloudflare Dashboard -> My Profile -> API Tokens -> Create Token -> “Edit Cloudflare Workers” template
    CLOUDFLARE_ACCOUNT_IDYour account IDCloudflare Dashboard -> any domain -> Overview -> right sidebar
  1. Go to https://dash.cloudflare.com/profile/api-tokens

  2. Click Create Token

  3. Use the “Edit Cloudflare Workers” template

  4. Modify permissions:

    ResourcePermission
    Account -> Cloudflare PagesEdit
    Account -> Account SettingsRead
    Zone -> ZoneRead (if using custom domains)
    Zone -> DNSEdit (if managing DNS via API)
  5. Click Continue to summary -> Create Token

  6. Copy the token immediately (shown only once)

Create .lighthouserc.json for automated Lighthouse scoring:

{
"ci": {
"collect": {
"numberOfRuns": 3,
"startServerCommand": "npm run serve",
"startServerReadyPattern": "ready",
"url": [
"http://localhost:4173/",
"http://localhost:4173/about/",
"http://localhost:4173/contact/"
]
},
"assert": {
"assertions": {
"categories:performance": ["error", { "minScore": 0.9 }],
"categories:accessibility": ["warn", { "minScore": 0.9 }],
"categories:best-practices": ["warn", { "minScore": 0.9 }],
"categories:seo": ["warn", { "minScore": 0.9 }]
}
},
"upload": {
"target": "temporary-public-storage"
}
}
}
flowchart TD
    A[Push to main] --> B[GitHub Actions Triggers]
    B --> C[Job: test]
    C --> C1[Install dependencies]
    C1 --> C2[Build site]
    C2 --> C3[Run validation tests]
    C3 --> C4["Run Lighthouse CI (must score 90+)"]

    C4 --> D{Tests pass?}
    D -->|Yes| E[Job: deploy]
    D -->|No| F[Deployment blocked<br/>Team notified]

    E --> E1[Build site]
    E1 --> E2[Deploy via Wrangler]
    E2 --> G[Live on production]

    style F fill:#fee,stroke:#f66
    style G fill:#efe,stroke:#6a6

A typical setup for medical practice sites with a staging environment for review:

Production

Branch: main

URL: www.mypractice.com

Vars: Production API keys, real email addresses

Deploy: Automatic on push to main (after CI passes)

Staging

Branch: staging

URL: staging.mypractice.com

Vars: Test API keys, dev email addresses

Deploy: Automatic on push to staging

Preview

Branch: feature/* or PR branches

URL: <hash>.my-site.pages.dev

Vars: Same as staging

Deploy: Automatic on push

flowchart LR
    A[Feature Branch] -->|Push| B[Preview Deploy]
    B -->|Create PR| C[Code Review]
    C -->|Approve & Merge| D[Staging Branch]
    D -->|Auto-deploy| E[Staging Review]
    E -->|Approve & Merge| F[Main Branch]
    F -->|Auto-deploy + CI| G[Production]
Terminal window
# 1. Create feature branch from main
git checkout main && git pull
git checkout -b feature/update-services
# 2. Make changes, test locally
npm run build && npm run serve
# Preview at http://localhost:4173
# 3. Push feature branch (creates preview deployment)
git push -u origin feature/update-services
# Preview URL: feature-update-services.my-site.pages.dev
# 4. Create PR for review
gh pr create --title "Updated services page" --body "New pricing, updated descriptions"
# Cloudflare posts preview URL on the PR
# 5. After approval, merge to staging for final review
git checkout staging && git merge feature/update-services
git push
# Review at staging.mypractice.com
# 6. After staging approval, merge to main for production
git checkout main && git merge staging
git push
# Live at www.mypractice.com

Map custom domains to specific branches:

Step 1: Add custom domains in Cloudflare Pages settings

DomainBranchPurpose
www.mypractice.commainProduction
staging.mypractice.comstagingStaging
dev.mypractice.comdevelopDevelopment

Step 2: Add DNS records (if domain is on Cloudflare DNS)

Type Name Content Proxy
CNAME www my-site.pages.dev Proxied
CNAME staging staging.my-site.pages.dev Proxied
CNAME dev develop.my-site.pages.dev Proxied

Use environment variables to control build behavior per environment:

// astro.config.mjs or build script
const isProd = process.env.CF_PAGES_BRANCH === 'main';
const isStaging = process.env.CF_PAGES_BRANCH === 'staging';
export default {
site: isProd
? 'https://www.mypractice.com'
: isStaging
? 'https://staging.mypractice.com'
: 'https://dev.mypractice.com',
// Disable analytics in non-production
integrations: isProd ? [analytics()] : [],
};

Cloudflare Pages built-in environment variables:

VariableDescriptionExample
CF_PAGESAlways 1 on Cloudflare Pages1
CF_PAGES_BRANCHCurrent branch namemain
CF_PAGES_COMMIT_SHAFull commit hashabc123def456...
CF_PAGES_URLDeployment URLhttps://abc123.my-site.pages.dev

  1. All tests passing (npm test)
  2. Lighthouse score 90+ mobile (npm run test:lighthouse)
  3. All links valid (no 404s)
  4. Forms tested and working
  5. Images optimized (WebP, responsive)
  6. _headers file in place (cache + security headers)
  7. robots.txt and sitemap.xml present
  8. Meta tags and Open Graph tags set
  9. Favicon configured
  10. 404 page created (public/404.html)
  1. Wrangler authenticated (npx wrangler login)
  2. Project created on Cloudflare Pages
  3. Build output directory correct in configuration
  4. Initial deploy successful (npx wrangler pages deploy public)
  5. Site loads at <project>.pages.dev
  6. All pages render correctly
  7. All assets load (images, CSS, JS, fonts)
  1. Domain added to Cloudflare (nameservers or CNAME)
  2. DNS propagation complete (dig NS yourdomain.com +short)
  3. Custom domain added in Pages settings
  4. SSL certificate provisioned (check HTTPS works)
  5. SSL mode set to Full (Strict)
  6. “Always Use HTTPS” enabled
  7. HSTS header configured in _headers
  8. WWW redirect configured (if desired)
  1. Site accessible on custom domain
  2. All pages return 200 status
  3. Forms submit successfully and emails arrive
  4. Security headers verified (securityheaders.com)
  5. PageSpeed Insights score meets targets
  6. Google Search Console updated with new sitemap
  7. Analytics tracking verified
  8. Old hosting decommissioned (after monitoring period)
  1. GitHub repository connected to Cloudflare Pages
  2. GitHub secrets configured (CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID)
  3. GitHub Actions workflow created and tested
  4. Lighthouse CI configured with score thresholds
  5. Auto-deploy on push working
  6. Preview deployments working for branches/PRs

Terminal window
# Authentication
npx wrangler login # Login via browser
npx wrangler whoami # Check current user
# Deployment
npx wrangler pages deploy public # Deploy public/ directory
npx wrangler pages deploy public \
--project-name=my-site # Specify project name
npx wrangler pages deploy public \
--branch=staging # Deploy as preview (staging branch)
# Project management
npx wrangler pages project list # List all Pages projects
npx wrangler pages project create \
my-site # Create a new project
npx wrangler pages deployment list \
--project-name=my-site # List deployments
# Secrets
npx wrangler pages secret put \
API_KEY --project-name=my-site # Set a secret
npx wrangler pages secret list \
--project-name=my-site # List secrets
npx wrangler pages secret delete \
API_KEY --project-name=my-site # Delete a secret
# Local development (with Functions)
npx wrangler pages dev public # Local dev server with Functions support
Terminal window
# Check nameservers
dig NS mypractice.com +short
# Check A record
dig A mypractice.com +short
# Check CNAME record
dig CNAME www.mypractice.com +short
# Check SSL certificate
openssl s_client -connect www.mypractice.com:443 -servername www.mypractice.com \
</dev/null 2>/dev/null | openssl x509 -noout -subject -dates
# Check HTTP headers
curl -I https://www.mypractice.com/
TaskDashboard Path
View deploymentsWorkers & Pages -> your project -> Deployments
Add custom domainWorkers & Pages -> your project -> Custom domains
Set environment varsWorkers & Pages -> your project -> Settings -> Environment variables
Configure buildWorkers & Pages -> your project -> Settings -> Builds & deployments
Rollback deploymentWorkers & Pages -> your project -> Deployments -> … -> Rollback
View build logsWorkers & Pages -> your project -> Deployments -> click deployment
DNS managementYour domain -> DNS -> Records
SSL settingsYour domain -> SSL/TLS -> Overview