all repos

olexsmir.xyz @ c3c598c

my site, yes, i like lua

olexsmir.xyz/freshfly.html(view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE html><html lang="en"><head><title>FreshRSS on fly</title><meta charset="utf-8"><meta content="width=device-width, initial-scale=1.0, viewport-fit=cover" name="viewport"><link href="https://olexsmir.xyz/feed.xml" rel="alternate" title="olexsmir's blog feed, also hi rss reader!" type="application/atom+xml"></link><link href="style.css" rel="stylesheet"></link><link href="chroma.css" rel="stylesheet"></link><link href="assets/favicon.svg" rel="icon"></link><meta content="Blog post titled: FreshRSS on fly" name="description"><meta content="Blog post titled: FreshRSS on fly" property="og:description"><meta content="FreshRSS on fly" property="og:site_name"><meta content="FreshRSS on fly" property="og:title"><meta content="website" property="og:type"></head><body class="home"><header><nav><p><a class="visual-hidden" href="#main">Skip to content</a><a href="/">home</a><a href="/posts">posts</a><a href="/feed.xml">feed</a><button id="theme-toggle">🌓</button></p></nav></header><main id="main"><div class="blog-title"><h1>FreshRSS on fly</h1><p><time datetime="2025-11-10">2025-11-10</time></p></div><h1>The problem.</h1>
<p>I'm broke, and I like using FreshRSS.</p>
<h1>The solution.</h1>
<p>We'll be using <a href="https://fly.io">fly.io</a>
they have a generous <a href="https://fly.io/docs/about/pricing">free allowance</a>.</p>
<h2>Setting up</h2>
<p>First, you have to <a href="https://fly.io/app/sign-up">sign up for fly account</a>.
<a href="https://fly.io/docs/flyctl/install">Get their cli</a>, and login with <code>flyctl auth login</code>.</p>
<h2>Deploying FreshRSS</h2>
<p>Create a directory where you'll store the <code>fly.toml</code> file, <code>cd</code> into this directory, we'll do our magic.</p>
<p>Now, we need to create an app on fly.io, using the following command:</p>
<pre class="chroma"><code><span class="line"><span class="cl">flyctl app create --save
</span></span></code></pre><p>After this, you'll get an auto-generated <code>fly.toml</code> file.
<br>
Modify it to look like this (<strong>don't change the app name</strong>):</p>
<pre class="chroma"><code><span class="line"><span class="cl"><span class="nx">app</span> <span class="p">=</span> <span class="s1">&#39;your-app-name&#39;</span> <span class="c"># TODO: update me</span>
</span></span><span class="line"><span class="cl"><span class="nx">primary_region</span> <span class="p">=</span> <span class="s1">&#39;fra&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nx">kill_signal</span> <span class="p">=</span> <span class="s1">&#39;SIGINT&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">build</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="c"># Please check what the latest version is at: https://github.com/FreshRSS/FreshRSS</span>
</span></span><span class="line"><span class="cl"><span class="c"># and set it here</span>
</span></span><span class="line"><span class="cl"><span class="nx">image</span> <span class="p">=</span> <span class="s1">&#39;docker.io/freshrss/freshrss:1.27.1&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">env</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">CRON_MIN</span> <span class="p">=</span> <span class="s1">&#39;*/20&#39;</span> <span class="c"># update feeds every 20 minutes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># you don&#39;t want your account and feeds to be deleted after a restart</span>
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">mounts</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">source</span> <span class="p">=</span> <span class="s1">&#39;freshrss_data&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nx">destination</span> <span class="p">=</span> <span class="s1">&#39;/var/www/FreshRSS/data&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># you probably want this app to be accessible</span>
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">services</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">protocol</span> <span class="p">=</span> <span class="s1">&#39;tcp&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nx">internal_port</span> <span class="p">=</span> <span class="mi">80</span>
</span></span><span class="line"><span class="cl"><span class="nx">processes</span> <span class="p">=</span> <span class="p">[</span><span class="s1">&#39;app&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">services</span><span class="p">.</span><span class="nx">ports</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">port</span> <span class="p">=</span> <span class="mi">80</span>
</span></span><span class="line"><span class="cl"><span class="nx">handlers</span> <span class="p">=</span> <span class="p">[</span><span class="s1">&#39;http&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">force_https</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">services</span><span class="p">.</span><span class="nx">ports</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">port</span> <span class="p">=</span> <span class="mi">443</span>
</span></span><span class="line"><span class="cl"><span class="nx">handlers</span> <span class="p">=</span> <span class="p">[</span><span class="s1">&#39;tls&#39;</span><span class="p">,</span> <span class="s1">&#39;http&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">vm</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">size</span> <span class="p">=</span> <span class="s1">&#39;shared-cpu-1x&#39;</span>
</span></span></code></pre><p>Deploy to fly.io by running:</p>
<pre class="chroma"><code><span class="line"><span class="cl">flyctl launch
</span></span></code></pre><p>Now open <a href="https://your-app-name.fly.dev">your-app-name.fly.dev</a>
in your browser, and follow the setup wizard.
Chose <strong>sqlite</strong> as your database, it will be automatically stored in <code>/var/www/FreshRSS/data</code>.</p>
<h2>Setting up custom domain (optional)</h2>
<pre class="chroma"><code><span class="line"><span class="cl">fly certs create rss.your-domain.com
</span></span></code></pre><p>The output of this command will guide you through the records you need to add to your domain.</p>
</main><script>const root = document.documentElement;root.dataset.theme = localStorage.theme || 'dark';document.getElementById('theme-toggle').onclick = () => {root.dataset.theme = root.dataset.theme === 'dark' ? 'light' : 'dark';localStorage.theme = root.dataset.theme;};</script></body></html>