Skip to content

Commit 4a48fc5

Browse files
author
Exploding Labs Bot
committed
Update site from docs source repo
1 parent 946cc3e commit 4a48fc5

File tree

3 files changed

+110
-102
lines changed

3 files changed

+110
-102
lines changed

β€Žsuperstack/advanced/index.htmlβ€Ž

Lines changed: 95 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
<div data-md-component="skip">
7575

7676

77-
<a href="#1-update-application" class="md-skip">
77+
<a href="#1-create-a-new-project" class="md-skip">
7878
Skip to content
7979
</a>
8080

@@ -376,27 +376,36 @@
376376
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
377377

378378
<li class="md-nav__item">
379-
<a href="#1-update-application" class="md-nav__link">
379+
<a href="#1-create-a-new-project" class="md-nav__link">
380380
<span class="md-ellipsis">
381-
1. Update Application
381+
1. Create a new project
382382
</span>
383383
</a>
384384

385385
</li>
386386

387387
<li class="md-nav__item">
388-
<a href="#1-add-a-traffic-switcher-proxy-service" class="md-nav__link">
388+
<a href="#2-update-the-application" class="md-nav__link">
389389
<span class="md-ellipsis">
390-
1. Add a traffic-switcher proxy service
390+
2. Update the Application
391391
</span>
392392
</a>
393393

394394
</li>
395395

396396
<li class="md-nav__item">
397-
<a href="#deploying" class="md-nav__link">
397+
<a href="#deploy-the-proxy" class="md-nav__link">
398398
<span class="md-ellipsis">
399-
Deploying
399+
Deploy the Proxy
400+
</span>
401+
</a>
402+
403+
</li>
404+
405+
<li class="md-nav__item">
406+
<a href="#deploy-the-app" class="md-nav__link">
407+
<span class="md-ellipsis">
408+
Deploy the app
400409
</span>
401410
</a>
402411

@@ -453,27 +462,36 @@
453462
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
454463

455464
<li class="md-nav__item">
456-
<a href="#1-update-application" class="md-nav__link">
465+
<a href="#1-create-a-new-project" class="md-nav__link">
457466
<span class="md-ellipsis">
458-
1. Update Application
467+
1. Create a new project
459468
</span>
460469
</a>
461470

462471
</li>
463472

464473
<li class="md-nav__item">
465-
<a href="#1-add-a-traffic-switcher-proxy-service" class="md-nav__link">
474+
<a href="#2-update-the-application" class="md-nav__link">
466475
<span class="md-ellipsis">
467-
1. Add a traffic-switcher proxy service
476+
2. Update the Application
468477
</span>
469478
</a>
470479

471480
</li>
472481

473482
<li class="md-nav__item">
474-
<a href="#deploying" class="md-nav__link">
483+
<a href="#deploy-the-proxy" class="md-nav__link">
475484
<span class="md-ellipsis">
476-
Deploying
485+
Deploy the Proxy
486+
</span>
487+
</a>
488+
489+
</li>
490+
491+
<li class="md-nav__item">
492+
<a href="#deploy-the-app" class="md-nav__link">
493+
<span class="md-ellipsis">
494+
Deploy the app
477495
</span>
478496
</a>
479497

@@ -518,44 +536,39 @@
518536

519537
<h1>Advanced Deployments</h1>
520538

