<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jeremy</title>
    <description>The latest articles on DEV Community by Jeremy (@noted).</description>
    <link>https://dev.to/noted</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1173266%2F70b31cc7-47c5-47aa-aa59-79c61b6fe0a4.png</url>
      <title>DEV Community: Jeremy</title>
      <link>https://dev.to/noted</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/noted"/>
    <language>en</language>
    <item>
      <title>Forgejo - Powerful Self-Hosted Git Service</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Mon, 12 Aug 2024 15:02:12 +0000</pubDate>
      <link>https://dev.to/noted/forgejo-powerful-self-hosted-git-service-4eih</link>
      <guid>https://dev.to/noted/forgejo-powerful-self-hosted-git-service-4eih</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tSOWJPOg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/forgejo-noted.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tSOWJPOg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/forgejo-noted.jpg" alt="Forgejo - Powerful Self-Hosted Git Service" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having a centralized platform to manage code repositories and collaborate with team members has become increasingly essential. With modern software development often involving multiple moving parts, maintaining control over your project's direction can be a challenge. This is where self-hosted solutions like Forgejo come into play, providing a single, unified space for teams to work together seamlessly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SbjjFVhP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/frgejo-main-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SbjjFVhP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/frgejo-main-1.png" alt="Forgejo - Powerful Self-Hosted Git Service" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Forgejo?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://forgejo.org/?ref=noted.lol" rel="noopener noreferrer"&gt;Forgejo&lt;/a&gt; is a self-hosted Git service that empowers developers to manage their projects without relying on proprietary tools. By self-hosting Forgejo, you'll gain control over your environment, allowing you to customize it to fit your team's needs. You can integrate Forgejo with other tools and services to streamline your workflow, ensure the integrity of your software development process, and collaborate seamlessly with your team members. With Forgejo, you'll have a lightweight, scalable, and secure platform that meets your unique project requirements.&lt;/p&gt;

&lt;p&gt;Brought to you by the collaborative efforts of &lt;a href="https://docs.codeberg.org/getting-started/what-is-codeberg/?ref=noted.lol#what-is-codeberg-e.v.%3F" rel="noopener noreferrer"&gt;Codeberg e.V.&lt;/a&gt;, Forgejo is a community-driven project that prioritizes freedom and transparency. As a fully open-source solution, it can be trusted to always remain free from proprietary influences. Users have the flexibility to create an account on any instance, or download and self-host their own copy for maximum control and customization. With a focus on security, scalability, federation, and privacy, Forgejo is designed to empower developers like you to work together seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forgejo Key Highlights
&lt;/h2&gt;

&lt;p&gt;• &lt;strong&gt;Easy Setup&lt;/strong&gt; : Forgejo can be installed in minutes with a &lt;a href="https://forgejo.org/download/?ref=noted.lol#installation-from-binary" rel="noopener noreferrer"&gt;simple binary installer&lt;/a&gt; or using &lt;a href="https://forgejo.org/docs/latest/admin/installation-docker/?ref=noted.lol" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; for maximum flexibility.&lt;br&gt;&lt;br&gt;
• &lt;strong&gt;Wide Compatibility&lt;/strong&gt; : Forgejo runs on Windows, macOS, Linux, ARM, and more making it accessible across a range of platforms.&lt;br&gt;&lt;br&gt;
• &lt;strong&gt;Efficient Performance&lt;/strong&gt; : Forgejo's lightweight design ensures that it can run smoothly even on resource constrained devices like Raspberry Pi.&lt;br&gt;&lt;br&gt;
• &lt;strong&gt;Community-Driven&lt;/strong&gt; : As an open-source project, Forgejo allows the community to contribute to its development, shape its future, and benefit from collective expertise.&lt;/p&gt;
&lt;h2&gt;
  
  
  Installing Forgejo using Docker Compose
&lt;/h2&gt;

&lt;p&gt;To ensure a secure installation, when using Docker to install Forgejo, make sure to set up your Cloudflare tunnel or Nginx domain beforehand. This is necessary for the installation process, and once complete, you can access the web interface by pointing your domain to port 3000.&lt;/p&gt;

&lt;p&gt;This Docker Compose stack can be used to install Forgejo on your server. If you need help, see our guides about &lt;a href="https://noted.lol/get-started-self-hosting/" rel="noopener noreferrer"&gt;getting started with self-hosting&lt;/a&gt;. Refer to the &lt;a href="https://forgejo.org/releases/?ref=noted.lol" rel="noopener noreferrer"&gt;Forgejo releases&lt;/a&gt; for the most recent version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3"

networks:
  forgejo:
    external: false

services:
  server:
    image: codeberg.org/forgejo/forgejo:8.0.1
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO __database__ DB_TYPE=postgres
      - FORGEJO __database__ HOST=db:5432
      - FORGEJO __database__ NAME=forgejo
      - FORGEJO __database__ USER=forgejo
      - FORGEJO __database__ PASSWD=forgejo
    restart: always
    networks:
      - forgejo
    volumes:
      - /docker/forgejo/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=forgejo
      - POSTGRES_PASSWORD=forgejo
      - POSTGRES_DB=forgejo
    networks:
      - forgejo
    volumes:
      - /docker/forgejo/postgres:/var/lib/postgresql/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For added security, when deploying Forgejo in production environments, it is strongly recommended to modify the default database username and password. In our demonstration setup, we'll utilize the default credentials for simplicity, but please update these settings before going live.&lt;/p&gt;

&lt;p&gt;After setting up the Docker Compose stack, navigate to your designated domain to access the Forgejo installation page. Fill out the required information to complete the installation process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wm7_GPvg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/forgejo-installation-postgress-noted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wm7_GPvg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/forgejo-installation-postgress-noted.png" alt="Forgejo - Powerful Self-Hosted Git Service" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After completing the installation form, click the "Install" button to initiate the process. Once the installation is complete, you'll be automatically redirected to the main Forgejo dashboard. From here, you can start creating new repositories, organizations, or performing migrations to get started with managing your Git workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JAzNt3EM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/forgejo-main.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JAzNt3EM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/forgejo-main.png" alt="Forgejo - Powerful Self-Hosted Git Service" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Notes and Thoughts
&lt;/h3&gt;

&lt;p&gt;As you begin your experience with Forgejo, remember that you're not just installing a Git service - you're joining a community committed to open-source principles. By choosing Forgejo, you're supporting a project that values transparency, collaboration, and the freedom to code without restrictions. With its flexible architecture and modular design, Forgejo enables you to tailor your Git workflow to meet your unique needs, while also contributing to the development of a platform that is truly yours.&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Glance - Self-Hosted Feeds Dashboard</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Thu, 01 Aug 2024 13:41:00 +0000</pubDate>
      <link>https://dev.to/noted/glance-self-hosted-feeds-dashboard-455</link>
      <guid>https://dev.to/noted/glance-self-hosted-feeds-dashboard-455</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KJ4kb8oQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/glance-self-hosted-dashboard-noted.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJ4kb8oQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/glance-self-hosted-dashboard-noted.jpg" alt="Glance - Self-Hosted Feeds Dashboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Self-hosted dashboards have become popular, allowing people to collect and visualize important information. By hosting a dashboard on your own server or cloud storage, you can customize the layout and content to fit your needs, ensuring that the data most relevant to you is always accessible. Meet the latest addition to the self-hosted dashboard family, Glance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Glance?
&lt;/h2&gt;

&lt;p&gt;Glance is a dashboard tool that allows you to aggregate your favorite feeds in one place. You have complete control over the content and can easily monitor multiple sources of information without being tied to a specific platform or service. By self-hosting Glance, you can create a personalized feed reader that's tailored to your interests and needs, allowing you to focus on the information and updates that are most important to you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5kZs61dG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/glance-self-hosted-dahboard-readme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5kZs61dG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/glance-self-hosted-dahboard-readme.png" alt="Glance - Self-Hosted Feeds Dashboard" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Glance Features and Widgets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;RSS feeds&lt;/li&gt;
&lt;li&gt;Subreddit posts&lt;/li&gt;
&lt;li&gt;Weather&lt;/li&gt;
&lt;li&gt;Bookmarks&lt;/li&gt;
&lt;li&gt;Hacker News&lt;/li&gt;
&lt;li&gt;Lobsters&lt;/li&gt;
&lt;li&gt;Latest YouTube videos from specific channels&lt;/li&gt;
&lt;li&gt;Clock&lt;/li&gt;
&lt;li&gt;Calendar&lt;/li&gt;
&lt;li&gt;Stocks&lt;/li&gt;
&lt;li&gt;iframe&lt;/li&gt;
&lt;li&gt;Twitch channels &amp;amp; top games&lt;/li&gt;
&lt;li&gt;GitHub releases&lt;/li&gt;
&lt;li&gt;Repository overview&lt;/li&gt;
&lt;li&gt;Site monitor&lt;/li&gt;
&lt;li&gt;Search box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Glance offers instant access to your favorite online sources, including blogs and websites via RSS feeds, subreddits, stocks, YouTube videos, GitHub repos, Twitch streams, custom links, app monitoring and more. You can customize your feed by adding or removing sources as you see fit, ensuring that the information you need is always at your fingertips. Also, Glance allows you to incorporate widgets for displaying current time, calendar, and weather updates providing a detailed and organized dashboard that suits your individual needs and preferences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Glance Dashboard using Docker
&lt;/h2&gt;

&lt;p&gt;This Docker Compose stack can be used to install Glance on your server. If you need help, see our guides about &lt;a href="https://noted.lol/get-started-self-hosting/" rel="noopener noreferrer"&gt;getting started with self-hosting&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  glance:
    image: glanceapp/glance
    volumes:
      - /glance/glance.yml:/app/glance.yml
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 8080:8080
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before getting started with Docker, first create a config file for your Glance setup by creating a new glance.yml file in the /glance directory. Copy the provided &lt;a href="https://github.com/glanceapp/glance/blob/main/docs/configuration.md?ref=noted.lol#preconfigured-page" rel="noopener noreferrer"&gt;Glance template&lt;/a&gt; into this file and save it. Once complete, you can proceed to run the Docker Compose stack to install Glance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Glance Themes
&lt;/h2&gt;

