<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Karnavaara</title>
	<atom:link href="https://karnavaara.com/feed" rel="self" type="application/rss+xml" />
	<link>https://karnavaara.com/</link>
	<description>The Forested Hill of Insight</description>
	<lastBuildDate>Sat, 06 Sep 2025 20:41:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://karnavaara.com/wp-content/uploads/2023/10/cropped-Karnavaara-favicon-DarkGreen-32x32.png</url>
	<title>Karnavaara</title>
	<link>https://karnavaara.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>A Sphere and a Stellated Dodecahedron</title>
		<link>https://karnavaara.com/tree/a-sphere-and-a-stellated-dodecahedron</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 22:40:13 +0000</pubDate>
				<category><![CDATA[Tree]]></category>
		<category><![CDATA[inner-peace]]></category>
		<category><![CDATA[Mindset]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Visualization]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=2744</guid>

					<description><![CDATA[In your mind, mold abstract feelings into representations that are less abstract.]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote has-text-align-center has-medium-font-size is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">“If you train your mind and pay attention to it, it has the potential to be a sovereign playground for you that&#8217;s isolated, safe, private, and maybe all-powerful. You&#8217;re the only one who can set foot there and enjoy the freedom it gives you.”</p>
<cite>—Karnavaara</cite></blockquote>



<h2 class="wp-block-heading">Preface</h2>



<p class="wp-block-paragraph">The human mind has the potential to be a very powerful force but, unfortunately, I think that most of us don&#8217;t realize this. The ancient stoics realized this. For example, <a href="https://en.wikipedia.org/wiki/Marcus_Aurelius">Marcus Aurelius</a>, <a href="https://en.wikipedia.org/wiki/Epictetus">Epictetus</a> and <a href="https://en.wikipedia.org/wiki/Seneca_the_Younger">Seneca</a> all spoke about the power of the human mind:</p>



<ul class="wp-block-list">
<li>&#8220;<em>It’s not what happens to you, but how you react to it that matters.</em>&#8221; – Epictetus</li>



<li>&#8220;<em>A man is as unhappy as he has convinced himself he is.</em>&#8221; – Seneca</li>



<li><em>&#8220;External things are not the problem. It’s your assessment of them. Which you can erase right now. If the problem is something in your own character, who’s stopping you from setting your mind straight?</em>&#8221; – Marcus Aurelius</li>
</ul>



<p class="wp-block-paragraph">This tree isn&#8217;t going to delve deep into the human mind because that&#8217;s something profoundly complex and a lifelong subject matter at that. Also, it&#8217;s not even fully understood. However, I&#8217;m going to briefly talk about a <a href="https://en.wikipedia.org/wiki/Mental_model">mental model</a> I came up with during my summer vacation this year that has actually helped me push through physical and mental training.</p>



<h2 class="wp-block-heading">Impetus</h2>



<p class="wp-block-paragraph">In all honesty, this year has been a rough one for me mentally because I lost my 24-year-old brother to drugs. Writing is something that alleviates my stress, so I wrote about it, and so the tree of <a href="https://karnavaara.com/tree/conviction" target="_blank" rel="noreferrer noopener">CONVICTION</a> was born. It&#8217;s often said that time heals, but I think it would be more accurate to say that time <em>changes</em> the pain. If the pain never truly goes away, neither do the symptoms.</p>



<p class="wp-block-paragraph">What has been the current symptom for me? Every single day I do something (e.g., an activity), I either <em>visualize</em> and see my brother alongside me and/or I think about all the lost opportunities. I go to the gym and I see my brother training beside me. I go grocery shopping and I see my brother with me. The list of things I could&#8217;ve done with my brother goes on and on&#8230; This &#8220;habit&#8221; hasn&#8217;t been inherently a pleasant one, and so I&#8217;ve started to smile and laugh because, had I not, I would&#8217;ve shed tears.<sup data-fn="9f1ba38c-e8b9-48e9-8434-546369ef00ff" class="fn"><a id="9f1ba38c-e8b9-48e9-8434-546369ef00ff-link" href="#9f1ba38c-e8b9-48e9-8434-546369ef00ff">1</a></sup></p>



<p class="wp-block-paragraph">So, one evening, when reading about hypnosis and trance, I thought more about this (mental) symptom and did some <a href="https://en.wikipedia.org/wiki/Introspection" target="_blank" rel="noreferrer noopener">introspection</a> because I wanted to ensure that this &#8220;symptom&#8221; is at least a benign one. In programming, there&#8217;s a technique known as <a href="https://en.wikipedia.org/wiki/Abstraction_(computer_science)" target="_blank" rel="noreferrer noopener">abstraction</a>. That term is something that every newcomer will hear sooner or later. If you think about it, <strong>our mind is filled with abstractions</strong>. I decided to pay more attention to my abstracted thoughts, and basically, in my mind, I created a <em>dichotomy</em> of positive and negative feelings.</p>



<p class="wp-block-paragraph">Introspection helps because when you examine and observe your own mind, you&#8217;ll start to notice various inner elements. When you feel <em>negative</em> (e.g., anxious, fearful, sad, helpless, inadequate, etc.), focus inward and really <em>feel</em> that negativeness as an abstraction in your mind. Don&#8217;t escape the feeling but <em>embrace</em> it and sense it. Do the same for positive emotions. <strong>If you train your mind and pay attention to it, it has the potential to be a sovereign playground for you that&#8217;s isolated, safe, private, and maybe all-powerful.</strong><sup data-fn="54fb1d3f-12f5-4711-a53e-e3f0b8cdc103" class="fn"><a id="54fb1d3f-12f5-4711-a53e-e3f0b8cdc103-link" href="#54fb1d3f-12f5-4711-a53e-e3f0b8cdc103">2</a></sup> You&#8217;re the only one who can set foot there and enjoy the freedom it gives you.</p>



<h2 class="wp-block-heading">Mental Model</h2>



<p class="wp-block-paragraph">While I was in the gym training, I had an <a href="https://en.wikipedia.org/wiki/Eureka_(word)" target="_blank" rel="noreferrer noopener">eureka moment</a>. Due to their nature, abstractions aren&#8217;t effective for cultivating understanding. For maximum understanding, abstractions should be turned into concrete representations. So, in my mind, I decided to create concrete representations of those abstracted positive and negative feelings, and I came up with the model called &#8220;Sphere vs. Stellated Dodecahedron&#8221;.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://karnavaara.com/wp-content/uploads/2025/08/image-1.png" alt="" class="wp-image-2761" style="width:354px;height:auto" srcset="https://karnavaara.com/wp-content/uploads/2025/08/image-1.png 1024w, https://karnavaara.com/wp-content/uploads/2025/08/image-1-300x300.png 300w, https://karnavaara.com/wp-content/uploads/2025/08/image-1-150x150.png 150w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The <a href="https://en.wikipedia.org/wiki/Sphere">sphere</a> is practically a ball while the <a href="https://robertlovespi.net/2019/11/23/a-compound-of-the-icosahedron-and-the-small-stellated-dodecahedron/">stellated dodecahedron</a> is a &#8220;spiked&#8221; ball.</figcaption></figure>



<p class="wp-block-paragraph">So, this might sound peculiar, but what I try to do is reduce the amount of abstracted feelings in my mind via imagination by imagining I&#8217;m using clay and <em>molding</em> them into <em>concrete visualized representations</em>:</p>



<ol class="wp-block-list">
<li><strong>Each positive feeling represents a sphere as they&#8217;re simpler, safer, and more productive.</strong> There&#8217;s a reason balls are used in many sports.</li>



<li><strong>Each negative feeling represents a stellated dodecahedron as they&#8217;re complex, dangerous, and unproductive.</strong> Imagine, if instead of a ball-shaped rock, <a href="https://en.wikipedia.org/wiki/Zeus">Zeus</a> gave <a href="https://en.wikipedia.org/wiki/Sisyphus" target="_blank" rel="noreferrer noopener">Sisyphus</a> a stellated dodecahedron to push up a hill&#8230;  </li>
</ol>



<p class="wp-block-paragraph">If these propositions are true, then I need to make sure that there are more <em>spheres</em> than <em>stellated dodecahedra</em> in the<em> temple of my mind</em>.<sup data-fn="41cd22f2-71d1-402e-bd8f-da5ede7bca04" class="fn"><a id="41cd22f2-71d1-402e-bd8f-da5ede7bca04-link" href="#41cd22f2-71d1-402e-bd8f-da5ede7bca04">3</a></sup> For me, the procedure behind this mental model has been as follows:</p>



<ol class="wp-block-list">
<li>I do introspection by focusing inward and assessing my mental status. By the way, just for fun, I think of this as a sort of <a href="https://dribbble.com/tags/mental-health-dashboard">mental dashboard</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>



<li>If I notice I&#8217;m feeling negative, I&#8217;ll sense this negativity as abstracted feelings.</li>



<li>In the temple of my mind, by utilizing clay, I try to mold them into stellated dodecahedra.</li>



<li>Afterwards, I blunt and weaken the sharp spikes until all that&#8217;s left is a <em>beautiful</em> sphere. I imagine I&#8217;m squishing the ball, controlling it, and playing with it.</li>



<li>I feel as though I&#8217;m in control, as the negative feelings have no authority over me. I mold them as I please.</li>
</ol>



<p class="wp-block-paragraph">There might be scientific literature related to this, but I&#8217;m too lazy to do research and provide scientific evidence. What I can say, however, is that this anecdote of mine has helped me process and handle this year&#8217;s unfortunate events. I feel as though I&#8217;ve finally grasped something <em>pivotal</em> because, against all expectations, I&#8217;m currently the strongest I&#8217;ve ever been, both physically and mentally (<em>let&#8217;s hope it stays that way</em>).</p>



<h2 class="wp-block-heading">Final Words</h2>



<p class="wp-block-paragraph">If someone wanders here and reads this, I hope that this provides some help either now or in the future. The most important thing to realize is that <strong>you have power over your mind</strong>. Even though the things in our mind are abstract, you can make them less abstract. The less abstract something is, the more understandable it is. The more understandable something is, the more you can reason about it. <strong>The more you can reason about something, the less scary and daunting it becomes.</strong> After all, we humans fear the unknown.</p>



<h2 class="wp-block-heading">Footnotes</h2>


<ol class="wp-block-footnotes has-x-small-font-size"><li id="9f1ba38c-e8b9-48e9-8434-546369ef00ff">This is apparently called <a href="https://www.psychologytoday.com/us/basics/cognitive-reappraisal" target="_blank" rel="noreferrer noopener">cognitive reappraisal</a>. By forcing yourself to smile, for example, you&#8217;re &#8220;generating&#8221; a positive reinterpretation of an adverse event. Honestly, this is much better than crying or keeping a poker face. <a href="#9f1ba38c-e8b9-48e9-8434-546369ef00ff-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="54fb1d3f-12f5-4711-a53e-e3f0b8cdc103"><em>By paying attention I mean, for example, have <a href="https://en.wikipedia.org/wiki/Intrapersonal_communication">intrapersonal communication</a> (or inner speech). Many of us consume way too much external information by listening to what other people say and thinking what other people think. I&#8217;m not saying that this is inherently a bad thing but it can be because sometimes you should think for yourself. Have inner dialogue with yourself and extrapolate things using your own mind. This is related to <a href="https://en.wikipedia.org/wiki/Critical_thinking">critical thinking</a> and, in a much broader sense, to <a href="https://en.wikipedia.org/wiki/Metacognition">metacognition</a>.</em> <a href="#54fb1d3f-12f5-4711-a53e-e3f0b8cdc103-link" aria-label="Jump to footnote reference 2"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="41cd22f2-71d1-402e-bd8f-da5ede7bca04"><em>When I was playing the video game Tekken 7, I fell in love with the <a href="https://tekken.fandom.com/wiki/Infinite_Azure" target="_blank" rel="noreferrer noopener">Infinite Azure</a> battle stage and its <a href="https://youtu.be/_lvdmh0DcmA" target="_blank" rel="noreferrer noopener">theme song</a>. The synergy between them is so good. For some reason, this stage with its song started representing my mind perfectly. There&#8217;s just something so peaceful imagining myself there, where nobody can bother me, and being truly free. A place akin to Infinite Azure is the temple of my mind (i.e., my mental sanctum).</em> <a href="#41cd22f2-71d1-402e-bd8f-da5ede7bca04-link" aria-label="Jump to footnote reference 3"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Generative AI</title>
		<link>https://karnavaara.com/tree/generative-ai</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 00:29:45 +0000</pubDate>
				<category><![CDATA[Tree]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Memory Encoding]]></category>
		<category><![CDATA[Philosophy]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=2681</guid>

					<description><![CDATA[Train to set GAI aside (except for feedback).]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator alignfull has-alpha-channel-opacity is-style-wide"/>



<figure class="wp-block-image aligncenter size-full is-resized is-style-default"><img decoding="async" width="1024" height="1024" src="https://karnavaara.com/wp-content/uploads/2025/06/transparent_bg_straight_and_narrow_road.png" alt="" class="wp-image-2679" style="width:264px;height:auto" srcset="https://karnavaara.com/wp-content/uploads/2025/06/transparent_bg_straight_and_narrow_road.png 1024w, https://karnavaara.com/wp-content/uploads/2025/06/transparent_bg_straight_and_narrow_road-300x300.png 300w, https://karnavaara.com/wp-content/uploads/2025/06/transparent_bg_straight_and_narrow_road-150x150.png 150w, https://karnavaara.com/wp-content/uploads/2025/06/transparent_bg_straight_and_narrow_road-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>DRAFT (WIP)</strong></figcaption></figure>



<hr class="wp-block-separator alignfull has-alpha-channel-opacity is-style-wide"/>



<h2 class="wp-block-heading">Preface</h2>



<p class="wp-block-paragraph">When <a href="https://openai.com/index/chatgpt/">ChatGPT</a>, one implementation of <a href="https://en.wikipedia.org/wiki/Generative_artificial_intelligence">Generative AI</a> (GAI), was released in November 2022, it marked a new era for <em>the age of AI</em> in which we currently live. There&#8217;s no denying it. There&#8217;s no stopping it. Times have changed and are continuing to change whether we want it or not. All we can do is try and enjoy the rollercoaster.</p>



<p class="wp-block-paragraph">However, let&#8217;s be honest, it hasn&#8217;t changed anything in the grand scheme of things. The world is still the same as it was before GAI. Sure, GAI <em>might</em> have been the primary cause of some layoffs, but for now, I think that <em>the benefits outweigh the costs</em>.</p>



<p class="wp-block-paragraph">What do I mean? Well, I think that GAI has an overall positive effect on our learning if (<em>and only if</em>) we use it judiciously. I&#8217;ve utilized it during these couple of years and had an epiphany. <strong>Thanks to GAI, a new lifelong objective has been bestowed upon us: train to set it aside (<em>except for feedback</em>).</strong></p>



<h2 class="wp-block-heading">Why</h2>



<p class="wp-block-paragraph">GAI isn&#8217;t going anywhere, and it isn&#8217;t going to get banned, and neither should it. Figuratively speaking, it&#8217;s kind of a modern &#8220;nuclear weapon in development&#8221;. They who limit its development will lose. West limits and/or bans AI? China and Russia would win. Governments know this. And so, we come to the age-old aphorism: <strong>if you can&#8217;t beat them, join them</strong>. If you&#8217;re against AI, you will lose in the job market to the ones who use it wisely.</p>



<p class="wp-block-paragraph">Additionally, ChatGPT has shown to reduce the amount of brain activity according to <a href="https://arxiv.org/pdf/2506.08872v1">an MIT study</a>. The study revolves around <em>cognitive debt</em> which is explained as follows: &#8220;<em>&#8230; a condition in which repeated reliance on external systems like LLMs replaces the effortful cognitive processes required for independent thinking.</em>&#8220;</p>



<p class="wp-block-paragraph">To be honest, almost anyone capable of using <em>common sense</em> can come to the conclusion that using GAI reduces the amount of brain activity and hence slows the amount of <a href="https://en.wikipedia.org/wiki/Neuroplasticity" target="_blank" rel="noreferrer noopener">neuroplasticity</a> from happening. If I put two and two together, I can confidently say without any evidence that this won&#8217;t decrease the amount of <em>Alzheimer&#8217;s diagnoses</em>.</p>



<p class="wp-block-paragraph">Having a competitive edge in the job market and maintaining your cognitive health should be more than enough of &#8220;why.&#8221;</p>



<h2 class="wp-block-heading">How</h2>



<p class="wp-block-paragraph">If you&#8217;ve read the <em>tree of <a href="https://karnavaara.com/tree/inspiration">Inspiration</a></em>, which is one of the core trees in Karnavaara, you could presume that ChatGPT is the favorite/front-runner and you&#8217;re the <em>underdog</em>. But unfortunately, this might not be practical as ChatGPT is a literal machine. It&#8217;s safe to say that you&#8217;ll never be able to outwork it. But you can <em>train to set it aside</em>.</p>



<p class="wp-block-paragraph">First and foremost, come up with stuff by using your own brain. This relates to the <a href="https://en.wikipedia.org/wiki/Generation_effect">generation effect</a>. Do this <em>honestly</em>. Only after you&#8217;re complacent with your work, send it to ChatGPT and <em>ask for feedback</em>. Ask questions such as &#8220;Is this accurate?&#8221;, &#8220;Have I understood this correctly?&#8221;, &#8220;how would you grade this?&#8221; etc. You should be the helmsman and ChatGPT your first mate (<em>i.e., your mentor/teacher</em>).</p>



<p class="wp-block-paragraph">ChatGPT will probably output a lot of feedback. Take your time and <em>dissect</em> it. Understand the dissection. Learn the dissection. Afterwards, return and improve your work. Do NOT copy-and-paste <em>verbatim</em> what ChatGPT came up with. <strong>Remember that you&#8217;re training to set it aside (except for feedback).</strong> With this mindset it doesn&#8217;t make any sense to make yourself dependent on it, right?</p>



<p class="wp-block-paragraph">One crucial thing to remember is that <strong>our brain isn&#8217;t weak</strong>. I think I demystified this in the <em>tree of <a href="https://karnavaara.com/diary/diary">Diary</a></em>. The amount of information our brain can store is <a href="https://www.scientificamerican.com/article/what-is-the-memory-capacity/">theorized to be 2.5 million gigabytes</a>. Our brain is capable of some unbelievable things, and not only on a theoretical level. Another thing is that <strong>there&#8217;s no rush</strong>. Take it slow. Breathe. You can read and watch videos all you want but that isn&#8217;t going to do jack shit if your <a href="https://en.wikipedia.org/wiki/Encoding_(memory)">memory encoding</a> is nonexistent.</p>



<p class="wp-block-paragraph">&#8230;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Inspiration</title>
		<link>https://karnavaara.com/tree/inspiration</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 00:35:29 +0000</pubDate>
				<category><![CDATA[Tree]]></category>
		<category><![CDATA[Burnout Resistance]]></category>
		<category><![CDATA[Mindset]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=2411</guid>

					<description><![CDATA[Instead of insecurity, inferiority, or envy, be inspired: have the underdog mindset.]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-medium-font-size wp-block-paragraph">&#8220;Rather than wishing and aiming to be the favorite or front-runner, you should crave to be the underdog or, more specifically, have the mind of one.&#8221;</p>
<cite>—Karnavaara</cite></blockquote>



<h2 class="wp-block-heading">Preface</h2>



<p class="wp-block-paragraph">I think we&#8217;ve all had that <em>illogical</em> and <em>negative</em> feeling on some level or another when somebody other than us achieves or trumps something: feelings of insecurity or inferiority, or both. I know I&#8217;ve had it.</p>



<p class="wp-block-paragraph">This somebody can be whoever, and their achievement can be whatever (<em>something we&#8217;ve attained or not</em>). In the end, neither of these things matters because, for some reason, our brain can perceive their accomplishment as a sort of personal attack on our <em>equanimity,</em> which could cause us to be bitter, among other things. Though let&#8217;s be honest, this &#8220;personal attack&#8221; is purely our delusion<sup data-fn="104ef564-b0b2-4c2e-a1d8-1c00f30187a5" class="fn"><a id="104ef564-b0b2-4c2e-a1d8-1c00f30187a5-link" href="#104ef564-b0b2-4c2e-a1d8-1c00f30187a5">1</a></sup>. A so-called <a href="https://en.wikipedia.org/wiki/Formal_fallacy" target="_blank" rel="noreferrer noopener">non-sequitur</a> probably caused because we tend to compare ourselves to others (i.e., the <a href="https://en.wikipedia.org/wiki/Social_comparison_theory">social comparison theory</a>).</p>



<p class="wp-block-paragraph">When this happens, you should do some <em>mental alchemy</em> and convert that feeling of insecurity, inferiority, or self-consciousness to <em>inspiration</em>. <strong>Be inspired</strong> by that somebody and strive to be even better!</p>



<p class="wp-block-paragraph">This is called <em>healthy competition</em>, which, by the way, doesn&#8217;t have to be actual competition but something that exists solely in your mind where, instead of being the favorite, you&#8217;re the underdog.</p>



<h2 class="wp-block-heading">Why</h2>



<p class="wp-block-paragraph">One of the reasons why we feel like this might be related to the concept of the <a href="https://en.wikipedia.org/wiki/Self-concept" target="_blank" rel="noreferrer noopener">ego</a>. For example, when you&#8217;re a <a href="https://www.verywellmind.com/signs-you-may-be-a-perfectionist-3145233" target="_blank" rel="noreferrer noopener">perfectionist</a> (<em>or preferably a <a href="https://bigselfschool.com/post/7-signs-you-re-probably-a-high-achiever" target="_blank" rel="noreferrer noopener">high-achiever</a></em>) in an environment without &#8220;healthy competition&#8221; for a long time (<em>e.g., a couple of years</em>), you get accustomed to it, and your ego grows unexpectedly. You might not even realize this until someone as capable (<em>or more</em>) as you shows up. This could damage your inflated ego because you&#8217;re not the one and only &#8220;that guy&#8221; anymore. In other words, your <a href="https://en.wikipedia.org/wiki/Self-concept" target="_blank" rel="noreferrer noopener">self-concept</a> hasn&#8217;t been stress-tested.</p>



<p class="wp-block-paragraph">The negative effects that this so-called <a href="https://en.wikipedia.org/wiki/Cognitive_distortion" target="_blank" rel="noreferrer noopener">cognitive distortion</a> causes are neither healthy nor productive. It&#8217;s irrational. Losing your <em>presence of mind</em> and feeling insecure because someone has overcome weaknesses and gotten more competent signifies a weakness in your character. A man of confidence and self-assurance knows not to fret. Why would he? That other person isn&#8217;t him<sup data-fn="66972da2-9daf-434d-99f5-c2221851a51d" class="fn"><a id="66972da2-9daf-434d-99f5-c2221851a51d-link" href="#66972da2-9daf-434d-99f5-c2221851a51d">2</a></sup> and, as the stoic quote goes:</p>



<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-medium-font-size wp-block-paragraph">&#8220;The bravest sight in the world is to see a great man struggling against adversity.&#8221;</p>
<cite>—Seneca</cite></blockquote>



<p class="wp-block-paragraph">One of the most essential things to <a href="https://dictionary.cambridge.org/dictionary/english/extrapolate">extrapolate</a> from this quote is that when you see or hear someone struggle to overcome adversity, let it be <a href="https://www.merriam-webster.com/dictionary/catalyst" target="_blank" rel="noreferrer noopener">a catalyst</a> for inspiration and motivation and not for feelings of inferiority, bitterness, or envy.</p>



<p class="wp-block-paragraph">If you succeed in this, well, you&#8217;ve just found yourself an external source that fills up your curiosity, focus, and commitment tanks like no other. And, for me, it&#8217;s one hell of a source because it&#8217;s actually the number one coefficient in my <em>burnout resistance</em>.</p>



<p class="wp-block-paragraph">In this healthy competition, rather than wishing and aiming to be the favorite or front-runner, you should <strong>crave to be the underdog or, more specifically, have the mind of one</strong>.</p>



<ol style="list-style-type:upper-roman" class="wp-block-list">
<li>Nobody&#8217;s watching out for the underdog.</li>



<li>All the odds are against the underdog.</li>



<li>Failures cost the underdog less than they do for the favorite.</li>



<li>The underdog can experiment more and play risky.</li>



<li>The underdog gets burnt out at a slower rate.</li>



<li>The underdog can watch and learn from the favorite.</li>



<li>The underdog has a measurable, concrete, and practical growth goal: get even with or surpass the favorite.</li>
</ol>



<h2 class="wp-block-heading">How</h2>



<p class="wp-block-paragraph">In all honesty, I can&#8217;t say for certain because the ego is very complex, even for psychologists. I don&#8217;t know of any blueprint with practical steps to balance and cure it. What I can do, however, is <a href="https://www.merriam-webster.com/dictionary/postulate">postulate</a> that deliberately having the mindset of an underdog leads to a stance that could both resist ego inflation and deflate it and lead to a better performance.</p>



<p class="wp-block-paragraph">Here&#8217;s how you should <em>internally</em> react: </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-f56f613f wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<figure class="wp-block-table"><table class="has-white-background-color has-background has-fixed-layout"><thead><tr><th>Situation</th><th>Favorite/Inflated Ego Mindset</th><th>Underdog Mindset</th></tr></thead><tbody><tr><td>A peer outperforms you by their impressive result(s).</td><td>&#8220;<em>Hmm, I mean maybe I could have done that too had I more time&#8230;</em>&#8220;</td><td>&#8220;<em>This is a brilliant benchmark for what&#8217;s possible, thank you! Ah , that&#8217;s the technique that was used? That&#8217;s smart. I too can do something akin to that! Just you wait!</em>&#8220;</td></tr><tr><td>Your work gets less attention than theirs.</td><td>&#8220;<em>Surely their work isn&#8217;t that good? I&#8217;m slipping and being <a href="https://dictionary.cambridge.org/dictionary/english/eclipse">eclipsed</a>&#8230;</em>&#8220;</td><td>&#8220;<em>Ah, thank you! This is the perfect camouflage while I iterate and experiment. Eclipse leads to me having more time to learn and earn certifications.</em>&#8220;</td></tr><tr><td>Their achievement triggers self-doubt.</td><td>&#8220;<em>Maybe I&#8217;m not cut out for this job after all&#8230;</em>&#8220;</td><td>&#8220;<em>They just showed me the next skill checkpoint. I&#8217;ll alchemize this self-doubt into inspiration. Thank you for giving me more reason to push forward!</em>&#8220;</td></tr></tbody></table><figcaption class="wp-element-caption">A table depicting some situations with the internal reactions of a favorite (<em>or someone with an inflated ego</em>) and an underdog. Your reaction should be that of an underdog.</figcaption></figure>
</div>
</div>



<ol style="list-style-type:upper-roman" class="wp-block-list">
<li>Don&#8217;t tie your <a href="https://uncw.edu/seahawk-life/health-wellness/counseling/self-help-resources/self-worth">self-worth</a> to being number one because a single better performer can crash it.<br><code>Underdogs are never mentally number one.</code></li>



<li>When someone overcomes adversity and attains something and/or outperforms you, and you start feeling that <em>irrational</em> self-doubt, envy, or insecurity creep up, smile and thank them in your mind<sup data-fn="bfd1106e-fb25-48dd-a951-4a37232f66a8" class="fn"><a id="bfd1106e-fb25-48dd-a951-4a37232f66a8-link" href="#bfd1106e-fb25-48dd-a951-4a37232f66a8">3</a></sup>. This minimizes <a href="https://en.wikipedia.org/wiki/Zero-sum_thinking" target="_blank" rel="noreferrer noopener">zero-sum thinking</a>, which is a common fallacy.<br><code>Underdogs always have something to gain when someone else succeeds. Any envy is benign.</code> </li>



<li>Don&#8217;t be the &#8220;smartest guy in the room.&#8221; You don&#8217;t know <a href="https://www.grammar.com/absolute_vs._relative">absolute</a> smartness until you&#8217;ve seen/heard it with your own eyes/ears.<br><code>Underdogs always aim to be in rooms where they are, well, the underdogs.</code></li>



<li>Remember that when another person overcomes an obstacle, they have probably suffered on some level. It doesn&#8217;t matter if they suffered less, as much, or more than you.<br><code>Underdogs see the beauty in voluntary suffering to overcome adversity, which naturally commands both inspiration and motivation.</code></li>



<li>Listen, watch, and learn. When someone &#8220;shocks&#8221; you with their work, don&#8217;t dismiss it mentally. Be curious and <em>perspicacious</em>. Find out how they came up with their work, what techniques they utilized, and, most importantly of them all, try to understand their work on both a practical and theoretical level<sup data-fn="2b2d3abe-7ea3-41df-8af8-1d3415dae44b" class="fn"><a id="2b2d3abe-7ea3-41df-8af8-1d3415dae44b-link" href="#2b2d3abe-7ea3-41df-8af8-1d3415dae44b">4</a></sup>.<br><code>Underdogs never let new knowledge be filtered out through their egos. Admirable brilliance fuels their curiosity. They pull out the mechanisms (practicality) from the idea (abstraction).</code></li>
</ol>



<p class="wp-block-paragraph">These are just some of the &#8220;tenets&#8221; off the top of my mind I&#8217;ve learned during my journey. I&#8217;ll add more when they manifest themselves to me.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">In the end, this might boil down to one of those <a href="https://en.wikipedia.org/wiki/Just_Do_It" target="_blank" rel="noreferrer noopener">just-do-it</a> kind of things when someone shocks your self-concept or ego: just be positively inspired instead of negatively affected<sup data-fn="71b5cf71-6ca1-441e-aae1-a39cb8fb712b" class="fn"><a id="71b5cf71-6ca1-441e-aae1-a39cb8fb712b-link" href="#71b5cf71-6ca1-441e-aae1-a39cb8fb712b">5</a></sup>. But this was too abstract, so I thought of a more concrete model: be the underdog. I believe this is a beneficial concrete/practical response to the irrational and unhealthy &#8220;sting&#8221; someone unintentionally causes.</p>



<p class="wp-block-paragraph">So, the next time you feel that sting, smile and be thankful because that sting should remind you that you&#8217;re the underdog.</p>



<p class="wp-block-paragraph">Lastly, let me be clear: <strong>being the underdog doesn&#8217;t mean you can&#8217;t be a competent expert.</strong> It doesn&#8217;t mean you exhibit <a href="https://en.wikipedia.org/wiki/Learned_helplessness" target="_blank" rel="noreferrer noopener">learned helplessness</a>. The <em>cold hard fact</em> is that we&#8217;re all underdogs in the end. There&#8217;s always somebody more skilled than us. Somebody who&#8217;s absolutely smarter and wiser than us. If we&#8217;re all underdogs in position, why not adopt <em>the healthy identity of an underdog</em>? After all, as Socrates said:</p>



<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-medium-font-size wp-block-paragraph"> &#8220;The only thing I know is that I know nothing.&#8221;</p>
</blockquote>



<h2 class="wp-block-heading">Footnotes</h2>


<ol class="wp-block-footnotes has-x-small-font-size"><li id="104ef564-b0b2-4c2e-a1d8-1c00f30187a5"><em>This is somewhat similar to some people&#8217;s &#8220;people are watching my every move&#8221; delusion. Let&#8217;s be honest; it&#8217;s highly probable that nobody is paying attention to you in the gym or supermarket.</em> <a href="#104ef564-b0b2-4c2e-a1d8-1c00f30187a5-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="66972da2-9daf-434d-99f5-c2221851a51d"><em>This reminds me of jealousy. Every time someone speaks about being jealous or at the very least seems to be jealous, I blurt out: &#8220;Why would you be jealous to someone who isn&#8217;t you?&#8221;</em> <a href="#66972da2-9daf-434d-99f5-c2221851a51d-link" aria-label="Jump to footnote reference 2"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="bfd1106e-fb25-48dd-a951-4a37232f66a8"><em>Even better, you could tell them that they did a good job! Although, this one is up to you because I know how annoying and disrespectful it is to say &#8220;good job&#8221; to someone and not receive even a small &#8220;thank you&#8221; back&#8230;</em> <a href="#bfd1106e-fb25-48dd-a951-4a37232f66a8-link" aria-label="Jump to footnote reference 3"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="2b2d3abe-7ea3-41df-8af8-1d3415dae44b"><em>Depending on the size and complexity of their work, this might be a lifelong herculean task. So, for practicality, aim to gain at least an understanding on a practical level because it can inform theory.</em> <a href="#2b2d3abe-7ea3-41df-8af8-1d3415dae44b-link" aria-label="Jump to footnote reference 4"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="71b5cf71-6ca1-441e-aae1-a39cb8fb712b"><em>This is closely related to the stoic principle known as &#8220;Power Over Your Mind&#8221;, which comes from Marcus Aurelius&#8217; book of Meditations (Book Eight, Section 47): &#8220;External things are not the problem. It&#8217;s your assessment of them. Which you can erase right now. If the problem is something in your own character, who&#8217;s stopping you from setting your mind straight?&#8221;</em> <a href="#71b5cf71-6ca1-441e-aae1-a39cb8fb712b-link" aria-label="Jump to footnote reference 5"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CONVICTION</title>
		<link>https://karnavaara.com/tree/conviction</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Sun, 08 Jun 2025 14:39:00 +0000</pubDate>
				<category><![CDATA[Tree]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Philosophy]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=2255</guid>

					<description><![CDATA[Convictions create profound meaning, so this one's for you, brother.]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-medium-font-size wp-block-paragraph">&#8220;To <em>honestly believe</em> in something is to be ready to accept the consequences of what said belief has put on you.&#8221;</p>
<cite>—Karnavaara</cite></blockquote>



<p class="has-x-small-font-size wp-block-paragraph"><em>You know what&#8217;s weird? All it takes is one sight: green grass. It&#8217;s such an insignificant and self-evident thing&#8230; But it floods me with memories, such as the one time we were grilling outside with our mom. We were all smiling, laughing, making jokes, and having fun. The weather was perfect. The grass was green. Dogs were playing and barking. I think we also played football that day. Trying to create memories as a family should. Trying to fix a broken family bond. Ah&#8230; It&#8217;s just so painful and sad because I know&#8230; I know that from now on until the end of my time, there won&#8217;t ever be days like that, and the wish I had where you&#8217;d stand alongside me is now snuffed out&#8230; </em></p>



<p class="wp-block-paragraph">While returning home from a tragedy, I talked with a random passenger. She said one thing that only Alzheimer&#8217;s can make me forget: &#8220;<em>Mut sä pärjäät, vai mitä?</em>&#8221; This Finnish sentence translates to &#8220;<em>But you&#8217;ll manage, right?</em>&#8220;</p>



<p class="wp-block-paragraph">This truly <em>serendipitous</em> event stuck a cord because from the very start, for some reason or another, I have managed. Luck always plays a role, but it isn&#8217;t purely because of <em>me</em> I managed. It&#8217;s because of <em>you</em> I managed. Because of you, I managed because I wanted to be a <em>beacon of hope</em>.</p>



<p class="wp-block-paragraph">I watched you. I saw the things you were doing. You did good things but, to be honest, they weren&#8217;t all wise decisions. You weren&#8217;t always the <em>best decision-maker</em>, but who is? I&#8217;m not. You showed me, <em>not in theory but in practice</em>, what I should watch out for. You told me indirectly what I shouldn&#8217;t do and what I should do.</p>



<p class="wp-block-paragraph">I tried to do the same for you–to create a sort of <em>healthy feedback loop</em>. I tried to show you that you don&#8217;t need many friends: only a few good ones will do. I tried to show you that <em>true freedom</em> comes from within: there&#8217;s no need to rely on extrinsic factors. I tried to show you that it&#8217;s okay to be lonely sometimes: detach from others and <em>have self-dialogue</em>. I tried to show you that you don&#8217;t need to preach or show your achievements to others: <em>don&#8217;t seek validation</em> from others, and most importantly, prove these to yourself. Courtesy of you, I also tried to show this all in practice, not theory.</p>



<p class="wp-block-paragraph">However, where I failed as your brother was to show you what it really means to live life and what life is really about. I didn&#8217;t try to illustrate that to you, and now it truly pains me to know it&#8217;s too late. I should have told you–no, <em>shown you</em> how–to stay alive because <strong>as long as you&#8217;re alive, there&#8217;s potential, as you always have a second (or nth) chance.</strong></p>



<p class="wp-block-paragraph">So, from the bottom of my heart, thank you for this all, Jami. Thank you for being part of my life. I am who I am in a big part because of you. I mirror the potential you would&#8217;ve had. And now, because of you, I think I&#8217;ll finally get to know what <em>conviction</em> really means and, as usual, not in theory but in practice. <strong>I won&#8217;t let this opportunity pass.</strong></p>



<p class="wp-block-paragraph">So, gears will be switched. I see no other way than to try and <em>alchemize</em> this into something great.</p>



<p class="wp-block-paragraph"><em>A straight and narrow road</em>? Bedridden with difficulties? Includes events of despair and setback? A required determination level of &#8220;<em>come hell or high water</em>&#8220;? Brilliant! I&#8217;ll journey on one of those, though this time, I know how to walk and navigate while doing my utmost to <em>practice what I preach</em>.</p>



<p class="wp-block-paragraph">Each of us has a fire that slowly but surely burns and fizzles out. Afterward, only <em>pure white ash</em> remains. But, before the fire fizzles out, there will be a brief but crucial time window where it should <em>burn the brightest</em>. This is the time when something <em>exceptional and remarkable</em> is brought into the spotlight. Life is, after all, impermanent.</p>



<p class="wp-block-paragraph">I believe this is what you&#8217;d have wanted. For us, <em>life was never meant to be conventional</em>. Thank you for finally demystifying this to me. After all, <em>no man is truly self-made</em>.</p>



<p class="wp-block-paragraph">You&#8217;re both the reason I took this path and stayed on it: I wanted to show you that we have hope. And now, you&#8217;re why <em>I&#8217;ll stay on this path with conviction</em>. It isn&#8217;t always the big brother who sets an example.</p>



<p class="wp-block-paragraph">Everything I have done and will do is something you could&#8217;ve done. If only the circumstances were better&#8230; I see now that to <em>honestly believe</em> in something is to be ready to accept the consequences of what said belief has put on you.</p>



<p class="wp-block-paragraph">If the untimely death of your own little brother doesn&#8217;t <em>command growth</em>, what does? So, from now on <em>until the day God fizzles my fire</em> and I die, this is <em>my true conviction</em>. Be my shadow, Jami, and witness everything. </p>



<blockquote class="wp-block-quote has-text-align-center has-medium-font-size is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">“He who has a why to live can bear almost any how.”</p>
<cite>—Nietzsche</cite></blockquote>



<p class="wp-block-paragraph"><em>Teot puhuu enemmän kuin sanat, vai mitä, Jami? Lepää rauhassa. Kiitos, kun olit osa mun elämää 31.5.2000 &#8211; 15.2.2025. Niissä olosuhteissa, jotka elämä soi meille, ei oo mitään permutaatiota jossa olisin yksin pärjännyt. Sä pidit mulle seuraa.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reactance</title>
		<link>https://karnavaara.com/genesis/reactance</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Mon, 16 Dec 2024 09:08:11 +0000</pubDate>
				<category><![CDATA[Genesis]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Philosophy]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=2105</guid>

					<description><![CDATA[Learn of your own accord–anything less is a disservice to your freedom.]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">&#8220;<em>&#8230;<a href="https://en.wikipedia.org/wiki/Autodidacticism" target="_blank" rel="noreferrer noopener">autodidacticism</a> is pure, unadulterated freedom augmented with a positively reinforcing feedback loop: knowledge is power, and with power, you can enforce freedom.</em>&#8220;</p>
<cite>–Karnavaara</cite></blockquote>



<h2 class="wp-block-heading">Preface</h2>



<p class="wp-block-paragraph">You have probably heard of this before, but did you know that each of us has a unique art or discipline that we are best suited to master, and only God knows what it is? We must discover this so called <a href="https://en.wikipedia.org/wiki/Vocation#" target="_blank" rel="noreferrer noopener">vocation</a> ourselves because no survey, examination, or research can find it for us. How do we discover it? What&#8217;s the most effective way? Well, for starters, I think we should <a href="https://uwaterloo.ca/centre-for-teaching-excellence/catalogs/tip-sheets/self-directed-learning-four-step-process" target="_blank" rel="noreferrer noopener">self-direct our learning</a> and be <a href="https://en.wikipedia.org/wiki/Autodidacticism" target="_blank" rel="noreferrer noopener">autodidacts</a>.</p>



<p class="wp-block-paragraph">Study because <strong>you</strong> want to study. Study what <strong>you</strong> want to study. Study how <strong>you</strong> want to study. Don&#8217;t force yourself to study something you don&#8217;t want to–it&#8217;s an infringement and a disservice to your autonomy and freedom. Instead, nurture a sense of <a href="https://en.wikipedia.org/wiki/Reactance_(psychology)" target="_blank" rel="noreferrer noopener">reactance</a>–resist things that reduce your educational freedom–and it&#8217;ll be only a matter of time until <strong>you</strong> carve your path while developing your passions, leading to <a href="https://en.wikipedia.org/wiki/Self-actualization" target="_blank" rel="noreferrer noopener">self-actualization</a>.</p>



<h2 class="wp-block-heading">Why</h2>



<p class="wp-block-paragraph">Well, why would you let somebody else control your education? <strong>Why would you want to be bound by formal structures or authority figures like teachers?</strong> Why would you want to be in courses led by teachers who tell you what to study, imply how to study, and force you to do homework they come up with, which you probably don&#8217;t want to do?</p>



<p class="wp-block-paragraph">Maybe I&#8217;m exaggerating and generalizing a bit, but let&#8217;s be honest: <strong>school cultivates a culture of (<em>in most situations</em>) poor, forced, and other-than-self-directed learning.</strong></p>



<ol class="wp-block-list">
<li>What if the teacher is subpar? What if you notice that but want to avoid bringing it up just in case you become singled out as a target for negative attention?</li>



<li>What if the courses and their materials are outdated and weak?</li>



<li>What if politics have corrupted the course?</li>



<li>What if the homework (<em>at least in the bigger picture</em>) could be more interesting or varied?</li>



<li>What if you deem the way that the school works detrimental? What if this <em><a href="https://en.wikipedia.org/wiki/Modus_operandi" target="_blank" rel="noreferrer noopener">modus operandi</a></em> forces you to carry out unnecessary <a href="https://en.wikipedia.org/wiki/Boilerplate_text" target="_blank" rel="noreferrer noopener">boilerplate</a>?</li>



<li>Should the classroom atmosphere be hazardous? What then?</li>



<li>What about <a href="https://en.wikipedia.org/wiki/Learned_helplessness" target="_blank" rel="noreferrer noopener">learned helplessness</a> (<em><a href="https://scholarship.miami.edu/esploro/outputs/doctoral/Mathematics-anxiety-and-learned-helplessness/991031447941702976" target="_blank" rel="noreferrer noopener">which is most prevalent in mathematics</a></em>)? Your ability to help yourself might become dependent on the teacher.</li>



<li>Are you a fan of <a href="https://en.wikipedia.org/wiki/Teaching_to_the_test" target="_blank" rel="noreferrer noopener">teaching to the test</a>? Yeah, me neither.</li>
</ol>



<p class="wp-block-paragraph">Don&#8217;t get me wrong, <a href="https://potomac.edu/benefits-of-education/" target="_blank" rel="noreferrer noopener">school definitely has its benefits</a>, but <em>to me</em>, the downsides outweigh them. I never <em>really</em><sup data-fn="f09ad369-11ca-4fc1-a675-2a4892c74077" class="fn"><a id="f09ad369-11ca-4fc1-a675-2a4892c74077-link" href="#f09ad369-11ca-4fc1-a675-2a4892c74077">1</a></sup> succeeded or thrived in school, and because of that, I felt I was inferior to everybody else. I don&#8217;t particularly appreciate being told what, how, and why to study.<strong> I study because I want to study, and I study what I want to study. Nobody can tell me otherwise because nobody knows me better than me.</strong> This <a href="https://en.wikipedia.org/wiki/Autodidacticism" target="_blank" rel="noreferrer noopener">autodidacticism</a> is pure, unadulterated freedom augmented with a positively reinforcing feedback loop: knowledge is power, and with power, you can enforce freedom. And, quite frankly, that&#8217;s epic.</p>



<p class="wp-block-paragraph"><strong>I&#8217;ve also noticed that anything less leads to an adverse psychological reaction called <a href="https://en.wikipedia.org/wiki/Reactance_(psychology)" target="_blank" rel="noreferrer noopener">reactance</a>, which, for me, is a significant cause of procrastination.</strong> Systems, organizations, or people who tell me what to do triggers something deep in my brain that makes me actively want to fight back. This resistance is usually weak, but it&#8217;s much more powerful when it comes to learning and education. I believe there are two reasons for this:</p>



<ol class="wp-block-list">
<li>I want to keep the reason for learning <a href="https://www.personio.com/hr-lexicon/intrinsic-and-extrinsic-motivation/" target="_blank" rel="noreferrer noopener">intrinsic and not extrinsic</a>.</li>



<li>Learning something <em>purely</em> because someone told you to goes against my <em>philosophy of studying</em> corrupting and degrading it.</li>
</ol>



<p class="wp-block-paragraph">This psychological reactance resistance is so formidable that not even a monetary or non-monetary reward can&#8217;t quell it (<em>of course, ultimately, everything has a price</em>). <strong>Learning is fun and meaningful only when done autonomously, freely, and of your own accord.</strong></p>



<h2 class="wp-block-heading">How: Be An Autodidact</h2>



<p class="wp-block-paragraph">Take control of your education. Be an<em> </em><a href="https://en.wikipedia.org/wiki/Autodidacticism" target="_blank" rel="noreferrer noopener">autodidact</a> who is (<em>or wants to be</em>) self-taught. Be a lifelong learner with a preference for an unstructured education. Thrive in environments where you have the freedom to explore, experiment, and follow your passions rather than adhering to rigid educational or organizational structures. If you don&#8217;t want to learn something, don&#8217;t. If you want to learn something, learn that something. You will start to lose your way when you start learning something due to any kind of enforcement. What will happen when there is no enforcement? Exactly.</p>



<p class="wp-block-paragraph"><strong>The practical application of this philosophy is quite simple: follow your heart.</strong> You don&#8217;t have to think about it logically when it comes to learning. People often choose something they want to learn only to start over-analyzing<sup data-fn="27667aa7-cee1-451c-ab49-d2cf764845f5" class="fn"><a id="27667aa7-cee1-451c-ab49-d2cf764845f5-link" href="#27667aa7-cee1-451c-ab49-d2cf764845f5">2</a></sup> and questioning their decision. Is this relevant? Will AI replace this? How much is the salary? Is this possible for me? Can I master this in a week? Are there any certifications? And so on.</p>



<p class="wp-block-paragraph">In most cases<sup data-fn="17a2faad-a928-4670-86c1-2e5910205673" class="fn"><a id="17a2faad-a928-4670-86c1-2e5910205673-link" href="#17a2faad-a928-4670-86c1-2e5910205673">3</a></sup>, these questions are irrelevant because the most detrimental thing you can do is postpone learning. On top of that, you start to think about learning extrinsically. For once, choose what to learn through the lens of <a href="https://en.wikipedia.org/wiki/Pathos" target="_blank" rel="noreferrer noopener">pathos</a>–your own emotion.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>


<ol class="wp-block-footnotes has-x-small-font-size"><li id="f09ad369-11ca-4fc1-a675-2a4892c74077">To be honest, I did get good grades in university of applied sciences later on in my studies but it was way too easy and unrewarding compared to high school. I also felt like I didn&#8217;t learn anything useful&#8230;  <a href="#f09ad369-11ca-4fc1-a675-2a4892c74077-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="27667aa7-cee1-451c-ab49-d2cf764845f5">This can lead to <a href="https://en.wikipedia.org/wiki/Analysis_paralysis" target="_blank" rel="noreferrer noopener">analysis paralysis</a>, where overthinking leads to a standstill in thought. Pro tip: the <a href="https://queue.acm.org/detail.cfm?id=2945077" target="_blank" rel="noreferrer noopener">small batches principle</a> can be an antidote to analysis paralysis because it reduces the number of variables and permutations.  <a href="#27667aa7-cee1-451c-ab49-d2cf764845f5-link" aria-label="Jump to footnote reference 2"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="17a2faad-a928-4670-86c1-2e5910205673">I say in most cases because certain situations might require structured learning and the use of <a href="https://en.wikipedia.org/wiki/Logos" target="_blank" rel="noreferrer noopener">logos</a> (<em>i.e., think logically</em>). For example, professional certificates or career-specific skills. However, in the latter, I still recommend skills that you personally find enjoyable. Or you can risk starting to hate your job.   <a href="#17a2faad-a928-4670-86c1-2e5910205673-link" aria-label="Jump to footnote reference 3"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Diary</title>
		<link>https://karnavaara.com/diary/diary</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Sat, 28 Oct 2023 18:21:43 +0000</pubDate>
				<category><![CDATA[Diary]]></category>
		<category><![CDATA[Engineering Daybook]]></category>
		<category><![CDATA[Journaling]]></category>
		<category><![CDATA[Memory Retention]]></category>
		<category><![CDATA[Philosophy]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=1542</guid>

					<description><![CDATA[Entropy is like a parasitic plant. This tree is the prevention. How?]]></description>
										<content:encoded><![CDATA[
<div style="height:1px" aria-hidden="true" class="wp-block-spacer"></div>



<blockquote class="wp-block-quote has-text-align-center has-medium-font-size is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-medium-font-size wp-block-paragraph">&#8220;Those who cannot eternalize knowledge are condemned to repeat it.&#8221;</p>
<cite>—Karnavaara</cite></blockquote>



<h2 class="wp-block-heading">Basis</h2>



<p class="wp-block-paragraph">As π (<a href="https://en.wikipedia.org/wiki/Pi" target="_blank" rel="noreferrer noopener"><em>pi</em></a>) has an infinite amount of numbers, comparably, the world has a boundless amount of insight. You might say, &#8220;Yeah, but in practice and not in theory. In theory, insight has a limit, but π does not.&#8221; But is it&nbsp;<em>really</em>&nbsp;so? Isn&#8217;t π in and of itself insight? And if π is insight, doesn&#8217;t that mean that insight is infinite? Every time you learn the next digit of π, you will notice that it&nbsp;<em>does not end&nbsp;</em>there. It&#8217;s the same for learning. As the universe is constantly expanding, so is insight. This <a href="https://www.ttl.fi/en/learning-materials/brain-work/information-overload"><em>information overload</em></a> introduces&nbsp;<a href="https://fs.blog/entropy/" target="_blank" rel="noreferrer noopener"><em>entropy</em></a>&nbsp;in our memories.</p>



<p class="wp-block-paragraph">Consequently, what benefit do you have of knowledge if it is <em><a href="https://dictionary.cambridge.org/dictionary/english/ephemeral">ephemeral</a></em>? If remembering numbers of π is your job or your <a href="https://dictionary.cambridge.org/dictionary/english/raison-d-etre"><em>raison d&#8217;être</em></a>, what happens when you forget them? The answer to that question can be found in the famous quote by <a href="https://en.wikipedia.org/wiki/George_Santayana">George Santayana</a>:</p>



<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>&#8220;Those who cannot remember the past are condemned to repeat it.&#8221;</strong></p>
</blockquote>



<p class="wp-block-paragraph">I wholeheartedly agree, of course. However, to be more aligned here at Karnavaara, I&#8217;ll rephrase this:</p>



<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-small-font-size wp-block-paragraph"><strong>&#8220;Those who cannot eternalize knowledge are condemned to repeat it.&#8221;</strong></p>
</blockquote>



<h2 class="wp-block-heading">Eternalizing Knowledge</h2>



<p class="wp-block-paragraph">Unquestionably, it is about more than how much insight you have. It&#8217;s about how well you can&nbsp;<em>retain it</em>. How well can you convert&nbsp;<em>ephemerality to eternality</em>? We can reduce the entropy in our memories in many ways (e.g., by&nbsp;<a href="https://www.sciencedirect.com/science/article/abs/pii/S0079742108605162" target="_blank" rel="noreferrer noopener">organizing</a>), but it all starts from the foundation:&nbsp;<a href="https://www.curioustem.org/stem-articles/memory-retention" target="_blank" rel="noreferrer noopener"><em>memory retention</em></a>. There would not be any organizing if you can&#8217;t remember concepts or terms, right?</p>



<p class="wp-block-paragraph">Imagine if <a href="https://en.wikipedia.org/wiki/Akira_Haraguchi" target="_blank" rel="noreferrer noopener">Akira Haraguchi</a>, the Japanese man holding a world record (albeit unofficial) for memorizing 100,000 digits of π, forgets even one digit along the way. He must go back and relearn it. To enhance recalling, he uses memorization techniques such as his renowned <a href="https://www.tofugu.com/japan/akira-haraguchi/#akira-haraguchis-mnemonic-method" target="_blank" rel="noreferrer noopener"><em>mnemonic system</em></a>, where he creates stories and links them to the digits. Isn&#8217;t writing similar? We write, and in the process, we unknowingly connect the writing to our memories. </p>



<p class="has-text-align-center has-medium-font-size wp-block-paragraph">In essence, <strong>we are writing our memories.</strong></p>



<p class="wp-block-paragraph">Therefore, one of the best ways to retain the insight you have accumulated is by <em>writing</em>. To be more concrete, keep a diary or an <a href="https://hackernoon.com/you-should-be-using-a-software-engineering-daybook" target="_blank" rel="noreferrer noopener"><em>engineering daybook</em></a>. I discovered this from reading the book <a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/" target="_blank" rel="noreferrer noopener">Pragmatic Programmer, 20th Anniversary Edition</a> by David Thomas and Andrew Hunt. I highly recommend the book for anyone wanting to be more pragmatic. They didn&#8217;t exactly word it this way, but<strong> </strong>the premise is the same:<strong> jot down anything of interest you want to eternalize to keep it from being ephemeral.</strong> </p>



<h2 class="wp-block-heading">Raison D&#8217;être</h2>



<p class="wp-block-paragraph">For this reason, every branch under this tree depicts a diary filled with insight, sometimes brimfully. The be-all and end-all of the <em>tree of Diary&#8217;s</em> plantation: to resist letting insight slip by and neglecting other trees and branches of the <em><a href="https://karnavaara.com/genesis/genesis">Forested Hill of Insight</a></em>. <strong>Here, entropy is like a parasitic plant, and the tree of Diary is the prevention</strong> (<sub><sup>I have yet to find a cure</sup></sub>).</p>



<p class="wp-block-paragraph">On the hill, we will encounter many <em>points of no return</em> where turning back is not an option. The further we climb, the faster we might lose our way. When this happens, stop and take a moment to look behind you. See the trees and their branches and remember where you&#8217;ve come from. All you&#8217;ve learned—everything you&#8217;ve experienced. In doing so, you won&#8217;t forget <em>who you are</em>.</p>



<h2 class="wp-block-heading">Supplementary</h2>



<p class="wp-block-paragraph">These are additional resources to delve into if you so desire. Retaining knowledge is but one benefit of writing. There are many more:</p>



<ul class="wp-block-list">
<li><a href="https://www.nytimes.com/2018/10/25/style/journaling-benefits.html">Benefits of Journaling by Hayley Phelan</a></li>



<li><a href="https://www.apa.org/monitor/jun02/writing">Writing to Heal by Bridget Murray</a></li>



<li><a href="https://www.healthline.com/health-news/simple-activities-like-journaling-playing-chess-may-reduce-risk-of-dementia">Simple Activities Like Journaling May Reduce Risk of Dementia by Shawn Radcliffe</a></li>



<li><a href="https://www.edutopia.org/blog/writing-executive-function-brain-research-judy-willis">The Brain-Based Benefits of Writing for Math and Science Learning by Judy Willis</a></li>



<li><a href="https://facilethings.com/blog/en/benefits-of-writing">10 Benefits That Writing Gives You by Francisco Sáez</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>My Path To Self-Hosting WordPress Powerfully for Only Pennies</title>
		<link>https://karnavaara.com/genesis/self-hosting-wordpress-for-pennies</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Mon, 23 Oct 2023 01:06:03 +0000</pubDate>
				<category><![CDATA[Genesis]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://karnavaara.com/?p=1351</guid>

					<description><![CDATA[A penny for your... WordPress? Powerfully and cost-effectively self-hosting WordPress with SSL.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Updated on 9.6.2025: Small amends such as reducing the amount of &#8220;speaking in absolutes&#8221; and fixing links so that they open in new tabs.</em><br><em><a href="#update1">Updated on 20.12.2024</a>: I added another useful plugin called WPS Hide Login to change the default WordPress login URL as an additional security layer combined with Limit Login Attempts Reloaded.</em></p>



<h2 class="wp-block-heading" id="frame-of-reference">Frame of Reference</h2>



<p class="wp-block-paragraph">Today, in the 21st century, it&#8217;s not difficult at all to create your own websites. In the majority of cases, it&#8217;s not even expensive. <em>Everybody can do it</em>! The real difficulty lies in how you go about doing it. For example, consider this table:</p>



<div style="height:0px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table is-style-regular"><table class="has-white-background-color has-background"><thead><tr><th>EASY</th><th>NORMAL</th><th>HARD</th></tr></thead><tbody><tr><td>Plug and Play <em><a href="https://www.optimizely.com/optimization-glossary/content-management-system/" target="_blank" rel="noreferrer noopener">Content Management Systems</a></em> (e.g., Medium, Substack, Squarespace, and WordPress.com)</td><td><a href="https://wordpress.org/" target="_blank" rel="noreferrer noopener">WordPress.org</a> (self-hosted)</td><td><em><a href="https://www.w3.org/wiki/The_web_standards_model_-_HTML_CSS_and_JavaScript" target="_blank" rel="noreferrer noopener">Vanilla</a></em> (CSS/HTML/JS)</td></tr><tr><td>Buying a personalized solution from <a href="https://fiverr.com/" target="_blank" rel="noreferrer noopener">Fiverr</a>.</td><td><em><a href="https://www.cloudflare.com/en-gb/learning/performance/static-site-generator/" target="_blank" rel="noreferrer noopener">Static Site Generators</a></em> (e.g., Hugo and Jekyll)</td><td><a href="https://airfocus.com/glossary/what-is-a-front-end/" target="_blank" rel="noreferrer noopener"><em>Front end</em></a> (e.g., React) with or without a <a href="https://techterms.com/definition/backend" target="_blank" rel="noreferrer noopener"><em>back end</em></a> (e.g., NodeJS)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">This table should provide a very basic <em><a href="https://en.wikipedia.org/wiki/Frame_of_reference" target="_blank" rel="noreferrer noopener">frame of reference</a></em> for choosing the path of least (or most) resistance. For example, the easiest way for you to erect your own blogging site is through <a href="https://medium.com/" target="_blank" rel="noreferrer noopener">Medium</a>: Just sign up with Google (<a href="https://www.wired.com/story/single-sign-on-facebook-google-apple/" target="_blank" rel="noreferrer noopener"><em>or maybe don&#8217;t</em></a>) and click the &#8220;Write&#8221; button. Substack is very similar.<a href="https://karnavaara.com/genesis/self-hosting-wordpress-for-pennies" target="_blank" rel="noreferrer noopener"></a></p>



<p class="wp-block-paragraph">Want more personalization options while preserving simplicity? <a href="https://wordpress.com/">WordPress.com</a> and <a href="https://www.squarespace.com/">Squarespace</a> are your friends. Both can be personalized to fit your needs uniquely. They don&#8217;t have that basic Medium or <a href="https://substack.com/">Substack </a><em>look.</em></p>



<p class="wp-block-paragraph">People who are tech-savvy, tinkerers, <a href="https://en.wikipedia.org/wiki/Self-hosting_(web_services)#Benefits"><em>concerned with privacy</em></a>, and/or have more time on their hands should look for a self-hosted option like WordPress.org, <a href="https://gohugo.io/">Hugo</a><sup data-fn="019886f8-0e44-4fff-9bad-0ae7b9b42206" class="fn"><a id="019886f8-0e44-4fff-9bad-0ae7b9b42206-link" href="#019886f8-0e44-4fff-9bad-0ae7b9b42206">1</a></sup>, or perhaps endeavor into an entire <a href="https://www.linkedin.com/pulse/step-by-step-guide-setting-up-full-stack-web-python-swarali-garud/"><em>full stack implementation</em></a>.</p>



<h2 class="wp-block-heading" id="the-elephant-in-the-room">The Elephant in the Room</h2>



<p class="wp-block-paragraph">Pricing. Sure, those 3rd party hosted solutions like WordPress.com, Medium, Substack, and Squarespace are simple and the <a href="https://enkonix.com/blog/time-to-market/"><em>time to market</em></a> (TTM) is very fast. But they&#8217;re not entirely free (at least in the personalization department). Check out this new and revolutionary table:</p>



<figure class="wp-block-table"><table class="has-white-background-color has-background"><thead><tr><th>PRODUCT</th><th>COST</th></tr></thead><tbody><tr><td>Medium</td><td><strong>Writing and publishing blog posts is entirely free</strong> but collaborative publications (think of these like magazines)  and custom domains (e.g., karnavaara.com) are only available for paid members ($5/month).</td></tr><tr><td>Squarespace</td><td>Minimum cost is <strong>11€/month</strong> (that is, if it&#8217;s paid annually)</td></tr><tr><td>Substack</td><td><strong>Everything is free for writers</strong>. However, you have to pay a one-time fee of $50 for the ability to use a custom domain.</td></tr><tr><td>WordPress.com</td><td><strong>Basic usage (e.g., writing and publishing posts) is entirely free</strong>. 4€/month will enable the use of custom domains. Personal branding will require custom styles, which will cost 8€/month. Having the ability to use plugins (which is arguably the most important feature) will cost 25€/month. </td></tr></tbody></table><figcaption class="wp-element-caption">This table revolves mainly around using these products as blogging sites.  </figcaption></figure>



<p class="wp-block-paragraph">So, <strong>if you want to get your posts to the market hastily and cost-effectively, and you don&#8217;t care about personal branding, I recommend Medium or Substack.</strong> If you&#8217;re like me and desire personal branding, the choice would be between Squarespace and WordPress.com. </p>



<h2 class="wp-block-heading" id="my-path">My Path</h2>



<h3 class="wp-block-heading">Static Site Generators</h3>



<p class="wp-block-paragraph">The simplicity and aesthetic of <em>Static Site Generators</em> (SSG) like Hugo took me by storm. If you&#8217;ve even slightly dabbled in web development, setting up a full-fledged Hugo blog with a ready-to-use theme will take only an hour (if even that).<sup data-fn="448b6a3e-a196-46cd-a51a-8a9fb6717667" class="fn"><a id="448b6a3e-a196-46cd-a51a-8a9fb6717667-link" href="#448b6a3e-a196-46cd-a51a-8a9fb6717667">2</a></sup> At the other side of the spectrum is full stack development but <em>sadly</em> I don&#8217;t have the time to pursue that endeavor.</p>



<p class="wp-block-paragraph">Unfortunately&#8230; I won that storm and decided to join the battle between Squarespace and 3rd party hosted WordPress. <em>Why?</em> Well, first of all, out of curiosity, and last of all, for laziness. I got an epiphany and WordPress just happened to have the <em>perfect theme</em>.</p>



<h3 class="wp-block-heading">The discovery of perfection-ish.</h3>



<p class="wp-block-paragraph">Even though I found &#8220;<a href="https://wordpress.com/theme/livro?style_variation=cream">perfection</a>&#8221; in WordPress, the choice between it and Squarespace was somewhat difficult. Squarespace provides <a href="https://www.optimizely.com/optimization-glossary/search-engine-optimization/"><em>Search Engine Optimization</em></a> (SEO) straight out of the box while in WordPress you can only achieve the same with <a href="https://blog.hubspot.com/website/wordpress-plugins#what-is-a-WordPress-plugin"><em>plugins</em></a>. Additionally, Squarespace has unlimited storage, which none of the WordPress plans have.</p>



<p class="wp-block-paragraph">My choice boiled down to Squarespace&#8217;s Business plan (17€/month annually) and WordPress&#8217;s Business (24€/month annually). The Squarespace business plan would give me <em><a href="https://www.squarespace.com/pricing">complete customization with CSS and JavaScript</a></em>, SEO, and unlimited storage. The WordPress business plan would enable plugins (e.g., <a href="https://wordpress.org/plugins/wordpress-seo/">Yoast SEO</a>), which have a plethora of use cases.</p>



<h3 class="wp-block-heading">Ultimatum</h3>



<p class="wp-block-paragraph">I really wanted the plugins&#8230; But 24€/month for my own personal blog<sup data-fn="e4e1333e-3fa7-458e-95b1-93d1fec2a166" class="fn"><a id="e4e1333e-3fa7-458e-95b1-93d1fec2a166-link" href="#e4e1333e-3fa7-458e-95b1-93d1fec2a166">3</a></sup>, which doesn&#8217;t generate any direct revenue (<em>though I believe it does indirectly</em>). Then again, going with Squarespace and saving 7€/month isn&#8217;t the saving grace. WordPress won, but with an ultimatum: We use the entirely free and self-hosted version of WordPress.</p>



<p class="wp-block-paragraph">Why the ultimatum? <strong>I had an idea how to get the business version of WordPress for only pennies.</strong> Additionally, I have played around with <a href="https://www.youtube.com/watch?v=Gjnup-PuquQ&amp;ab_channel=Fireship"><em>Docker</em></a>, Linux, different <em><a href="https://cloud.google.com/learn/what-is-a-cloud-service-provider">Cloud Service Providers</a> </em>(CSPs), and Networking so this wasn&#8217;t going to be a big undertaking.</p>



<h2 class="wp-block-heading" id="how">How</h2>



<p class="wp-block-paragraph">First, come up with a <em><a href="https://www.wrike.com/blog/what-is-an-action-plan-with-example/">plan of action</a></em>. However, to do that, you must have a relatively good <em>bird&#8217;s eye view</em> on a top level, which only develops through experience. Here&#8217;s a very bare-bones representation of one, although more akin to a list of actions:</p>



<ol style="list-style-type:upper-roman" class="wp-block-list">
<li>Choose the most cost-effective, performant, and secure CSP.
<ul class="wp-block-list">
<li><s>Hetzner Cloud?</s> <sub>Although cheap, the <a href="https://www.hetzner.com/cloud#pricing"><em>VMs aren&#8217;t free</em></a>.</sub></li>



<li><s>Amazon Web Services?</s> <a href="https://aws.amazon.com/ec2/pricing/#AWS_Free_Tier"><em><sub>VMs are only free up to a point.</sub></em></a></li>



<li><s>Azure?</s> <a href="https://azure.microsoft.com/en-us/pricing/free-services"><em><sub>Similar to AWS.</sub></em></a></li>



<li>Google Cloud Provider (GCP)? There&#8217;s an<em> <a href="https://cloud.google.com/free/docs/free-cloud-features#compute">always-free instance in certain regions</a> </em>but it&#8217;s<em> <a href="https://cloud.google.com/compute/docs/general-purpose-machines#e2-shared-core">very weak</a>.</em></li>



<li>Oracle Cloud Infrastructure (OCI)? There are <em><a href="https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm#ariaid-title4">multiple always-free shapes </a></em>for instances (one of which can be very powerful).</li>
</ul>
</li>



<li>Provision a <em><a href="https://aws.amazon.com/what-is/cloud-instances/">compute instance</a></em> with a free shape and with valid networking.  </li>



<li>Install and configure a self-hosted WordPress instance to the compute instance.
<ul class="wp-block-list">
<li><s>Setting it up all vanilla style with a <a href="https://www.vmware.com/nordics/topics/glossary/content/virtual-machine.html"><em>Virtual Machine</em></a> (VM) without using a <a href="https://www.aquasec.com/cloud-native-academy/container-security/container-runtime/"><em>Container Runtime</em></a> (e.g., Docker)?</s> <sub>Blasphemy&#8230; Just kidding <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> This would be too much of an overkill</sub><sup data-fn="97810694-81d6-4b55-b75c-88bf796dc46b" class="fn"><a id="97810694-81d6-4b55-b75c-88bf796dc46b-link" href="#97810694-81d6-4b55-b75c-88bf796dc46b">4</a></sup></li>



<li>Using preconfigured and prebuilt WordPress Docker Images<sup data-fn="fe6fded5-9050-4c17-8de9-95466bd380f6" class="fn"><a id="fe6fded5-9050-4c17-8de9-95466bd380f6-link" href="#fe6fded5-9050-4c17-8de9-95466bd380f6">5</a></sup>?</li>
</ul>
</li>



<li>Configure TLS/SSL Encryption (i.e., HTTPS).</li>



<li>Go through the famous <a href="https://developer.wordpress.org/advanced-administration/before-install/howto-install/#finishing-installation"><em>five-minute WordPress installation process</em></a>.</li>



<li>Install plugins for security hardening, faster performance, and resilience.</li>
</ol>



<p class="wp-block-paragraph">This list is very high level and is probably abstract for someone inexperienced. But I&#8217;ll go from abstract to concrete in detail. So, let&#8217;s get started!</p>



<h3 class="wp-block-heading" id="choose-the-most-cost-effective-performant-and-secure-csp">Choose the most cost-effective, performant, and secure CSP</h3>



<p class="wp-block-paragraph">As you might have picked up from the action plan, there are really two choices: Google Cloud Provider or Oracle Cloud Infrastructure. If you went through the links, you&#8217;d conclude that OCI&#8217;s the clear winner here:</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557abc7&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557abc7" class="wp-block-image size-full has-custom-border wp-lightbox-container"><img decoding="async" width="956" height="519" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-1.png" alt="As far as I know, no other Cloud Provider as established as Oracle can beat this." class="has-border-color wp-image-1444" style="border-color:#aaaaaa;border-width:1px;border-radius:4px" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-1.png 956w, https://karnavaara.com/wp-content/uploads/2023/10/image-1-300x163.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-1-768x417.png 768w" sizes="(max-width: 956px) 100vw, 956px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">As far as I know, no other Cloud Provider as established as Oracle can beat this.</figcaption></figure>



<p class="wp-block-paragraph">The perspicacious of you will notice that this is a compute instance with an <a href="https://www.techtarget.com/whatis/definition/ARM-processor"><em>Arm processor</em></a> instead of an AMD one. For our use case, this won&#8217;t be a problem as Docker can be installed on Arm Linux distributions and there are <a href="https://hub.docker.com/r/arm64v8"><em>Arm compatible Docker images</em></a> for WordPress and <a href="https://www.oracle.com/mysql/what-is-mysql/"><em>MySQL</em></a>. <strong>Especially for the cloud, I think Arm processors will be the future. </strong></p>



<h3 class="wp-block-heading" id="provision-the-compute-instance-with-a-free-shape-and-with-valid-networking-on-that-chosen-csp">Provision a compute instance with a free shape and with valid networking</h3>



<h4 class="wp-block-heading">Compute instance </h4>



<p class="wp-block-paragraph">If you haven&#8217;t already, you need to create an OCI account. This will require a credit card as Oracle wants to confirm your identity and prevent the misuse of their cloud.</p>



<p class="wp-block-paragraph">After creating your account and logging into OCI, do these steps below: </p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-37ae2f39 wp-block-group-is-layout-flex" style="border-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557b2bd&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557b2bd" class="wp-block-image size-thumbnail wp-lightbox-container"><img loading="lazy" decoding="async" width="150" height="150" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-2-150x150.png" alt="1. Go to the &quot;Instances&quot; page." class="wp-image-1455"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">1. Go to the &#8220;Instances&#8221; page.</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557b792&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557b792" class="wp-block-image size-thumbnail wp-lightbox-container"><img loading="lazy" decoding="async" width="150" height="150" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-3-150x150.png" alt="2. Click &quot;Create instance&quot;." class="wp-image-1456"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">2. Click &#8220;Create instance&#8221;.</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557bc47&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557bc47" class="wp-block-image size-medium wp-lightbox-container"><img loading="lazy" decoding="async" width="300" height="127" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-4-300x127.png" alt="3. Select the correct image and shape." class="wp-image-1457" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-4-300x127.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-4-1024x434.png 1024w, https://karnavaara.com/wp-content/uploads/2023/10/image-4-768x326.png 768w, https://karnavaara.com/wp-content/uploads/2023/10/image-4.png 1276w" sizes="auto, (max-width: 300px) 100vw, 300px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">3. Select the correct image and shape.</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557c0bc&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557c0bc" class="wp-block-image size-medium wp-lightbox-container"><img loading="lazy" decoding="async" width="300" height="137" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-5-300x137.png" alt="4. Create a VCN with a public subnet." class="wp-image-1458" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-5-300x137.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-5-1024x466.png 1024w, https://karnavaara.com/wp-content/uploads/2023/10/image-5-768x349.png 768w, https://karnavaara.com/wp-content/uploads/2023/10/image-5.png 1323w" sizes="auto, (max-width: 300px) 100vw, 300px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">4. Create a VCN with a public subnet.</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557c53b&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557c53b" class="wp-block-image size-medium wp-lightbox-container"><img loading="lazy" decoding="async" width="300" height="79" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-6-300x79.png" alt="5. Save the generated private SSH key." class="wp-image-1459" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-6-300x79.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-6-1024x271.png 1024w, https://karnavaara.com/wp-content/uploads/2023/10/image-6-768x203.png 768w, https://karnavaara.com/wp-content/uploads/2023/10/image-6.png 1247w" sizes="auto, (max-width: 300px) 100vw, 300px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">5. Save the generated private SSH key.</figcaption></figure>
</div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>A pro tip regarding the SSH key&#8230;</summary>
<p class="wp-block-paragraph" id="ssh-key-pro-tip">In my opinion, it&#8217;s a major mistake to save the SSH key locally <em>without any encryption</em>. You should use a centralized <a href="https://en.wikipedia.org/wiki/Password_manager">Password Manager</a> like <a href="https://keepass.info/">KeePass</a>, <a href="https://www.lastpass.com/">LastPass</a>, or <a href="https://1password.com/">1Password</a>. I personally use 1Password as their <a href="https://support.1password.com/1password-security/">security model is top-notch</a>.</p>



<p class="wp-block-paragraph">With 1Password you can effortlessly and pleasingly save your private SSH keys as seen in the picture below. You can even create your own taxonomy by using tags and categories.</p>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="758" height="766" fetchpriority="low" src="https://karnavaara.com/wp-content/uploads/2023/10/image-17.png" alt="Picture showing how you can effortlessly and pleasingly save private SSH keys. " class="wp-image-1806" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-17.png 758w, https://karnavaara.com/wp-content/uploads/2023/10/image-17-297x300.png 297w" sizes="auto, (max-width: 758px) 100vw, 758px" /><figcaption class="wp-element-caption">Picture showing how you can effortlessly and pleasingly save private SSH keys.</figcaption></figure>



<p class="wp-block-paragraph">Afterward, in the 1Password Windows application, you can set up the&nbsp;<a href="https://developer.1password.com/docs/ssh/agent/" target="_blank" rel="noreferrer noopener">1Password SSH Agent</a>, which you can use in your Git and SSH workflows. What makes this feature brilliant is that it won&#8217;t leak your private SSH keys outside the application during usage:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="801" height="521" fetchpriority="low" src="https://karnavaara.com/wp-content/uploads/2023/10/image-18.png" alt="In the 1Password Windows application's settings, you can enable a feature called 1Password SSH Agent." class="wp-image-1892" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-18.png 801w, https://karnavaara.com/wp-content/uploads/2023/10/image-18-300x195.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-18-768x500.png 768w" sizes="auto, (max-width: 801px) 100vw, 801px" /><figcaption class="wp-element-caption">In the 1Password Windows application&#8217;s settings, you can enable a feature called 1Password SSH Agent.</figcaption></figure>
</div>
</details>



<p class="wp-block-paragraph">Before you create the instance by clicking the button at the bottom, take a look at the &#8220;Summary&#8221; panel situated on the bottom right.</p>



<h4 class="wp-block-heading">Where the Pennies Come From</h4>



<div class="wp-block-group is-layout-constrained wp-container-core-group-is-layout-a6a2a725 wp-block-group-is-layout-constrained">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557ce1e&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557ce1e" class="wp-block-image alignright size-medium is-resized wp-lightbox-container"><img loading="lazy" decoding="async" width="300" height="216" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-8-300x216.png" alt="Image showing the cost of the compute instance." class="wp-image-1473" style="width:242px;height:auto" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-8-300x216.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-8.png 342w" sizes="auto, (max-width: 300px) 100vw, 300px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Not that expensive, right?</figcaption></figure>



<p class="wp-block-paragraph" id="mandatory-costs">This is the reason why the title of this post doesn&#8217;t have the words &#8220;For Free&#8221; but &#8220;For Pennies&#8221;. The shape itself will be free even if it&#8217;s running 24/7/365. The only costs will be from storage (boot volume in this context) and <em><a href="https://www.cloudflare.com/en-gb/learning/cloud/what-are-data-egress-fees/">data egress</a></em> leaving the <a href="https://www.oracle.com/cloud/networking/virtual-cloud-network/"><em>Virtual Cloud Network</em></a> (VCN). <strong>Although, in practice, you will probably only pay for using storage as the <a href="https://www.oracle.com/cloud/pricing/">first 10 TB of data egress in OCI is free per month</a>. </strong></p>
</div>
</div>



<p class="wp-block-paragraph">You can now create the instance. After creating it, you must edit the VCN&#8217;s <a href="https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm"><em>Security Lists</em></a> and add a rule to allow ingress traffic to the instance. Ingress is, by default, blocked in OCI <a href="https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm#ariaid-title4"><em>with a few exceptions</em></a>. </p>



<h4 class="wp-block-heading">Allowing HTTPS traffic</h4>



<p class="wp-block-paragraph">Here&#8217;s another set of steps to do:</p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-f56f613f wp-block-group-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557d562&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557d562" class="wp-block-image size-thumbnail wp-lightbox-container"><img loading="lazy" decoding="async" width="150" height="150" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-9-150x150.png" alt="1. Navigate to &quot;Virtual Cloud Networks&quot;." class="wp-image-1481"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">1. Navigate to &#8220;Virtual Cloud Networks&#8221;.</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557da2e&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557da2e" class="wp-block-image size-thumbnail wp-lightbox-container"><img loading="lazy" decoding="async" width="150" height="150" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-11-150x150.png" alt="2. Click the VCN you created" class="wp-image-1483"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">2. Click the VCN you created</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557defb&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557defb" class="wp-block-image size-medium wp-lightbox-container"><img loading="lazy" decoding="async" width="300" height="239" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-12-300x239.png" alt="3. Go to the VCN's default Security List." class="wp-image-1484" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-12-300x239.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-12-768x612.png 768w, https://karnavaara.com/wp-content/uploads/2023/10/image-12.png 907w" sizes="auto, (max-width: 300px) 100vw, 300px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">3. Go to the VCN&#8217;s default Security List.</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557e37e&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557e37e" class="wp-block-image size-medium is-resized wp-lightbox-container"><img loading="lazy" decoding="async" width="300" height="140" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-13-300x140.png" alt="4. Add a rule allowing HTTPS." class="wp-image-1485" style="width:181px;height:auto" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-13-300x140.png 300w, https://karnavaara.com/wp-content/uploads/2023/10/image-13-1024x479.png 1024w, https://karnavaara.com/wp-content/uploads/2023/10/image-13-768x359.png 768w, https://karnavaara.com/wp-content/uploads/2023/10/image-13-1536x719.png 1536w, https://karnavaara.com/wp-content/uploads/2023/10/image-13.png 1917w" sizes="auto, (max-width: 300px) 100vw, 300px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">4. Add a rule allowing HTTPS.</figcaption></figure>
</div>



<p class="wp-block-paragraph">If you don&#8217;t want to configure <a href="https://aws.amazon.com/what-is/ssl-certificate/"><em>TLS/SSL</em></a> for your WordPress server, you need to add a rule allowing HTTP (TCP port 80).<strong> However, it&#8217;s of utmost importance you set up TLS/SSL.</strong> If you don&#8217;t, the traffic will be unencrypted and everybody visiting your WordPress site will see it as unsecure. I&#8217;ll show you how you can do this.</p>



<h3 class="wp-block-heading" id="install-and-configure-the-self-hosted-wordpress-instance-to-the-preceding-compute-instance">Install and configure a self-hosted WordPress instance to the compute instance.</h3>



<h4 class="wp-block-heading">Why Docker?</h4>



<p class="wp-block-paragraph">As mentioned in the plan of action, you can do this with or without Docker. However, I&#8217;m going to use Docker as the <em><a href="https://sysdig.com/learn-cloud-native/container-security/what-are-container-runtimes/">container runtime</a></em> for the <em>simplicity</em>, <em>familiarity</em>, and <em>orchestration</em> it provides.</p>



<p class="wp-block-paragraph"><em><a href="https://www.ucl.ac.uk/isd/what-ssh-and-how-do-i-use-it">SSH</a></em> into the provisioned compute instance with the private key you saved. If you&#8217;re on Windows you can do this via <a href="https://www.putty.org/">PuTTY</a> or <em><a href="https://learn.microsoft.com/en-us/windows/wsl/install">Windows Subsystem for Linux</a></em> (WSL). I recommend WSL as it enables you to use <a href="https://www.openssh.com/">OpenSSH</a> (the de facto SSH protocol). Via SSH, install Docker Engine by following <a href="https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository">the instructions found on Docker docs</a>. </p>



<p class="wp-block-paragraph">A great thing about Docker is that it comes with its own native container orchestration tool called <a href="https://docs.docker.com/compose/">Docker Compose</a>, which is much simpler and more lightweight than <a href="https://kubernetes.io/">Kubernetes</a>. We&#8217;re going to use Docker Compose to install and configure WordPress.</p>



<h4 class="wp-block-heading">Docker Composing WordPress</h4>



<p class="wp-block-paragraph">Create a file called <em><a href="https://docs.docker.com/compose/compose-file/03-compose-file/">docker-compose.yml</a></em> using a Command Line Text Editor like Nano or Vim:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Bash</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>nano docker-compose.yml</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">nano</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker-compose.yml</span></span></code></pre></div>



<p class="wp-block-paragraph">Add the following contents to it <strong>remembering to change the placeholders properly</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">YAML</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>version: &#8216;3.8&#8217;

services:
  wordpress:
    image: arm64v8/wordpress
    restart: always
    ports:
      &#8211; 443:443
      &#8211; 80:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: &lt;DB_USER_HERE>
      WORDPRESS_DB_PASSWORD: &lt;DB_PASSWORD_HERE>
      WORDPRESS_DB_NAME: &lt;DB_NAME_HERE>
    volumes:
      &#8211; wordpress:/var/www/html
  db:
    image: arm64v8/mysql
    restart: always
    environment:
      MYSQL_DATABASE: &lt;DB_NAME_HERE>
      MYSQL_USER: &lt;DB_USER_HERE>
      MYSQL_PASSWORD: &lt;DB_PASSWORD_HERE>
      MYSQL_RANDOM_ROOT_PASSWORD: &#8216;1&#8217;
    volumes:
      &#8211; db:/var/lib/mysql

volumes:
  wordpress:
  db:</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #F07178">version</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">3.8</span><span style="color: #89DDFF">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">services</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">wordpress</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">image</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">arm64v8/wordpress</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">restart</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">always</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">ports</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">443:443</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">80:80</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">environment</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_HOST</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">db</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_USER</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_USER_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_PASSWORD</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_PASSWORD_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_NAME</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_NAME_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">wordpress:/var/www/html</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">db</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">image</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">arm64v8/mysql</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">restart</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">always</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">environment</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_DATABASE</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_NAME_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_USER</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_USER_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_PASSWORD</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_PASSWORD_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_RANDOM_ROOT_PASSWORD</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">1</span><span style="color: #89DDFF">&#39;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">db:/var/lib/mysql</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">wordpress</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">db</span><span style="color: #89DDFF">:</span></span></code></pre></div>



<p class="wp-block-paragraph">As you can see, we will compose two containers: WordPress and a MySQL database. Both of them are going to be based on the <em><a href="https://hub.docker.com/r/arm64v8">arm64v8</a></em> architecture. <em>Why MySQL?</em> Because a database is <a href="https://solidwp.com/blog/wordpress-database-explained/#h-why-does-wordpress-need-a-database"><em>a hard requirement for WordPress</em></a>. Without a relational database like MySQL or <a href="https://www.postgresql.org/">PostgreSQL</a>, there would be no WordPress.</p>



<p class="wp-block-paragraph">Execute the command below to start up the above Docker Compose manifest:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">1. Start the containers as defined in the manifest:</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>docker compose up</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">compose</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">up</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">2. Confirm they&#8217;re running:</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>sudo docker container list</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">container</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">list</span></span></code></pre></div>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-f56f613f wp-block-group-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557ec8f&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557ec8f" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="345" height="115" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-14.png" alt="You should see a similar output." class="wp-image-1515" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-14.png 345w, https://karnavaara.com/wp-content/uploads/2023/10/image-14-300x100.png 300w" sizes="auto, (max-width: 345px) 100vw, 345px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">You should see a similar output.</figcaption></figure>
</div>



<p class="wp-block-paragraph">Now, if you&#8217;ve done everything correctly up to this point, you should be able to connect to the WordPress container via the created compute instance&#8217;s IP address. You can find the compute instance&#8217;s IP address in OCI. Keep in mind that the traffic between you (the client) and the server will be entirely unencrypted plaintext. If someone were to listen to the traffic, they would see everything (e.g., your WordPress admin credentials).</p>



<h3 class="wp-block-heading" id="configure-tls-ssl-encryption-i-e-https">Configure TLS/SSL Encryption (i.e., HTTPS)</h3>



<h4 class="wp-block-heading">Approaches</h4>



<p class="wp-block-paragraph">TLS/SSL not only makes WordPress more secure for you but also for anyone using your site. Fortunately, you have multiple options when setting it up. Here are all the approaches that I know of:</p>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<figure class="wp-block-table"><table class="has-white-background-color has-background"><thead><tr><th>Approach</th><th>Difficulty</th><th>Security</th><th>Cost</th></tr></thead><tbody><tr><td><a href="https://www.entrust.com/resources/faq/what-is-a-self-signed-certificate"><em>self-signed certificates</em></a>.</td><td>Hardest</td><td>Security depends on how you sign them.</td><td>Free</td></tr><tr><td>Trusted <a href="https://stackoverflow.com/questions/40061263/what-is-ca-certificate-and-why-do-we-need-it"><em>CA-signed certificates</em></a> (e.g., <a href="https://letsencrypt.org/">Let&#8217;s Encrypt</a>).</td><td>Hard</td><td>Secure.</td><td>Requires a paid domain from a <a href="https://www.cloudflare.com/en-gb/learning/dns/glossary/what-is-a-domain-name-registrar/"><em>Domain Registrar</em></a>.</td></tr><tr><td>Cloudflare&#8217;s <a href="https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/flexible/"><em>Flexible</em></a> TLS/SSL protection mode.</td><td>Easy</td><td>For WordPress, this might suffice but<br><a href="https://r1ch.net/blog/dont-use-cloudflares-flexible-ssl"><em>comfort might come with a cost.</em></a></td><td>Requires a paid domain from a domain registrar.</td></tr></tbody></table><figcaption class="wp-element-caption">This table should give you an idea of all the different TLS/SSL approaches and the advantages/disadvantages of each.</figcaption></figure>
</div>



<p class="wp-block-paragraph">I&#8217;m personally a huge fan of&nbsp;<a href="https://www.cloudflare.com/en-gb/" target="_blank" rel="noreferrer noopener">Cloudflare</a>. They provide&nbsp;<a href="https://www.hipex.io/en/cloudflare/" target="_blank" rel="noreferrer noopener"><em>massive amounts of services</em></a>&nbsp;like hiding the ownership and tenure of a domain name, DDoS protection, and a free CA-signed certificate for a maximum of 15 years (after which it can be renewed for free). If you have a domain name (or plan to buy one), you&nbsp;<em>might</em>&nbsp;get off scot-free from all the complexity by using the Flexible protection mode mentioned in the table above. You only have to buy a domain from Cloudflare or&nbsp;<a href="https://developers.cloudflare.com/learning-paths/get-started/#add-a-domain-to-cloudflare" target="_blank" rel="noreferrer noopener"><em>register one with their DNS servers</em></a>&nbsp;and flip it on.&nbsp;<strong>But be aware that it won&#8217;t provide end-to-end (E2E) encryption.</strong></p>



<p class="wp-block-paragraph">If you have the know-how and don&#8217;t want to buy a domain, you can walk the self-signed certificate path. Remember that out of all the aforementioned approaches, it&#8217;s the hardest one (in my humble opinion). With that said, I can <a href="https://devopscube.com/create-self-signed-certificates-openssl/"><em>point you in the right direction</em></a>.</p>



<h4 class="wp-block-heading">The Winner</h4>



<p class="wp-block-paragraph">My recommendation is to use Trusted CA-signed certificates. They not only provide E2E encryption but, contrary to self-signed ones, <a href="https://franciscosalvetti.com/how-to-get-green-padlock"><em>mark your website as safe to use</em></a>. As I stand behind all my recommendations, this will be my path. For you to follow me, <strong>you must have a domain at your disposal.</strong> </p>



<h4 class="wp-block-heading" id="setting-up-ca-signed-certificates">Setting up CA-signed certificates</h4>



<h5 class="wp-block-heading">Reverse Proxy</h5>



<p class="wp-block-paragraph">When setting up TLS encryption it&#8217;s a good practice to isolate that responsibility to a wholly different server. I&#8217;ll be doing just that by setting up <a href="https://nginx.org/en/">NGINX</a> as a <a href="https://www.cloudflare.com/en-gb/learning/cdn/glossary/reverse-proxy/"><em>reverse proxy</em></a> for the upstream WordPress container. Due to the intrinsic nature of TLS, this will take some additional work, but no panic! It&#8217;ll be over in a heartbeat.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Shut the containers and start a Certbot one.</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>sudo docker compose down
sudo docker run -p 80:80 -it &#8211;rm &#8211;name certbot -v &#8220;./data/certbot/conf:/etc/letsencrypt&#8221; -v &#8220;./data/certbot/www:/var/www/certbot&#8221; certbot/certbot certonly</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">compose</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">down</span></span>
<span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">run</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-p</span><span style="color: #BABED8"> </span><span style="color: #F78C6C">80</span><span style="color: #C3E88D">:80</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-it</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">--rm</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">--name</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">certbot</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-v</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">./data/certbot/conf:/etc/letsencrypt</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-v</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">./data/certbot/www:/var/www/certbot</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">certbot/certbot</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">certonly</span></span></code></pre></div>



<p class="wp-block-paragraph">After starting up the ephemeral Certbot container (depicted by the -rm parameter), you must fill in a short form. It&#8217;s <em>very important</em> that you answer &#8220;1&#8221; to the first question. Whatever your domain is will define the answer to the second (and probably last) question.</p>



<p class="wp-block-paragraph">Afterwards, create a <em>data</em> folder and inside create a folder named <em>nginx</em>. Inside the <em>nginx</em> folder create the following file <strong>remembering to change the highlighted parts with your own domain</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(159, 170, 243, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Create ./data/nginx/nginx.conf </span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>upstream wordpress {
  keepalive 3;
  server wordpress:443;
  server wordpress:80;
}

server {
  listen 80;
  server_name example-domain.com;

  # Let&#8217;s Encrypt has to perform Domain Validation. 
  # It considers a domain validated, if it receives a 
  # certain response (i.e., the challenge) from a well 
  # known URL such as the below:
  location /.well-known/acme-challenge/ {
    root /var/www/certbot;
  }

  # Redirect HTTP requests to their HTTPS counterparts.
  location / {
    return 301 https://$host$request_uri;
  }
}

server {
 listen 443 ssl;
 server_name example-domain.com;
 ssl_certificate /etc/letsencrypt/live/example-domain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/example-domain.com/privkey.pem;

 # Let&#8217;s Encrypt&#8217;s best-practice HTTPS configurations for NGINX:
 include /etc/letsencrypt/options-ssl-nginx.conf;
 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

 location / {
  proxy_pass http://wordpress;

  # If this isn&#8217;t included, the upstream WordPress 
  # server won&#8217;t be able to serve content correctly.
  proxy_set_header    Host                $host;

  # Not hard requirements per se, but a good practice.
  proxy_set_header    X-Real-IP           $remote_addr;
  proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
  proxy_set_header   &#8220;Connection&#8221; &#8220;&#8221;;
 }
}</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #C792EA">upstream</span><span style="color: #BABED8"> </span><span style="color: #FFCB6B">wordpress </span><span style="color: #BABED8">{</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> keepalive </span><span style="color: #BABED8">3</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #89DDFF">server</span><span style="color: #BABED8"> wordpress:443;</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #89DDFF">server</span><span style="color: #BABED8"> wordpress:80;</span></span>
<span class="line"><span style="color: #BABED8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C792EA">server</span><span style="color: #BABED8"> {</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> listen </span><span style="color: #BABED8">80</span><span style="color: #89DDFF">;</span></span>
<span class="line cbp-line-highlight"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> server_name </span><span style="color: #BABED8">example-domain.com</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># Let&#39;s Encrypt has to perform Domain Validation. </span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># It considers a domain validated, if it receives a </span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># certain response (i.e., the challenge) from a well </span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># known URL such as the below:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #C792EA">location</span><span style="color: #BABED8"> </span><span style="color: #FFCB6B">/.well-known/acme-challenge/ </span><span style="color: #BABED8">{</span></span>
<span class="line"><span style="color: #BABED8">   </span><span style="color: #89DDFF"> root </span><span style="color: #BABED8">/var/www/certbot</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #BABED8">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># Redirect HTTP requests to their HTTPS counterparts.</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #C792EA">location</span><span style="color: #BABED8"> </span><span style="color: #FFCB6B">/ </span><span style="color: #BABED8">{</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #BABED8"> </span><span style="color: #F78C6C">301</span><span style="color: #BABED8"> https://</span><span style="color: #89DDFF">$</span><span style="color: #BABED8">host</span><span style="color: #89DDFF">$</span><span style="color: #BABED8">request_uri;</span></span>
<span class="line"><span style="color: #BABED8">  }</span></span>
<span class="line"><span style="color: #BABED8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C792EA">server</span><span style="color: #BABED8"> {</span></span>
<span class="line"><span style="color: #89DDFF"> listen </span><span style="color: #BABED8">443 ssl</span><span style="color: #89DDFF">;</span></span>
<span class="line cbp-line-highlight"><span style="color: #89DDFF"> server_name </span><span style="color: #BABED8">example-domain.com</span><span style="color: #89DDFF">;</span></span>
<span class="line cbp-line-highlight"><span style="color: #89DDFF"> ssl_certificate </span><span style="color: #BABED8">/etc/letsencrypt/live/example-domain.com/fullchain.pem</span><span style="color: #89DDFF">;</span></span>
<span class="line cbp-line-highlight"><span style="color: #89DDFF"> ssl_certificate_key </span><span style="color: #BABED8">/etc/letsencrypt/live/example-domain.com/privkey.pem</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #464B5D; font-style: italic"># Let&#39;s Encrypt&#39;s best-practice HTTPS configurations for NGINX:</span></span>
<span class="line"><span style="color: #89DDFF"> include </span><span style="color: #BABED8">/etc/letsencrypt/options-ssl-nginx.conf</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #89DDFF"> ssl_dhparam </span><span style="color: #BABED8">/etc/letsencrypt/ssl-dhparams.pem</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #C792EA">location</span><span style="color: #BABED8"> </span><span style="color: #FFCB6B">/ </span><span style="color: #BABED8">{</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> proxy_pass </span><span style="color: #BABED8">http://wordpress</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># If this isn&#39;t included, the upstream WordPress </span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># server won&#39;t be able to serve content correctly.</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> proxy_set_header </span><span style="color: #BABED8">   Host                </span><span style="color: #89DDFF">$</span><span style="color: #BABED8">host</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #464B5D; font-style: italic"># Not hard requirements per se, but a good practice.</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> proxy_set_header </span><span style="color: #BABED8">   X-Real-IP           </span><span style="color: #89DDFF">$</span><span style="color: #BABED8">remote_addr</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> proxy_set_header </span><span style="color: #BABED8">   X-Forwarded-For     </span><span style="color: #89DDFF">$</span><span style="color: #BABED8">proxy_add_x_forwarded_for</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #BABED8"> </span><span style="color: #89DDFF"> proxy_set_header </span><span style="color: #BABED8">  </span><span style="color: #C3E88D">&quot;Connection&quot;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&quot;&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #BABED8"> }</span></span>
<span class="line"><span style="color: #BABED8">}</span></span></code></pre></div>



<p class="wp-block-paragraph">This file will be your NGINX container&#8217;s <em><a href="https://www.mulesoft.com/resources/esb/what-is-single-source-of-truth-ssot">single source of truth</a></em> on configuration. In all honesty, NGINX is its own world altogether so I&#8217;m not going to delve into every teeny tiny bit as I&#8217;m probably as clueless as you. On a high level, <strong>this configuration will make NGINX act as a reverse proxy for upstream servers all the while encrypting the HTTP traffic making it HTTPS.</strong></p>



<h5 class="wp-block-heading">Fetching Best-Practice HTTPS Configurations</h5>



<p class="wp-block-paragraph">As these are included in the configuration file, we need to fetch them and move them to the appropriate directory. <strong>These files aren&#8217;t mandatory and can be omitted from the configuration but they&#8217;re recommended for additional security.</strong> Also, your SSL report from <a href="https://www.ssllabs.com/ssltest/">Qualys SSL Labs</a> will be better.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Fetch options-ssl-nginx.conf and ssl-dhparams.pem</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>sudo curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > ./data/certbot/conf/options-ssl-nginx.conf
sudo curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > ./data/certbot/conf/ssl-dhparams.pem</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">curl</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-s</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&gt;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">./data/certbot/conf/options-ssl-nginx.conf</span></span>
<span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">curl</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-s</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&gt;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">./data/certbot/conf/ssl-dhparams.pem</span></span></code></pre></div>



<h5 class="wp-block-heading">Finalizing Docker Compose Manifest</h5>



<p class="wp-block-paragraph">Afterwards edit the Docker Compose manifest file accordingly:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers cbp-blur-enabled" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(159, 170, 243, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Edit the ./docker-compose.yml file.</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>version: &#8216;3.8&#8217;

services:
  wordpress:
    image: arm64v8/wordpress
    restart: always
    ports:
      &#8211; &#8220;443&#8221;
      &#8211; &#8220;80&#8221;
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: &lt;DB_USER_HERE>
      WORDPRESS_DB_PASSWORD: &lt;DB_PASSWORD_HERE>
      WORDPRESS_DB_NAME: &lt;DB_NAME_HERE>
    volumes:
      &#8211; wordpress:/var/www/html
  db:
    image: arm64v8/mysql
    restart: always
    environment:
      MYSQL_DATABASE: &lt;DB_NAME_HERE>
      MYSQL_USER: &lt;DB_USER_HERE>
      MYSQL_PASSWORD: &lt;DB_PASSWORD_HERE>
      MYSQL_RANDOM_ROOT_PASSWORD: &#8216;1&#8217;
    volumes:
      &#8211; db:/var/lib/mysql
  nginx-rp:
    image: arm64v8/nginx
    container_name: nginx-rp
    depends_on:
      &#8211; wordpress
      &#8211; db
    restart: always
    ports:
      &#8211; &#8220;80:80&#8221;
      &#8211; &#8220;443:443&#8221;
    volumes:
      &#8211; ./data/certbot/conf:/etc/letsencrypt
      &#8211; ./data/certbot/www:/var/www/certbot
      &#8211; ./data/nginx:/etc/nginx/conf.d
volumes:
  wordpress:
  db:</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #F07178">version</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">3.8</span><span style="color: #89DDFF">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">services</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">wordpress</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">image</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">arm64v8/wordpress</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">restart</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">always</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">ports</span><span style="color: #89DDFF">:</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">443</span><span style="color: #89DDFF">&quot;</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">80</span><span style="color: #89DDFF">&quot;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">environment</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_HOST</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">db</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_USER</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_USER_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_PASSWORD</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_PASSWORD_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">WORDPRESS_DB_NAME</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_NAME_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">wordpress:/var/www/html</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">db</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">image</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">arm64v8/mysql</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">restart</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">always</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">environment</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_DATABASE</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_NAME_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_USER</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_USER_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_PASSWORD</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">&lt;DB_PASSWORD_HERE&gt;</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #F07178">MYSQL_RANDOM_ROOT_PASSWORD</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">1</span><span style="color: #89DDFF">&#39;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">db:/var/lib/mysql</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">  </span><span style="color: #F07178">nginx-rp</span><span style="color: #89DDFF">:</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">    </span><span style="color: #F07178">image</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">arm64v8/nginx</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">    </span><span style="color: #F07178">container_name</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">nginx-rp</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">    </span><span style="color: #F07178">depends_on</span><span style="color: #89DDFF">:</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">wordpress</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">db</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">    </span><span style="color: #F07178">restart</span><span style="color: #89DDFF">:</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">always</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">    </span><span style="color: #F07178">ports</span><span style="color: #89DDFF">:</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">80:80</span><span style="color: #89DDFF">&quot;</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">443:443</span><span style="color: #89DDFF">&quot;</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">    </span><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">./data/certbot/conf:/etc/letsencrypt</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">./data/certbot/www:/var/www/certbot</span></span>
<span class="line cbp-no-blur"><span style="color: #BABED8">      </span><span style="color: #89DDFF">-</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">./data/nginx:/etc/nginx/conf.d</span></span>
<span class="line"><span style="color: #F07178">volumes</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">wordpress</span><span style="color: #89DDFF">:</span></span>
<span class="line"><span style="color: #BABED8">  </span><span style="color: #F07178">db</span><span style="color: #89DDFF">:</span></span></code></pre></div>



<p class="wp-block-paragraph">As you can see, the host computer no longer routes HTTP (port 80) and HTTPS (port 443) traffic into the WordPress container but to the <em>nginx-rp</em> container. The WordPress container still accepts HTTP and HTTPS traffic, which is why <em>nginx-rp</em> can route traffic to the defined upstream server (rows 1-5 and 35-46 in the <em>nginx.conf</em>). </p>



<p class="wp-block-paragraph">Now you can start up the containers and hope for the best:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Compose up the containers.</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>sudo docker compose up</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">compose</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">up</span></span></code></pre></div>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-f56f613f wp-block-group-is-layout-flex">
<p class="wp-block-paragraph">If all goes well, <strong>you can now access your WordPress platform via a browser by using the domain name</strong>. For me (as you probably can deduce), it&#8217;s&nbsp;<em>karnavaara.com</em>. Also, you should now notice that the connection (to the left of the address bar) is secure and encrypted.&nbsp;However, we still need to configure automatic renewal as the certificates expire after three months.  </p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba557f8ea&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba557f8ea" class="wp-block-image size-full has-custom-border is-style-default wp-lightbox-container"><img loading="lazy" decoding="async" width="350" height="200" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-15.png" alt="" class="wp-image-1613" style="border-width:1px" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-15.png 350w, https://karnavaara.com/wp-content/uploads/2023/10/image-15-300x171.png 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">How HTTPS looks like</figcaption></figure>
</div>



<h5 class="wp-block-heading" id="setting-up-automatic-renewal-of-certificates">Setting up automatic renewal</h5>



<p class="wp-block-paragraph">With the power of Linux this is more than doable<sup>(<em>maybe even millionable</em>)</sup>. We can utilize <a href="https://man7.org/linux/man-pages/man5/crontab.5.html">Crontab</a> (the instructor for the <a href="https://man7.org/linux/man-pages/man8/cron.8.html">Cron daemon</a>) and <a href="https://ryanstutorials.net/bash-scripting-tutorial/bash-script.php"><em>Bash scripts</em></a>. Both are, of course, preinstalled on Linux distributions. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Create a bash script called renew_certs.sh:</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>nano ./renew_certs.sh</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">nano</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">./renew_certs.sh</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Add the following content to it:</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>#!/bin/bash

# Maybe redundant, but I have PTSD.
cd ~

# Run Certbot&#8217;s renew command in an ephemeral container called certbot:
sudo docker run -it &#8211;rm &#8211;name certbot -v &#8220;/etc/letsencrypt:/etc/letsencrypt&#8221; -v &#8220;/var/lib/letsencrypt:/var/lib/letsencrypt&#8221; certbot/certbot:arm64v8-latest renew

# Reload the NGINX running inside the nginx-rp container with the potential new certs:
sudo docker exec nginx-rp nginx -s reload</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #464B5D; font-style: italic">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color: #464B5D; font-style: italic"># Maybe redundant, but I have PTSD.</span></span>
<span class="line"><span style="color: #82AAFF">cd</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">~</span></span>
<span class="line"></span>
<span class="line"><span style="color: #464B5D; font-style: italic"># Run Certbot&#39;s renew command in an ephemeral container called certbot:</span></span>
<span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">run</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-it</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">--rm</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">--name</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">certbot</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-v</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">/etc/letsencrypt:/etc/letsencrypt</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-v</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">/var/lib/letsencrypt:/var/lib/letsencrypt</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">certbot/certbot:arm64v8-latest</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">renew</span></span>
<span class="line"></span>
<span class="line"><span style="color: #464B5D; font-style: italic"># Reload the NGINX running inside the nginx-rp container with the potential new certs:</span></span>
<span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">docker</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">exec</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">nginx-rp</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">nginx</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-s</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">reload</span></span></code></pre></div>



<p class="wp-block-paragraph">This script basically renews the certifications if they happen to expire. Next, we&#8217;ll use Crontab to run this script automatically every 12 hours. Why 12 hours? Because this was <a href="https://serverfault.com/a/825032">Let&#8217;s Encrypt&#8217;s recommendation in the past</a>. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Open the root&#8217;s crontab file:</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>sudo crontab -e</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">sudo</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">crontab</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">-e</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#babed8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#181c2a;color:#aaafcf">Add this line to the bottom:</span><span role="button" tabindex="0" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><textarea class="code-block-pro-copy-button-textarea" aria-hidden="true" readonly>0 */12 * * * /home/ubuntu/renew_certs.sh</textarea><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">0</span><span style="color: #BABED8"> </span><span style="color: #BABED8">*</span><span style="color: #C3E88D">/12</span><span style="color: #BABED8"> </span><span style="color: #BABED8">*</span><span style="color: #BABED8"> </span><span style="color: #BABED8">*</span><span style="color: #BABED8"> </span><span style="color: #BABED8">*</span><span style="color: #BABED8"> </span><span style="color: #C3E88D">/home/ubuntu/renew_certs.sh</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#0F111A;color:#aaafcf;font-size:12px;line-height:1;position:relative">If you&#8217;re using a different user, you have to change &#8220;ubuntu&#8221; to its name.</span></div>



<p class="wp-block-paragraph">I&#8217;m being honest here:&nbsp;<strong>This automatic renewal implementation is only theoretical, and I haven&#8217;t proven its feasibility in practice as my certificate hasn&#8217;t expired yet.</strong>&nbsp;It remains to be seen if this is practical. Though, I fail to see a reason why it would be impractical. </p>



<p class="wp-block-paragraph">We&#8217;re all done here. You hopefully now have a working implementation of WordPress running on a domain of your choice with a front NGINX reverse proxy that encrypts HTTP traffic into HTTPS.</p>



<h3 class="wp-block-heading" id="finish-the-installation-by-going-through-the-famous-five-minute-wordpress-installation-process">Go through the famous five-minute WordPress installation process.</h3>



<p class="wp-block-paragraph">This part is simple. The first time you open WordPress in a browser window via its URL, you must fill in <a href="https://developer.wordpress.org/advanced-administration/before-install/howto-install/#finishing-installation">a basic form</a>. Invent an obscure username and a strong password that&#8217;s impossible to practically brute force.</p>



<p class="wp-block-paragraph"><strong>If errors were to befall you, I&#8217;d wager a guess that you misconfigured the MySQL container in the Docker Compose manifest file.</strong> Ensure that the WordPress container&#8217;s database-related environment variables are correct. WordPress requires valid credentials to access the MySQL database.</p>



<h3 class="wp-block-heading" id="install-updraftplus-w3-total-cache-and-limit-login-attempts-reloaded-plugins-for-security-hardening-seo-faster-performance-and-resilience">Install plugins for security hardening, faster performance, and resilience.</h3>



<p class="wp-block-paragraph">There are thousands of plugins to choose from. This part is completely optional, although recommended as plugins provide your self-hosted WordPress instance with valuable functionality.</p>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cbba558019c&quot;}" data-wp-interactive="core/image" data-wp-key="69cbba558019c" class="wp-block-image size-full has-custom-border wp-lightbox-container"><img loading="lazy" decoding="async" width="756" height="422" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://karnavaara.com/wp-content/uploads/2023/10/image-16.png" alt="As an admin user, you can add plugins from &quot;Plugins&quot; -&gt; &quot;Add New&quot;." class="wp-image-1640" style="border-width:1px" srcset="https://karnavaara.com/wp-content/uploads/2023/10/image-16.png 756w, https://karnavaara.com/wp-content/uploads/2023/10/image-16-300x167.png 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">As an admin user, you can add plugins from &#8220;Plugins&#8221; -&gt; &#8220;Add New&#8221;. </figcaption></figure>
</div>



<p class="wp-block-paragraph">I wholeheartedly recommend you install at least these plugins: </p>



<ul class="wp-block-list">
<li><em>Limit Login Attempts Reloaded</em> (LLAR) for security. 
<ul class="wp-block-list">
<li>It makes brute forcing much more difficult as this plugin can, for example, timeout IPs that exceed four login tries in under 20 minutes.</li>
</ul>
</li>



<li><em>W3 Total Cache</em> for performance.
<ul class="wp-block-list">
<li>This plugin can do a lot of things but as the name implies it caches your WordPress content. It can reduce server load through caching and content <a href="https://www.imperva.com/learn/performance/minification/" target="_blank" rel="noreferrer noopener"><em>minification</em></a>.</li>
</ul>
</li>



<li><em>UpdraftPlus</em> for <a href="https://www.f5.com/glossary/recovery-point-objective-rpo" target="_blank" rel="noreferrer noopener"><em>Recovery Point Objective</em></a> (RPO).
<ul class="wp-block-list">
<li>You can setup backups in OCI if you want, but it will increase your cloud bill (<em>and is probably a bit overkill</em>). You can use UpdraftPlus to implement your own RPO and without any cost (e.g., to Google Drive).</li>



<li>A very important note to take into account is <em>privacy</em>. I don&#8217;t know how much UpdraftPlus respects it. <strong>If you process confidential and personal information, I&#8217;d probably trust more in Oracle than UpdraftPlus.</strong></li>
</ul>
</li>



<li id="update1"><em>WPS Hide Login</em> for changing the default WordPress login URL.
<ul class="wp-block-list">
<li>Even though LLAR protects against brute forcing, it&#8217;s not enough. It would be prudent to add another security layer. With <em>WPS Hide Login</em> we can implement <a href="https://en.wikipedia.org/wiki/Security_through_obscurity" target="_blank" rel="noreferrer noopener">Security Through Obscurity</a> by obscuring the login URL.</li>



<li>Security Through Obscurity is a bad practice. Still, it&#8217;s better than nothing because it can slow and demotivate malicious actors as they have to resort to a technique called <a href="https://www.blackduck.com/glossary/what-is-fuzz-testing.html" target="_blank" rel="noreferrer noopener">fuzzing</a> to find the login URL, which you have set as a custom and irregular one.</li>



<li>&#8220;<em>While not a standalone solution, security through obscurity can complement other security measures in certain scenarios.</em>&#8221; –Wikipedia</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Finalmente</h2>



<p class="wp-block-paragraph">And that&#8217;s it! My title stands as this should cost you only pennies. If you joined me for the whole journey, you will probably pay only for storage (<a href="#mandatory-costs">mentioned here</a>) and the domain. Of course, you could do this on your home server (also known as <a href="https://www.insight.com/en_US/content-and-resources/glossary/o/on-premises.html"><em>on-premises</em></a>). But that could be far more complex and you&#8217;d be paying pennies for that<sup>(electricity)</sup> too if not more. </p>



<p class="wp-block-paragraph">I&#8217;ll&nbsp;<a href="#ssh-key-pro-tip">mention this</a>&nbsp;the final time: make it a habit to use a&nbsp;<em>secure</em>&nbsp;password manager and put your SSH keys there. <strong>Don&#8217;t save them locally in plaintext!</strong> Trust me, they quickly pile up while being hard to manage. On top of a lack of management, they increase your attack surface. What happens if your device gets stolen? Or what about if the device gets broken? Or what about if you buy a new computer and forget about the SSH keys altogether?</p>



<h2 class="wp-block-heading" id="supplementary">Supplementary</h2>


<ol class="wp-block-footnotes"><li id="019886f8-0e44-4fff-9bad-0ae7b9b42206">Consider this <a href="https://themes.gohugo.io/themes/github-style/"><em>GitHub-esque theme</em></a> (or maybe this <em><a href="https://github.com/frjo/hugo-theme-zen">zen theme</a></em>), if you decide to try Hugo. <a href="#019886f8-0e44-4fff-9bad-0ae7b9b42206-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="448b6a3e-a196-46cd-a51a-8a9fb6717667">Maybe an insightful endeavor worth doing for a new <em>sapling</em>. <a href="#448b6a3e-a196-46cd-a51a-8a9fb6717667-link" aria-label="Jump to footnote reference 2"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="e4e1333e-3fa7-458e-95b1-93d1fec2a166">Also known as Karnavaara – the Forested Hill of Insight. <a href="#e4e1333e-3fa7-458e-95b1-93d1fec2a166-link" aria-label="Jump to footnote reference 3"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="97810694-81d6-4b55-b75c-88bf796dc46b">Though, paradoxically, there are still <a href="https://www.freecodecamp.org/news/7-cases-when-not-to-use-docker/"><em>valid reasons</em></a> to steer away from using Docker. You can, for example, opt-in to use <a href="https://www.vagrantup.com/">Vagrant</a> instead. <a href="#97810694-81d6-4b55-b75c-88bf796dc46b-link" aria-label="Jump to footnote reference 4"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="fe6fded5-9050-4c17-8de9-95466bd380f6">Docker images are Open Container Initiative (OCI) compliant. <a href="#fe6fded5-9050-4c17-8de9-95466bd380f6-link" aria-label="Jump to footnote reference 5"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Genesis</title>
		<link>https://karnavaara.com/genesis/genesis</link>
		
		<dc:creator><![CDATA[Kvaara]]></dc:creator>
		<pubDate>Wed, 18 Oct 2023 06:53:43 +0000</pubDate>
				<category><![CDATA[Genesis]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Luck]]></category>
		<category><![CDATA[Philosophy]]></category>
		<guid isPermaLink="false">https://kvaara.com/?p=176</guid>

					<description><![CDATA[The coming of Karnavaara - The Forested Hill of Insight.]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote has-text-align-center has-medium-font-size is-layout-flow wp-block-quote-is-layout-flow">
<div style="height:1px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-text-align-center has-medium-font-size wp-block-paragraph">&#8220;It’s easy to climb a hill with trees, right? Nature keeps you company and gives you shelter. But what happens when the trees end?&#8221;</p>
<cite>—Karnavaara</cite></blockquote>



<h2 class="wp-block-heading">Reason</h2>



<p class="wp-block-paragraph">My name is Jesse, and this is my personal, well, let&#8217;s say, <em>hub of knowledge</em>. This hub is mainly for me, though it never hurts to have another pair of eyes take a peek at your insights. Please make yourself feel at home.</p>



<p class="wp-block-paragraph">What&#8217;s my main goal here? Well, to be starkly gritty, it&#8217;s to survive. My last name, Karnavaara, doesn&#8217;t really mean anything apart from &#8220;vaara&#8221;, which is equivalent to <em>danger </em>or <em>risk</em>. To survive danger (or risks), you must be prepared and lucky. It&#8217;s exactly like this famous quote: </p>



<blockquote class="wp-block-quote has-text-align-center has-small-font-size is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center has-small-font-size wp-block-paragraph"><strong>&#8220;Luck Is What Happens When Preparation Meets Opportunity.&#8221;</strong></p>
<cite>—SENECA</cite></blockquote>



<p class="wp-block-paragraph">Seneca had it right. You could wait for luck to happen <em>reactively</em>, or you could <em>proactively</em> prepare for it, all the while honing your skills. And, when luck finally does happen, its scale will be <em>astronomical</em>. But remember, luck can be both good and <strong>bad</strong>. You shouldn&#8217;t only prepare for the good luck, but the bad. This is where the word &#8220;danger&#8221; comes back into play, and it&#8217;s why I created my own meaning (although very abstract) for my last name: <strong>Forested Hill of Insight</strong>.</p>



<h2 class="wp-block-heading">From Abstract to Concrete</h2>



<p class="wp-block-paragraph">Although abstract, it&#8217;s very pertinent. The <em>hill </em>depicts my life: I <s>want to</s> need to keep climbing. It being <em>forested</em> means it&#8217;s filled with trees that together form a forest. <em>Of insight</em> describes the hill with the trees as related to some understanding or knowledge. Indeed, without trees, the hill wouldn&#8217;t be <em>of insight</em>. It needs to be <em>forested</em>.</p>



<p class="wp-block-paragraph">It’s easy to climb a hill&nbsp;<sup>(life)</sup>&nbsp;with trees&nbsp;<sup>(insight)</sup>, right? Nature keeps you company and shelters you. But what happens when the trees end? <em>You don&#8217;t let them</em>. Someway, you have to keep sowing the seeds of insight and reaping knowledge. If you don&#8217;t, the Forested Hill of Insight will wither. And if it does, how are you prepared for the luck (be it bad or good) to come?</p>



<p class="wp-block-paragraph">For me, it&#8217;s (purposefully) personal; I can&#8217;t let <em>Karnavaara</em> die. And so, consequently, this place of storing knowledge and diaries was born. But remember, <strong>there&#8217;s a forest akin to Karnavaara inside each of us.</strong> Your forest might look entirely different from mine: the trees and their bark, the diverse ecosystems, and the colors might all differ. But it&#8217;s still a forest nonetheless, and you&#8217;re its keeper. <em>You make up its legacy, and the forest makes yours.</em></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: karnavaara.com @ 2026-03-31 15:13:09 by W3 Total Cache
-->