<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Vivek Shukla</title>
    <subtitle>I am a Software Engineer from India. I am currently building Daestro. I work in Rust, Javascript and Python.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://vshukla.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://vshukla.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-26T00:00:00+00:00</updated>
    <id>https://vshukla.com/atom.xml</id>
    <entry xml:lang="en">
        <title>IndexNow Bulk URL Submit Using Curl</title>
        <published>2026-04-26T00:00:00+00:00</published>
        <updated>2026-04-26T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/index-now-bulk-url-submit-api/"/>
        <id>https://vshukla.com/snippets/index-now-bulk-url-submit-api/</id>
        <summary type="html">IndexNow is a service which is used to inform search engines i.e. Bing, Naver, Seznam.cz, Yandex and Yep, about the content updates. This improves indexing.</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/index-now-bulk-url-submit-api/">&lt;p&gt;IndexNow is a service which is used to inform search engines i.e. Bing, Naver, Seznam.cz, Yandex and Yep, about the content updates. This improves indexing. &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bing.com&#x2F;indexnow&quot;&gt;More info&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;IndexNow API supports upto 10,000 links submission in a day.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Make sure to have a randomly generated key &lt;code&gt;c3755574c3ae4c259262854b0f241ec8.txt&lt;&#x2F;code&gt; at the root of your website. &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bing.com&#x2F;indexnow&#x2F;getstarted&quot;&gt;Generate key here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;payload&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#payload&quot; aria-label=&quot;Anchor link for: payload&quot;&gt;🔗&lt;&#x2F;a&gt;Payload&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;payload.json&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;	&amp;quot;host&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;example.com&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;	&amp;quot;key&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;random-key&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;	&amp;quot;keyLocation&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;https:&#x2F;&#x2F;example.com&#x2F;random-key.txt&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;	&amp;quot;urlList&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;		&amp;quot;https:&#x2F;&#x2F;example.com&#x2F;blog&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;curl&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#curl&quot; aria-label=&quot;Anchor link for: curl&quot;&gt;🔗&lt;&#x2F;a&gt;Curl&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -v -X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; POST https:&#x2F;&#x2F;api.indexnow.org&#x2F;indexnow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -H&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;Content-Type: application&#x2F;json&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; @payload.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>PostgreSQL: Make Create&#x2F;Drop Operations Infallible</title>
        <published>2026-04-25T00:00:00+00:00</published>
        <updated>2026-04-25T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/safe-postgresql-create-drop-operation/"/>
        <id>https://vshukla.com/snippets/safe-postgresql-create-drop-operation/</id>
        <summary type="html">Make PostgreSQL create&#x2F;drop operations infallible by using IF EXISTS and IF NOT EXISTS within the query, which will only run the operation when condition matches.</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/safe-postgresql-create-drop-operation/">&lt;p&gt;While creating a database table, column or index, if it already exist, postgres will throw the error and abort the whole operation. Using &lt;code&gt;IF EXISTS&lt;&#x2F;code&gt; and &lt;code&gt;IF NOT EXISTS&lt;&#x2F;code&gt; is a way to make them infallible.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;creating-and-dropping-entire-tables&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#creating-and-dropping-entire-tables&quot; aria-label=&quot;Anchor link for: creating-and-dropping-entire-tables&quot;&gt;🔗&lt;&#x2F;a&gt;Creating and Dropping Entire Tables&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Create:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;CREATE TABLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; IF&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; NOT EXISTS&lt;&#x2F;span&gt;&lt;span&gt; users (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    id UUID &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;PRIMARY KEY&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    email &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;DROP TABLE IF EXISTS&lt;&#x2F;span&gt;&lt;span&gt; users;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;adding-and-removing-columns&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#adding-and-removing-columns&quot; aria-label=&quot;Anchor link for: adding-and-removing-columns&quot;&gt;🔗&lt;&#x2F;a&gt;Adding and Removing Columns&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Add Column:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; users &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;ADD&lt;&#x2F;span&gt;&lt;span&gt; COLUMN &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;IF NOT EXISTS&lt;&#x2F;span&gt;&lt;span&gt; phone_number &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop Column:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; users &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;DROP&lt;&#x2F;span&gt;&lt;span&gt; COLUMN &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;IF EXISTS&lt;&#x2F;span&gt;&lt;span&gt; phone_number;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;dropping-constraints-easy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dropping-constraints-easy&quot; aria-label=&quot;Anchor link for: dropping-constraints-easy&quot;&gt;🔗&lt;&#x2F;a&gt;Dropping Constraints (Easy)&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop Constraint:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; users &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;DROP CONSTRAINT IF EXISTS&lt;&#x2F;span&gt;&lt;span&gt; unique_email_constraint;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;adding-constraints-the-tricky-one&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#adding-constraints-the-tricky-one&quot; aria-label=&quot;Anchor link for: adding-constraints-the-tricky-one&quot;&gt;🔗&lt;&#x2F;a&gt;Adding Constraints (The Tricky One)&lt;&#x2F;h3&gt;