&lt;p&gt;Customize Glance's appearance by choosing from a variety of &lt;a href="https://github.com/glanceapp/glance/blob/main/docs/themes.md?ref=noted.lol" rel="noopener noreferrer"&gt;Glance theme colors&lt;/a&gt;. There are a selection of examples to get you started, and you can also create your own custom color scheme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TTMEvD-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/glance-self-hosted-themes-example.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TTMEvD-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/glance-self-hosted-themes-example.png" alt="Glance - Self-Hosted Feeds Dashboard" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simply add the theme snippet to the beginning of your config file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;theme:
  background-color: 225 14 15
  primary-color: 157 47 65
  contrast-multiplier: 1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I highly recommend that you start with the preconfigured template to get familiar with Glance's layout and formatting options. The &lt;a href="https://github.com/glanceapp/glance/blob/main/docs/configuration.md?ref=noted.lol" rel="noopener noreferrer"&gt;Glance configuration documentation&lt;/a&gt; is also extremely helpful, providing detailed explanations of each widget's functionality and different styles you can use. As you become more comfortable, you can use this knowledge to create your own custom design, tailored to your specific needs and preferences like I did.&lt;a href="https://community.noted.lol/?ref=noted.lol" rel="noopener noreferrer"&gt;This is my community public edition of Glance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SFVBJR8t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/glance-self-hosted-dashboard-main-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SFVBJR8t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/08/glance-self-hosted-dashboard-main-3.png" alt="Glance - Self-Hosted Feeds Dashboard" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the glance.yml for for the above example.&lt;/p&gt;

