Skip to content

Commit f74476b

Browse files
docs: update rustfava documentation (#3)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 2aa6399 commit f74476b

8 files changed

Lines changed: 1427 additions & 59 deletions

File tree

public/rustfava/docs/deployment/index.html

Lines changed: 227 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,93 @@
428428
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
429429

430430
<li class="md-nav__item">
431-
<a href="#apache-with-reverse-proxy" class="md-nav__link">
431+
<a href="#desktop-app" class="md-nav__link">
432432
<span class="md-ellipsis">
433433

434-
Apache with reverse proxy
434+
Desktop App
435+
436+
</span>
437+
</a>
438+
439+
</li>
440+
441+
<li class="md-nav__item">
442+
<a href="#docker" class="md-nav__link">
443+
<span class="md-ellipsis">
444+
445+
Docker
446+
447+
</span>
448+
</a>
449+
450+
</li>
451+
452+
<li class="md-nav__item">
453+
<a href="#systemd-service" class="md-nav__link">
454+
<span class="md-ellipsis">
455+
456+
Systemd Service
457+
458+
</span>
459+
</a>
460+
461+
</li>
462+
463+
<li class="md-nav__item">
464+
<a href="#reverse-proxy" class="md-nav__link">
465+
<span class="md-ellipsis">
466+
467+
Reverse Proxy
468+
469+
</span>
470+
</a>
471+
472+
<nav class="md-nav" aria-label="Reverse Proxy">
473+
<ul class="md-nav__list">
474+
475+
<li class="md-nav__item">
476+
<a href="#apache" class="md-nav__link">
477+
<span class="md-ellipsis">
478+
479+
Apache
480+
481+
</span>
482+
</a>
483+
484+
</li>
485+
486+
<li class="md-nav__item">
487+
<a href="#nginx" class="md-nav__link">
488+
<span class="md-ellipsis">
489+
490+
Nginx
491+
492+
</span>
493+
</a>
494+
495+
</li>
496+
497+
<li class="md-nav__item">
498+
<a href="#caddy" class="md-nav__link">
499+
<span class="md-ellipsis">
500+
501+
Caddy
502+
503+
</span>
504+
</a>
505+
506+
</li>
507+
508+
</ul>
509+
</nav>
510+
511+
</li>
512+
513+
<li class="md-nav__item">
514+
<a href="#security-considerations" class="md-nav__link">
515+
<span class="md-ellipsis">
516+
517+
Security Considerations
435518

436519
</span>
437520
</a>
@@ -500,10 +583,93 @@
500583
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
501584

502585
<li class="md-nav__item">
503-
<a href="#apache-with-reverse-proxy" class="md-nav__link">
586+
<a href="#desktop-app" class="md-nav__link">
587+
<span class="md-ellipsis">
588+
589+
Desktop App
590+
591+
</span>
592+
</a>
593+
594+
</li>
595+
596+
<li class="md-nav__item">
597+
<a href="#docker" class="md-nav__link">
598+
<span class="md-ellipsis">
599+
600+
Docker
601+
602+
</span>
603+
</a>
604+
605+
</li>
606+
607+
<li class="md-nav__item">
608+
<a href="#systemd-service" class="md-nav__link">
609+
<span class="md-ellipsis">
610+
611+
Systemd Service
612+
613+
</span>
614+
</a>
615+
616+
</li>
617+
618+
<li class="md-nav__item">
619+
<a href="#reverse-proxy" class="md-nav__link">
620+
<span class="md-ellipsis">
621+
622+
Reverse Proxy
623+
624+
</span>
625+
</a>
626+
627+
<nav class="md-nav" aria-label="Reverse Proxy">
628+
<ul class="md-nav__list">
629+
630+
<li class="md-nav__item">
631+
<a href="#apache" class="md-nav__link">
632+
<span class="md-ellipsis">
633+
634+
Apache
635+
636+
</span>
637+
</a>
638+
639+
</li>
640+
641+
<li class="md-nav__item">
642+
<a href="#nginx" class="md-nav__link">
643+
<span class="md-ellipsis">
644+
645+
Nginx
646+
647+
</span>
648+
</a>
649+
650+
</li>
651+
652+
<li class="md-nav__item">
653+
<a href="#caddy" class="md-nav__link">
654+
<span class="md-ellipsis">
655+
656+
Caddy
657+
658+
</span>
659+
</a>
660+
661+
</li>
662+
663+
</ul>
664+
</nav>
665+
666+
</li>
667+
668+
<li class="md-nav__item">
669+
<a href="#security-considerations" class="md-nav__link">
504670
<span class="md-ellipsis">
505671

506-
Apache with reverse proxy
672+
Security Considerations
507673

508674
</span>
509675
</a>
@@ -531,29 +697,66 @@
531697

532698

533699
<h1 id="deployment">Deployment<a class="headerlink" href="#deployment" title="Permanent link">&para;</a></h1>
534-
<p>There are a number of deployment options for persistently running rustfava on
535-
the Web, depending on your Web server and WSGI deployment choices. Below you
536-
can find some examples.</p>
537-
<h2 id="apache-with-reverse-proxy">Apache with reverse proxy<a class="headerlink" href="#apache-with-reverse-proxy" title="Permanent link">&para;</a></h2>
538-
<p>Apache configuration:</p>
539-
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nb">ProxyPass</span><span class="w"> </span><span class="s2">&quot;/rustfava&quot;</span><span class="w"> </span><span class="s2">&quot;http://localhost:5000/rustfava&quot;</span>
700+
<p>There are several ways to deploy rustfava depending on your needs.</p>
701+
<h2 id="desktop-app">Desktop App<a class="headerlink" href="#desktop-app" title="Permanent link">&para;</a></h2>
702+
<p>For personal use, the <a href="https://github.com/rustledger/rustfava/releases">desktop app</a> is the simplest option. It runs entirely locally with no server setup required.</p>
703+
<h2 id="docker">Docker<a class="headerlink" href="#docker" title="Permanent link">&para;</a></h2>
704+
<p>For server deployments, Docker is recommended:</p>
705+
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>docker<span class="w"> </span>run<span class="w"> </span>-p<span class="w"> </span><span class="m">5000</span>:5000<span class="w"> </span>-v<span class="w"> </span>/path/to/ledger:/data<span class="w"> </span>ghcr.io/rustledger/rustfava<span class="w"> </span>/data/main.beancount
706+
</code></pre></div>
707+
<p>For advanced Docker configurations (authentication, HTTPS, docker-compose), see the <a href="../contrib/docker/README.md">Docker deployment guide</a>.</p>
708+
<h2 id="systemd-service">Systemd Service<a class="headerlink" href="#systemd-service" title="Permanent link">&para;</a></h2>
709+
<p>To run rustfava as a system service on Linux:</p>
710+
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="c1"># /etc/systemd/system/rustfava.service</span>
711+
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="k">[Unit]</span>
712+
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="na">Description</span><span class="o">=</span><span class="s">rustfava Web UI for Beancount</span>
713+
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network.target</span>
714+
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>
715+
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="k">[Service]</span>
716+
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="na">Type</span><span class="o">=</span><span class="s">simple</span>
717+
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/bin/rustfava --host 127.0.0.1 --port 5000 /path/to/main.beancount</span>
718+
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="na">User</span><span class="o">=</span><span class="s">your-user</span>
719+
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="na">Restart</span><span class="o">=</span><span class="s">on-failure</span>
720+
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>
721+
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="k">[Install]</span>
722+
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
723+
</code></pre></div>
724+
<p>Then:</p>
725+
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>sudo<span class="w"> </span>systemctl<span class="w"> </span><span class="nb">enable</span><span class="w"> </span>rustfava
726+
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>sudo<span class="w"> </span>systemctl<span class="w"> </span>start<span class="w"> </span>rustfava
727+
</code></pre></div>
728+
<h2 id="reverse-proxy">Reverse Proxy<a class="headerlink" href="#reverse-proxy" title="Permanent link">&para;</a></h2>
729+
<h3 id="apache">Apache<a class="headerlink" href="#apache" title="Permanent link">&para;</a></h3>
730+
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="nb">ProxyPass</span><span class="w"> </span><span class="s2">&quot;/rustfava&quot;</span><span class="w"> </span><span class="s2">&quot;http://localhost:5000/rustfava&quot;</span>
731+
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="nb">ProxyPassReverse</span><span class="w"> </span><span class="s2">&quot;/rustfava&quot;</span><span class="w"> </span><span class="s2">&quot;http://localhost:5000/rustfava&quot;</span>
732+
</code></pre></div>
733+
<p>Run rustfava with the <code>--prefix</code> option:</p>
734+
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>rustfava<span class="w"> </span>--prefix<span class="w"> </span>/rustfava<span class="w"> </span>/path/to/main.beancount
540735
</code></pre></div>
541-
<p>The above will make rustfava accessible at the <code>/rustfava</code> URL and proxy requests
542-
arriving there to a locally running rustfava. To make rustfava work properly in
543-
that context, you should run it using the <code>--prefix</code> command line option, like
544-
this:</p>
545-
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>rustfava<span class="w"> </span>--prefix<span class="w"> </span>/rustfava<span class="w"> </span>/path/to/your/main.beancount
736+
<h3 id="nginx">Nginx<a class="headerlink" href="#nginx" title="Permanent link">&para;</a></h3>
737+
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="k">location</span><span class="w"> </span><span class="s">/rustfava/</span><span class="w"> </span><span class="p">{</span>
738+
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span><span class="kn">proxy_pass</span><span class="w"> </span><span class="s">http://127.0.0.1:5000/rustfava/</span><span class="p">;</span>
739+
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="w"> </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">Host</span><span class="w"> </span><span class="nv">$host</span><span class="p">;</span>
740+
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="w"> </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Real-IP</span><span class="w"> </span><span class="nv">$remote_addr</span><span class="p">;</span>
741+
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="w"> </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Forwarded-For</span><span class="w"> </span><span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span>
742+
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="w"> </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Forwarded-Proto</span><span class="w"> </span><span class="nv">$scheme</span><span class="p">;</span>
743+
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="p">}</span>
546744
</code></pre></div>
547-
<p>To have rustfava run automatically at boot and manageable as a system service
548-
you might want to define a systemd unit file for it, for example:</p>
549-
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">[Unit]</span>
550-
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Rustfava Web UI for Beancount</span>
551-
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a>
552-
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="k">[Service]</span>
553-
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="na">Type</span><span class="o">=</span><span class="s">simple</span>
554-
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/bin/rustfava --host localhost --port 5000 --prefix /rustfava /path/to/your/main.beancount</span>
555-
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="na">User</span><span class="o">=</span><span class="s">your-user</span>
745+
<h3 id="caddy">Caddy<a class="headerlink" href="#caddy" title="Permanent link">&para;</a></h3>
746+
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>your-domain.com {
747+
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a> reverse_proxy localhost:5000
748+
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>}
556749
</code></pre></div>
750+
<p>Caddy automatically handles HTTPS with Let's Encrypt.</p>
751+
<h2 id="security-considerations">Security Considerations<a class="headerlink" href="#security-considerations" title="Permanent link">&para;</a></h2>
752+
<p>When exposing rustfava to the internet:</p>
753+
<ol>
754+
<li><strong>Use HTTPS</strong> - Never expose plain HTTP to the public internet</li>
755+
<li><strong>Add authentication</strong> - Use a reverse proxy with OAuth2 or basic auth</li>
756+
<li><strong>Restrict access</strong> - Use firewall rules to limit access to trusted IPs</li>
757+
<li><strong>Keep updated</strong> - Regularly update rustfava for security patches</li>
758+
</ol>
759+
<p>See <a href="../SECURITY.md">SECURITY.md</a> for more security best practices.</p>
557760

558761

559762

0 commit comments

Comments
 (0)