&lt;p&gt;To make adding a constraint truly infallible, we have to use a tiny bit of PostgreSQL logic called a &lt;code&gt;DO&lt;&#x2F;code&gt; blocIt checks the database records first before trying to add the rule.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Safe Add Constraint (using a DO block):&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DO $$ &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;BEGIN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;    -- Check if the constraint name already exists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    IF NOT EXISTS&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        FROM&lt;&#x2F;span&gt;&lt;span&gt; pg_constraint &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        WHERE&lt;&#x2F;span&gt;&lt;span&gt; conname &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;unique_email_constraint&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;THEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;        -- If it does not exist, add it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; users &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        ADD CONSTRAINT&lt;&#x2F;span&gt;&lt;span&gt; unique_email_constraint &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;UNIQUE&lt;&#x2F;span&gt;&lt;span&gt; (email);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    END IF&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;END&lt;&#x2F;span&gt;&lt;span&gt; $$;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;custom-types-and-enums-bonus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#custom-types-and-enums-bonus&quot; aria-label=&quot;Anchor link for: custom-types-and-enums-bonus&quot;&gt;🔗&lt;&#x2F;a&gt;Custom Types and Enums (Bonus)&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop Type:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;DROP TYPE IF EXISTS&lt;&#x2F;span&gt;&lt;span&gt; job_status_enum;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Safe Create Type:&lt;&#x2F;strong&gt; &lt;em&gt;(Postgres does not have &lt;code&gt;CREATE TYPE IF NOT EXISTS&lt;&#x2F;code&gt;, so we use another &lt;code&gt;DO&lt;&#x2F;code&gt; block)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DO $$ &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;BEGIN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    IF NOT EXISTS&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span&gt; pg_type &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; typname &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;#39;job_status_enum&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;THEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;        CREATE TYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB454;&quot;&gt; job_status_enum&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt; AS&lt;&#x2F;span&gt;&lt;span&gt; ENUM (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;submitted&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;pending&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;&amp;#39;completed&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;    END IF&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF8F40;&quot;&gt;END&lt;&#x2F;span&gt;&lt;span&gt; $$;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Meditation</title>
        <published>2026-04-08T00:00:00+00:00</published>
        <updated>2026-04-08T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/blog/meditation/"/>
        <id>https://vshukla.com/blog/meditation/</id>
        <summary type="html">Just sit.</summary>
        <content type="html" xml:base="https://vshukla.com/blog/meditation/">&lt;p&gt;Meditation is not something that you do, you just allow it to happen. It just needs right ambience within you and enough practice. I think our inner nature itself is meditative and still, we just need to harness it. Make ourselves available to it.&lt;&#x2F;p&gt;
&lt;p&gt;Don’t be or aspire to be a senior or experienced meditator, there is no such thing. &lt;strong&gt;Always sit with the mindset of a beginner, as if you are doing it for the first time.&lt;&#x2F;strong&gt; Do not chase or ponder upon any experience during meditation, discard it, do not talk or think about it, forget it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sit&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sit&quot; aria-label=&quot;Anchor link for: sit&quot;&gt;🔗&lt;&#x2F;a&gt;Sit&lt;&#x2F;h2&gt;
&lt;p&gt;Sit cross legged, keep your spine comfortably erect, your palms open and resting on your legs, eyes closed, your tongue placed at the origin of upper teeth, head slightly upward than normal, put a smile on your face. Tell you mind to relax. Take 3 deep breaths with full stomach.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;embark&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#embark&quot; aria-label=&quot;Anchor link for: embark&quot;&gt;🔗&lt;&#x2F;a&gt;Embark&lt;&#x2F;h2&gt;
&lt;p&gt;Close you eyes: Feel the environment, feel the temperature on your skin. Listen to the sounds around you. Smell the odour around you. Feel the touch of your body to your asana. Feel your body from top to bottom. See the darkness of the closed eyes. Ask yourself, “Who am I”. See the thoughts that arise in you like wave, observe them untill they disappear, don’t engage, then feel the phenomena that keeps you alive, &lt;strong&gt;your breathing&lt;&#x2F;strong&gt;, just observe, let the body be. Just keep watching, even if your mind wants you to focus on your thoughts, just say &lt;strong&gt;not now&lt;&#x2F;strong&gt;, then come back to observe your breathing.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>To make things happen, focus</title>
        <published>2025-09-10T00:00:00+00:00</published>
        <updated>2025-09-10T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/blog/2025/to-make-things-happen-focus/"/>
        <id>https://vshukla.com/blog/2025/to-make-things-happen-focus/</id>
        <content type="html" xml:base="https://vshukla.com/blog/2025/to-make-things-happen-focus/">&lt;p&gt;There are a gazillion thing one may want to do, may be as a escape, may be as a distraction, may be just wishful thinking, just to avoid one thing that they should do.&lt;&#x2F;p&gt;