&lt;p&gt;[&lt;/p&gt;

&lt;p&gt;glance.yml&lt;/p&gt;

&lt;p&gt;Glance configuration file for community.noted.lol&lt;/p&gt;

&lt;p&gt;glance.yml&lt;/p&gt;

&lt;p&gt;4 KB&lt;/p&gt;

&lt;p&gt;.a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;}download-circle&lt;br&gt;
&lt;br&gt;
](&lt;a href="https://noted.lol/content/files/2024/08/glance.yml" rel="noopener noreferrer"&gt;https://noted.lol/content/files/2024/08/glance.yml&lt;/a&gt; "Download")&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Noted and Thoughts
&lt;/h2&gt;

&lt;p&gt;To be honest, when I first installed Glance, I had a tough time customizing it. The template gives a great starting point, but I found myself repeatedly breaking and rebuilding my feed to get everything just the way I wanted. It was actually quite time consuming and I spent several hours getting things set up to my liking. Be prepared to spend time fine-tuning your Glance setup to achieve the exact level of customization that suits your unique needs and preferences.&lt;/p&gt;

&lt;p&gt;See more about Glance on the &lt;a href="https://github.com/glanceapp/glance?ref=noted.lol" rel="noopener noreferrer"&gt;Glance Github repo&lt;/a&gt;. Don't forget to show your appreciation by giving the project a star!&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Dozzle - Self-Hosted Docker Container Log Monitoring</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Wed, 31 Jul 2024 11:35:07 +0000</pubDate>
      <link>https://dev.to/noted/dozzle-self-hosted-docker-container-log-monitoring-4753</link>
      <guid>https://dev.to/noted/dozzle-self-hosted-docker-container-log-monitoring-4753</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q7wz-5hI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/dozzle-self-hosted-noted.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q7wz-5hI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/dozzle-self-hosted-noted.jpg" alt="Dozzle - Self-Hosted Docker Container Log Monitoring" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're working with Docker containers, keeping track of what's happening inside them can be a real challenge. Containers are great for building and deploying applications, but they can also produce a lot of log data that needs to be monitored and analyzed. This is especially true when you have multiple containers running simultaneously, or when you're dealing with complex distributed systems. Without a way to easily access and understand the logs from your containers, troubleshooting issues can become a time-consuming and frustrating process. That's why it's important to have a reliable and efficient logging solution that allows you to see what's happening inside your containers in real-time like Dozzle.&lt;/p&gt;





&lt;p&gt;&lt;br&gt;
                            &lt;br&gt;
                                &lt;br&gt;
                            &lt;br&gt;
                        &lt;br&gt;
                            &lt;br&gt;
                                &lt;br&gt;
                                &lt;br&gt;
                            &lt;br&gt;
                        0:00&lt;br&gt;
 /0:35&lt;br&gt;
1×&lt;br&gt;
                            &lt;br&gt;
                                &lt;br&gt;
                            &lt;br&gt;
                        &lt;br&gt;
                            &lt;br&gt;
                                &lt;br&gt;
                            &lt;br&gt;
                        &lt;/p&gt;
&lt;h2&gt;
  
  
  What is Dozzle?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/amir20/dozzle?ref=noted.lol" rel="noopener noreferrer"&gt;Dozzle&lt;/a&gt; is a powerful tool for monitoring and troubleshooting your Docker containers and services. With Dozzle, you can view logs from your containers and services in real-time, making it easier to diagnose issues when they arise. It also supports Docker Swarm, which allows you to monitor logs from multiple nodes at once. Plus, with multi-host support, you can connect to multiple remote hosts directly from the interface. And the best part? Dozzle doesn't require a database or any extra configuration - just stream logs directly from your containers and services. With its lightweight design and intuitive interface, Dozzle makes it easy to get started and start troubleshooting right away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NnCGvo9W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/dozzle-self-hosted-docker-log-viewer-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NnCGvo9W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/dozzle-self-hosted-docker-log-viewer-1.png" alt="Dozzle - Self-Hosted Docker Container Log Monitoring" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dozzle offers several features that make it easy to work with container logs. The intelligent fuzzy search allows you to quickly find specific containers, even if you only remember part of their name. You can also use regex to search for log entries matching certain patterns. Also, Dozzle has a small memory footprint and supports split-screen viewing of multiple logs at once. It's possible to download logs from the interface as well, which is useful for offline analysis. Dozzle provides live stats on memory and CPU usage, giving you a better understanding of your container performance. Finally, multi-user authentication with support for proxy forward authorization ensures that only authorized users can access the log data.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install Dozzle with Docker Compose
&lt;/h2&gt;

&lt;p&gt;This Docker Compose stack can be used to install Dozzle on your server. If you need help, see our guides about &lt;a href="https://noted.lol/get-started-self-hosting/" rel="noopener noreferrer"&gt;getting started with self-hosting&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3"
services:
  dozzle:
    container_name: dozzle
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8888:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dozzle offers compatibility with multiple container runtimes, including automatic API negotiation for most Docker configurations. Plus, it also works seamlessly with &lt;a href="https://github.com/abiosoft/colima?ref=noted.lol" rel="noopener noreferrer"&gt;Colima&lt;/a&gt; and &lt;a href="https://podman.io/?ref=noted.lol" rel="noopener noreferrer"&gt;Podman&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Notes and Thoughts
&lt;/h2&gt;

&lt;p&gt;For those who need more control over their logging setup, self-hosted solutions are the way to go, allowing you to keep your log data private, secure, and under your own control, all while providing unparalleled flexibility and customization options. Ultimately, a solution like Dozzle is ideal for anyone looking to streamline their Docker log viewing experience.&lt;/p&gt;

&lt;p&gt;See more about Dozzle on the &lt;a href="https://github.com/amir20/dozzle?ref=noted.lol" rel="noopener noreferrer"&gt;Dozzle Github repo&lt;/a&gt;. Don't forget to show your appreciation by giving the project a star!&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Bezsel: A Lightweight, Self-Hosted, Flexible Server Monitor</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Thu, 25 Jul 2024 13:35:22 +0000</pubDate>
      <link>https://dev.to/noted/bezsel-a-lightweight-self-hosted-flexible-server-monitor-4fo7</link>
      <guid>https://dev.to/noted/bezsel-a-lightweight-self-hosted-flexible-server-monitor-4fo7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TAFk3uAu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/self-hosted-beszel-noted.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TAFk3uAu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/self-hosted-beszel-noted.jpg" alt="Bezsel: A Lightweight, Self-Hosted, Flexible Server Monitor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/noted/mastering-self-hosted-monitoring-netdata-prometheus-and-grafana-unleashed-3ioa-temp-slug-8457184"&gt;Grafana and Netdata&lt;/a&gt; are great options for server monitoring, but they often require a significant amount of setup time and technical expertise. Beszel takes a different approach. With its Docker Compose-based setup, you can get started with monitoring your virtual machines, containers, and servers quickly and easily. This uncomplicated approach makes it accessible to anyone looking to keep tabs on their systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Beszel?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/henrygd/beszel?ref=noted.lol" rel="noopener noreferrer"&gt;Beszel&lt;/a&gt; is a lightweight platform that provides real-time insights into your system's performance. With Beszel, you'll have access to historical data on CPU and memory usage, as well as Docker container metrics like container-specific CPU and memory statistics. You'll also receive customizable alert notifications for potential issues, so you can take proactive steps to optimize your server performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6mUTGE9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/beszel-self-hosted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6mUTGE9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/beszel-self-hosted.png" alt="Bezsel: A Lightweight, Self-Hosted, Flexible Server Monitor" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Beszel Core Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight&lt;/strong&gt; : Much smaller and less demanding than leading solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker stats&lt;/strong&gt; : CPU and memory usage history for each container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alerts&lt;/strong&gt; : Configurable alerts for CPU, memory, and disk usage, and system status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-user&lt;/strong&gt; : Each user has their own systems. Admins can share systems across users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple&lt;/strong&gt; : Easy setup and doesn't require anything to be publicly available online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth / OIDC&lt;/strong&gt; : Supports many OAuth2 providers. Password auth can be disabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic backups&lt;/strong&gt; : Save and restore your data to / from disk or S3-compatible storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST API&lt;/strong&gt; : Use your metrics in your own scripts and applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with Beszel
&lt;/h2&gt;

&lt;p&gt;Beszel consists of two parts: the &lt;a href="https://github.com/henrygd/beszel/blob/main/hub/docker-compose.yml?ref=noted.lol" rel="noopener noreferrer"&gt;Hub&lt;/a&gt; and the &lt;a href="https://github.com/henrygd/beszel/blob/main/agent/docker-compose.yml?ref=noted.lol" rel="noopener noreferrer"&gt;Agent&lt;/a&gt;. The Hub is a web application that lets you view and manage your monitored systems in one place. Meanwhile, the Agent runs on each system you're monitoring, collecting metrics and sending them to the Hub through a secure connection. For ease of use, you can deploy both components using Docker Compose or install &lt;a href="https://github.com/henrygd/beszel?tab=readme-ov-file&amp;amp;ref=noted.lol#binary" rel="noopener noreferrer"&gt;Beszel's single binary package&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding a New System/Agent in Beszel
&lt;/h2&gt;

&lt;p&gt;To add a new system to Beszel, simply follow these steps: Start by clicking the 'Add System' button and filling out the required information, including the system's name and IP address. Once you've completed the form, copy the Docker Compose configuration to your clipboard, then deploy it on the machine you want to monitor using a single command. Beszel will automatically detect the new system and begin collecting data.&lt;/p&gt;

&lt;p&gt;❗&lt;/p&gt;

&lt;p&gt;Keep in mind the web interface must be secured behind SSL for copy to clipboard to work. It will not work locally in most cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jZ4vVSWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/beszel-self-hosted-add-new-system.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jZ4vVSWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/beszel-self-hosted-add-new-system.png" alt="Bezsel: A Lightweight, Self-Hosted, Flexible Server Monitor" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Beszel uses PocketBase, a powerful backend platform, to provide advanced features such as automated backups, SMTP alerting, file storage, user management, log viewing, and authentication integration. With PocketBase, Beszel can seamlessly handle these tasks without requiring users to set up complex infrastructure or manage multiple tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4ww9v16S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/beszel-self-hosted-pocketbase.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4ww9v16S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/07/beszel-self-hosted-pocketbase.png" alt="Bezsel: A Lightweight, Self-Hosted, Flexible Server Monitor" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Notes and Thoughts
&lt;/h2&gt;

&lt;p&gt;I was pleasantly surprised by how smooth the setup process was when I first got started with Bezszel. The Docker Compose configuration made it easy to get both the Hub and Agent running, and before long I was collecting valuable metrics on my system's performance. It's been great having this insight into what's going on under the hood. If you're looking for a similar solution, Beszel is definitely worth considering.&lt;/p&gt;

&lt;p&gt;Read more about Beszel and contribute to the project over on the &lt;a href="https://github.com/henrygd/beszel?ref=noted.lol" rel="noopener noreferrer"&gt;Beszel Github repo&lt;/a&gt;. Give it a star if you find it useful!&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Wed, 29 May 2024 16:06:42 +0000</pubDate>
      <link>https://dev.to/noted/create-your-own-self-hosted-chat-ai-server-with-ollama-and-open-webui-4hlh</link>
      <guid>https://dev.to/noted/create-your-own-self-hosted-chat-ai-server-with-ollama-and-open-webui-4hlh</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qL84hGiq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-openwebui-noted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qL84hGiq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-openwebui-noted.png" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm really impressed by the potential of self-hosted AI chat, but when it comes down to it, I think it's essential to keep my data under my own roof. Hosting it myself gives me peace of mind knowing that my personal info isn't being siphoned off for who-knows-what purposes.&lt;/p&gt;

&lt;p&gt;I decided to build a mid-range AI processing server using some extra hardware I had in storage. Here's a glance inside and here are the specs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;32GB of RAM&lt;/li&gt;
&lt;li&gt;i5 10600K CPU&lt;/li&gt;
&lt;li&gt;NVIDIA GeForce GTX 2080 Ti&lt;/li&gt;
&lt;li&gt;2TB SSD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zq36KEJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/OLLAMA-AI-server-noted-1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zq36KEJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/OLLAMA-AI-server-noted-1.jpeg" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nothing super fancy but it will be plenty powerful enough for my use case. I may upgrade to a larger CPU and SSD some time in the future but it has been performing wonderfully so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Ollama?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ollama.com/?ref=noted.lol" rel="noopener noreferrer"&gt;OLLAMA&lt;/a&gt; lets you take the reins and create your own unique chat experiences from scratch. With their cutting-edge NLP and ML tech, you can craft conversations that feel like they're coming straight from a human (or almost as good, at least!).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--98eTdj8T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/llama-chat-noted.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--98eTdj8T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/llama-chat-noted.jpeg" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to OLLAMA's mission, they're all about giving people and businesses the power to build custom AI-powered chats that fit perfectly with their online presence - whether that's a website, mobile app, customer service hub or a simple self-hosted chat you can use privately.&lt;/p&gt;

&lt;p&gt;Just FYI, I'm not affiliated with OLLAMA (just a curious observer), but they seem like a pretty cool platform for anyone looking to get creative with AI-powered conversations!&lt;/p&gt;

&lt;p&gt;In an earlier article, we went over &lt;a href="https://dev.to/noted/ollama-self-hosted-ai-chat-with-llama-2-code-llama-and-more-in-docker-3124-temp-slug-8281803"&gt;how to install OLLAMA using Docker&lt;/a&gt; with some basic understanding of how the tool works. In this article We will be installing OLLAMA on bare metal along side Open WebUI as our chat server.&lt;/p&gt;

&lt;p&gt;OLLLAMA uses the Linux terminal as its foundation to generate conversations powered by large language models. To make it even more engaging, we'll be processing our chats through Open WebUI, which will provide a more versatile and intuitive experience for users.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Open WebUI?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/open-webui/open-webui?ref=noted.lol" rel="noopener noreferrer"&gt;Open WebUI&lt;/a&gt; is an open-source gem that brings command-line applications to the web, making them more accessible and user-friendly for everyone. By providing a graphical interface, Open WebUI lets you interact with Linux terminals and other command-line tools in a way that feels more like a desktop application than a traditional terminal session. This means you can enjoy the power of AI-powered chat systems like OLLAMA without having to navigate the complexities of a terminal interface. Perfect for those who want to get started quickly with AI chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up OLLAMA on PopOS 22.04 LTS (NVIDIA)
&lt;/h2&gt;

&lt;p&gt;I'm fortunate enough to have a "powerful" NVIDIA GeForce GTX 2080 Ti with an "impressive" 11GB of video RAM (VRAM). When it came time to choose an operating system, I decided on &lt;a href="https://pop.system76.com/?ref=noted.lol" rel="noopener noreferrer"&gt;Pop!_OS 22.04 LTS (NVIDIA)&lt;/a&gt;, which comes with all the necessary drivers pre-installed. This was a no-brainer for me, as it ensures that my GPU is recognized and utilized by OLLAMA, our AI app of choice.&lt;/p&gt;

&lt;p&gt;Using OLLAMA without the right GPU support would mean relying on CPU processing power alone, which can be quite limited when working with complex models or larger datasets. By contrast, with this "powerful" GPU at my disposal, I'm able to run more demanding models and take full advantage of OLLAMA's capabilities.&lt;/p&gt;

&lt;p&gt;I can punch in &lt;code&gt;nvidia-smi&lt;/code&gt; in my terminal and see all the cool stats for my GPU.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0vIA43dQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/nvidia-smi-noted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0vIA43dQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/nvidia-smi-noted.png" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you don't have Pop!_OS with the NVIDIA driver, no worries! You can still use OLLAMA and other AI apps that need a GPU like yours. Just make sure to install CUDA on your system so it can work properly with your NVIDIA card. And while OLLAMA doesn't strictly require a GPU, having one can make a big difference in performance.&lt;/p&gt;

&lt;p&gt;This system handles large 7B and 8B models without any issues, making it perfect for AI-related tasks. And while 13B models might be slightly slower due to the larger size, you won't even notice a significant delay in responses. Compared to other options out there, this setup is quite affordable and capable of tackling a wide range of demanding AI projects.&lt;/p&gt;

&lt;p&gt;To run a 70 billion (70B) AI model, it's essential to have a powerful setup with significant computational resources. Here are the key recommendations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU memory (VRAM): At least 24GB, but ideally more like 40GB or 80GB, provided by a GPU such as the NVIDIA A100&lt;/li&gt;
&lt;li&gt;CPU performance: A high-performance multi-core processor, such as an Intel i9 or AMD Ryzen 9 with at least 16 cores&lt;/li&gt;
&lt;li&gt;Disk space: A solid-state drive (SSD) with at least 4TB of capacity for saving model files and temporary workspace&lt;/li&gt;
&lt;li&gt;Memory (RAM): At least 128GB, preferably more&lt;/li&gt;
&lt;li&gt;Cooling system: An efficient cooling solution to prevent overheating during training&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing OLLAMA
&lt;/h2&gt;

&lt;p&gt;It's easy. But first, make sure you run an update and upgrade on your system before installing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt upgrade -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just hop on over to the &lt;a href="https://ollama.com/download/linux?ref=noted.lol" rel="noopener noreferrer"&gt;OLLAMA website&lt;/a&gt; and grab the one line bash script command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste this into your terminal and watch the magic happen. This will install OLLAMA on your PopOS system. When you are done, it should show you something like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yXxywZBS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-installed-noted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yXxywZBS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-installed-noted.png" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sweet! With Pop!_OS and NVIDIA drivers on board, my system is able to detect my trusty GeForce GTX 2080 Ti GPU. As a result, I'm all set to get started with OLLAMA. No need to worry about compatibility issues or performance issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing LLMs for OLLAMA
&lt;/h2&gt;

&lt;p&gt;To add a model to use with OLLAMA, simply type &lt;code&gt;ollama pull llama3&lt;/code&gt; into your terminal. This will download the default llama3 8B model to your system and store it in &lt;code&gt;/usr/share/ollama/.ollama/models/blobs.&lt;/code&gt; OLLAMA has several models you can pull down and use. See the complete &lt;a href="https://ollama.com/library?ref=noted.lol" rel="noopener noreferrer"&gt;OLLAMA model list here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now you can chat with OLLAMA by running &lt;code&gt;ollama run llama3&lt;/code&gt; then ask a question to try it out!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gVSE_ykJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2024/05/ollama-chat-noted.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gVSE_ykJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2024/05/ollama-chat-noted.gif" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using OLLAMA from the terminal is a cool experience, but it gets even better when you connect your OLLAMA instance to a web interface. This allows for an improved overall experience and easier interaction with all the features of OLLAMA. 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Open WebUI with Docker
&lt;/h2&gt;

&lt;p&gt;By adopting Open WebUI, you'll find it simpler and more intuitive to manage OLLAMA. This means you'll have better control over adding, removing, or customizing models, as well as working with documents and developing your own models! You can even create user accounts to share access to OLLAMA, and decide which models each user can utilize.&lt;/p&gt;

&lt;p&gt;Don't have Docker installed and need a simple guide? Check out our &lt;a href="https://dev.to/noted/install-docker-and-portainer-on-debian-for-self-hosting-5538"&gt;guide on Installing Docker&lt;/a&gt; here.&lt;/p&gt;

&lt;p&gt;Just remember that OLLAMA's API operates on port 11434. To confirm it's working, visit &lt;a href="http://127.0.0.1:11434" rel="noopener noreferrer"&gt;http://127.0.0.1:11434&lt;/a&gt; in your web browser and you should see "Ollama is running." We'll utilize this address to link OLLAMA with Open WebUI using the following Docker command in our environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker run -d -p 8080:8080 --network=host -v /media/jeremy/docker/data/open-webui:/app/backend/data -v /media/jeremy/docker/docs:/data/docs -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if you prefer Docker Compose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
    open-webui:
        image: 'ghcr.io/open-webui/open-webui:main'
        restart: always
        network_mode: "host"
        container_name: open-webui
        environment:
            - 'OLLAMA_BASE_URL=http://127.0.0.1:11434'
        volumes:
            - '/media/jeremy/docker/docs:/data/docs'
            - '/media/jeremy/docker/data/open-webui:/app/backend/data'
        ports:
            - '8080:8080'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since I have a separate SSD installed for Docker and self-hosted apps, I mounted the volumes to that drive. You can mount the volumes where you feel so be sure to change those.&lt;/p&gt;

&lt;p&gt;Since everything is done locally on the machine it is important to use the &lt;code&gt;network_mode: "host"&lt;/code&gt; so Open WebUI can see OLLAMA.&lt;/p&gt;

&lt;p&gt;Now, by navigating to localhost:8080, you'll find yourself at Open WebUI. To get started, please create a new account (this initial account serves as an admin for Open WebUI). Please note that everything here is being run locally for now but you can expose this using Cloudflare if you choose.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MKvrN0gs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/openwebui-main-page-noted-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MKvrN0gs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/openwebui-main-page-noted-1.png" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will notice when you browse around Open WebUI that it is quite amazing the things you can do. There's so much to cover but I wanted to touch on my favorite feature about Open WebUI called Memory.&lt;/p&gt;

&lt;p&gt;Memory is a new experimental feature that allws you to input your preferred personal details, such as past events or experiences, and our Large Language Model (LLM) will aim to recall them in the future. Access this feature through Settings &amp;gt; Personalization &amp;gt; Memory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uzwImklk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-memory-noted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uzwImklk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-memory-noted.png" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="777" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This feature can help you set reminders, remember special dates or events, keep track of what you eat (great for those aiming to lose weight or following specific dietary restrictions), and even manage code snippets and compose files. It can output code from memory! These are just a few examples of how it can be useful! As you use it more, I'm sure you will discover many other ways to take advantage of its capabilities!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ejV64cat--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-memories-noted.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ejV64cat--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2024/05/ollama-memories-noted.png" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added a few memories today as an example. I will ask OLLAMA what size socket my ATV uses for the oil plug because I always forget.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I8sJxaSi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2024/05/ollama-memory-test-noted.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I8sJxaSi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2024/05/ollama-memory-test-noted.gif" alt="Create your own Self-Hosted Chat AI Server with Ollama and Open WebUI" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It remembered! 17mm is the memory I added and it was super fast at responding.&lt;/p&gt;

&lt;p&gt;I think you get the idea. It's time for you to explore Open WebUI for yourself and learn about all the cool features. You can feed in documents through Open WebUI's document manager, create your own custom models and more. It just keeps getting more advanced as AI continues to evolve.&lt;/p&gt;

&lt;p&gt;I hope you found this enjoyable and get some great use out of OLLAMA and Open WebUI!&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Introducing Wrestic: Rust-Based Restic Wrapper</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Mon, 02 Oct 2023 14:34:06 +0000</pubDate>
      <link>https://dev.to/noted/introducing-wrestic-rust-based-restic-wrapper-4fk</link>
      <guid>https://dev.to/noted/introducing-wrestic-rust-based-restic-wrapper-4fk</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xNDH5Sq3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/10/wrestic-noted.lol.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xNDH5Sq3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/10/wrestic-noted.lol.jpg" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello, everyone! I'm Alvaro, the developer who brought Wrestic to life, and I'm delighted to have the opportunity to introduce this project to the Noted community today.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wrestic.com/?ref=noted.lol"&gt;Wrestic&lt;/a&gt;, developed in Rust, is a backup tool that streamlines the backup process by utilizing Restic's encryption and compression features. It's ideal for both personal and business data, automating the task and ensuring the safety of said data.&lt;/p&gt;

&lt;p&gt;When managing our own server, it becomes essential to prioritize the security and integrity of our files. Therefore, we invest considerable time in research to identify the best tools for the task and determine the most secure backup storage solutions. This process can be quite time consuming.&lt;/p&gt;

&lt;p&gt;Wrestic is all about making backup management as simple as possible. The thing is, it's not limited to just one way of using it. You can go for the easy navigation Text User Interface (TUI) or get hands on with the Command Line Interface (CLI). We'll get into why having these options is a plus in a bit.&lt;/p&gt;

&lt;p&gt;So, with Wrestic, all you really need to do is pick where you want to stash your backups and set up a single file. Here's how it all works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xOnKA4BA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/10/wrestic_mockup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xOnKA4BA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/10/wrestic_mockup.png" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Wrestic TUI&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Getting Started with Wrestic&lt;/p&gt;

&lt;p&gt;First, let's install Wrestic in our linux machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -sL $(curl -s https://api.github.com/repos/alvaro17f/wrestic/releases/latest | grep browser_download_url | cut -d '"' -f 4) | sudo tar zxf - -C /usr/bin --overwrite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that Wrestic is installed, let's deep dive into its configuration.&lt;br&gt;&lt;br&gt;
Everything in wrestic is configured in a file called &lt;code&gt;wrestic.toml&lt;/code&gt; .&lt;br&gt;&lt;br&gt;
Let's create it with a single command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p ~/.config/wrestic &amp;amp;&amp;amp; touch ~/.config/wrestic/wrestic.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, the path must be &lt;code&gt;/home/&amp;lt;$USER&amp;gt;/.config/wrestic/wrestic.toml&lt;/code&gt; .&lt;br&gt;&lt;br&gt;
Now that we have generated our config file, let's configure it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrestic Configuration
&lt;/h2&gt;

&lt;p&gt;Profiles are basically an object with the information needed to manage your repository.&lt;/p&gt;

&lt;p&gt;If you have more than one profile in your wrestic.toml you’ll be asked for the profile you want to use when performing an action.&lt;/p&gt;

&lt;p&gt;To add a profile to your &lt;code&gt;wrestic.toml&lt;/code&gt; file look at the following example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[settings.my_profile]
BACKEND = "local"
RESTIC_PASSWORD = "mysupersecretpassword"
REPOSITORY = "/home/alvaro17f/NOTED/Backups"
BACKUP_FOLDER = "/home/alvaro17f/NOTED/Documents"
RESTORE_FOLDER = "/home/alvaro17f/NOTED/Restored"
KEEP_LAST = 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example we've added a profile named &lt;code&gt;my_profile&lt;/code&gt; to manage a &lt;code&gt;local&lt;/code&gt; repository that will backup the &lt;code&gt;Documents&lt;/code&gt; folder into the &lt;code&gt;Backups&lt;/code&gt; repository.&lt;br&gt;&lt;br&gt;
If I'd like to restore the backup, data would be restored into &lt;code&gt;Restored&lt;/code&gt; folder.&lt;br&gt;&lt;br&gt;
Lastly we've set &lt;code&gt;KEEP_LAST = 10&lt;/code&gt; to only keep the las 10 snapshots.&lt;/p&gt;

&lt;p&gt;You can also add a remote profile for using AWS S3, Backblaze B2, Azure, etc... &lt;a href="https://wrestic.com/?ref=noted.lol"&gt;Check out the documentation to see how&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Usage Using TUI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vNIuh1Aq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/init-1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vNIuh1Aq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/init-1.gif" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Initialize Repositories&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FtXK_8cA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/Kooha-2023-10-01-20-20-25.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FtXK_8cA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/Kooha-2023-10-01-20-20-25.gif" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Backup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R4WmF0Bx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/restore-1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R4WmF0Bx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/restore-1.gif" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Restore&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BNTvSxnx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/delete-1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BNTvSxnx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/delete-1.gif" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Delete&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ilfo5mxI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/update.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ilfo5mxI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://noted.lol/content/images/2023/10/update.gif" alt="Introducing Wrestic: Rust-Based Restic Wrapper" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Update Wrestic&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrestic as a CLI
&lt;/h2&gt;

&lt;p&gt;If you want to list all the available commands for Wrestic you can run:&lt;br&gt;&lt;br&gt;
&lt;code&gt;sudo wrestic help&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;Then you'll see a screen like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Restic wrapper built in Rust

Usage: wrestic [OPTIONS] [COMMAND]

Commands:
  backup Make a backup of all your repositories
  restore Restore a snapshot
  snapshots List snapshots
  delete Delete a snapshot
  init Initialize all of your repositories
  check Check repository health
  repair Fix any issue
  cache Clean cache
  update Update Wrestic
  help Print this message or the help of the given subcommand(s)

Options:
      --generate &amp;lt;GENERATOR&amp;gt; [possible values: bash, elvish, fish, powershell, zsh]
  -h, --help Print help
  -V, --version Print version

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can be useful when automating the backup process, for example, you can set a cronjob to backup everything everyday at 4:00 am. Let's see how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure you have &lt;code&gt;cronie&lt;/code&gt; or some cron app installed.&lt;/li&gt;
&lt;li&gt;Run: &lt;code&gt;sudo crontab -e&lt;/code&gt; to edit your cronjobs.&lt;/li&gt;
&lt;li&gt;Add the following:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PATH="/usr/local/bin:/usr/bin:/bin"

0 4 * * * wrestic backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Notes and Thoughts
&lt;/h2&gt;

&lt;p&gt;I'd like to give a big shoutout to our amazing community 👋 for taking the time to read this, and a special mention to Jeremy for his fantastic contributions here on Noted and abroad. I genuinely hope that Wrestic becomes a valuable part of your backup workflow, making your data management easier and more secure.&lt;/p&gt;

&lt;p&gt;For more information about how to configure and use Wrestic check out&lt;br&gt;&lt;br&gt;
&lt;a href="https://wrestic.com/?ref=noted.lol"&gt;Wrestic's website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you see value in this application or want to dive deeper into it, I invite you to check out the &lt;a href="https://github.com/alvaro17f/wrestic?ref=noted.lol"&gt;Wrestic GitHub repository&lt;/a&gt; and consider giving the project a star. Your support is greatly appreciated.&lt;/p&gt;

</description>
      <category>homelabtutorials</category>
      <category>linuxbasics</category>
    </item>
    <item>
      <title>Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Sat, 30 Sep 2023 11:42:03 +0000</pubDate>
      <link>https://dev.to/noted/create-a-contact-form-using-the-self-hosted-nocodb-and-gmail-smtp-ikh</link>
      <guid>https://dev.to/noted/create-a-contact-form-using-the-self-hosted-nocodb-and-gmail-smtp-ikh</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-contact-gmail-smtp-noted.lol.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-contact-gmail-smtp-noted.lol.jpg" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's plenty of 3rd party contact forms out there that you can use. Some are free and others are paid options. Have you ever considered using a open source, self-hosted option? Today I'll show you exactly how you can do just that.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is NocoDB?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Turns any MySQL, PostgreSQL, SQL Server, SQLite &amp;amp; MariaDB into a smart spreadsheet. The open source Airtable alternative.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub-readme-stats.vercel.app%2Fapi%2Fpin%2F%3Fusername%3Dnocodb%26repo%3Dnocodb%26theme%3Dmidnight-purple%26hide_border%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub-readme-stats.vercel.app%2Fapi%2Fpin%2F%3Fusername%3Dnocodb%26repo%3Dnocodb%26theme%3Dmidnight-purple%26hide_border%3Dtrue" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This project is a little obscure for NocoDB because we are not using the tool for its intended purposes. However this tool is exactly what we need to create our contact form and it works very well.&lt;/p&gt;

&lt;p&gt;This project requires Docker to be installed on your host machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Install &lt;a href="https://github.com/nocodb/nocodb?ref=noted.lol" rel="noopener noreferrer"&gt;NocoDB&lt;/a&gt; using Docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.9'
services:
    nocodb:
        image: 'nocodb/nocodb:latest'
        ports:
            - '8044:8080'
        volumes:
            - '/docker/nocodb:/usr/app/data/'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Be sure to change the port or volume mount to your liking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Navigate to the host IP and port of the NocoDB install. For me it will be on port 8044. You can find your host IP by typing &lt;code&gt;ip addr&lt;/code&gt; in the terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-signup-noted.lol-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-signup-noted.lol-1.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Register a new account then log in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-work-space-blank-noted.lol-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-work-space-blank-noted.lol-1.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once logged in, you will see a blank workspace. It will look quite lonely and desolate. Let's move on and create a project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Create a new project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-create-new-project-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-create-new-project-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click "New project", give it a name and press "Create Database".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5.&lt;/strong&gt; Click "New table".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-new-table-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-new-table-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will prompt you to give the table a name. Name it "Contact form table" then click "Create Table".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-new-table-name-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-new-table-name-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6.&lt;/strong&gt; Edit the first column name by clicking on the dropdown arrow. We will call it "Name" and save.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-edit-and-add-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-edit-and-add-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-edit-name-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-edit-name-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7.&lt;/strong&gt; Add another column and call it "E-Mail" with a column type "Email" then click save. This column type will allow the email to be clicked and responded to using your default email client. We will cover this more later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-add-email-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-add-email-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8.&lt;/strong&gt; Add a 3rd column called "Message" with a column type of "LongText". Click save column.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-add-message-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnoco-db-self-hosted-table-add-message-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take a look at what our table looks like right now before we move forward. We have a Name, E-Mail and Message column.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-so-far-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-so-far-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding the SMTP App in NocoDB
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 9.&lt;/strong&gt; Add the SMTP app. Before we create the form out of the table we just created, I want to go ahead and add the SMTP app. This can be tricky to find so follow along closely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-account-settings-smtp-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-account-settings-smtp-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the lower left click on your email to open the menu then click on "Account Settings".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-app-store-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-app-store-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click "App Store" and scroll down to SMTP towards the bottom.&lt;/p&gt;

&lt;p&gt;Click install and enter your GMail SMTP information. You can use our detailed guide on &lt;a href="https://noted.lol/setup-gmail-smtp-sending-2023/" rel="noopener noreferrer"&gt;how to setup GMail SMTP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-app-store-smtp-add-details-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-app-store-smtp-add-details-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important that you leave Secure, Ignore TLS and Reject Unauthorized disabled. Now click save.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10.&lt;/strong&gt; Create a form. To create a form, navigate back to the main project and select the Contact Form Table we created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-create-form-view-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-create-form-view-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, in the lower right click form to create a Form view of our table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-create-form-view-name-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-create-form-view-name-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Call it "Contact Form" and click "Create View".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11.&lt;/strong&gt; Add options for when the form is submitted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-view-options-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-view-options-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the bottom, you should add a message people will see when they submit the form. Also, make sure you enable the "E-mail me at &lt;a href="mailto:yourgmail@email.com"&gt;yourgmail@email.com&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;To be clear, the form will email you at whatever email you registered with on your NocoDB instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12.&lt;/strong&gt; Create a public share of the form and test it.&lt;/p&gt;

&lt;p&gt;Now that we have the form view created and the options set, we need to create a public share so we can access and use the form publicly.&lt;/p&gt;

&lt;p&gt;In the upper right corner, click on 'Share".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-public-share-noted.lol-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-public-share-noted.lol-1.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure "Enable public viewing" is enabled. You can also choose a color if you wish. The theme colors don't apply to the theme itself sadly but only the web UI surrounding it. Now copy the link and open it in a browser tab to test the form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-submitted-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-submitted-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check your inbox to see if you got the email you sent using the form. If you did, the subject will be "NocoDB Form" and the email content will look like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-recieved-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-recieved-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 13.&lt;/strong&gt; Confirm the submitted email was also logged in the table we created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-table-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fnoted.lol%2Fcontent%2Fimages%2F2023%2F09%2Fnocodb-self-hosted-form-test-email-table-noted.lol.png" alt="Create a Contact Form using the Self-Hosted NocoDB and GMail SMTP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here we can see the email that was sent in the table view. This information can be exported and saved as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embed your public shared form link
&lt;/h2&gt;

&lt;p&gt;You can use your public shared link by &lt;a href="https://noted.lol/zero-trust-access-applications/" rel="noopener noreferrer"&gt;attaching a domain name to it using Cloudflare&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is an example embed code you can use to embed the form on your website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;iframe&amp;gt;
    class="nc-embed"
    src="https://nocodb.noted.lol/dashboard/#/nc/form/f42affl0-25d2-2f31-a90a-8d1996d8ck0l"
    frameborder="0"
    width="100%"
    height="800"
    style="background: transparent; border: 1px solid #ddd"
&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will have to replace the src url with your link to use your form so don't forget to do that!&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Notes and Thoughts
&lt;/h3&gt;

&lt;p&gt;While it may seem like this took a lot of time to get a working contact form, it really isn't as bad as it may seem. You can either create your own form at no cost or, go pay for a 3rd party service that may or may not be collecting all the emails coming through the form. You will never know.&lt;/p&gt;

&lt;p&gt;There are a couple caveats of using NocoDB as a contact form. The subject of the emails and context cannot be modified. So the emails will always have a subject of NocoDB which for me, is quite fine and I'll always know where the emails came from. Now, there may be a way to change that by modifying NocoDB internal files then &lt;a href="https://noted.lol/build-and-publish-to-docker-hub/" rel="noopener noreferrer"&gt;building the Docker image yourself&lt;/a&gt;... but that is a bit beyond the scope of this guide. 😆&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://github.com/nocodb/nocodb?ref=noted.lol" rel="noopener noreferrer"&gt;NocoDb on Github&lt;/a&gt; and be sure to give the project a star!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article is cross posted from my publication&lt;/em&gt; &lt;a href="https://noted.lol/nocodb-contact-form-gmail-smtp/" rel="noopener noreferrer"&gt;Noted&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>howto</category>
      <category>nocode</category>
      <category>selfhosting</category>
    </item>
    <item>
      <title>Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Mon, 25 Sep 2023 13:54:09 +0000</pubDate>
      <link>https://dev.to/noted/introducing-cosmos-the-all-in-one-secure-platform-for-self-hosting-3dh4</link>
      <guid>https://dev.to/noted/introducing-cosmos-the-all-in-one-secure-platform-for-self-hosting-3dh4</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ccVoxK-a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/cosmos-self-hosting-featured-noted.lol.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ccVoxK-a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/cosmos-self-hosting-featured-noted.lol.jpg" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the developer of Cosmos, when I write about it I very often get to talk about the &lt;em&gt;what&lt;/em&gt;. On the other hand, I rarely get the opportunity to talk about the &lt;em&gt;how&lt;/em&gt; or even the _ &lt;strong&gt;why&lt;/strong&gt; _. I am grateful to receive such an opportunity here, not only because Noted is an awesome blog to read, but also because it is a great platform to share the story behind the inception and development of Cosmos.&lt;/p&gt;

&lt;p&gt;Most people know me by my Github and Discord handle: azukaar, and I have now been solo developing Cosmos for about 6 months (0.1.0 was released in April). &lt;strong&gt;In a nutshell, Cosmos is an all-in-one solution for self-hosting on home server&lt;/strong&gt; , which includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A full &lt;strong&gt;reverse proxy&lt;/strong&gt; (like Nginx or Traefik) with Let’s Encrypt HTTPS negotiation to manage domains and secure access to applications&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;docker container manager&lt;/strong&gt; (like Portainer) to edit, start/stop but also automatically update your containers&lt;/li&gt;
&lt;li&gt;A community maintained &lt;strong&gt;app-store&lt;/strong&gt; to easily install many applications in a few clicks&lt;/li&gt;
&lt;li&gt;A suite of &lt;strong&gt;security tools&lt;/strong&gt; like anti-bot and anti-DDOS mechanisms, as well as a strong authentication gate supporting 2FA for any container&lt;/li&gt;
&lt;li&gt;A few other things such as an Identity Provider with an &lt;strong&gt;OpenID&lt;/strong&gt; server to make your journey a breeze&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--84NCGNuv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/Screen-Shot-2023-09-24-at-19.23.38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--84NCGNuv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/Screen-Shot-2023-09-24-at-19.23.38.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Cosmos home page&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With Cosmos you can &lt;strong&gt;easily self-host any Docker based application&lt;/strong&gt; (Jellyfin, Nextcloud, Navidrome, etc...) and &lt;strong&gt;secure&lt;/strong&gt; them behind strong authentication, server hardening, etc... All of this without having to spend hours debugging a reverse proxy setup that does not work each time you install something! &lt;strong&gt;And while it does take care of the few annoying bits for you, it does not hide or lock away anything&lt;/strong&gt; : you can still tinker with your containers in Portainer / the CLI and you can still manually look into the innards of each application freely to customize them.&lt;/p&gt;

&lt;p&gt;If you are interested to hear more about the details of the functionalities, the details can be found here &lt;a href="https://github.com/azukaar/Cosmos-Server?ref=noted.lol"&gt;https://github.com/azukaar/Cosmos-Server&lt;/a&gt; a demo can also be found here: &lt;a href="https://cosmos-cloud.io/cosmos-ui?ref=noted.lol"&gt;https://cosmos-cloud.io/cosmos-ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While all those tools are already available separately, &lt;strong&gt;the first thing that makes Cosmos special is proposing those tools in an integrated, all-in-one and seamless experience.&lt;/strong&gt; The reverse-proxy naturally react to your security settings, and can directly connect to containers rather than IPs/Hostname, the OpenID Provider uses the same accounts than the admin dashboard, the Anti-DDOS can prioritize your traffic based on what account you logged in with. This synergy is the foundation of the &lt;em&gt;Cosmos experience&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l9SnOUCw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l9SnOUCw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="757"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Here's an example, when creating a URL in the reverse proxy you can directly pick a container in a list and it will even automatically select the right port for you&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The second most important core value for Cosmos is the &lt;strong&gt;home-first approach&lt;/strong&gt;. NGINX, Portainer, Traefik are all amazing tools but they have one big defect in common: &lt;strong&gt;they are not designed for you&lt;/strong&gt;. They are designed for people whose jobs are to use those tools for 8h a day. Not only that make them un-necessary tedious and verbose to setup, but it also mean that many vital features might be paywalled behind very expensive price tags (affordable to companies, but not to individuals). &lt;strong&gt;Cosmos on the other hand,&lt;/strong&gt;  &lt;strong&gt;has been designed with one and only one target in mind: you&lt;/strong&gt;. It does not intend to scale to a multi-billion company’s large-scale infrastructure. Instead, it has been designed for you and your family, to own and use a home server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PTXytV1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PTXytV1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-1.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="513"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;While highly customizable, The feature set of Cosmos is kept to a level of what is useful for you and your setup&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why did I start
&lt;/h1&gt;

&lt;p&gt;The first feature I wrote for Cosmos (before I even found the name) was the file manager. Ironically, 6 months later that feature has still not been released! Initially the direction the product was taking was to propose an alternative to Nextcloud. I was mostly frustrated with the bugs and performance issues it had. Over time, something odd got me interested. It was not the “office tool” Nextcloud that allows you to open edit share office files, and collaborate on them. What I found most interesting was the app store, and the integration to the API it proposed. I thought it was very satisfying to setup the tool once, and then to allow other software to re-use the authentication, the file system, and so on, simply behind an API integration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FxsFd6oj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/Untitled-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FxsFd6oj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/Untitled-1.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="425"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;example of a budget app integrated in Nextcloud&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Of course the proposition behind Cosmos evolved a lot since. Mostly for two reasons. First, Self-Hosting is still currently at a “baby” stage. There are &lt;strong&gt;a lot of challenges&lt;/strong&gt; for a lambda person to be able to self-host, especially around &lt;strong&gt;security and reliability&lt;/strong&gt;. Most self-hosted tools have weak setup, questionable security, and do not offer the right amount of scaffolding for a user who is not a professional to use the tool in a healthy and safe manner. Even when they do, it does not make sense for example for a user to setup dozens of HTTPS certificates (in the case of tools like Jellyfin of Nextcloud who natively support HTTPS).&lt;/p&gt;

&lt;p&gt;The second reason is in fact the opposite: &lt;strong&gt;Self-Hosting is meant to be somehow a journey&lt;/strong&gt;. Users enjoy tinkering with their servers, finding new things to self-host and setting them up. They usually like to go into a terminal and learn things, and they want to know what exactly is running on their server (Fair! Since, after all, it is theirs!). While Nextcloud and their very abstracted system solved the first problem well, it definitely clashed heavily with the second one.&lt;/p&gt;

&lt;p&gt;Designing &lt;strong&gt;a system that allow both beginners and power users to enjoy themselves&lt;/strong&gt; and find the level of abstraction they seek is a huge challenge from product and UX perspective that I had to tackle all throughout the development of Cosmos. I also believe that while Nextcloud was (mostly) a smooth experience to install and use apps, it being as gate-closed as it is has adverse implications especially around vendor-locking, that in my sense are against the basics of the self-hosting philosophy. All that thinking brought me to the dream I had for the future of the internet: an Internet rooted in its origin — &lt;strong&gt;a decentralized network collectively owned by its users, prioritizing the interests of the many in both consumption and production aspects.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The vision of the Universe
&lt;/h1&gt;

&lt;p&gt;That dream, that vision, is what gave Cosmos its name: &lt;strong&gt;a place beyond the clouds, only accessible with the apotheosis of technological progress, that brings all nations together working tirelessly to achieve a single common goal&lt;/strong&gt;. In this case, that goal is sharing information. In an age where the internet seems to drift away bits by bits from its users to become a tool of alienation, I saw the chance for a different future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M75WTu01--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/banner.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M75WTu01--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/banner.jpg" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While there’s nothing that can be done to prevent corporation from organizing monopolies, there is a chance to help the internet become more than a high-way for the same few videos, the same few articles, and the same few musics to be consumed by everyone. &lt;strong&gt;There is a way to let users own the content of the internet, and shape it the way we want, the way we need, to express everyone’s individuality.&lt;/strong&gt; Currently, the way the main platforms' algorithms work, the way Netflix cancels shows or remove them because they are not popular enough even when they have some large viewership (just to give an example that I think everyone can relate to), and the way decisions are made by either bots or business teams preemptively and mostly arbitrarily on a scale that impacts literally everyone’s life, is putting that individuality to risk. People are getting mind-numbed into consuming what is trendy, what the algorithms push to them, what makes them docile to repetition.&lt;/p&gt;

&lt;p&gt;Furthermore, &lt;strong&gt;aside from the content’s diversity issue, there is an additional problem about its safety&lt;/strong&gt;. Examples are plenty. The Last Pass hack of all their users’ credential data, Gitlab accidentally deleting all their data from their database, and having no backups almost costing hundreds of thousands of people all their hard work. This year alone, millions of users have seen their data breached by dozens of companies, such as T-Mobile, Google, Norton, MailChimp, etc...&lt;/p&gt;

&lt;p&gt;If we were to somehow crack the code, and allow self-hosting to be a legitimate way to consume and share data for the many, then suddenly both those problems would be solved. Additionally, it would have the benefit of being both consumer and business friendly. &lt;strong&gt;The people consuming the data could own data again&lt;/strong&gt; , smaller data producer (aka. Content creator) would have &lt;strong&gt;more personal platform to express themselves&lt;/strong&gt; where they would feel &lt;strong&gt;less helpless against the cogs of the machine&lt;/strong&gt; , and everyone would get the chance to make the internet their own. Larger companies would also find that not investing a large chunk of their earnings into infrastructure is beneficial. Finally, decentralizing the data would make it near impossible to orchestrate large scale hacking, &lt;strong&gt;lowering the risk&lt;/strong&gt; personal data is currently at, both for the users and for the companies developing softwares.&lt;/p&gt;

&lt;p&gt;Between the moment I had this vision, and the moment where I created the Cosmos repository, over 2 months had elapsed. I had to figure out how to somehow &lt;strong&gt;conjugate power, security, stability and ease of use in a single solution&lt;/strong&gt;. How to make things &lt;strong&gt;accessible and seamless&lt;/strong&gt; , while still keeping it &lt;strong&gt;exhaustive&lt;/strong&gt; , &lt;strong&gt;fun&lt;/strong&gt; to use for advanced users, and &lt;strong&gt;transparent&lt;/strong&gt; for all to learn how things work. It was clear to me that I needed to re-think fundamentals, such as how Docker and HTTP are used, to design what would eventually become Cosmos.&lt;/p&gt;

&lt;h1&gt;
  
  
  The current state of Cosmos
&lt;/h1&gt;

&lt;p&gt;A few weeks of work later, I had released the first version of Cosmos. Back then it was only the reverse proxy with the authentication gate. Having a fully fledged reverse proxy behind a nice UI was already kind of ground breaking on its own. NPM being the only alternative, adding the authentication on top of it would already make Cosmos a somehow attractive option for a lot of people to consider.&lt;/p&gt;

&lt;p&gt;The first few users had it rough: not going to lie, it was not a disaster but there were a few hiccups for sure. I quickly realised that I had to speed up the release of very crucial features, especially the Docker container management system, for Cosmos to truly shine as a promising piece of tech. And so I started working on it. One week-end, I went a little crazy and pretty much rewrote docker-compose entirely to offer the powerful cosmos-compose alternative. Finally, Docker management got fully released, and so did OpenID support eventually.&lt;/p&gt;

&lt;p&gt;The community of users has been growing steadily and I am still very excited to meet all the users who join the Discord server on a daily basis. At this point, Cosmos is full packaged experience from install to usage for users. First, you can find the apps you need in the app store:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8oktJcSN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/Screen-Shot-2023-09-24-at-23.32.58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8oktJcSN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/Screen-Shot-2023-09-24-at-23.32.58.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Audiobook Shelf in the Cosmos App Store&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Installing this app will take 2 clicks, and it is fully customizable if you want to change anything:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g1OmqAWd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g1OmqAWd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-6.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Cosmos app store relies on Cosmos-Compose to offer a &lt;strong&gt;unique cocktail&lt;/strong&gt; between a &lt;strong&gt;solid and a flexible setup&lt;/strong&gt;. In the landscape you currently have two alternatives. Either you get a simple/bare setup but very flexible (CasaOS, Umbrel, ...) or you get a solid setup with HTTPS, and improved security, but in a very inscrutable black box (Cloudron, YUNoHost, ...). Cosmos sits in the middle, although &lt;strong&gt;most apps will fully work and will be secure from the get go&lt;/strong&gt; , on rare occasions you might have to do a tiny bit of manual tinkering. &lt;strong&gt;The upside on the other hand, is you have full visibility and full control over your apps&lt;/strong&gt; as if you had set them up from CLI with hundreds of lines of config files.&lt;/p&gt;

&lt;p&gt;Of course in the spirit of control, you can simply import an existing custom docker-compose file directly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iisVWEbf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iisVWEbf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-2.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="593"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Importing a custom Jellyfin compose&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And thanks to its design, doing this will still allow you to use the full range of functionalities on your newly created container, just as if as you used the app store.&lt;/p&gt;

&lt;p&gt;Talking about functionalities, you can of course fully manage your container, such as editing its labels and network settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h24xjsE7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h24xjsE7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-3.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And obviously, it wouldn't be complete without the reverse proxy, and its ability to quickly connect a container to the world with a &lt;strong&gt;full set of protection, security layer, HTTPS encryption. All this, in 2 clicks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WtvX1_GC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WtvX1_GC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-4.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="627" height="888"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;First click&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--erMwfrFZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--erMwfrFZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-5.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="749"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Second click (Cosmos auto discover port and propose a URL based on the container name, which you can of course customize in the form)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This 2 click install, 2 clicks connect approach, while being completely customizable from A to Z, is the essence of &lt;strong&gt;what makes Cosmos the solution&lt;/strong&gt; to bridge the disconnect between self-hosting as a whole, the power user and the beginner. It is why Cosmos is a suitable solution to the previously mentioned challenges. Why &lt;strong&gt;Cosmos seduced both advanced and inexperienced users alike&lt;/strong&gt;. It makes things easy without dumbing them down. &lt;strong&gt;It let you appreciate every step for full transparency and let you learn things at your own pace.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On top of that, &lt;strong&gt;the strong accent on security&lt;/strong&gt; makes Cosmos a safe platform for everyone to experiment, discover and learn. &lt;strong&gt;I have seen way too many people with extremely insecure setup&lt;/strong&gt; lacking authentication, using HTTP only, having no backups, etc... And I do not blame the users, as they were never educated about those issues and solutions like CasaOS and Umbrel who target newer users conveniently do a very bad job at warning users about those things. Users also tend to settle for half solutions such as Cloudflare Tunnel that actually leave your setup very vulnerable.&lt;/p&gt;

&lt;p&gt;One thing that I keep repeating is that &lt;strong&gt;keeping your server safe is difficult and requires you to use the full amount of tools available to you&lt;/strong&gt;. People often think that because their server is not exposed to the internet it will be safe, and that may be they don't even need HTTPS, but they couldn't be further from the truth. &lt;strong&gt;Your local network is not safe.&lt;/strong&gt; There are way too many devices in your local network that can be easily taken advantage of (Smartphones, Smart TV, PCs, IOT devices, ...). In fact, &lt;strong&gt;even your server is not safe from itself&lt;/strong&gt; as you install multiple Docker containers that might not be completely safe. &lt;strong&gt;That is why Cosmos puts so much effort into making security accessible in a unique way.&lt;/strong&gt; And no one should not take those point lightly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z1bGMtVL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z1bGMtVL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/image-7.png" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="363"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;With one single click you can enable authentication (think Authentik/Authelia), use the smart shield protection and/or restrict the container to your VPN&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ironically, the more advanced of a user you are, the more you will be crippled by your own experience and knowledge. &lt;strong&gt;I'm sure some of you have experienced the "setup fatigue" before&lt;/strong&gt;. Knowing the amount of work you have to do to setup properly a new software makes you less likely to even try it. Or sometime, you like a new software but just not quite enough to go through the effort of "productionising" it. Let's be honest: while setting up Backups, HTTPS, Encryption, etc... on individual applications the first few times might be fun, I am sure a lot of you will find that actually the real fun part comes after; when the software is up and running and you can dive into its admin panel and discover its functionalities. As you become more familiar with it, Cosmos is designed to make setting up and managing multiple apps easier, without taking away the joy of experiencing new software as it gets up and running for the first time.&lt;/p&gt;

&lt;h1&gt;
  
  
  The future of Cosmos
&lt;/h1&gt;

&lt;p&gt;Cosmos has come a long way, but the end of the road is still far. Aside from some of the missing, more immediate features such as monitoring and backups, 3 big milestones are left to be reached.&lt;/p&gt;

&lt;p&gt;First of all, &lt;strong&gt;Constellation&lt;/strong&gt;. Setting up a &lt;strong&gt;VPN&lt;/strong&gt; to access your server securely without opening your ports is not only a &lt;strong&gt;crucial step&lt;/strong&gt; for a safe self-hosting environment, but it is more often than not even a &lt;strong&gt;required&lt;/strong&gt; one (for example because of CGNAT, but also because of mobile apps, since they can't support web authentication). The problem is, it is also one of the most complex things to setup. Not only it is very demanding (many different things to setup) but also very difficult to get &lt;em&gt;right,&lt;/em&gt; and very manual too (ex. having to manually rewire DNS in your local setup).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constellation aims to solve all those issues&lt;/strong&gt;. It is a &lt;strong&gt;fully automated VPN&lt;/strong&gt; that requires &lt;strong&gt;no maintenance&lt;/strong&gt; , is setup in &lt;strong&gt;one click&lt;/strong&gt; and (as for everything in Cosmos) is fully integrated to the rest of the stack: it &lt;strong&gt;automatically rewrite your domains&lt;/strong&gt; to use &lt;strong&gt;encrypted tunnels&lt;/strong&gt; , it allows you to &lt;strong&gt;restrict&lt;/strong&gt; a reverse proxy &lt;strong&gt;URL&lt;/strong&gt; to the &lt;strong&gt;VPN&lt;/strong&gt; in (literally) one single click, and allow your users to manage their devices themselves in an easy to use interface where they just have to scan a single QR code. It is also naturally split tunneling all the routes defined in Cosmos for you, to not affect the rest of your traffic. Constellation is close to completion, and an open beta phase &lt;strong&gt;should be available soon&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Next milestone, going back a bit on the initial goals of Cosmos, is the API. In the same fashion as Nextcloud and its apps, I would like Cosmos to provide functionalities that &lt;strong&gt;make developping self-hosted apps easier&lt;/strong&gt;. While I already started designing Cosmos in a way that achieve such result (from day one Cosmos has been sending authentication headers to apps for example) I want this to go much further, to make application development easier but also to &lt;strong&gt;improve user experience&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The reason why I am leaning that way is because s &lt;strong&gt;elf hosted tools are realistically still a poorly developed ecosystem&lt;/strong&gt;. A large chunk of the community either started to self-host to replace Dropbox/Office, in which case they started with &lt;strong&gt;Nextcloud&lt;/strong&gt; (or similar) OR they started self-hosting to do some other questionable things ( &lt;strong&gt;arr&lt;/strong&gt; , &lt;strong&gt;arr&lt;/strong&gt;!). That is why those two sides are the most developed by far, and offer the most advanced solutions. I think it is increasingly though, that &lt;strong&gt;people start seeing self-hosting for the wonderful opportunity that it is, and try to push it further.&lt;/strong&gt; Unfortunately it is &lt;strong&gt;no small task&lt;/strong&gt; , and that is why I believe that &lt;strong&gt;making self-hosted apps as easy to develop as mobile app&lt;/strong&gt; , rather than being of the complexity of a SaaS app (with manually maintaining Databases, having to re-write a whole authentication system every time, and having a huge burden of having to maintain performance and security to a high standard) will &lt;strong&gt;boost up the possibilities for developers to propose myriad of new experiences and tools for users to enjoy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Last but not least, I would like some day to leap into the infrastructure side of things. Having some more integrated web architecture that would be hosted to allow users to further deepen their reliance on their own server without hindering their ability to enjoy their everyday usage of services. I am purposely being vague on this as I don't like to over-promise, but I do hope that one day people will be able to get their domain-names directly from Cosmos (if they want to do so of course! As usual Cosmos will continue to foster customization and individuality).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zg6hChMo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/subscribe-space-rocket-planets-noted.lol-2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zg6hChMo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/subscribe-space-rocket-planets-noted.lol-2.jpg" alt="Introducing Cosmos: The All-in-One Secure Platform for Self-Hosting" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sign up for Noted
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Maximize Your Homelab Potential with Self-Hosting and Open-Source Solutions.
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                &amp;lt;span&amp;gt;Subscribe&amp;lt;/span&amp;gt;
                &amp;lt;span&amp;gt;







            .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
            .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
            .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
            .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
            .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
            @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}


&amp;lt;/span&amp;gt;



            Email sent! Check your inbox to complete your signup.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;No spam. Unsubscribe anytime.&lt;/p&gt;

&lt;h1&gt;
  
  
  Closing words
&lt;/h1&gt;

&lt;p&gt;If you've read this article in its entirety, &lt;strong&gt;THANK YOU!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I cannot express enough gratitude to the growing community around Cosmos. &lt;strong&gt;You all have been amazing&lt;/strong&gt; , and I am so pleased to have worked on this project to what it has come to be today. This makes me want to work even harder toward &lt;strong&gt;a world where self-hosting becomes a viable solution for both users and business alike&lt;/strong&gt; as an alternative to the cloud and SaaS solutions, while offering the same level of service quality.&lt;/p&gt;

&lt;p&gt;You can find me on the Noted and Cosmos Discord, or on github. If you have any questions or feedback please let me know I would love to hear it! And if you share the same dream I have, and I think you probably do since you are here, every little bit of contribution matters, you matter! &lt;strong&gt;Let's make it happen together.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Happy hosting!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Useful links&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Main Site: &lt;a href="https://cosmos-cloud.io/?ref=noted.lol"&gt;https://cosmos-cloud.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/azukaar/cosmos-Server?ref=noted.lol"&gt;github.com/azukaar/cosmos-Server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discord: &lt;a href="https://discord.gg/PwMWwsrwHA?ref=noted.lol"&gt;https://discord.gg/PwMWwsrwHA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://cosmos-cloud.io/demo?ref=noted.lol"&gt;https://cosmos-cloud.io/demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation: &lt;a href="https://cosmos-cloud.io/doc?ref=noted.lol"&gt;https://cosmos-cloud.io/doc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tutorial: &lt;a href="https://cosmos-cloud.io/blog/getting-started-with-cosmos-cloud-a-beginners-guide-to-self-hosting.html?ref=noted.lol"&gt;https://cosmos-cloud.io/blog/getting-started-with-cosmos-cloud-a-beginners-guide-to-self-hosting.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another tutorial by Engel: &lt;a href="https://guides.engels.zip/?ref=noted.lol"&gt;https://guides.engels.zip/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A video tutorial by BigBearTechWorld: &lt;a href="https://www.youtube.com/playlist?list=PL2RAscIdkpt_xLNFsYzXSETZjeX8zdBYj&amp;amp;ref=noted.lol"&gt;https://www.youtube.com/playlist?list=PL2RAscIdkpt_xLNFsYzXSETZjeX8zdBYj&lt;/a&gt;&lt;/p&gt;

</description>
      <category>selfhosting</category>
    </item>
    <item>
      <title>Install Docker and Portainer on Debian for Self-Hosting</title>
      <dc:creator>Jeremy</dc:creator>
      <pubDate>Thu, 14 Sep 2023 13:32:18 +0000</pubDate>
      <link>https://dev.to/noted/install-docker-and-portainer-on-debian-for-self-hosting-5538</link>
      <guid>https://dev.to/noted/install-docker-and-portainer-on-debian-for-self-hosting-5538</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lfePEWVW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/install-docker-and-portainer-noted.lol.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lfePEWVW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/install-docker-and-portainer-noted.lol.jpg" alt="Install Docker and Portainer on Debian for Self-Hosting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I started tinkering with self-hosting, Docker was by far my biggest hurdle. But to learn more about Docker, we need to figure out how to install it first. Then, later will will install and use Portainer to manage and monitor our Docker containers.&lt;/p&gt;

&lt;h4&gt;
  
  
  Table of Contents
&lt;/h4&gt;



&lt;ol&gt;
&lt;li&gt;&lt;a href="https://noted.lol/install-docker-and-portainer/"&gt;Install Docker and Portainer on Debian for Self-Hosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://noted.lol/self-host-ghost/"&gt;Self Host a Ghost Blog on Your Homelab Using Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://noted.lol/cloudflare-tunnel-and-zero-trust/"&gt;Setup your Domain using Cloudflare Tunnels and Zero Trust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://noted.lol/zero-trust-access-applications/"&gt;How to Protect Self Hosted Login Pages using Cloudflare Zero Trust Policies&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docker does a good job at explaining how to &lt;a href="https://docs.docker.com/engine/install/debian/?ref=noted.lol"&gt;install Docker on specific distros&lt;/a&gt;. However, I always found it intimidating with how the instructions are laid out. So this guide is from a different perspective. A perspective from someone who once was lost and was learning like you are.&lt;/p&gt;

&lt;p&gt;I'll lay it out in a much more simple format for beginners to move forward as quickly as possible. Aftrall, we live in a "I want it now" society and quite frankly, that's how I would want to see it done!&lt;/p&gt;
&lt;h3&gt;
  
  
  Update and upgrade the Host Machine
&lt;/h3&gt;

&lt;p&gt;It's important to keep your host machine up to date. This can include important patches that keep your host safe from vulnerabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;. Update the host.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;. Upgrade the host.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Docker on your Host Machine
&lt;/h3&gt;

&lt;p&gt;Docker has made this very simple by creating an official install script that does all the work for you. You can see what this script includes and how it works on the &lt;a href="https://github.com/docker/docker-install?ref=noted.lol"&gt;Docker Github repo&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The purpose of the install script is for a convenience for quickly installing the latest Docker-CE releases on the supported linux distros. It is not recommended to depend on this script for deployment to production systems. For more thorough instructions for installing on the supported distros, see the &lt;a href="https://docs.docker.com/engine/install/?ref=noted.lol"&gt;install instructions&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'll be using Ubuntu 23.04 standard on Proxmox to run these commands as root. You may need to add sudo at the beginning of these commands if you are not logged in as root.&lt;/p&gt;

&lt;p&gt;Step 1. Install curl.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt install curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2. Install Docker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3. Check if Docker is functioning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl status docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TRUmJ3_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/docker-install-proxmox-status-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TRUmJ3_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/docker-install-proxmox-status-noted.lol.png" alt="Install Docker and Portainer on Debian for Self-Hosting" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;. Force Docker to start at boot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl enable docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This step is not necessary but can make the process of starting docker quicker by doing it automatically. This way you don't have to manually start Docker when you reboot your host machine. I haven't seen any official documentation but Docker always seems to start automatically regardless after testing on my hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting up Portainer on the Host Machine
&lt;/h3&gt;

&lt;p&gt;I think it's a great idea to learn &lt;a href="https://www.youtube.com/watch?v=xGn7cFR3ARU&amp;amp;ab_channel=TechWorldwithNana&amp;amp;ref=noted.lol"&gt;basic Docker commands&lt;/a&gt; because they will come in handy at a later time. Especially when you want to update Portainer. Portainer makes managing Docker containers easier and in my opinion, faster. You want it now right? 😆 Well Portainer will give you a nice graphic interface for what would otherwise be a much larger learning curve using only the CLI (command line interface).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;. Install Portainer.&lt;/p&gt;

&lt;p&gt;Now that Docker is installed, you can install Portainer using Docker run. Open your terminal and run the following command to install Portainer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
--name="portainer" \
--restart on-failure \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When complete, navigate to your host IP on port 9000. Example: 192.168.1.5:9000. You will see the Portainer registration page.&lt;/p&gt;

&lt;p&gt;If you don't know the host machine IP, you can use the following command to output the information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ip addr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mine is usually always listed under number 2 in the output.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o7HgxE1Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/get-ip-address-using-ip-addr-self-hosting-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o7HgxE1Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/get-ip-address-using-ip-addr-self-hosting-noted.lol.png" alt="Install Docker and Portainer on Debian for Self-Hosting" width="800" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i6f5TOQh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/portainer-self-hosted-register-new-account-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i6f5TOQh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/portainer-self-hosted-register-new-account-noted.lol.png" alt="Install Docker and Portainer on Debian for Self-Hosting" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;. Create a Portainer admin account.&lt;/p&gt;

&lt;p&gt;I uncheck the collection of anonymous statistics. I don't need anyone knowing what I do or when I do it, but I am happy to give feedback of course.&lt;/p&gt;

&lt;p&gt;Then click "Create user" and log in!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--djb2ihRS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/portainer-self-hosted-main-screen-noted.lol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--djb2ihRS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://noted.lol/content/images/2023/09/portainer-self-hosted-main-screen-noted.lol.png" alt="Install Docker and Portainer on Debian for Self-Hosting" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Notes and Thoughts
&lt;/h3&gt;

&lt;p&gt;For now, this is a great place to stop and get familiar with Portainer and the menu within the dashboard. Browse around and check out the different settings but try not to get overwhelmed by all the technical jargon you may not understand.&lt;/p&gt;

&lt;p&gt;In the next article, we will go over Portainer basics and launching your first self-hosted application using Portainer and the Docker Compose stacks feature.&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>docker</category>
      <category>noted</category>
    </item>
  </channel>
</rss>
