<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Vivek Shukla - Code Snippet</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/tags/code-snippet/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://vshukla.com/tags/code-snippet/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-26T00:00:00+00:00</updated>
    <id>https://vshukla.com/tags/code-snippet/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;external&quot; href=&quot;https://www.bing.com/indexnow&quot;&gt;More info&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IndexNow API supports upto 10,000 links submission in a day.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Make sure to have a randomly generated key &lt;code&gt;c3755574c3ae4c259262854b0f241ec8.txt&lt;/code&gt; at the root of your website. &lt;a rel=&quot;external&quot; href=&quot;https://www.bing.com/indexnow/getstarted&quot;&gt;Generate key here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;payload&quot;&gt;Payload&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;payload.json&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;	&amp;quot;host&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;example.com&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;	&amp;quot;key&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;random-key&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;	&amp;quot;keyLocation&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;https://example.com/random-key.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;	&amp;quot;urlList&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;		&amp;quot;https://example.com/blog&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;curl&quot;&gt;Curl&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -v -X&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; POST https://api.indexnow.org/indexnow&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -H&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;Content-Type: application/json&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -d&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; @payload.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>PostgreSQL: Make Create/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/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;/code&gt; and &lt;code&gt;IF NOT EXISTS&lt;/code&gt; is a way to make them infallible.&lt;/p&gt;
