<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Production deployment on back(d)</title><link>https://fernandezvara.github.io/backd/docs/operate/production/</link><description>Recent content in Production deployment on back(d)</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://fernandezvara.github.io/backd/docs/operate/production/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker Compose</title><link>https://fernandezvara.github.io/backd/docs/operate/production/docker-compose/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fernandezvara.github.io/backd/docs/operate/production/docker-compose/</guid><description>&lt;p&gt;&lt;code&gt;backd&lt;/code&gt; deliberately leaves some protections to the infrastructure around it: TLS, request rate limits and sign-up spam, body size limits at the edge, and database security. The repository ships a reference deployment that puts all of these in place. It lives in &lt;a href="https://github.com/fernandezvara/backd/tree/main/deploy/production"&gt;&lt;code&gt;deploy/production/&lt;/code&gt;&lt;/a&gt;, and CI tests it end to end on every change.&lt;/p&gt;
&lt;p&gt;The protections themselves are the same on every platform (&lt;a href="../"&gt;Production deployment&lt;/a&gt;); this page is how Docker Compose does them. For a cluster, see &lt;a href="../kubernetes/"&gt;Kubernetes&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Kubernetes</title><link>https://fernandezvara.github.io/backd/docs/operate/production/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://fernandezvara.github.io/backd/docs/operate/production/kubernetes/</guid><description>&lt;p&gt;&lt;code&gt;deploy/kubernetes/backd&lt;/code&gt; is a Helm chart for &lt;code&gt;backd&lt;/code&gt; on any Kubernetes cluster; &lt;a href="../cloud-providers/digitalocean/"&gt;DigitalOcean&lt;/a&gt; shows the whole path on one provider. The chart creates no infrastructure and no secret: the objects it reads (Secrets and a ConfigMap) are made by whatever builds the cluster, which for DigitalOcean is the Terraform in &lt;code&gt;deploy/terraform/digitalocean&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="the-workloads"&gt;The workloads&lt;a class="hd-anchor" href="#the-workloads" aria-hidden="true"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;It maps the &lt;a href="../"&gt;production reference&lt;/a&gt; one to one:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Deployment&lt;/th&gt;
 &lt;th&gt;Image&lt;/th&gt;
 &lt;th&gt;What it does&lt;/th&gt;
 &lt;th&gt;Reads the configuration&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;backd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;your configuration image&lt;/td&gt;
 &lt;td&gt;the public API (no admin API, no change stream)&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;backd-realtime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;your configuration image&lt;/td&gt;
 &lt;td&gt;the only pods that read the change stream (realtime) and hold the trigger lease&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;backd-admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;your configuration image&lt;/td&gt;
 &lt;td&gt;the admin API and interface&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;worker&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;your configuration image&lt;/td&gt;
 &lt;td&gt;&lt;a href="../../../build/functions/jobs/"&gt;async jobs&lt;/a&gt; and cron&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;executor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/fernandezvara/backd-executor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;one Deno process per function call&lt;/td&gt;
 &lt;td&gt;no&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;egress&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/fernandezvara/backd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;the only way out for functions and push&lt;/td&gt;
 &lt;td&gt;no&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;backd-provision&lt;/code&gt; (Job)&lt;/td&gt;
 &lt;td&gt;your configuration image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;backd-server provision&lt;/code&gt;, before an install, an upgrade or a rollback&lt;/td&gt;
 &lt;td&gt;yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each is &lt;code&gt;replicas.&amp;lt;name&amp;gt;&lt;/code&gt; in the values, and &lt;code&gt;replicas.default&lt;/code&gt; is used by every component without a number of its own. A component with more than one pod gets a PodDisruptionBudget. Use one namespace per installation: the Services have fixed names.&lt;/p&gt;</description></item></channel></rss>