<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>rsomhaP</title>
    <link href="https:&#x2f;&#x2f;rsomhap.fly.dev" />
    <link href="https:&#x2f;&#x2f;rsomhap.fly.dev&#x2f;feed" rel="self" type="application/rss+xml"/>
    
    <updated>2025-03-07T14:34:54Z</updated>
    
    <!-- to ensure it's in canonical form, as described by section 6 of RFC 3986 -->
    <id>https:&#x2f;&#x2f;rsomhap.fly.dev&#x2f;</id>
    
    <entry>
        <title>Hello, rsomhaP!</title>
        <author>
            <name>JmPotato</name>
            <uri>https:&#x2f;&#x2f;rsomhap.fly.dev</uri>
        </author>
        <link href="https:&#x2f;&#x2f;rsomhap.fly.dev&#x2f;article/hello-rsomhap"/>
        <published>2024-08-22T16:12:17Z</published>
        <updated>2025-03-07T14:34:54Z</updated>
        <id>https:&#x2f;&#x2f;rsomhap.fly.dev&#x2f;article/hello-rsomhap</id>
        <content type="html">
            <![CDATA[<blockquote>
<p>'r{}'.format(''.join(sorted('<a href="https://github.com/JmPotato/Pomash">Pomash</a>'))[::-1]) == 'rsomhaP'</p>
</blockquote>
<p>rsomhaP is a simple ready-to-use blog engine written in Rust.</p>
<p><a href="https://github.com/JmPotato/rsomhaP/actions/workflows/fly-deploy.yml"><figure><img src="https://github.com/JmPotato/rsomhaP/actions/workflows/fly-deploy.yml/badge.svg" alt="Demo Deployment Status" /></figure></a></p>
<h2>What is rsomhaP?</h2>
<p><a href="https://github.com/JmPotato/Pomash">Pomash</a> is a blog engine written in Python, which was almost my first usable project created back in 2014. Although it hosted <a href="https://ipotato.me">my blog</a> well for the past decade, since its code is somewhat messy and full of &quot;young programmer&quot; mistakes, I decided to rewrite it in Rust to make it more maintainable and as a commemorative project to its former self. Then here it is: rsomhaP.</p>
<p>rsomhaP is still a simple ready-to-use blog engine inheriting a lot from its predecessor:</p>
<ul>
<li>Markdown friendly.</li>
<li>Monolithic web application without frontend and backend separation.</li>
<li>Concise and readable HTML/CSS styles.</li>
</ul>
<p>But also introduces some new features:</p>
<ul>
<li>More secure admin authentication.</li>
<li>Use any MySQL-compatible database to store your blog data.</li>
<li>Easy to deploy with a single command or a simple <a href="https://github.com/JmPotato/rsomhaP/blob/main/Dockerfile">Dockerfile</a>.</li>
</ul>
<h2>Deployment</h2>
<p>Edit your <a href="https://github.com/JmPotato/rsomhaP/blob/main/config.toml"><code>config.toml</code></a> to your liking, then run:</p>
<pre style="background-color:#2d2d2d;"><code class="language-sh"><span style="color:#6699cc;">cargo</span><span style="color:#d3d0c8;"> run</span><span style="color:#f2777a;"> --release
</span></code></pre>
<p>Or build a Docker image and run it:</p>
<pre style="background-color:#2d2d2d;"><code class="language-sh"><span style="color:#6699cc;">docker</span><span style="color:#d3d0c8;"> build</span><span style="color:#f2777a;"> -t</span><span style="color:#d3d0c8;"> rsomhap .
</span><span style="color:#6699cc;">docker</span><span style="color:#d3d0c8;"> run</span><span style="color:#f2777a;"> -p</span><span style="color:#d3d0c8;"> 5299:5299 rsomhap
</span></code></pre>
<p>Access the admin page at &quot;<a href="http://%7Byour-deployment-url%7D/admin">http://{your-deployment-url}/admin</a>&quot; to manage your blog. The initial password is the same as the username configured in <a href="https://github.com/JmPotato/rsomhaP/blob/62dd746dfd6f7413d161a1fde79b82a0589b241b/config.toml#L14"><code>config.toml</code></a>, <strong>which you should change after the first login as soon as possible.</strong>.</p>
<p>Technically, you can deploy rsomhaP with modern SaaS infrastructures entirely free from scratch. For example:</p>
<ul>
<li>Use <a href="https://www.pingcap.com/tidb-serverless">TiDB Serverless</a> as the MySQL-compatible database.</li>
<li>Use <a href="https://fly.io">fly.io</a> as the hosting service.</li>
<li>Use <a href="https://www.cloudflare.com/developer-platform/r2">Cloudflare R2</a> as the image hosting service.</li>
<li>Use <a href="https://webp.se">WebP Cloud Services</a> as the image proxy service.</li>
</ul>
<h2>License</h2>
<p><a href="https://github.com/JmPotato/rsomhaP/blob/main/LICENSE">MIT</a></p>
]]>
        </content>
    </entry>
    
</feed>