Docker Self-Hosting
Deploy Tymeslot with Docker Compose on any VPS or home server. Includes reverse proxy setup, file upload volumes, and WebSocket configuration for LiveView.
Route Tymeslot's outbound HTTP traffic through a corporate proxy or firewall.
Updated 2 March 2026
You will need:
By the end of this guide, Tymeslot's outbound HTTP and HTTPS requests will go through your corporate proxy.
This guide is for corporate or restricted networks where policy blocks servers from reaching the internet directly. Most self-hosted deployments on a home server, VPS or cloud VM do not need a proxy; if your server can reach the internet directly, skip this guide.
Tymeslot makes outbound connections to the following external services. If one is unreachable, the feature that depends on it fails, silently or with a connection error:
Set the proxy with environment variables. Tymeslot reads both uppercase and lowercase names; if both are set, uppercase wins:
# HTTPS proxy: outbound API calls (OAuth, calendars, video, reCAPTCHA)
HTTPS_PROXY=http://proxy.corp.example.com:3128
# HTTP proxy: plain-HTTP requests (rare, but some networks need it)
HTTP_PROXY=http://proxy.corp.example.com:3128
# Bypass list: hosts that must not go through the proxy
NO_PROXY=localhost,127.0.0.1,::1
Tymeslot reads these variables only at startup, so restart it after setting them. On boot, the log line
HTTP/HTTPS proxy configured for outbound requests
lists the proxies and bypass list it picked up. Email is not sent through the proxy: SMTP and the email API providers (Postmark, SendGrid, Mailgun, AhaSend) connect directly, so your firewall must let Tymeslot reach your mail provider.
If your proxy requires credentials, put them in the proxy URL using standard URL syntax:
HTTPS_PROXY=http://username:password@proxy.corp.example.com:3128
URL-encode any special characters in the password. For example, a password containing
@
must be written as %40.
docker inspect) can read environment variables. Use a dedicated service account with a long random password and rotate it regularly. If your proxy supports IP-based authentication, prefer it: then the URL needs no credentials at all.
NO_PROXY
is a comma-separated list of hosts that bypass the proxy. It accepts these patterns, plus a lone
*
to bypass the proxy for every host:
internal.example.com
Exact hostname match
Only this specific hostname bypasses the proxy. Subdomains do not match.
*.internal.example.com
Wildcard subdomain match
internal.example.com
and any of its subdomains bypass the proxy.
10.0.0.0/8
CIDR IP range
Any IP address in this range bypasses the proxy. It matches URLs that use an IP address; a hostname is not resolved to check it.
An example combining all three:
NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16,*.internal.example.com
localhost, 127.0.0.1, and
::1
in NO_PROXY. Without them, a request to a service on the same machine, such as a CalDAV or video server on localhost, is sent to the proxy, which cannot reach your server's loopback interface.
Some corporate proxies inspect TLS: they terminate the HTTPS connection, inspect the traffic, then open a new TLS connection to the destination and present a certificate signed by their own CA. If your proxy does this, Tymeslot rejects every HTTPS connection, because it does not trust that CA.
The symptom is certificate verification errors in the Tymeslot logs even though the proxy URL is correct. Tymeslot trusts the system CA bundle at
/etc/ssl/certs/ca-certificates.crt
and ignores SSL_CERT_FILE, so add your corporate CA to that bundle and mount the result over it:
# Copy the image's CA bundle and append your corporate CA (PEM format)
docker cp tymeslot:/etc/ssl/certs/ca-certificates.crt ./ca-bundle.crt
cat corporate-ca.crt >> ca-bundle.crt
# docker-compose.yml snippet
services:
tymeslot:
volumes:
- ./ca-bundle.crt:/etc/ssl/certs/ca-certificates.crt:ro
Your network or security team can provide the CA certificate, usually as a
.crt
or .pem
file. The mounted bundle replaces the image's own, so rebuild it after image updates to keep the public CAs current.
Before restarting Tymeslot with the new proxy settings, check that the proxy accepts connections from your Docker network. The Tymeslot image does not include curl, so run it in a throwaway container on the network the bundled Compose file creates:
docker run --rm --network tymeslot_network curlimages/curl \
-sv -x http://proxy.corp.example.com:3128 https://www.google.com 2>&1 | head -30
Expected result: the output includes
CONNECT www.google.com:443
followed by
HTTP/1.1 200 Connection established
and then Google's own response (a
200
or a redirect). That confirms the proxy tunnel is open and HTTPS traffic flows through it.
Then check a real Tymeslot flow: restart the application with the proxy variables set and connect a Google or Outlook calendar. If the connection completes and the calendar's events appear, Tymeslot is reaching the provider's API through the proxy.
curl reports "CONNECT tunnel failed" or connection refused
The proxy is blocking the outbound connection. Ask your network team to allow outbound HTTPS on port 443 to the API domains Tymeslot uses, such as www.googleapis.com, oauth2.googleapis.com, login.microsoftonline.com and graph.microsoft.com. Some proxies need an allowlist entry for each destination domain.
Integrations on your own network fail after setting the proxy
Check that
NO_PROXY
includes localhost,
127.0.0.1
and the hostnames or IP ranges of your internal CalDAV, Nextcloud or MiroTalk servers. Without them, those requests go to the proxy, which usually cannot reach internal hosts.
SSL certificate verification errors in logs despite a working proxy
Your proxy inspects TLS. Follow the "TLS-Inspecting Proxies" section above to add your corporate CA to the container's trusted bundle.
Proxy authentication fails with valid credentials
Special characters in the password must be URL-encoded in the proxy URL. For example,
@
becomes %40,
#
becomes %23, and
%
itself becomes %25.
Tymeslot reads both. It checks uppercase first (HTTPS_PROXY, HTTP_PROXY, NO_PROXY) and falls back to lowercase (https_proxy, http_proxy, no_proxy) if the uppercase form is absent. Use uppercase: it is the usual form, and other tools differ in which casing they honour.
In practice,
HTTPS_PROXY
is the only one you must set, because nearly all of Tymeslot's outbound API calls (Google, Microsoft, GitHub, Zoom, reCAPTCHA) use HTTPS. Set
HTTP_PROXY
as well if any integration you connect uses a plain
http://
URL, such as a CalDAV server outside your network. Most deployments work with
HTTPS_PROXY
alone.
At minimum: localhost,127.0.0.1,::1, so requests to services on the same machine never go to the proxy.
Then add the hostnames of internal services Tymeslot calls over HTTP, such as a CalDAV or Nextcloud server (for example
nextcloud
or *.internal.example.com), and any private CIDR ranges you reach by IP address. The database connection never uses the proxy, so it needs no entry. A typical value looks like:
localhost,127.0.0.1,::1,nextcloud,10.0.0.0/8,192.168.0.0/16
No. The proxy variables control only outbound HTTP requests that Tymeslot's server makes to other services, such as Google, Microsoft and GitHub. WebSocket connections that browsers open to Tymeslot are inbound and are handled by your reverse proxy (Nginx, Caddy, Traefik and so on), not by these variables.
Run the curl
test from the "Testing Proxy Connectivity" section above. A
CONNECT
line in the verbose output confirms the request tunnelled through the proxy.
Inside Tymeslot, check the startup log for
HTTP/HTTPS proxy configured for outbound requests
, which lists the proxies and bypass list in effect. If it says
Not configured
instead, the variables did not reach the application. Production builds log at info level, so individual requests do not log which proxy they used.
HTTPS_PROXY
is set to your corporate proxy URL
NO_PROXY
includes localhost, 127.0.0.1, and
::1
200 Connection established
followed by Google's response
Deploy Tymeslot with Docker Compose on any VPS or home server. Includes reverse proxy setup, file upload volumes, and WebSocket configuration for LiveView.
Install Tymeslot on Cloudron in minutes. PostgreSQL, SSL certificates, email relay, and automatic updates are all provisioned and managed for you.
Deploy Tymeslot to Railway with one click. PostgreSQL is provisioned and connected for you; add a signing secret and your email settings and your instance is live.