&lt;p&gt;The more substantial thing you want to do, the more focus it will require. Don’t get distracted, to do something big you need to put your head down and work. Your goal must become center of your life, it must consume you.&lt;&#x2F;p&gt;
&lt;p&gt;Either knowingly or unknowingly, people who have done something worthy in their life has put their focus on the goal. May be they thought it as passion or obsession or challenge, but they kept their focus.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;is it worth doing?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;When you pick something up, ask yourself, &lt;strong&gt;is it worth doing?&lt;&#x2F;strong&gt; Just a question in void, can clear a lot of things in you.&lt;&#x2F;p&gt;
&lt;p&gt;May be you will fail, may be you will succeed, but if it’s worth doing, it should be done. It should be done for yourself. It’s important to pick some goals which are bigger than you, that is how you grow.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>UFW Cheat Sheet</title>
        <published>2025-09-09T00:00:00+00:00</published>
        <updated>2025-09-09T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/ufw-cheat-sheet/"/>
        <id>https://vshukla.com/snippets/ufw-cheat-sheet/</id>
        <summary type="html">UFW stands Uncomplicated Firewall which provides simple interface over iptables to create host based firewall for IPv4 or IPv6</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/ufw-cheat-sheet/">&lt;h2 id=&quot;check-status&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-status&quot; aria-label=&quot;Anchor link for: check-status&quot;&gt;🔗&lt;&#x2F;a&gt;Check status&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw status verbose&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw status numbered&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;delete-value-based-on-number&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#delete-value-based-on-number&quot; aria-label=&quot;Anchor link for: delete-value-based-on-number&quot;&gt;🔗&lt;&#x2F;a&gt;Delete value based on number:&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw delete&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;allow-port&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#allow-port&quot; aria-label=&quot;Anchor link for: allow-port&quot;&gt;🔗&lt;&#x2F;a&gt;Allow port&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow 22&#x2F;tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;deny-port&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#deny-port&quot; aria-label=&quot;Anchor link for: deny-port&quot;&gt;🔗&lt;&#x2F;a&gt;Deny port&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw deny 80&#x2F;tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;allow-from-ip-address-or-subnet&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#allow-from-ip-address-or-subnet&quot; aria-label=&quot;Anchor link for: allow-from-ip-address-or-subnet&quot;&gt;🔗&lt;&#x2F;a&gt;Allow from ip address or subnet&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow from 10.22.96.0&#x2F;20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;allow-from-ip-address-to-specific-port&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#allow-from-ip-address-to-specific-port&quot; aria-label=&quot;Anchor link for: allow-from-ip-address-to-specific-port&quot;&gt;🔗&lt;&#x2F;a&gt;Allow from ip address to specific port&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow from 10.22.96.0&#x2F;20 proto tcp to any port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 5432&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;disable-ufw&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#disable-ufw&quot; aria-label=&quot;Anchor link for: disable-ufw&quot;&gt;🔗&lt;&#x2F;a&gt;Disable ufw&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw disable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;block-an-ip-address-or-subnet&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#block-an-ip-address-or-subnet&quot; aria-label=&quot;Anchor link for: block-an-ip-address-or-subnet&quot;&gt;🔗&lt;&#x2F;a&gt;Block an ip address or subnet&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw deny from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 203.0.113.100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;delete-a-rule&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#delete-a-rule&quot; aria-label=&quot;Anchor link for: delete-a-rule&quot;&gt;🔗&lt;&#x2F;a&gt;Delete a rule&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw delete allow from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 203.0.113.101&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;allow-incoming-connection-to-a-network-interface&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#allow-incoming-connection-to-a-network-interface&quot; aria-label=&quot;Anchor link for: allow-incoming-connection-to-a-network-interface&quot;&gt;🔗&lt;&#x2F;a&gt;Allow incoming connection to a network interface&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow in on eth0 from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 203.0.113.102&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Setup Redis TLS With Self-signed Certificate</title>
        <published>2025-09-08T00:00:00+00:00</published>
        <updated>2025-09-08T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/tech/setup-redis-tls-with-self-signed-certs/"/>
        <id>https://vshukla.com/tech/setup-redis-tls-with-self-signed-certs/</id>
        <summary type="html">Brief guide on how to setup Redis TLS using Self-signed certificate.</summary>
        <content type="html" xml:base="https://vshukla.com/tech/setup-redis-tls-with-self-signed-certs/">&lt;blockquote&gt;
