<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on nuteo.info</title><link>https://nuteo.info/en/tags/linux/</link><description>Recent content in Linux on nuteo.info</description><generator>Hugo</generator><language>en</language><copyright>© 2026 Nuteo</copyright><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nuteo.info/en/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Setting up a VPS for production: the 2026 playbook</title><link>https://nuteo.info/en/guides/vps-setup-playbook/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://nuteo.info/en/guides/vps-setup-playbook/</guid><description>&lt;h1 id="setting-up-a-vps-for-production"&gt;Setting up a VPS for production&lt;/h1&gt;
&lt;p&gt;Every time I set up a new VPS, I do the same dance: patch it, lock it down,
deploy Docker, set up backups. This guide is the playbook — every step I
actually run, in order.&lt;/p&gt;
&lt;h2 id="0-pre-flight"&gt;0. Pre-flight&lt;/h2&gt;
&lt;p&gt;Before I SSH in for the first time, I always:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set the &lt;strong&gt;hostname&lt;/strong&gt; in the cloud console&lt;/li&gt;
&lt;li&gt;Add my SSH key (not password!)&lt;/li&gt;
&lt;li&gt;Note the &lt;strong&gt;public IPv4&lt;/strong&gt; and &lt;strong&gt;private IP&lt;/strong&gt; (if VPC)&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;DNS A record&lt;/strong&gt; pointing to the public IP&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1-first-60-seconds"&gt;1. First 60 seconds&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install -y ufw fail2ban unattended-upgrades curl wget git htop vim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;timedatectl set-timezone Asia/Bangkok
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Set timezone first. Logs mean nothing without correct timestamps.&lt;/p&gt;</description></item></channel></rss>