&lt;h3 id=&quot;creating-and-dropping-entire-tables&quot;&gt;Creating and Dropping Entire Tables&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Create:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;CREATE TABLE&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; IF&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; NOT EXISTS&lt;/span&gt;&lt;span&gt; users (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    id UUID &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;PRIMARY KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    email &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;VARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;255&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; NOT NULL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;DROP TABLE IF EXISTS&lt;/span&gt;&lt;span&gt; users;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;adding-and-removing-columns&quot;&gt;Adding and Removing Columns&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Add Column:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;ALTER TABLE&lt;/span&gt;&lt;span&gt; users &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;ADD&lt;/span&gt;&lt;span&gt; COLUMN &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;IF NOT EXISTS&lt;/span&gt;&lt;span&gt; phone_number &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;VARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt;20&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop Column:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;ALTER TABLE&lt;/span&gt;&lt;span&gt; users &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;DROP&lt;/span&gt;&lt;span&gt; COLUMN &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;IF EXISTS&lt;/span&gt;&lt;span&gt; phone_number;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;dropping-constraints-easy&quot;&gt;Dropping Constraints (Easy)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop Constraint:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;ALTER TABLE&lt;/span&gt;&lt;span&gt; users &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;DROP CONSTRAINT IF EXISTS&lt;/span&gt;&lt;span&gt; unique_email_constraint;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;adding-constraints-the-tricky-one&quot;&gt;Adding Constraints (The Tricky One)&lt;/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;/code&gt; blocIt checks the database records first before trying to add the rule.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Safe Add Constraint (using a DO block):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DO $$ &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;    -- Check if the constraint name already exists&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    IF NOT EXISTS&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        SELECT&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        FROM&lt;/span&gt;&lt;span&gt; pg_constraint &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        WHERE&lt;/span&gt;&lt;span&gt; conname &lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;unique_email_constraint&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ) &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;THEN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;        -- If it does not exist, add it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        ALTER TABLE&lt;/span&gt;&lt;span&gt; users &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        ADD CONSTRAINT&lt;/span&gt;&lt;span&gt; unique_email_constraint &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;UNIQUE&lt;/span&gt;&lt;span&gt; (email);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    END IF&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;END&lt;/span&gt;&lt;span&gt; $$;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;custom-types-and-enums-bonus&quot;&gt;Custom Types and Enums (Bonus)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Safe Drop Type:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;DROP TYPE IF EXISTS&lt;/span&gt;&lt;span&gt; job_status_enum;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Safe Create Type:&lt;/strong&gt; &lt;em&gt;(Postgres does not have &lt;code&gt;CREATE TYPE IF NOT EXISTS&lt;/code&gt;, so we use another &lt;code&gt;DO&lt;/code&gt; block)&lt;/em&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DO $$ &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    IF NOT EXISTS&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; FROM&lt;/span&gt;&lt;span&gt; pg_type &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;WHERE&lt;/span&gt;&lt;span&gt; typname &lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;job_status_enum&amp;#39;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;THEN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        CREATE TYPE&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; job_status_enum&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; AS&lt;/span&gt;&lt;span&gt; ENUM (&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;#39;submitted&amp;#39;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;#39;pending&amp;#39;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;#39;completed&amp;#39;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    END IF&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;END&lt;/span&gt;&lt;span&gt; $$;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;Check status&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# or&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw status verbose&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# or&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw status numbered&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;delete-value-based-on-number&quot;&gt;Delete value based on number:&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw delete&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;allow-port&quot;&gt;Allow port&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow 22/tcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;deny-port&quot;&gt;Deny port&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw deny 80/tcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;allow-from-ip-address-or-subnet&quot;&gt;Allow from ip address or subnet&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow from 10.22.96.0/20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;allow-from-ip-address-to-specific-port&quot;&gt;Allow from ip address to specific port&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow from 10.22.96.0/20 proto tcp to any port&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 5432&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;disable-ufw&quot;&gt;Disable ufw&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw disable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;block-an-ip-address-or-subnet&quot;&gt;Block an ip address or subnet&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw deny from&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 203.0.113.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;delete-a-rule&quot;&gt;Delete a rule&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw delete allow from&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 203.0.113.101&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;allow-incoming-connection-to-a-network-interface&quot;&gt;Allow incoming connection to a network interface&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow in on eth0 from&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 203.0.113.102&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p&gt;This script will do following stuff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;disable the root user&lt;/li&gt;
&lt;li&gt;disable password authentication for SSH&lt;/li&gt;
&lt;li&gt;update and upgrade ubuntu packages&lt;/li&gt;
&lt;li&gt;create a new user named “ubuntu” add given public SSH key as &lt;code&gt;authorized_key&lt;/code&gt; for the user&lt;/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;/li&gt;
&lt;li&gt;fail2ban: to protect against brute-force login attempt&lt;/li&gt;
&lt;li&gt;unattended-upgrades: to upgrade ubuntu packages&lt;/li&gt;
&lt;li&gt;docker&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;#cloud-config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;disable_root&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;ssh_pwauth&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;package_update&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;package_upgrade&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;timezone&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; Etc/UTC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;system_info&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;  default_user&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    ssh_authorized_keys&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    lock_passwd&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;packages&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; fail2ban&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; unattended-upgrades&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;runcmd&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; echo $(date) &amp;gt; /start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; passwd -l root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; sed -i &amp;#39;s/^PasswordAuthentication yes/PasswordAuthentication no/&amp;#39; /etc/ssh/sshd_config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl restart sshd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw default deny incoming&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw default allow outgoing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow 22/tcp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow 80/tcp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw allow 443/tcp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ufw --force enable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl enable fail2ban&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl start fail2ban&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; unattended-upgrade&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; curl -fsSL https://get.docker.com | sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; groupadd docker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; usermod -aG docker ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; echo $(date) &amp;gt; /end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt; name&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    lock_passwd&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    ssh_authorized_keys&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; YOUR_SSH_PUBLIC_KEY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    sudo&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ALL=(ALL) NOPASSWD:ALL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    groups&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; sudo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    shell&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/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;Systemd Service&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; tee /etc/systemd/system/YOUR_SERVICE_NAME.service&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;[Unit]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Description=YOUR_SERVICE_NAME&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;After=network.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ExecStart=/executable/location&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;WorkingDirectory=/dir/where/program/can/read-write/data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Restart=on-failure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;RestartSec=5s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;StartLimitIntervalSec=300&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;StartLimitBurst=5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;User=ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Group=ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;[Install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;WantedBy=multi-user.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start command:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl daemon-reload&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl enable YOUR_SERVICE_NAME&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl start YOUR_SERVICE_NAME&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Other commands:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# see logs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; journalctl&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -u&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; YOUR_SERVICE_NAME&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -f&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# restart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl restart YOUR_SERVICE_NAME&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# when service file is updated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl daemon-reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;nginx-reverse-proxy&quot;&gt;Nginx Reverse Proxy&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; tee /etc/nginx/sites-available/YOUR_DOMAIN&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;map $http_upgrade $connection_upgrade {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;  default upgrade;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;  &amp;#39;&amp;#39; close;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;upstream server_list {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    server localhost:8000;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;    keepalive 32;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;server {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        listen 80;          # IPv4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        listen [::]:80;     # IPv6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        server_name YOUR_DOMAIN;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Hide server information headers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        server_tokens off;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Enable gzip compression&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_disable &amp;quot;msie6&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_vary on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_proxied any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_comp_level 6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_buffers 16 8k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_min_length 1024;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_types&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/atom+xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/geo+json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/javascript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/x-javascript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/ld+json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/manifest+json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/rdf+xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/rss+xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/xhtml+xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          application/xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          font/eot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          font/otf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          font/ttf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          image/svg+xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          text/css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          text/javascript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          text/plain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;          text/xml;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Buffer size optimization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        client_body_buffer_size 32k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        client_header_buffer_size 2k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        client_max_body_size 10M;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        large_client_header_buffers 4 2k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Timeouts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        client_body_timeout 20;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        client_header_timeout 20;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        keepalive_timeout 65;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        send_timeout 20;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Proxy settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        location / {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            include proxy_params;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_set_header Upgrade $http_upgrade;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_set_header Connection $connection_upgrade;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_redirect off;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_buffering on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_buffer_size 16k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_buffers 8 16k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_pass http://server_list;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            # Additional proxy timeouts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_connect_timeout 60s;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_send_timeout 120s;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_read_timeout 120s;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Security headers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        add_header Strict-Transport-Security &amp;quot;max-age=31536000; includeSubDomains; preload&amp;quot; always;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create Symlink&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ln&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /etc/nginx/sites-available/YOUR_DOMAIN /etc/nginx/sites-enabled/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Checks Nginx configuration&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; nginx&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restart Nginx&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl restart nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;letsencrypt-ssl&quot;&gt;Letsencrypt SSL&lt;/h2&gt;
&lt;p&gt;Installing &lt;code&gt;certbot&lt;/code&gt; to install TLS certificate&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; apt remove certbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; snap install core&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; snap refresh core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; snap install&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --classic&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; certbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ln&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /snap/bin/certbot /usr/bin/certbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; certbot&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --nginx -d&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; YOUR_DOMAIN&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Ed25519 Key Pair Generation in Rust</title>
        <published>2025-06-20T00:00:00+00:00</published>
        <updated>2025-06-20T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/ed25519-key-pair-rust/"/>
        <id>https://vshukla.com/snippets/ed25519-key-pair-rust/</id>
        <summary type="html">An example on how to generate private and public key pair using Ed25519 algorithm in Rust</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/ed25519-key-pair-rust/">&lt;h2 id=&quot;cargo-toml&quot;&gt;Cargo.toml&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;dependencies&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssh-key&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; =&lt;/span&gt;&lt;span&gt; { version&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;0.6&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; features&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; =&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;ed25519&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;rsa&amp;quot;&lt;/span&gt;&lt;span&gt;] }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;main-rs&quot;&gt;main.rs&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; ssh_key&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;LineEnding&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; PrivateKey&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; rand_core&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;OsRng&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; std&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span&gt;fs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; std&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;PathBuf&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; std&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;Instant&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; generate_ed25519_key_pair&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    path_prefix&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;: &amp;amp;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    comment&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;: &amp;amp;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; -&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; Result&lt;/span&gt;&lt;span&gt;&amp;lt;(),&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; Box&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;dyn&lt;/span&gt;&lt;span&gt; std&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;Error&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    let&lt;/span&gt;&lt;span&gt; timer&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; Instant&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;now&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    let mut&lt;/span&gt;&lt;span&gt; private_key&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; PrivateKey&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;random&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; OsRng&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; ssh_key&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;Algorithm&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;Ed25519&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;?&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    private_key&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;set_comment&lt;/span&gt;&lt;span&gt;(comment);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    let&lt;/span&gt;&lt;span&gt; private_key_bytes&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&lt;/span&gt;&lt;span&gt; private_key&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;to_openssh&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;LineEnding&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;LF&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;?&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    let&lt;/span&gt;&lt;span&gt; public_key_bytes&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&lt;/span&gt;&lt;span&gt; private_key&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;public_key&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;to_openssh&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;?&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    let&lt;/span&gt;&lt;span&gt; private_path&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; PathBuf&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;format!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;{}_ed25519&amp;quot;&lt;/span&gt;&lt;span&gt;, path_prefix));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    let&lt;/span&gt;&lt;span&gt; public_path&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; PathBuf&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;format!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;{}_ed25519.pub&amp;quot;&lt;/span&gt;&lt;span&gt;, path_prefix));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;    fs&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;private_path, private_key_bytes)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;?&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;    fs&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;public_path, public_key_bytes)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;?&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;Generated Ed25519 key pair:&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;Private key: {}&amp;quot;&lt;/span&gt;&lt;span&gt;, private_path&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;display&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;Public key: {}&amp;quot;&lt;/span&gt;&lt;span&gt;, public_path&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;display&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;Time Elapsed: {}ms&amp;quot;&lt;/span&gt;&lt;span&gt;, timer&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;elapsed&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;as_millis&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;    Ok&lt;/span&gt;&lt;span&gt;(())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    match&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; generate_ed25519_key_pair&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;example@localhost&amp;quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;        Ok&lt;/span&gt;&lt;span&gt;(_)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;Successfully generated Ed25519 key pair without passphrase.&amp;quot;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;        Err&lt;/span&gt;&lt;span&gt;(e)&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; eprintln!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;Error generating Ed25519 key pair: {}&amp;quot;&lt;/span&gt;&lt;span&gt;, e),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Rust Release Build &amp; Publish</title>
        <published>2025-06-15T00:00:00+00:00</published>
        <updated>2025-06-15T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/rust-build-and-push-to-s3/"/>
        <id>https://vshukla.com/snippets/rust-build-and-push-to-s3/</id>
        <content type="html" xml:base="https://vshukla.com/snippets/rust-build-and-push-to-s3/">&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --rm -it&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ubuntu /bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# Environment Variables&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | Key                   | Purpose                                                          |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | --------------------- | ---------------------------------------------------------------- |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | DEPLOY_KEY            | Private SSH key (public key must be added in Github)                                                  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | REPO_URL              | Github repository url (ssh)                                      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | BINARY_NAME           | Binary name in Cargo.toml                                        |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | RCLONE_CONFIG_CONTENT | Contents of the Rclone config. Name must be &amp;quot;remote_destination&amp;quot; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# | RCLONE_COPY_PATH      | Path of the bucket where you want to copy the file               |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# Rclone Config Example&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# ```&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# [remote_destination]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# type = s3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# provider = Other&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# access_key_id =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# secret_access_key =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# endpoint =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# acl = public-read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# ```&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;export&lt;/span&gt;&lt;span&gt; DEBIAN_FRONTEND&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;=&lt;/span&gt;&lt;span&gt;noninteractive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;apt&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;apt&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -y&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; build-essential libssl-dev pkg-config curl git openssh-client unzip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --proto&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;=https&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --tlsv1.2 -sSf&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; https://sh.rustup.rs&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sh&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s -- -y&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-14&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$HOME&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;/.cargo/env&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; https://rclone.org/install.sh&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;export&lt;/span&gt;&lt;span&gt; RCLONE_CONFIG&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;/rclone.conf&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-14&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$RCLONE_CONFIG_CONTENT&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span&gt; $RCLONE_CONFIG&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;mkdir&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -p&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /root/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-14&quot;&gt;echo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span&gt;$DEPLOY_KEY&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /root/.ssh/deploy_key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 600&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /root/.ssh/deploy_key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;ssh-keyscan&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; github.com&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /root/.ssh/known_hosts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 600&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /root/.ssh/known_hosts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;mkdir&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -p&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GIT_SSH_COMMAND&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;ssh -i /root/.ssh/deploy_key&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; git&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; clone&lt;/span&gt;&lt;span&gt; $REPO_URL&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-14&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FULL_NAME&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;=&lt;/span&gt;&lt;span&gt;$BINARY_NAME&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;-&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;uname&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; tr&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;[:upper:]&amp;#39; &amp;#39;[:lower:]&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;-&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt;uname&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -m&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sed&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -e&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;s/x86_64/amd64/&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -e&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;s/armv6l/arm/&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -e&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;s/armv7l/arm/&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -e&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; &amp;#39;s/aarch64/arm64/&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;cargo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; build&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --release&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;    cp&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; target/release/&lt;/span&gt;&lt;span&gt;$BINARY_NAME $FULL_NAME&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;rclone&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; copy &amp;quot;&lt;/span&gt;&lt;span&gt;$FULL_NAME&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot; remote_destination:&amp;quot;&lt;/span&gt;&lt;span&gt;$RCLONE_COPY_PATH&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Deploy OpenObserve binary behind Nginx on Ubuntu</title>
        <published>2025-06-09T00:00:00+00:00</published>
        <updated>2025-06-09T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/deploy-openobserve-binary/"/>
        <id>https://vshukla.com/snippets/deploy-openobserve-binary/</id>
        <content type="html" xml:base="https://vshukla.com/snippets/deploy-openobserve-binary/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openobserve.ai/docs/quickstart/&quot;&gt;Quickstart guide&lt;/a&gt; by OpenObserve.&lt;/p&gt;
