{"id":2300,"date":"2025-12-12T14:21:32","date_gmt":"2025-12-12T20:21:32","guid":{"rendered":"https:\/\/izendestudioweb.com\/articles\/?p=2300"},"modified":"2025-12-12T14:21:32","modified_gmt":"2025-12-12T20:21:32","slug":"step-by-step-guide-to-deploying-fizzy-on-digitalocean-with-kamal","status":"publish","type":"post","link":"https:\/\/mail.izendestudioweb.com\/articles\/2025\/12\/12\/step-by-step-guide-to-deploying-fizzy-on-digitalocean-with-kamal\/","title":{"rendered":"Step-by-Step Guide to Deploying Fizzy on DigitalOcean with Kamal"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Are you looking to host your own project management tool without the hassle of complex setups? If so, you&#8217;ve come to the right place. In this guide, we\u2019ll walk you through deploying <strong>Fizzy<\/strong>, a lightweight kanban tool from 37signals, on a single <strong>DigitalOcean<\/strong> Droplet using <strong>Kamal<\/strong>. The beauty of this setup lies in its simplicity\u2014Kamal streamlines the entire process, allowing you to focus on what matters most: your project.<\/p>\n<p>Fizzy offers an open-source alternative to traditional kanban tools, giving you the freedom to own and customize your software. Whether you&#8217;re a developer eager to learn or a project manager wanting more control, this guide will equip you with the knowledge to get your own Fizzy instance up and running in no time.<\/p>\n<h2>Prerequisites for Deployment<\/h2>\n<p>Before diving into the deployment process, ensure you have the following prerequisites:<\/p>\n<ul>\n<li>A <strong>GitHub<\/strong> account<\/li>\n<li>A <strong>DigitalOcean<\/strong> account<\/li>\n<li><strong>Docker Desktop<\/strong> installed locally<\/li>\n<li>An <strong>SSH key<\/strong> added to your DigitalOcean account<\/li>\n<\/ul>\n<p>With these essentials in place, you\u2019re ready to start!<\/p>\n<h2>Setting Up Your Fizzy Instance<\/h2>\n<p>Follow these steps to deploy Fizzy on DigitalOcean:<\/p>\n<ol>\n<li><strong>Fork the Fizzy Repository<\/strong><br \/>Navigate to the Fizzy repository on GitHub, click <em>Fork<\/em>, and clone the repository locally:<\/li>\n<\/ol>\n<p><code>git clone https:\/\/github.com\/YOUR_USERNAME\/fizzy.git<\/code><\/p>\n<p>Then, navigate into the directory and install the dependencies:<\/p>\n<p><code>cd fizzy<\/code><\/p>\n<p><code>bin\/setup<\/code><\/p>\n<ol start=\"2\">\n<li><strong>Create a DigitalOcean Droplet<\/strong><br \/>Log in to your DigitalOcean account and create a new Droplet:<\/li>\n<\/ol>\n<p>Select <strong>Ubuntu 22.04 or later<\/strong> as the image, choose a size with at least <strong>2GB RAM<\/strong>, and select the region closest to your users. Ensure you choose <strong>SSH<\/strong> as the authentication method. Copy the Droplet\u2019s IP address as you\u2019ll need it later.<\/p>\n<ol start=\"3\">\n<li><strong>Configure Kamal for Deployment<\/strong><\/li>\n<\/ol>\n<p>Open <code>config\/deploy.yml<\/code> and make two crucial changes:<\/p>\n<ul>\n<li>Add your Droplet\u2019s IP address in two places:<\/li>\n<\/ul>\n<p><code>servers: <br \/> web:<br \/> - <\/code><\/p>\n<p><code>proxy:<br \/> host: <\/code><\/p>\n<ul>\n<li>Configure SSL based on your setup:<\/li>\n<\/ul>\n<p>If you have a domain, update the host and enable SSL:<\/p>\n<p><code>proxy:<br \/> ssl: true<br \/> host: fizzy.yourdomain.com<\/code><\/p>\n<p>For an IP-only setup, temporarily disable SSL:<\/p>\n<p><code>proxy:<br \/> ssl: false<br \/> host: <\/code><\/p>\n<p>Remember, running without SSL is only for testing and not recommended for production.<\/p>\n<ol start=\"4\">\n<li><strong>Set Up Secrets<\/strong><\/li>\n<\/ol>\n<p>Kamal loads sensitive data from <code>.kamal\/secrets<\/code>. Create the file and install Ruby gems:<\/p>\n<p><code>mkdir -p .kamal<br \/>touch .kamal\/secrets<br \/>bundle install<\/code><\/p>\n<p>Generate your Rails secret key and add it to <code>.kamal\/secrets<\/code>.<\/p>\n<ol start=\"5\">\n<li><strong>Verify SSH Access<\/strong><\/li>\n<\/ol>\n<p>Make sure you can connect to your server using:<\/p>\n<p><code>ssh root@YOUR_DROPLET_IP<\/code><\/p>\n<p>If the connection is successful, you\u2019re ready to deploy!<\/p>\n<h2>Deployment and Email Setup<\/h2>\n<p>Now that your environment is ready, let\u2019s deploy Fizzy:<\/p>\n<ol>\n<li><strong>Ensure Docker Desktop is Running<\/strong><br \/>Start Docker Desktop and ensure it&#8217;s operational by running <code>docker ps<\/code>.<\/li>\n<li><strong>Run Kamal Setup<\/strong><br \/>From your Fizzy project directory, execute:<\/li>\n<\/ol>\n<p><code>bin\/kamal setup<\/code><\/p>\n<p>Kamal will handle the installation of Docker on the Droplet, build the Fizzy image, and configure the proxy.<\/p>\n<ol start=\"3\">\n<li><strong>Verify Deployment<\/strong><br \/>Open your browser and navigate to:<\/li>\n<\/ol>\n<p>Option A: <code>https:\/\/fizzy.yourdomain.com<\/code> (with domain)<\/p>\n<p>Option B: <code>http:\/\/YOUR_DROPLET_IP<\/code> (without SSL)<\/p>\n<h2>Configuring Email for User Verification<\/h2>\n<p>Fizzy requires email verification for account setup. For this, we recommend using an HTTP-based email provider like <strong>Resend<\/strong>:<\/p>\n<ol>\n<li>Create a Resend account and verify your domain.<\/li>\n<li>Add the Resend gem to your Gemfile:<\/li>\n<\/ol>\n<p><code>gem \"resend\"<\/code><\/p>\n<p>Run <code>bundle install<\/code> to install the gem.<\/p>\n<ol start=\"3\">\n<li>Update your <code>config\/environments\/production.rb<\/code> file to use Resend\u2019s HTTP API.<\/li>\n<\/ol>\n<p>Deploy the changes using:<\/p>\n<p><code>bin\/kamal deploy<\/code><\/p>\n<p>After deployment, test email delivery by signing up or logging in.<\/p>\n<h2>Conclusion<\/h2>\n<p>Congratulations! You\u2019ve successfully deployed your own Fizzy instance on a DigitalOcean Droplet. You&#8217;ve not only learned to set up a powerful kanban tool but also gained insights into managing your software infrastructure. Don&#8217;t forget to enable SSL for a secure production deployment if you initially opted for IP-only access. Enjoy organizing your projects with Fizzy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deploy Fizzy on DigitalOcean with Kamal in this comprehensive guide, simplifying project management with a self-hosted solution.<\/p>\n","protected":false},"author":2,"featured_media":2299,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[114,115,103],"class_list":["post-2300","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-hosting","tag-digital","tag-domains","tag-local"],"jetpack_featured_media_url":"https:\/\/mail.izendestudioweb.com\/articles\/wp-content\/uploads\/2025\/12\/img-dq96VHrVkNO4bPYMNK6zSjsA.png","_links":{"self":[{"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/posts\/2300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/comments?post=2300"}],"version-history":[{"count":1,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/posts\/2300\/revisions"}],"predecessor-version":[{"id":2315,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/posts\/2300\/revisions\/2315"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/media\/2299"}],"wp:attachment":[{"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/media?parent=2300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/categories?post=2300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mail.izendestudioweb.com\/articles\/wp-json\/wp\/v2\/tags?post=2300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}