++djangohosting

This commit is contained in:
Nico Schottelius 2020-01-08 19:35:41 +01:00
parent 2b9240fe1e
commit e865eb9002
3 changed files with 170 additions and 6 deletions

View file

@ -25,21 +25,38 @@ feature3_text: Because our Django hosting runs inside
[Data Center Light](/u/projects/data-center-light), you can run your
application with a good conscience and without emitting extra carbon.
---
content1_text:
## Development flow
The below diagram gives an overview of a typical development flow with
our Django hosting:
---
content1_image: djangohosting.svg
---
description2:
## How it works
The below diagram gives an overview of how our Django hosting is
structured:
## Components
![](djangohosting.png)
Our Django hosting consists of 1-2 virtual machines and an optional
backup. Our customers often start with a development system
## Development
We strongly recommend to develop Django (like any other application)
with a version control system, even if you are just a single
developer. You can even use the [ungleich code
repository](https://code.ungleich.ch) for free
(you only need to [register an account] create an account
on
(you only need to [register an account](https://account.ungleich.ch)).
## Pricing
* Setup fee is 35 CHF
* Monthly fee is 20 CHF + price of the VM
* Typical development VM: 1 cores, 2 GB RAM, 10 GB SSD
* Typical small prod VM: 2 cores, 4 GB RAM, 20 GB SSD
* Typical default prod VM: 4 cores, 8 GB RAM, 50 GB SSD
* All VMs can be extended with extra HDD space

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.42.3 (0)
-->
<!-- Title: G Pages: 1 -->
<svg width="760pt" height="443pt"
viewBox="0.00 0.00 760.00 443.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 439)">
<title>G</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-439 756,-439 756,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_local</title>
<polygon fill="none" stroke="black" points="8,-281 8,-427 400,-427 400,-281 8,-281"/>
</g>
<g id="clust2" class="cluster">
<title>cluster_production_datacenter</title>
<polygon fill="none" stroke="black" points="109,-8 109,-248 642,-248 642,-8 109,-8"/>
<text text-anchor="middle" x="375.5" y="-232.8" font-family="Times,serif" font-size="14.00">First data center</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_production</title>
<polygon fill="none" stroke="black" points="117,-16 117,-217 459,-217 459,-16 117,-16"/>
<text text-anchor="middle" x="288" y="-201.8" font-family="Times,serif" font-size="14.00">Production environment</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_staging</title>
<polygon fill="none" stroke="black" points="467,-17 467,-92 634,-92 634,-17 467,-17"/>
<text text-anchor="middle" x="550.5" y="-76.8" font-family="Times,serif" font-size="14.00">Staging environment</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_offsite</title>
<polygon fill="none" stroke="black" points="408,-281 408,-356 708,-356 708,-281 408,-281"/>
<text text-anchor="middle" x="558" y="-340.8" font-family="Times,serif" font-size="14.00">Second data center</text>
</g>
<!-- editor -->
<g id="node1" class="node">
<title>editor</title>
<polygon fill="none" stroke="black" points="247.5,-419 146.5,-419 146.5,-383 247.5,-383 247.5,-419"/>
<text text-anchor="middle" x="197" y="-397.3" font-family="Times,serif" font-size="14.00">Local editor</text>
</g>
<!-- git -->
<g id="node2" class="node">
<title>git</title>
<polygon fill="none" stroke="black" points="182,-325 16,-325 16,-289 182,-289 182,-325"/>
<text text-anchor="middle" x="99" y="-303.3" font-family="Times,serif" font-size="14.00">Local version control</text>
</g>
<!-- editor&#45;&gt;git -->
<g id="edge1" class="edge">
<title>editor&#45;&gt;git</title>
<path fill="none" stroke="black" d="M178.57,-382.7C163.37,-368.43 141.65,-348.04 124.74,-332.16"/>
<polygon fill="black" stroke="black" points="127.04,-329.52 117.35,-325.23 122.25,-334.62 127.04,-329.52"/>
</g>
<!-- localweb -->
<g id="node3" class="node">
<title>localweb</title>
<polygon fill="none" stroke="black" points="391.5,-325 200.5,-325 200.5,-289 391.5,-289 391.5,-325"/>
<text text-anchor="middle" x="296" y="-303.3" font-family="Times,serif" font-size="14.00">Development webserver</text>
</g>
<!-- editor&#45;&gt;localweb -->
<g id="edge3" class="edge">
<title>editor&#45;&gt;localweb</title>
<path fill="none" stroke="black" d="M215.62,-382.7C230.97,-368.43 252.91,-348.04 270,-332.16"/>
<polygon fill="black" stroke="black" points="272.52,-334.6 277.46,-325.23 267.75,-329.47 272.52,-334.6"/>
</g>
<!-- repo -->
<g id="node5" class="node">
<title>repo</title>
<polygon fill="none" stroke="black" points="256.5,-186 125.5,-186 125.5,-148 256.5,-148 256.5,-186"/>
<text text-anchor="middle" x="191" y="-170.8" font-family="Times,serif" font-size="14.00">Code repository</text>
<text text-anchor="middle" x="191" y="-155.8" font-family="Times,serif" font-size="14.00">(f.i. git)</text>
</g>
<!-- git&#45;&gt;repo -->
<g id="edge2" class="edge">
<title>git&#45;&gt;repo</title>
<path fill="none" stroke="black" d="M110.47,-288.8C126.2,-265.2 154.64,-222.54 173.16,-194.75"/>
<polygon fill="black" stroke="black" points="176.17,-196.56 178.8,-186.3 170.34,-192.67 176.17,-196.56"/>
</g>
<!-- prodvm -->
<g id="node4" class="node">
<title>prodvm</title>
<polygon fill="none" stroke="black" points="398,-62 228,-62 228,-24 398,-24 398,-62"/>
<text text-anchor="middle" x="313" y="-46.8" font-family="Times,serif" font-size="14.00">Production Server</text>
<text text-anchor="middle" x="313" y="-31.8" font-family="Times,serif" font-size="14.00">uwsgi,nginx,postgres</text>
</g>
<!-- backupvm -->
<g id="node8" class="node">
<title>backupvm</title>
<polygon fill="none" stroke="black" points="699.5,-325 580.5,-325 580.5,-289 699.5,-289 699.5,-325"/>
<text text-anchor="middle" x="640" y="-303.3" font-family="Times,serif" font-size="14.00">Backup server</text>
</g>
<!-- prodvm&#45;&gt;backupvm -->
<g id="edge6" class="edge">
<title>prodvm&#45;&gt;backupvm</title>
<path fill="none" stroke="black" d="M358.83,-62.1C388.13,-72.81 427.22,-85.51 463,-92 480.84,-95.24 613.06,-87.3 626,-100 673.73,-146.84 659.33,-234.8 648.01,-279.08"/>
<polygon fill="black" stroke="black" points="644.6,-278.28 645.38,-288.84 651.36,-280.1 644.6,-278.28"/>
<text text-anchor="middle" x="705.5" y="-163.3" font-family="Times,serif" font-size="14.00">Daily backup</text>
</g>
<!-- repo&#45;&gt;prodvm -->
<g id="edge4" class="edge">
<title>repo&#45;&gt;prodvm</title>
<path fill="none" stroke="black" d="M167.56,-147.99C162.46,-142.8 157.77,-136.7 155,-130 149.9,-117.68 147.31,-110.89 155,-100 169.9,-78.91 193.45,-65.71 217.86,-57.47"/>
<polygon fill="black" stroke="black" points="219.1,-60.75 227.61,-54.44 217.03,-54.07 219.1,-60.75"/>
<text text-anchor="middle" x="228.5" y="-111.3" font-family="Times,serif" font-size="14.00">Deploy after staging</text>
</g>
<!-- stagingvm -->
<g id="node7" class="node">
<title>stagingvm</title>
<polygon fill="none" stroke="black" points="600.5,-61 475.5,-61 475.5,-25 600.5,-25 600.5,-61"/>
<text text-anchor="middle" x="538" y="-39.3" font-family="Times,serif" font-size="14.00">Staging Server</text>
</g>
<!-- repo&#45;&gt;stagingvm -->
<g id="edge5" class="edge">
<title>repo&#45;&gt;stagingvm</title>
<path fill="none" stroke="black" d="M256.74,-152.12C264.89,-150.62 273.12,-149.2 281,-148 356.55,-136.49 383.03,-162.91 452,-130 480.51,-116.4 505.08,-89.32 520.56,-69.16"/>
<polygon fill="black" stroke="black" points="523.47,-71.12 526.63,-61.01 517.85,-66.94 523.47,-71.12"/>
<text text-anchor="middle" x="567.5" y="-111.3" font-family="Times,serif" font-size="14.00">Pre prod deployment</text>
</g>
<!-- monitoring -->
<g id="node6" class="node">
<title>monitoring</title>
<polygon fill="none" stroke="black" points="436,-185 290,-185 290,-149 436,-149 436,-185"/>
<text text-anchor="middle" x="363" y="-163.3" font-family="Times,serif" font-size="14.00">Monitoring server</text>
</g>
<!-- monitoring&#45;&gt;prodvm -->
<g id="edge7" class="edge">
<title>monitoring&#45;&gt;prodvm</title>
<path fill="none" stroke="black" d="M330.58,-148.81C323.93,-143.69 317.81,-137.42 314,-130 304.96,-112.4 305.01,-89.98 307.16,-72.45"/>
<polygon fill="black" stroke="black" points="310.67,-72.66 308.71,-62.25 303.75,-71.61 310.67,-72.66"/>
<text text-anchor="middle" x="383" y="-118.8" font-family="Times,serif" font-size="14.00">Verify operation</text>
<text text-anchor="middle" x="383" y="-103.8" font-family="Times,serif" font-size="14.00">and alert on failure</text>
</g>
<!-- monitoringmonitor -->
<g id="node9" class="node">
<title>monitoringmonitor</title>
<polygon fill="none" stroke="black" points="562,-325 416,-325 416,-289 562,-289 562,-325"/>
<text text-anchor="middle" x="489" y="-303.3" font-family="Times,serif" font-size="14.00">Monitoring server</text>
</g>
<!-- monitoringmonitor&#45;&gt;monitoring -->
<g id="edge8" class="edge">
<title>monitoringmonitor&#45;&gt;monitoring</title>
<path fill="none" stroke="black" d="M427.45,-288.81C418.09,-284.17 409.18,-278.33 402,-271 381.78,-250.37 371.85,-218.21 367.1,-195.33"/>
<polygon fill="black" stroke="black" points="370.49,-194.42 365.21,-185.23 363.61,-195.7 370.49,-194.42"/>
<text text-anchor="middle" x="514" y="-259.8" font-family="Times,serif" font-size="14.00">Monitor the monitoring service</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB