<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

		<title>Deploying Your Dumb Ideas with Dokku</title>

		<link rel="stylesheet" href="dist/reset.css">
		<link rel="stylesheet" href="dist/reveal.css">
		<link rel="stylesheet" href="dist/theme/black.css">

		<!-- Theme used for syntax highlighted code -->
		<link rel="stylesheet" href="plugin/highlight/monokai.css">
	</head>
	<body>
		<div class="reveal">
			<div class="slides">
			<!-- Introduction -->
				<section>
					<h1>Deploying</h1>
					<h3 class="fragment">Your Dumb Ideas</h3>
					<h3 class="fragment">with Dokku</h3>
				</section>

				<section>
					<h2>What is Deploying?</h2>

					<aside class="notes">This is mostly for web applications and websites</asides>
				</section>

				<section>
					<div>Publishing an application to be used.</div>
				</section>

			<!-- My history of deploying shit -->
				<section>
					<h2>A Brief History of Deploying</h2>
				</section>

				<section>
					<h2>Shared Web Hosting</h2>
					<div class="fragment">
						<img src="images/cpanel-logo.png" />
					</div>

					<aside class="notes">cPanel had a file manager you could upload your PHP files to!</aside>
				</section>

				<section>
					<div>
						<img src="images/cPanel-Interface.jpg" />
					</div>
				</section>

				<section>
					<h2>FTP</h2>
					<div class="fragment">
						<img src="images/filezilla-screenshot.webp" />
					</div>

					<aside class="notes">Then we evolve. Connect to your cPanel instance with FTP!</aside>
				</section>

				<section>
					<h2>More Advanced Shared Hosting</h2>
					<div class="fragment">
						<img src="images/WHM_orange_RGB.png" />
					</div>

					<aside class="notes">Small mention of WHM and managing many installations of cPanel!</aside>
				</section>

				<section>
					<h2>Git</h2>
					<ol>
						<li class="fragment"><code>$ ssh root@domain</code></li>
						<li class="fragment"><code>$ cd /usr/var/www</code></li>
						<li class="fragment"><code>$ git pull</code></li>
					</ol>

					<aside class="notes">I have never actually used Github professionally, oddly enough.</aside>
				</section>

				<section>
					<h2>Modern Build &amp; Deployment Systems</h2>
				</section>

				<section>
					<h2>AWS</h2>
				</section>

				<!-- Talk about Virtual Machines, Containers, K8s,
					 Talk about Jenkins, Ansible, GitHub Actions,
					 Bitbucket Pipelines, Terraform, Packer -->

				<section>
					<h2>Deployment as a Service</h2>
					<ul>
						<li>Heroku</li>
						<li>Vercel</li>
					</ul>
				</section>

				<section>
					<h2>Dokku</h2>
					<h3><em>(finally)</em></h3>
				</section>

				<section>
					<h2 class="fragment" data-transition="fade-in">But first...</h2>
				</section>

				<!-- Set up the VPS, set up namesavers, set the DNS records -->

				<section>
					<h2>VPS</h2>
					<ul>
						<li>Easiest way to get a public IP</li>
						<li>Cheap, modest servers, running Linux (<em>Debian</em>)
							<ul>
								<li>Linode</li>
								<li>DigitalOcean</li>
							</ul>
						</li>
						<li>Root access!</li>
					</ul>

					<aside class="notes">Virtual Private Servers, super easy for getting off the ground quickly</aside>
				</section>

				<section>
					<h2>Domains</h2>
					<ul>
						<li>Buy a domain</li>
						<li>Update the Nameservers</li>
						<li>Add <strong>A Record</strong> for the IP to the VPS</li>
					</ul>
				</section>

				<section>
					<h2>Dokku</h2>
					<ul>
						<li class="fragment">Open Source, Self-Hosted, Platform as a Service</li>
						<li class="fragment">Your very own Heroku</li>
					</ul>

					<aside class="notes">I have never used Heroku</aside>
				</section>

				<section>
					<div class="fragment" data-transition="fade-in fade-out"><em>I have never used Heroku...</em></div>
				</section>

				<section>
					<h2>Set Up</h2>
					<ul>
						<li>Install Dokku on VPS</li>
						<li>Setting up Domains</li>
						<li>Set up Dokku remote in your Git repo</li>
						<li>Have a global <code>Dockerfile</code> in your code</li>
						<li><code>$ git push -u dokku main</code></li>
					</ul>
				</section>

				<section>
					<blockquote>Buildpacks are responsible for transforming deployed code into a slug, which can then be executed on a dyno.</blockquote>
					<div class="fragment" data-transition="fade-in">That feels made up.</div>
				</section>

				<section>
					<h2>Real Life Example</h2>

					<aside class="notes">Show deploying the chat application.</aside>
				</section>
			</div>
		</div>

		<script src="dist/reveal.js"></script>
		<script src="plugin/notes/notes.js"></script>
		<script src="plugin/markdown/markdown.js"></script>
		<script src="plugin/highlight/highlight.js"></script>
		<script>
			// More info about initialization & config:
			// - https://revealjs.com/initialization/
			// - https://revealjs.com/config/
			Reveal.initialize({
				hash: true,

				// Learn about plugins: https://revealjs.com/plugins/
				plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ]
			});
		</script>
	</body>
</html>