521-
<p>A new <code>proxy</code> service is added to direct traffic.</p>
539+
<p>The standard SuperStack replaces the stack in place.</p>
540+
<ul>
541+
<li>There's some downtime while upgrading.</li>
542+
<li>You can't test one app while another is live (blue/green)</li>
543+
<li>Once an app is upgrade, you can't rollback.</li>
544+
</ul>
545+
<p>Once your app is ready for production, consider adding a traffic-switcher in
546+
front of your app.</p>
547+
<p>How it works:</p>
548+
<ul>
549+
<li>We stop exposing ports in the <code>app</code> project.</li>
550+
<li>A new <code>proxy</code> project is added, with ports open.</li>
551+
<li>It's purpose is to direct traffic to the right application.</li>
552+
<li>Apps are deployed completely separate to the live one.</li>
553+
</ul>
554+
<p>This way, environments are <em>ephemeral, immutable and idempotent</em>.</p>
555+
<p>The directory structure looks like:</p>
522556
<div class="highlight"><pre><span></span><code>proxy/
523557
compose.yaml
524558
app/
525-
...
559+
a/
560+
compose.yaml
561+
.env
562+
b/
563+
compose.yaml
564+
.env
526565
</code></pre></div>
527-
<h2 id="1-update-application">1. Update Application</h2>
528-
<p>Remove the exposed ports, and connect to the proxy's network:</p>
529-
<p>```yaml title="app/compose.yaml" hl_lines="6-13,15-17"
530-
services:
531-
caddy:
532-
build:
533-
context: ./caddy
534-
environment:
535-
CADDY_SITE_ADDRESS: ":80"
536-
networks:
537-
default:
538-
# This alias allows the proxy to target this container, while still
539-
# allowing Docker to manage the container name
540-
proxy_default:
541-
aliases:
542-
- ${COMPOSE_PROJECT_NAME}_caddy</p>
543-
<p>networks:
544-
proxy_default:
545-
external: true
546-
<div class="highlight"><pre><span></span><code>**app/compose.override.yaml**
547-
548-
```yaml
549-
# Development overrides
550-
551-
services:
552-
caddy:
553-
volumes:
554-
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
555-
</code></pre></div></p>
556-
<h2 id="1-add-a-traffic-switcher-proxy-service">1. Add a traffic-switcher proxy service</h2>
557-
<p><strong>proxy/compose.yaml</strong></p>
558-
<div class="highlight"><pre><span></span><code><span class="nt">services</span><span class="p">:</span>
566+
<h2 id="1-create-a-new-project">1. Create a new project</h2>
567+
<p>From the root of the repository, create a new <code>proxy</code> project:</p>
568+
<div class="highlight"><pre><span></span><code>mkdir<span class="w"> </span>proxy
569+
</code></pre></div>
570+
<p>Add a compose file:</p>
571+
<div class="highlight"><span class="filename">proxy/compose.yaml</span><pre><span></span><code><span class="nt">services</span><span class="p">:</span>
559572
<span class="w"> </span><span class="nt">caddy</span><span class="p">:</span>
560573
<span class="w"> </span><span class="nt">build</span><span class="p">:</span>
561574
<span class="w"> </span><span class="nt">context</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./caddy</span>
@@ -569,10 +582,9 @@ <h2 id="1-add-a-traffic-switcher-proxy-service">1. Add a traffic-switcher proxy
569582

570583
<span class="nt">volumes</span><span class="p">:</span>
571584
<span class="w"> </span><span class="nt">caddy_data</span><span class="p">:</span>
572-
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">caddy-data</span>
585+
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">caddy-data</span><span class="w"> </span><span class="c1"># The proxy manages TLS, so give it a persistent volume for certificates</span>
573586
</code></pre></div>
574-
<p><strong>proxy/compose.override.yaml</strong></p>
575-
<div class="highlight"><pre><span></span><code><span class="c1"># Development overrides</span>
587+
<div class="highlight"><span class="filename">proxy/compose.override.yaml</span><pre><span></span><code><span class="c1"># Development overrides</span>
576588

577589
<span class="nt">services</span><span class="p">:</span>
578590
<span class="w"> </span><span class="nt">caddy</span><span class="p">:</span>
@@ -581,39 +593,49 @@ <h2 id="1-add-a-traffic-switcher-proxy-service">1. Add a traffic-switcher proxy
581593
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span>
582594
<span class="w"> </span><span class="nt">CADDY_SITE_ADDRESS</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">:80</span>
583595
</code></pre></div>
584-
<p><strong>proxy/caddy/Caddyfile</strong></p>
585-
<div class="highlight"><pre><span></span><code><span class="p p-Indicator">{</span><span class="nv">$CADDY_SITE_ADDRESS</span><span class="p p-Indicator">}</span>
596+
<div class="highlight"><span class="filename">proxy/caddy/Caddyfile</span><pre><span></span><code><span class="p p-Indicator">{</span><span class="nv">$CADDY_SITE_ADDRESS</span><span class="p p-Indicator">}</span>
586597