&lt;h2 id=&quot;installing-openobserve&quot;&gt;Installing OpenObserve&lt;/h2&gt;
&lt;p&gt;Download binary:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;mkdir&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ~/openobserve&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-14&quot;&gt; cd&lt;/span&gt;&lt;span class=&quot;z-1 z-i&quot;&gt; $_&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -L&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; https://raw.githubusercontent.com/openobserve/openobserve/main/download.sh&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;chmod&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; +x openobserve&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create Environment file&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;tee&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; openobserve.env&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# Data directory for OpenObserve. This is crucial for local storage.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_DATA_DIR=&amp;quot;/home/ubuntu/openobserve/data&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# The port OpenObserve will listen on (default is 5080)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_PORT=5080&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# The root user email and password for initial login.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# CHANGE THESE TO SECURE VALUES!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_ROOT_USER_EMAIL=&amp;quot;admin@example.com&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_ROOT_USER_PASSWORD=&amp;quot;SecurePassword123&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_META_STORE=&amp;quot;sqlite&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_WEB_URL=&amp;quot;https://your-domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# disabling OpenObserve&amp;#39;s telemetry to their server&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ZO_TELEMETRY=false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; chmod&lt;/span&gt;&lt;span class=&quot;z-11&quot;&gt; 600&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; openobserve.env&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Creating systemd service&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; tee /etc/systemd/system/openobserve.service&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;[Unit]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Description=OpenObserve Observability Platform&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;After=network-online.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Wants=network-online.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# Service type: &amp;#39;simple&amp;#39; means the process will be the main process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Type=simple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;User=ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Group=ubuntu&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;WorkingDirectory=/home/ubuntu/openobserve&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;EnvironmentFile=/home/ubuntu/openobserve/openobserve.env&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;ExecStart=/home/ubuntu/openobserve/openobserve&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;Restart=on-failure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;RestartSec=5s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# Limit the number of open file descriptors, important for high-concurrency apps.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# Adjust as needed based on your expected load.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;LimitNOFILE=65536&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# Redirect standard output and error to systemd journal.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;StandardOutput=journal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;StandardError=journal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# How long to wait before forcefully terminating the service on stop.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;TimeoutStopSec=30s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;[Install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# This unit should be enabled for multi-user systems.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;# Allows it to start automatically on boot.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;WantedBy=multi-user.target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start service&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# Reload systemd daemon to pick up the new service file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl daemon-reload&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# Enable the service to start on boot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl enable openobserve&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# Start the OpenObserve service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl start openobserve&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check the service status and logs&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# Check service status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl status openobserve&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# View logs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; journalctl&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -u&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; openobserve&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;reverse-proxy-nginx&quot;&gt;Reverse Proxy - Nginx&lt;/h2&gt;
&lt;p&gt;Install Nginx&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; apt&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -y&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; install nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; tee /etc/nginx/sites-available/openobserve&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt; &amp;#39;EOF&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;map $http_upgrade $connection_upgrade {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;  default upgrade;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;  &amp;#39;&amp;#39; close;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;server {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        listen 80;          # IPv4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        listen [::]:80;     # IPv6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        server_name your-domain;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Hide server information headers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        server_tokens off;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Enable gzip compression&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_vary on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_proxied any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_comp_level 6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_min_length 1024; # Only gzip if size is at least 1KB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Proxy settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        location / {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            include proxy_params;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_set_header Upgrade $http_upgrade;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_set_header Connection $connection_upgrade;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_redirect off;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            proxy_pass http://localhost:5080;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        location /metrics {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            # allow 192.168.1.100; # &amp;lt;--- REPLACE WITH YOUR MONITORING SERVER&amp;#39;S IP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;            deny all;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        # Security headers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        add_header X-Content-Type-Options &amp;quot;nosniff&amp;quot; always;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;        add_header Strict-Transport-Security &amp;quot;max-age=31536000; includeSubDomains; preload&amp;quot; always;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ln&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /etc/nginx/sites-available/openobserve /etc/nginx/sites-enabled/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# test nginx conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; nginx&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; systemctl restart nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Afterwards, to gracefully restart nginx, do this:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; nginx&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; reload&lt;/span&gt;&lt;span class=&quot;z-4 z-i&quot;&gt; # OR sudo systemctl reload nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;tls-installation&quot;&gt;TLS Installation&lt;/h2&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; snap install core&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;z-3&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; snap refresh core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; apt remove certbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; snap install&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --classic&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; certbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; ln&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -s&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; /snap/bin/certbot /usr/bin/certbot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; certbot&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --nginx -d&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; your-domain&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>docker buildx: Multi-platform Builds</title>
        <published>2025-04-23T00:00:00+00:00</published>
        <updated>2025-04-23T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/docker-buildx-multi-platform/"/>
        <id>https://vshukla.com/snippets/docker-buildx-multi-platform/</id>
        <summary type="html">How to build multi-platform images with Docker Buildx</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/docker-buildx-multi-platform/">&lt;p&gt;Tested on: Ubuntu 22.04 LTS&lt;br /&gt;