&lt;p&gt;This method is only recommended when connecting to redis server via local network.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;generate-server-certificates&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#generate-server-certificates&quot; aria-label=&quot;Anchor link for: generate-server-certificates&quot;&gt;🔗&lt;&#x2F;a&gt;Generate Server Certificates&lt;&#x2F;h2&gt;
&lt;p&gt;Generate Cert and Key file for self signed TLS, then move both these files to redis directory and set the proper permissions. Delete the Key file and copy the cert file to the client machine which will connect to the redis-server.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F07178;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;openssl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -x509 -nodes -days&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 3650&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -newkey&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; rsa:2048&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;  -keyout&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; redis_tls.key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; redis_tls.crt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt;  -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &amp;quot;&#x2F;CN=YourOrg&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; cp redis_tls.key redis_tls.crt &#x2F;etc&#x2F;redis&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; redis_tls.key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; chmod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 600&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;etc&#x2F;redis&#x2F;redis_tls.key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; chmod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; 644&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;etc&#x2F;redis&#x2F;redis_tls.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; chown redis:redis &#x2F;etc&#x2F;redis&#x2F;redis_tls.key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; chown redis:redis &#x2F;etc&#x2F;redis&#x2F;redis_tls.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;update-redis-configuration-file&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#update-redis-configuration-file&quot; aria-label=&quot;Anchor link for: update-redis-configuration-file&quot;&gt;🔗&lt;&#x2F;a&gt;Update Redis Configuration File&lt;&#x2F;h2&gt;
&lt;p&gt;This command will append the value to &lt;code&gt;redis.conf&lt;&#x2F;code&gt; (redis configuration file). Make sure to update the password.&lt;&#x2F;p&gt;
&lt;p&gt;It will disable the non-tls support and enable the tls connection at port &lt;code&gt;6379&lt;&#x2F;code&gt; with previously generated key and cert files.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; tee&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;etc&#x2F;redis&#x2F;redis.conf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;bind * -::*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;port 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;tls-port 6379&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;tls-cert-file &#x2F;etc&#x2F;redis&#x2F;redis_tls.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;tls-key-file &#x2F;etc&#x2F;redis&#x2F;redis_tls.key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;tls-auth-clients no&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;tls-prefer-server-ciphers yes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;requirepass YOUR_PASSWORD_HERE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Restart and enable redis&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl restart redis-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl enable redis-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Check status with&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl status redis-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If any error then check journal (log)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; journalctl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; redis-server&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;add-redis-certificate-to-trusted-ca-store-in-client-machine&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#add-redis-certificate-to-trusted-ca-store-in-client-machine&quot; aria-label=&quot;Anchor link for: add-redis-certificate-to-trusted-ca-store-in-client-machine&quot;&gt;🔗&lt;&#x2F;a&gt;Add Redis Certificate to Trusted CA Store in Client Machine&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Copy your certificate to CA certificates directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; mv redis_tls.crt &#x2F;usr&#x2F;local&#x2F;share&#x2F;ca-certificates&#x2F;redis_tls.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# Update CA certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; update-ca-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;redis-connection-url&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#redis-connection-url&quot; aria-label=&quot;Anchor link for: redis-connection-url&quot;&gt;🔗&lt;&#x2F;a&gt;Redis Connection URL&lt;&#x2F;h2&gt;
&lt;p&gt;Since we want to connect to redis using TLS connection, so the protocol in the url will be &lt;code&gt;rediss&lt;&#x2F;code&gt; (with double “ss”).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rediss:&#x2F;&#x2F;:&amp;lt;your_password_here&amp;gt;@&amp;lt;redis_server_ip&amp;gt;:6379&#x2F;0#insecure&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Content Strategy For Indie Makers</title>
        <published>2025-09-07T00:00:00+00:00</published>
        <updated>2025-09-07T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/blog/2025/content-strategy-for-indie-makers/"/>
        <id>https://vshukla.com/blog/2025/content-strategy-for-indie-makers/</id>
        <summary type="html">My thoughts on indie makers can approach their content and marketing strategy.</summary>
        <content type="html" xml:base="https://vshukla.com/blog/2025/content-strategy-for-indie-makers/">&lt;p&gt;A new wave of indie makers is emerging. Developing with technology was never this easy and accessible.&lt;&#x2F;p&gt;
