<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="355230" data-post-id="355230">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RicoTrevisan" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RicoTrevisan/120/32751_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RicoTrevisan
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for reporting back. If you ever write a tutorial about it I would be interested to read; please tag me.</p>
<hr>
<p>Someone already mentioned Coolify in the thread. I really like it. I host it on Hetzner for some 14EUR/month and throw all my idea-spaghettis on it. They haven’t yet surprised me with overrages even though this stuff is happening<br>
</p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/0/7/0798671d816e7f8f0b8b42a24618be4e62b7c04c.png" data-download-href="https://forum.elixirforum.com/uploads/default/0798671d816e7f8f0b8b42a24618be4e62b7c04c" title="CleanShot 2025-02-04 at 10.31.32@2x" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/0/7/0798671d816e7f8f0b8b42a24618be4e62b7c04c_2_690x200.png" alt="CleanShot 2025-02-04 at 10.31.32@2x" data-base62-sha1="15bRylmQ0NoKojkRBIxpdtCM1hG" width="690" height="200" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/0/7/0798671d816e7f8f0b8b42a24618be4e62b7c04c_2_690x200.png, https://forum.elixirforum.com/uploads/default/optimized/3X/0/7/0798671d816e7f8f0b8b42a24618be4e62b7c04c_2_1035x300.png 1.5x, https://forum.elixirforum.com/uploads/default/optimized/3X/0/7/0798671d816e7f8f0b8b42a24618be4e62b7c04c_2_1380x400.png 2x" data-dominant-color="FCF9F9"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">CleanShot 2025-02-04 at 10.31.32@2x</span><span class="informations">3022×878 153 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<p>I think it’s something I’m doing wrong with Oban in one of the apps.</p>
<hr>
<p>Another idea that I would love to explore: <a href="https://www.youtube.com/watch?v=fuZoxuBiL9o" rel="noopener nofollow ugc">https://www.youtube.com/watch?v=fuZoxuBiL9o</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="355230" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-355230" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="355230"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="355275" data-post-id="355275">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="drobban" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/drobban/120/21893_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  drobban
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>zfs - snapshots. Thats how I manage it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="355275" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-355275" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="355275"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="360131" data-post-id="360131">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="elepedus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/elepedus/120/25641_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  elepedus
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Might seem a bit crazy, but I do it all in Livebook these days. I set up speedrun.dev as a deployment target using Livebook teams, and I deploy apps to it both from my local instance and from a cloud instance I host.</p>
<p>It’s pretty magical to be able to have an idea, jump into livebook (even on my phone!), code it up, hit a button and have it deployed instantly.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="360131" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-360131" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="360131"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="360538" data-post-id="360538">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="artem" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/artem/120/27625_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  artem
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I also use Livebook (with Livebook Teams for easier deployments) for some RnD(ish) work, sometimes even with production, but to me it works for really tiny apps only. Once it gets at least a tiny ambition of becoming a real service (with, oh, user accounts maybe), then it gets not too comfortable to run everything in a single notebook. And debugging in livebook I can’t quite figure.</p>
<p>Or do you somehow write and debug modules somewhere out of livebook and final LB is a glue between modules only?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="360538" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-360538" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="360538"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="360541" data-post-id="360541">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="D4no0" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/D4no0/120/33624_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  D4no0
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The fact that you can’t write tests for livebooks is also not very encouraging for more complex things.</p>
<p>PS: Nevermind, looks like you can: <a href="https://github.com/livebook-dev/livebook/blob/main/lib/livebook/notebook/learn/intro_to_livebook.livemd#running-tests" class="inline-onebox" rel="noopener nofollow ugc">livebook/lib/livebook/notebook/learn/intro_to_livebook.livemd at main · livebook-dev/livebook · GitHub</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="360541" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-360541" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="360541"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="360596" data-post-id="360596">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="elepedus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/elepedus/120/25641_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  elepedus
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah, writing larger systems in LiveBook gets unwieldy, partly because of the linear top-to-bottom format. Scrolling through 1000 line cells is somehow much less pleasant than scrolling through 1000 line files.</p>
<p>My best advice is to keep LB apps small. Aside from extracting reusable libraries, I’ve found it helpful to think of them a bit like microservices. You can deploy different application concerns as their own notebooks and link them up either via standard APIs or through clustering.</p>
<p>In fact, you can even build backend service apps that serve multiple logical “frontend” apps. I do this with my KinoReverseProxy library, which I deploy once, and then configure to do host-based routing to many independent apps on the same LB instance.</p>
<p>Finally, re debugging, I find <code>dbg/1</code> much more useful in LiveBook than in normal IDEs. I miss step-through debuggers from working with other languages, but I dont think I’ve ever managed to get one working with Elixir.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="360596" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-360596" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="360596"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="361707" data-post-id="361707">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="artem" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/artem/120/27625_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  artem
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Do I get it correctly, <a class="mention" href="/u/elepedus" rel="nofollow">@elepedus</a> that most of the time you do not care about user accounts and billing or “billing” (as in I let people play with AI for free, but no more than X calls a month so I don’t get bankrupt because of my hobbie project)? I think most of the time it’s exactly user accounts and storing user’s settings-artifacts-whatever that forces me to do at least a simple Phoenix app.</p>
<p>May I ask you to describe (sketch?) an example how your livebook microservices collaborate in some simpl(ish) project? I like the idea, but imagining how it could all work together is a bit tough for me.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="361707" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-361707" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="361707"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="361712" data-post-id="361712">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="elepedus" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/elepedus/120/25641_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  elepedus
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>There’s nothing inherent to running in Livebook that prevents us from having user accounts or billing.</p>
<p>For example, we could have a notebook that deploys an Accounts app which stores data in a local sqlite or remote managed database and exposes either an API that other notebooks can call, or clusters with them to provide auth services. Or you could use something like Auth0.</p>
<p>A lot of the time it’s precisely these table stakes that eat up a lot of time on small projects, so I’ve been slowly working towards being able to share solutions between multiple apps.</p>
<p>Let me know if the above still leaves too many unanswered questions and I’ll see about putting together a sketch or something <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="361712" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-361712" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="361712"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="385449" data-post-id="385449">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="vamsinagasai" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/vamsinagasai/120/40070_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  vamsinagasai
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah, this is a pretty common problem with small Elixir projects.</p>
<p>If your goal is <strong>not paying per project</strong> and keeping things simple, you’ve got a few solid options:</p>
<ul>
<li>
<p>The most cost-efficient way is still <strong>running multiple apps on a single VPS</strong> using something like Dokku or CapRover. You pay one flat monthly cost and host as many tiny projects as you want.</p>
</li>
<li>
<p>If you don’t want to deal with setup, configs, and server management, you can look at <strong><a href="https://kuberns.com" rel="noopener nofollow ugc">Kuberns</a></strong>. It lets you <strong>deploy directly from your code without managing infrastructure</strong>, and you’re <strong>not locked into per-site pricing</strong>, which works well for hobby apps.</p>
</li>
<li>
<p><strong><a href="http://Fly.io" rel="noopener nofollow ugc">Fly.io</a></strong> is also popular in the Elixir community, but costs can increase as you spin up more apps.</p>
</li>
</ul>
<p>So it really comes down to:</p>
<ul>
<li>
<p><strong>lowest cost → VPS setup</strong></p>
</li>
<li>
<p><strong>Zero hassle →</strong> <a href="https://kuberns.com" rel="noopener nofollow ugc"> <strong>Kuberns</strong></a></p>
</li>
<li>
<p><strong>Elixir-native ecosystem → <a href="http://Fly.io" rel="noopener nofollow ugc">Fly.io</a></strong></p>
</li>
</ul>
<p>Curious what others are doing for multiple tiny apps without overpaying.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="385449" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-385449" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="385449"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="389256" data-post-id="389256">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="materix" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/materix/120/39965_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  materix
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Interesting thread. Has any new development in this area happened since this thread started?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="389256" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/where-do-you-host-small-or-even-tiny-elixir-projects/67107/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-389256" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="389256"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/67107/load_more?page=5">Load more posts (11 remaining)</a>
</div></template></turbo-stream>