587598
<span class="l l-Scalar l-Scalar-Plain">reverse_proxy app_caddy:80</span>
588599
</code></pre></div>
589-
<h2 id="deploying">Deploying</h2>
590-
<p>The proxy is deployed manually, and app infra files are created in a new
591-
directory every time.</p>
592-
<div class="highlight"><pre><span></span><code>proxy/
593-
compose.yaml
594-
app/
595-
a/
596-
compose.yaml
597-
.env
598-
b/
599-
compose.yaml
600-
.env
601-
</code></pre></div>
602-
<p>the Proxy (Manual Step)</p>
600+
<h2 id="2-update-the-application">2. Update the Application</h2>
601+
<p>Remove the app's exposed ports, and connect to the proxy's network:</p>
602+
<p>```yaml title="app/compose.yaml" hl_lines="6-13,15-17"
603+
services:
604+
caddy:
605+
build:
606+
context: ./caddy
607+
environment:
608+
CADDY_SITE_ADDRESS: ":80"
609+
networks:
610+
default:
611+
# This alias allows the proxy to target this container, while still
612+
# allowing Docker to manage the container name
613+
proxy_default:
614+
aliases:
615+
- ${COMPOSE_PROJECT_NAME}_caddy</p>
616+
<p>networks:
617+
proxy_default:
618+
external: true
619+
<div class="highlight"><pre><span></span><code>```yaml title=&quot;app/compose.override.yaml&quot;
620+
# Development overrides
621+
622+
services:
623+
caddy:
624+
volumes:
625+
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
626+
</code></pre></div></p>
627+
<h2 id="deploy-the-proxy">Deploy the Proxy</h2>
628+
<p>The proxy is only deployed once.</p>
603629
<p>On the server, create a proxy directory:</p>
604630
<div class="highlight"><pre><span></span><code>mkdir<span class="w"> </span>proxy
605631
</code></pre></div>
606632
<p>Back on local, copy your Compose file to the server:</p>
607633
<div class="highlight"><pre><span></span><code>scp<span class="w"> </span>proxy/compose.yaml<span class="w"> </span>app-backend:proxy/
608634
</code></pre></div>
609635
<blockquote>
610-
<p>Optionally, you might point a second hostname to an idle stack for testing.</p>
636+
<p>You might also point a second hostname to an idle stack for testing.</p>
611637
</blockquote>
612-
<p>The proxy manages TLS, so give it a persistent volume for certificates:</p>
613-
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>volume<span class="w"> </span>create<span class="w"> </span>caddy_data
614-
</code></pre></div>
615-
<p>Start the proxy, attaching it to both networks – this requires both stacks to
616-
be up first, so the networks exist:</p>
638+
<h2 id="deploy-the-app">Deploy the app</h2>
617639
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d
618640
</code></pre></div>
619641
<h2 id="flip-traffic">Flip traffic</h2>
@@ -622,8 +644,7 @@ <h2 id="flip-traffic">Flip traffic</h2>
622644
<span class="w"> </span>http://localhost:2019/config/apps/http/servers/srv0/routes/0/handle/0/upstreams/0/dial
623645
</code></pre></div>
624646
<h2 id="github-actions-workflow">Github Actions Workflow</h2>
625-
<p><strong>.github/workflows/ci.yaml</strong></p>
626-
<div class="highlight"><pre><span></span><code><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Deploy</span>
647+
<div class="highlight"><span class="filename">.github/workflows/ci.yaml</span><pre><span></span><code><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Deploy</span>
627648

628649
<span class="nt">on</span><span class="p">:</span>
629650
<span class="w"> </span><span class="nt">push</span><span class="p">:</span>