&lt;p&gt;Every day new SaaS products are being launched. With this comes the problem that how one can capture the audience for their own product.&lt;&#x2F;p&gt;
&lt;p&gt;Conventional method of finding and targeting keywords, going on backlink hunting is not that impactful since the advent of AI. Don’t get me wrong these are still important however not at the beginning.&lt;&#x2F;p&gt;
&lt;p&gt;The number of people searching on Google is declining everyday and because of that even Google has put AI response first thing in the search, which reduces clicks on your website even more, even if it’s in Top 3 spot of search result.&lt;&#x2F;p&gt;
&lt;p&gt;However there is also AI slop fatigue among people, wherever you see people are using AI to write their content and it’s not that hard to spot it. So it’s recommended to use AI for idea generation, reviewing the content and strategy.&lt;&#x2F;p&gt;
&lt;p&gt;Having launched &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;daestro.com&quot;&gt;my own SaaS&lt;&#x2F;a&gt; and after researching quite a bit on marketing and content strategy. Based on my own journey and research, I’ve developed a content strategy that feels more sustainable. While these are just my thoughts, I’m already applying some of them and plan to fully commit to this approach.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;start-at-the-start&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#start-at-the-start&quot; aria-label=&quot;Anchor link for: start-at-the-start&quot;&gt;🔗&lt;&#x2F;a&gt;Start at the start&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Marketing is transfer of enthusiasm - Jason Fried&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;When you start any new project you are enthusiastic about it like it’s the best idea in the world which can change your life, use this enthusiasm to your advantage. Brainstorm content ideas, create the content, create the why of your idea&#x2F;product. Find community around your problem on Reddit, X or Bluesky, engage with them.&lt;&#x2F;p&gt;
&lt;p&gt;One of the biggest mistake first time indie maker do (even I did) is that I’ll get on marketing and content creation after I’m done with the development of my product.&lt;&#x2F;p&gt;
&lt;p&gt;This is the worst thing you can do to your product and yourself. Content creation must go on hand in hand with your development work from the day one. I would first launch my website with wait-list form to capture visitor’s email. This will be put on all pages.&lt;&#x2F;p&gt;
&lt;p&gt;For me the time split between Development and Content creation would be:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;At the start:&lt;&#x2F;strong&gt;
80% Development and 20% content.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;When development is nearing completion:&lt;&#x2F;strong&gt;
50% Development and 50% Content&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;After launching the product:&lt;&#x2F;strong&gt;
Well if your product is really viral or acquired good enough customer base then you should continue with 20% content creation and 80% development since you will be getting a lot of feedback, bug report and feature request.&lt;&#x2F;p&gt;
&lt;p&gt;If product is not successful as it was thought it would be then do 80% content creation and 20% development until you reach desired user base.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;create-content-around-your-product&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#create-content-around-your-product&quot; aria-label=&quot;Anchor link for: create-content-around-your-product&quot;&gt;🔗&lt;&#x2F;a&gt;Create content around your product&lt;&#x2F;h2&gt;
&lt;p&gt;It’s a good strategy to start creating content about basic stuff around your product (or service), even glossary stuff like explaining related terms, use cases, review of the current situation, etc.&lt;&#x2F;p&gt;
&lt;p&gt;Suppose your product is screen recorder app:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;start with why this app, what are it’s features that sets it apart&lt;&#x2F;li&gt;
&lt;li&gt;how to use it, give multiple use cases&lt;&#x2F;li&gt;
&lt;li&gt;how it differs from existing products, cover each of the competition compared to which your product is better&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;go-big-with-viral-worthy-content&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#go-big-with-viral-worthy-content&quot; aria-label=&quot;Anchor link for: go-big-with-viral-worthy-content&quot;&gt;🔗&lt;&#x2F;a&gt;Go Big with Viral-Worthy Content&lt;&#x2F;h2&gt;
&lt;p&gt;After covering all basics about your product, now you need to work on attention grabbing stuff. It could be either video or article, whichever suits your niche, however doing both would be encouraged.&lt;&#x2F;p&gt;
&lt;p&gt;Create Mr. Beast of content, spend 2 weeks, 4 weeks or even 8 weeks, but create something that truly grabs people’s attention. It can be research, experiment or entertaining stuff, but stick to your niche.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;don-t-sell-rather-inform&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#don-t-sell-rather-inform&quot; aria-label=&quot;Anchor link for: don-t-sell-rather-inform&quot;&gt;🔗&lt;&#x2F;a&gt;Don’t Sell, Rather Inform&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve shown interests on products where developer is not trying to sell you the stuff, rather informing you, helping you. Be helpful, this creates a good will, even if people do not buy your product, they might share it with someone else.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;engage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#engage&quot; aria-label=&quot;Anchor link for: engage&quot;&gt;🔗&lt;&#x2F;a&gt;Engage&lt;&#x2F;h2&gt;
&lt;p&gt;Be real. I would share my journey as a person. For example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;How I started&lt;&#x2F;li&gt;
&lt;li&gt;How is it going&lt;&#x2F;li&gt;
&lt;li&gt;Any important milestone reached&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Share your stories, share your number like profit, loss, investment, etc.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>This Blog</title>
        <published>2025-09-06T00:00:00+00:00</published>
        <updated>2025-09-06T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/blog/2025/this-blog/"/>
        <id>https://vshukla.com/blog/2025/this-blog/</id>
        <summary type="html">A bit about my blog</summary>
        <content type="html" xml:base="https://vshukla.com/blog/2025/this-blog/">&lt;p&gt;This post is not going to be very technical. I am just going to talk about my thought process behind implementing and needing various features this blog has.&lt;&#x2F;p&gt;
