HTTPS & Subdomains
Since weβre going to start using cross-subdomain authentication itβs pretty important that we can test both https://app.cal.localhost
and https://cal.localhost
locally. This is a quick guide on how can we achieve this setup locally for development purposes.
Prerequisites
Caddy Server
Dnsmasq
Install Dnsmasq
brew install dnsmasq
Configure Dnsmasq to resolve *.localhost domains
First letβs check where our brew installation config files are:
$ brew --prefix
/opt/homebrew
In my case it lives at /opt/homebrew/etc/dnsmasq.conf
# Route all *.localhost addresses to localhost
address=/localhost/127.0.0.1
# Don't read /etc/resolv.conf or any other configuration files.
no-resolv
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
Run Dnsmasq now and anytime we restart the system
sudo brew services start dnsmasq
Make macOS use our local DNS server (Dnsmasq) for .localhost addresses
Create the following file at /etc/resolver/localhost
:
nameserver 127.0.0.1
With that, you can go to subdomain.localhost
in your browser and it will point to localhost
. So if your app is running on port 3000
, simply go to subdomain.localhost:3000
.
But what if you're looking for the following setup?
cal.localhost -> localhost:3001
app.cal.localhost -> localhost:3000
This we can solve with Caddy which is a super-awesome simple HTTP server!
Install Caddy
brew install caddy
Configure Caddy
In my case (because my brew --prefix
is /opt/homebrew
), my global Caddyfile is at /opt/homebrew/etc/Caddyfile
. This file we can setup to act as a simple reverse proxy for our individual apps running on different ports:
https://cal.localhost {
reverse_proxy localhost:3001
}
https://app.cal.localhost {
reverse_proxy localhost:3000
}
Run Caddy now and every time your system restarts
brew services start caddy
That's it! If you change your Caddyfile, you will need to brew services restart caddy
.
Setup our your environment variables
NEXTAUTH_URL='https://app.cal.localhost'
NEXT_PUBLIC_WEBAPP_URL='https://app.cal.localhost'
NEXT_PUBLIC_WEBSITE_URL='https://cal.localhost'
NODE_TLS_REJECT_UNAUTHORIZED=0 # Needed so HTTPS doesn't complain locally
Run website and web app at the same time
yarn turbo run dev --scope="@calcom/web" --scope="@calcom/website"
Go to the website or web app domain
You should be able to go to https://app.cal.localhost
and https://cal.localhost
successfully π
Thanks to Max 's article Local subdomains on macOS with Dnsmasq and Caddy for making it easy to get started with Dnsmasq.
Last updated
Was this helpful?