β€Žsuperstack/deploy/index.htmlβ€Ž

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -375,27 +375,21 @@
375375
</span>
376376
</a>
377377

378-
<nav class="md-nav" aria-label="πŸ“¦ 2. Copy to Server">
379-
<ul class="md-nav__list">
380-
381-
<li class="md-nav__item">
378+
</li>
379+
380+
<li class="md-nav__item">
382381
<a href="#3-set-secrets" class="md-nav__link">
383382
<span class="md-ellipsis">
384383
3. Set Secrets
385384
</span>
386385
</a>
387386

388-
</li>
389-
390-
</ul>
391-
</nav>
392-
393387
</li>
394388

395389
<li class="md-nav__item">
396-
<a href="#launch-the-app" class="md-nav__link">
390+
<a href="#3-launch-the-app" class="md-nav__link">
397391
<span class="md-ellipsis">
398-
πŸš€ Launch the App
392+
πŸš€ 3. Launch the App
399393
</span>
400394
</a>
401395

@@ -482,27 +476,21 @@
482476
</span>
483477
</a>
484478

485-
<nav class="md-nav" aria-label="πŸ“¦ 2. Copy to Server">
486-
<ul class="md-nav__list">
487-
488-
<li class="md-nav__item">
479+
</li>
480+
481+
<li class="md-nav__item">
489482
<a href="#3-set-secrets" class="md-nav__link">
490483
<span class="md-ellipsis">
491484
3. Set Secrets
492485
</span>
493486
</a>
494487

495-
</li>
496-
497-
</ul>
498-
</nav>
499-
500488
</li>
501489

502490
<li class="md-nav__item">
503-
<a href="#launch-the-app" class="md-nav__link">
491+
<a href="#3-launch-the-app" class="md-nav__link">
504492
<span class="md-ellipsis">
505-
πŸš€ Launch the App
493+
πŸš€ 3. Launch the App
506494
</span>
507495
</a>
508496

@@ -556,26 +544,25 @@ <h2 id="2-copy-to-server">πŸ“¦ 2. Copy to Server</h2>
556544
<p>Copy your <code>compose.yaml</code> to the remote host:</p>
557545
<div class="highlight"><pre><span></span><code>scp<span class="w"> </span>compose.yaml<span class="w"> </span>youruser@yourserver:
558546
</code></pre></div>
559-
<h3 id="3-set-secrets">3. Set Secrets</h3>
547+
<h2 id="3-set-secrets">3. Set Secrets</h2>
560548
<p>Your app will need credentials such as database passwords or API keys. Choose
561549
one of these approaches:</p>
562550
<ol>
563551
<li><strong><code>.env</code> file</strong> β€” simply place a <code>.env</code> file alongside your <code>compose.yaml</code>.
564552
Be sure to <code>chmod 600 .env</code>.</li>
565-
<li><strong>Environment variables</strong> β€” pass them directly to the command line.</li>
553+
<li><strong>Environment variables</strong> β€” pass secrets directly to the command line.</li>
566554
<li><strong>CI/CD injection</strong> β€” good for automated pipelines.</li>
567555
</ol>
568-
<h2 id="launch-the-app">πŸš€ Launch the App</h2>
556+
<h2 id="3-launch-the-app">πŸš€ 3. Launch the App</h2>
569557
<p>Start the application on the server:</p>
570558
<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>pull
571559
docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d
572560
</code></pre></div>
573561
<p>Your backend is now live. πŸš€</p>
574562
<hr />
575563
<h2 id="next-steps">🧭 Next Steps</h2>
576-
<p>This setup replaces the stack in place.</p>
577564
<p>If you want zero-downtime deployments, rollback support, or blue-green testing,
578-
continue reading to <a href="../advanced/">Advanced Deployments</a>.</p>
565+
continue to <a href="../advanced/">Advanced Deployments</a>.</p>
579566

580567

581568

0 commit comments

Comments
Β (0)