Docker Version: 28.1.1&lt;br /&gt;
Docker Buildx Version: v0.23.0&lt;/p&gt;
&lt;p&gt;Documentation: &lt;a rel=&quot;external&quot; href=&quot;https://docs.docker.com/build/building/multi-platform/#qemu&quot;&gt;Multi-platform Builds&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# check if buildx is installed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; buildx version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# installing and registering QEMU&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --privileged --rm&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; tonistiigi/binfmt&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --install&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# create new build that runs in docker container&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; buildx create&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --name&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; mybuilder&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --driver&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; docker-container&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# switching to our builder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; buildx use mybuilder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4 z-i&quot;&gt;# build and pushing image directly to image store (make sure you are logged in)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; buildx build&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --platform&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; linux/amd64,linux/arm64&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -t&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;usernam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;image_nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;ta&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; .&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --push&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
    <entry xml:lang="en">
        <title>Docker Image Publishing</title>
        <published>2025-04-23T00:00:00+00:00</published>
        <updated>2025-04-23T00:00:00+00:00</updated>
        <author>
          <name>Vivek Shukla</name>
        </author>
        <link rel="alternate" type="text/html" href="https://vshukla.com/snippets/docker-image-publishing/"/>
        <id>https://vshukla.com/snippets/docker-image-publishing/</id>
        <summary type="html">How to publish a Docker image to a registry</summary>
        <content type="html" xml:base="https://vshukla.com/snippets/docker-image-publishing/">&lt;p&gt;&lt;strong&gt;Login&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; login&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --username&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;usernam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; --password-stdin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; build .&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt; -t&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;image_nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;ta&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Tag&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; tag&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;image_nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;ta&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;usernam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;image_nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;ta&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Push&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3&quot;&gt;docker&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt; push&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;usernam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;image_nam&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-8&quot;&gt;ta&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span class=&quot;z-16&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    </entry>
</feed>