&lt;p&gt;In a nutshell, a blog is just a log of user’s life that is available over the internet. There are various blog service from free to paid. Even twitter (now X) is a blogging (micro blogging) platform.&lt;&#x2F;p&gt;
&lt;p&gt;This blog is build with &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt;, which is SSG (Static Site Generator), which parses Mardown file to generate HTML pages, which you can host anywhere, even for free, however you’ve to be bit technical.&lt;&#x2F;p&gt;
&lt;p&gt;In a SSG there is no database, you just have your markdown files and HTML templates, you can store it anywhere, like me most prefer to use version control system like GitHub to store the blog data.&lt;&#x2F;p&gt;
&lt;p&gt;In the past I have used all sorts of hosting method. I started with Blogspot, which is free blogging service by Google, it’s good but limited. Then I moved on to Wordpress for a good few years, however I didn’t like sometimes I had to be bit involved to manage it. It’s PHP based software and there are a lot of moving parts when it comes to managing it. And it’s certainly not free.&lt;&#x2F;p&gt;
&lt;p&gt;Then I heard about SSG, at first I was dismissive of it, however after some years I came along and moved to Hugo, another SSG which is very popular, one of the top choices for a lot of people. Hugo was good however I didn’t like it’s templating syntax, to me it reads very weird.&lt;&#x2F;p&gt;
&lt;p&gt;At some point I was working with Sveltekit for my work needs, so I though let’s give Sveltekit try since we can generate static sites with Sveltekit as well. I made a blog which also uses markdown to parse and serve the blog. After using this for around a year I moved to Zola (current blog) because the fact that Svelte and Sveltekit are frontend javascript framework, so they change a lot. Just moving from Svelte 4 to 5 was a big change.&lt;&#x2F;p&gt;
&lt;p&gt;After discovering Zola (another SSG) and reading up on it’s docs and other people’s blog, Zola clicked with me because of it’s very intuitive template syntax (I come from Django so!!). So I built this blog with my bare hand from the scratch.&lt;&#x2F;p&gt;
&lt;p&gt;Some of the features of Zola:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Generates static HTML&lt;&#x2F;li&gt;
&lt;li&gt;Built-in syntax highlighting&lt;&#x2F;li&gt;
&lt;li&gt;Load data from files like csv, json&lt;&#x2F;li&gt;
&lt;li&gt;Also can load data from remote urls&lt;&#x2F;li&gt;
&lt;li&gt;Sitemap generator&lt;&#x2F;li&gt;
&lt;li&gt;RSS generator&lt;&#x2F;li&gt;
&lt;li&gt;Very poweful concept of Section and Page&lt;&#x2F;li&gt;
&lt;li&gt;Highly customizable&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;After going through all this blogging of around 10 years, I knew a few things I needed. This time I just wanted to write (posts) and so I wanted to keep simple UI but behind the scene all the features one might need.&lt;&#x2F;p&gt;
&lt;p&gt;A brief on all the features this blog has:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;SEO
&lt;ul&gt;
&lt;li&gt;Automatic handling of meta tags&lt;&#x2F;li&gt;
&lt;li&gt;schema generation for structured data&lt;&#x2F;li&gt;
&lt;li&gt;OG (Opengraph) tags&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Post &#x2F; Article
&lt;ul&gt;
&lt;li&gt;unlisted: makes post invisible in listings, only accessible via link&lt;&#x2F;li&gt;
&lt;li&gt;noindex: marks post to be not indexed by search engines&lt;&#x2F;li&gt;
&lt;li&gt;posted dated posts: set a later date for post to be published&lt;&#x2F;li&gt;
&lt;li&gt;tags: add tags to post around relevant topic&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I’ve been very happy with Zola. It does not get in the way and let me just write now. For long I have not been writing, but now I’ve decided to continue writing.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Cloud Init Script to Set-up Server</title>
        <published>2025-09-05T00:00:00+00:00</published>
        <updated>2025-09-05T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/cloud-init/"/>
        <id>https://vshukla.com/snippets/cloud-init/</id>
        <summary type="html">The cloud init script that I use to automatically configure my server with the essentials.</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/cloud-init/">&lt;p&gt;Add this script to Cloud-init field while provisioning your VPS. Most cloud providers support this.&lt;&#x2F;p&gt;
&lt;p&gt;This script will do following stuff:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;disable the root user&lt;&#x2F;li&gt;
&lt;li&gt;disable password authentication for SSH&lt;&#x2F;li&gt;
&lt;li&gt;update and upgrade ubuntu packages&lt;&#x2F;li&gt;
&lt;li&gt;create a new user named “ubuntu” add given public SSH key as &lt;code&gt;authorized_key&lt;&#x2F;code&gt; for the user&lt;&#x2F;li&gt;
&lt;li&gt;Install and setup:
&lt;ul&gt;
&lt;li&gt;Ufw: a firewall with open ports 22, 80 and 443&lt;&#x2F;li&gt;
&lt;li&gt;fail2ban: to protect against brute-force login attempt&lt;&#x2F;li&gt;
&lt;li&gt;unattended-upgrades: to upgrade ubuntu packages&lt;&#x2F;li&gt;
&lt;li&gt;docker&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;#cloud-config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;disable_root&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;ssh_pwauth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;package_update&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;package_upgrade&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;timezone&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; Etc&#x2F;UTC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;system_info&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;  default_user&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    ssh_authorized_keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    lock_passwd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;packages&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; fail2ban&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; unattended-upgrades&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;runcmd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; echo $(date) &amp;gt; &#x2F;start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; passwd -l root&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; sed -i &amp;#39;s&#x2F;^PasswordAuthentication yes&#x2F;PasswordAuthentication no&#x2F;&amp;#39; &#x2F;etc&#x2F;ssh&#x2F;sshd_config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl restart sshd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw default deny incoming&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw default allow outgoing&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow 22&#x2F;tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow 80&#x2F;tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw allow 443&#x2F;tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ufw --force enable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl enable fail2ban&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl start fail2ban&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; unattended-upgrade&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; curl -fsSL https:&#x2F;&#x2F;get.docker.com | sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; groupadd docker&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; usermod -aG docker ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; echo $(date) &amp;gt; &#x2F;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;users&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    lock_passwd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D2A6FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    ssh_authorized_keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; YOUR_SSH_PUBLIC_KEY&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ALL=(ALL) NOPASSWD:ALL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    groups&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #39BAE6;&quot;&gt;    shell&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Deploy Systemd Service Behind Nginx with TLS</title>
        <published>2025-09-04T00:00:00+00:00</published>
        <updated>2025-09-04T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/systemd-service-nginx-deployment/"/>
        <id>https://vshukla.com/snippets/systemd-service-nginx-deployment/</id>
        <summary type="html">A cheatsheet to deploy Systemd service behind Nginx reverse proxy. This approach is very common and used a lot.</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/systemd-service-nginx-deployment/">&lt;h2 id=&quot;systemd-service&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#systemd-service&quot; aria-label=&quot;Anchor link for: systemd-service&quot;&gt;🔗&lt;&#x2F;a&gt;Systemd Service&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; tee &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;YOUR_SERVICE_NAME.service&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;[Unit]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Description=YOUR_SERVICE_NAME&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;After=network.target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;[Service]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;ExecStart=&#x2F;executable&#x2F;location&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;WorkingDirectory=&#x2F;dir&#x2F;where&#x2F;program&#x2F;can&#x2F;read-write&#x2F;data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Restart=on-failure&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;RestartSec=5s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;StartLimitIntervalSec=300&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;StartLimitBurst=5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;User=ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;Group=ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;[Install]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;WantedBy=multi-user.target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Start command:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl enable YOUR_SERVICE_NAME&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl start YOUR_SERVICE_NAME&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Other commands:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# see logs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; journalctl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; YOUR_SERVICE_NAME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# restart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl restart YOUR_SERVICE_NAME&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5A6673;font-style: italic;&quot;&gt;# when service file is updated&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;nginx-reverse-proxy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nginx-reverse-proxy&quot; aria-label=&quot;Anchor link for: nginx-reverse-proxy&quot;&gt;🔗&lt;&#x2F;a&gt;Nginx Reverse Proxy&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; tee &#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;YOUR_DOMAIN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F29668;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;map $http_upgrade $connection_upgrade {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;  default upgrade;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;  &amp;#39;&amp;#39; close;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;upstream server_list {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    server localhost:8000;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;    keepalive 32;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;server {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        listen 80;          # IPv4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        listen [::]:80;     # IPv6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        server_name YOUR_DOMAIN;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        # Hide server information headers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        server_tokens off;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        # Enable gzip compression&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_disable &amp;quot;msie6&amp;quot;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_vary on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_proxied any;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_comp_level 6;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_buffers 16 8k;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_min_length 1024;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        gzip_types&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;atom+xml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;geo+json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;javascript&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;x-javascript&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;ld+json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;manifest+json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;rdf+xml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;rss+xml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;xhtml+xml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          application&#x2F;xml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          font&#x2F;eot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          font&#x2F;otf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          font&#x2F;ttf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          image&#x2F;svg+xml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          text&#x2F;css&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          text&#x2F;javascript&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          text&#x2F;plain&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;          text&#x2F;xml;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        # Buffer size optimization&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        client_body_buffer_size 32k;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        client_header_buffer_size 2k;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        client_max_body_size 10M;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        large_client_header_buffers 4 2k;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        # Timeouts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        client_body_timeout 20;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        client_header_timeout 20;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        keepalive_timeout 65;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        send_timeout 20;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        # Proxy settings&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        location &#x2F; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            include proxy_params;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_set_header Upgrade $http_upgrade;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_set_header Connection $connection_upgrade;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_redirect off;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_buffering on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_buffer_size 16k;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_buffers 8 16k;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_pass http:&#x2F;&#x2F;server_list;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            # Additional proxy timeouts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_connect_timeout 60s;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_send_timeout 120s;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;            proxy_read_timeout 120s;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        # Security headers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;        add_header Strict-Transport-Security &amp;quot;max-age=31536000; includeSubDomains; preload&amp;quot; always;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Create Symlink&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ln&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;YOUR_DOMAIN &#x2F;etc&#x2F;nginx&#x2F;sites-enabled&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Checks Nginx configuration&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; nginx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Restart Nginx&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; systemctl restart nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;letsencrypt-ssl&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#letsencrypt-ssl&quot; aria-label=&quot;Anchor link for: letsencrypt-ssl&quot;&gt;🔗&lt;&#x2F;a&gt;Letsencrypt SSL&lt;&#x2F;h2&gt;
&lt;p&gt;Installing &lt;code&gt;certbot&lt;&#x2F;code&gt; to install TLS certificate&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #BFBDB6; background-color: #0D1017;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; apt remove certbot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; snap install core&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BFBDB6B3;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; snap refresh core&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; snap install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --classic&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; certbot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; ln&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; &#x2F;snap&#x2F;bin&#x2F;certbot &#x2F;usr&#x2F;bin&#x2F;certbot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #59C2FF;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; certbot&lt;&#x2F;span&gt;&lt;span style=&quot;color: #95E6CB;&quot;&gt; --nginx -d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AAD94C;&quot;&gt; YOUR_DOMAIN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
    </entry>
</feed>
