<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Self-hosted]]></title><description><![CDATA[My self-hosted journey. Tutorials and articles on how to self host alternatives for Dropbox, Gmail, YouTube and etc.]]></description><link>https://selfhosted.myhub.io/</link><image><url>https://selfhosted.myhub.io/favicon.png</url><title>Self-hosted</title><link>https://selfhosted.myhub.io/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Sun, 19 Apr 2026 19:37:37 GMT</lastBuildDate><atom:link href="https://selfhosted.myhub.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[How to create Dropbox alternative in less than 1 hour]]></title><description><![CDATA[<p>Rev #1</p><p>Have you ever wondered what would be to have your own personal Dropbox/Google Drive/Box alternative?</p><p>Thanks to open source you can do it fairly quickly.</p><p>You can find the podcast episode about self hosted file sync service on the techie leadership show - <a href="https://techieleadership.com/bonus-3-self-hosting-your-own-file-services-with-nedjalko-milenkov/">https://techieleadership.com/</a></p>]]></description><link>https://selfhosted.myhub.io/how-to-install-dropbox-alternative-in-less-than-1-hour/</link><guid isPermaLink="false">600cb692cf4a830001a9e698</guid><dc:creator><![CDATA[Nedjalko]]></dc:creator><pubDate>Sat, 23 Jan 2021 23:58:08 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1484662020986-75935d2ebc66?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDE0fHxoZGR8ZW58MHx8fA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1484662020986-75935d2ebc66?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDE0fHxoZGR8ZW58MHx8fA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="How to create Dropbox alternative in less than 1 hour"><p>Rev #1</p><p>Have you ever wondered what would be to have your own personal Dropbox/Google Drive/Box alternative?</p><p>Thanks to open source you can do it fairly quickly.</p><p>You can find the podcast episode about self hosted file sync service on the techie leadership show - <a href="https://techieleadership.com/bonus-3-self-hosting-your-own-file-services-with-nedjalko-milenkov/">https://techieleadership.com/bonus-3-self-hosting-your-own-file-services-with-nedjalko-milenkov/</a>.</p><p>Before getting our hands dirty, let&apos;s just see why we should even bother self hosting our own file server.</p><!--kg-card-begin: markdown--><p><strong>Pros</strong></p>
<ul>
<li>You are your own boss</li>
<li>The storage is limited by the storage on your server or cloud provider</li>
<li>Your data stays yours and you have complete ownership</li>
<li>No ads</li>
<li>Can be cheaper than paying monthly for Dropbox/Google Drive/Box and etc.</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>You need to take care of your server from time to time</li>
<li>Upfront cost can be higher if you purchase the hardware (does not apply to cloud)</li>
</ul>
<!--kg-card-end: markdown--><p>You will be surprised that there are quire a few open source alternatives for self hosted file synchronisation.</p><!--kg-card-begin: markdown--><p>To name a few:</p>
<ul>
<li>Seafile - <a href="https://www.seafile.com">https://www.seafile.com</a></li>
<li>Nextcloud - <a href="https://nextcloud.com">https://nextcloud.com</a></li>
<li>ownCloud - <a href="https://owncloud.com">https://owncloud.com</a></li>
</ul>
<!--kg-card-end: markdown--><p>This tutorial will cover how to install <strong>Seafile</strong>.</p><h2 id="why-seafile">Why Seafile</h2><p>I have tested Seafile, Nextcloud and ownCloud and found that Seafile perform better for my needs, however both Nextcloud and ownCloud are great alternatives. I&apos;ll write another article on comparing the 3 solutions and tutorials on how to install them so make sure you subscribe or check the RSS feed.</p><p>In short Seafile is very fast, reliable and easy to maintain. It does one thing and does it great - file sync, file storage and file sharing. It&apos;s been on the market since 2012.</p><h2 id="prerequisites">Prerequisites</h2><p>There are many ways to install Seafile. Too keep it simple and short (to justify the title of the tutorial &#x1F642;) here are the prerequisites that you will need in term of basic knowledge and infrastructure.</p><ul><li>Basic knowledge of Docker Compose</li><li>Linux with installed Docker Compose (in this tutorial we will use <a href="https://marketplace.digitalocean.com/apps/docker?refcode=fd893c56bfff&amp;utm_campaign=Referral_Invite&amp;utm_medium=Referral_Program&amp;utm_source=CopyPaste">DigitalOcean</a>*)</li><li>Domain name and basic knowledge on how to manage it</li></ul><h2 id="digitalocean">DigitalOcean</h2><p><a href="https://m.do.co/c/fd893c56bfff">DigitalOcean</a>* is a fast, reliable and cheap cloud provider. You can use it for development or running production system on it. I am using it for both and so far I am quite happy with the service.</p><p>This step will cover how to setup a DigitalOcean droplet (virtual machine). If you are using another cloud provider or your own linux server, you can skip it.</p><p>The cheapest plan on DigitalOcean is for $5 and includes 1 GB / 1 CPU, 25 GB SSD Disk, 1000 GB transfer, which is not bad for a start. You can add additional volume for $0.10 per gigabyte.</p><p>DigitalOcean has a marketplace, which has images of virtual machines with preinstalled software. We are going to use the marketplace to install a virtual machine with preconfigured Docker Compose. Cool isn&apos;t it?</p><ol><li> Here is the <a href="https://marketplace.digitalocean.com/apps/docker?refcode=fd893c56bfff&amp;utm_campaign=Referral_Invite&amp;utm_medium=Referral_Program&amp;utm_source=CopyPaste"><strong>link</strong></a>* for the Docker Compose image on the DigitalOcean marketplace.</li><li>To create the droplet click the big blue button <em><strong>Create Docker Droplet</strong></em>.</li><li>After you register/login, you will see the droplet configuration screen.</li><li>Choose the <em><strong>Basic</strong></em> plan.</li><li>Choose the virtual machine for <em><strong>$5 a month</strong></em>.</li><li>Choose a datacenter region. It&apos;s better to chose a region, which is close to you or the users who will use the service.</li><li>For <em><strong>Authentication</strong> </em>choose <em><strong>SSH keys</strong></em>. Create a new SSH key with <strong>New SSH Key</strong> button if you don&apos;t already have a key. Here is the DigitalOcean tutorial on how to use the SSH keys - <a href="https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-putty/">https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-putty/</a> .</li><li>Choose a hostname. It is recommended to be the same as the domain or subdomain that you will use. In my case the domain will be <em>drive.myhub.io</em>. Please change the domain in the tutorial to yours.</li><li>Press the big green button <strong><em>Create droplet</em></strong></li><li>That&apos;s it. After a few minutes, you will have a dedicated virtual machine, with real IP and Docker and Docker Compose preinstalled and configured for you.</li><li>Let&apos;s create some firewall rules. Go to <strong><em>Networking-&gt;Firewalls </em></strong>on the left panel. Click <em><strong>Create Firewall</strong></em>. For name choose <strong><em>Seafile </em></strong>(anything will work actually).</li><li>Go to the <strong><em>SSH</em></strong> row in the <em><strong>Inbound Rules</strong></em>. In the <strong><em>Sources </em></strong>remove the values <strong><em>ALL IPv4</em></strong> and <strong><em>ALL IPv6</em></strong>.</li><li>You need to add your IP address, which you can find from this site <a href="https://www.ipify.org/">https://www.ipify.org</a> for an example. This step will ensure that only your IP will have SSH access. That&apos;s the main admin channel for your virtual machine. You can add as many IPs there. Make sure to update them if your IP keeps changing.</li><li>Still in the <em><strong>Inbound Rules </strong></em>click to add a new rule <strong><em>New rule</em></strong> and from the dropdown choose <strong><em>HTTP</em></strong>. Leave the <strong><em>Sources</em></strong> to <strong><em>ALL IPv4</em></strong>, <strong><em>ALL IPv6</em></strong>.</li><li>Still in the <em><strong>Inbound Rules </strong></em>click to add a new rule <strong><em>New rule</em></strong> and from the dropdown choose <strong><em>HTTPS</em></strong>. Leave the <strong><em>Sources</em></strong> to <strong><em>ALL IPv4</em></strong>, <strong><em>ALL IPv6</em></strong>.</li><li>Step 14 and 15 will ensure that your droplet (virtual machine) will have ports 80 (HTTP) and 443 (HTTPS) accessible from everywhere.</li><li>Go to <strong><em>Apply to Droplets</em></strong> and start typing the name of your droplet. In our case it will be <strong><em>drive.myhub.io</em></strong>.</li><li>Press the big green button <strong><em>Create Firewall</em></strong>.</li><li>We&apos;ve created a simple firewall for our droplet. Now let&apos;s configure the domain name. I assume that you already have a domain name and know how to add an A record.</li><li>From the control panel on the left go to <strong><em>Projects</em></strong> and select your space. It&apos;s probably named <strong><em>Personal</em></strong>. That space will contain all your droplets. You should see your droplet and it&apos;s IP. You need then to create an A record for your domain to point to that IP. In my case I made <strong><em>drive.myhub.io</em></strong> to point to my droplet&apos;s IP.</li></ol><h2 id="installing-seafile">Installing Seafile</h2><p>I assume that you already have completed the DigitalOcean steps or you have your own server. Just make sure to point your domain/subdomain to your server&apos;s IP. In this tutorial, my domain <strong><em>drive.myhub.io </em></strong>is pointing to my droplet with an A DNS record.</p><!--kg-card-begin: markdown--><ol>
<li>Let&apos;s ssh to the server. (Note: You need to configure your SSH profiel. The tutorial for DigitalOcean is <a href="https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-putty/">here</a>.)<br>
<code>ssh root@drive.myhub.io</code></li>
<li>Create folder for our Seafile instance.</li>
</ol>
<pre><code>mkdir seafile
cd seafile
</code></pre>
<ol start="3">
<li>Create the <em><strong>docker-compose.yml</strong></em> file<br>
<code>vi docker-compose.yml</code></li>
<li>Paste the following content into the file.</li>
</ol>
<pre><code>version: &apos;2.0&apos;
services:
  nginx:
    image: nginx:1.19.0
    ports:
      - 443:443
    volumes:
      - /root/seafile/nginx-container/nginx.conf:/etc/nginx/nginx.conf
      - /root/seafile/nginx-container/ssl:/ssl/
    depends_on:
      - seafile
    restart: &quot;always&quot;
    networks:
      - seafile-net

  db:
    image: mariadb:10.1
    environment:
      - MYSQL_ROOT_PASSWORD=somepassword  # Requested, set the root&apos;&apos;s password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /root/seafile/mysql-container:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    restart: &quot;always&quot;
    networks:
      - seafile-net

  memcached:
    image: memcached:1.5.6
    entrypoint: memcached -m 256
    restart: &quot;always&quot;
    networks:
      - seafile-net
          
  seafile:
    image: seafileltd/seafile-mc:8.0.3
    expose:
      - 80
    volumes:
      - /root/seafile/seafile-container/data:/shared   # Requested, specifies the path to Seafile data persistent store.
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=somepassword  # Requested, the value shuold be root&apos;s password of MySQL service.
      - TIME_ZONE=Europe/Sofia  # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - SEAFILE_ADMIN_EMAIL=mail@myhub.io # Specifies Seafile admin user, default is &apos;me@example.com&apos;.
      - SEAFILE_ADMIN_PASSWORD=adminpassword     # Specifies Seafile admin password
      - SEAFILE_SERVER_LETSENCRYPT=false   # Whether to use https or not.
      - SEAFILE_SERVER_HOSTNAME=drive.myhub.io # Specifies your host name if https is enabled.
    depends_on:
      - db
      - memcached
    restart: &quot;always&quot;
    networks:
      - seafile-net
networks:
  seafile-net:
</code></pre>
<!--kg-card-end: markdown--><p>To be continued...</p><p>The full tutorial will be available on Tuesday 16.02.2021. Stay tuned :)</p><p>* Some of the links have my referral code. If you use them you might get a small bonus from the referral program and so do I.</p>]]></content:encoded></item><item><title><![CDATA[Why Self Hosted]]></title><description><![CDATA[<p>Rev #1.1</p><h3 id="intro">Intro</h3><p>If you are not familiar with self-hosted, you might be wondering why you should really care.</p><p>My friends at <a href="https://techieleadership.com/">https://techieleadership.com</a> and I created a podcast episodes just about self-hosted.</p><p>The first episode is discussing the pros and cons about self-hosted and why you should</p>]]></description><link>https://selfhosted.myhub.io/why-self-hosted/</link><guid isPermaLink="false">600cb4e9cf4a830001a9e682</guid><dc:creator><![CDATA[Nedjalko]]></dc:creator><pubDate>Sat, 23 Jan 2021 23:49:48 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1451187580459-43490279c0fa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDF8fHRlY2hub2xvZ3l8ZW58MHx8fA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1451187580459-43490279c0fa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDF8fHRlY2hub2xvZ3l8ZW58MHx8fA&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Why Self Hosted"><p>Rev #1.1</p><h3 id="intro">Intro</h3><p>If you are not familiar with self-hosted, you might be wondering why you should really care.</p><p>My friends at <a href="https://techieleadership.com/">https://techieleadership.com</a> and I created a podcast episodes just about self-hosted.</p><p>The first episode is discussing the pros and cons about self-hosted and why you should consider it.</p><p>You can find it here - <a href="https://techieleadership.com/bonus-2-why-you-should-self-host-with-nedjalko-milenkov/">https://techieleadership.com/bonus-2-why-you-should-self-host-with-nedjalko-milenkov/</a>.</p><p>This article will be work in progress, so make sure you come back and check it from time to time.</p><p>Also the revision at the beginning of each article will tell you if there has been an update.</p><!--kg-card-begin: markdown--><p><strong>Here are the main topics that we will discuss:</strong></p>
<ul>
<li>What is self-hosted</li>
<li>How you can do it</li>
<li>Is it expensive</li>
<li>What you can self host</li>
<li>Why you should self host</li>
</ul>
<!--kg-card-end: markdown--><h3 id="what-is-self-hosted">What is self-hosted</h3><p>Self-hosted is a journey. It&apos;s a way of thinking and much more.</p><p>Have you ever wondered what will happen if Gmail or Dropbox stops working for some reason? Self-hosted provides alternatives to the current SaaS (Software as a Service) solutions that you can install and host on your own server or even on the cloud. You are your own boss and administrator and most importantly, you are the owner of your data.</p><p>For every major service such as Gmail, Yahoo Mail, Google Drive, Dropbox, Box, Google Sheets, Office 365, YouTube, Twitter, Facebook and others, there is an open source alternative or a paid alternative that you can host on your own.</p><p>This site is for the people who are interested to explore these alternatives.</p><p>Don&apos;t get me wrong, I use and like SaaS services paid and free ones. However some services either don&apos;t offer the flexibility I need or are too expensive for the purpose I would use them. For these and other reasons, self-hosted comes in play. Also it&apos;s quite fun to host your own services :)</p><h3 id="how-you-can-do-it">How you can do it</h3><p>You don&apos;t have to be a rocket scientist to start the self-hosted journey, although any IT background will definitely help. My advice is to start small and if you like it to keep expanding.</p><p>I started with self-hosted file service to migrate from Dropbox as I had quite a few gigabytes of files for storage. I also make videos in my free time and they take a lot of storage as well. I quickly realised that Dropbox was not the answer for me as it gets quite expensive once you go above certain storage tier.</p><p>Several years after using my self-hosted file service, I decided to migrate my calendar and contacts. After a while I&apos;ve decided to create a YouTube alternative service to host my videos and the rest is history.</p><p>Self hosted is like sex. You don&apos;t know what you are missing until you try it.</p><p>As software matures, so does the ease of installing and maintaining self-hosted solutions. Most of the services I use took me about a day to install and configure and once you know what you are doing, it can take you less then 30 minutes to deploy from scratch a new service.</p><!--kg-card-begin: markdown--><p>For that reason I have 3 simple rules that I try to follow:</p>
<ol>
<li>The self-hosted solution has to be Open Source (I have only one exception and you can read about it in the upcoming artice on how to self host your mail server).</li>
<li>The service needs to support Docker and be deployed via Docker Compose.</li>
<li>The service needs to have an offline client or client that you can host on yout own. It should not be dependend on other 3rd party online services.</li>
</ol>
<!--kg-card-end: markdown--><p>Following these 3 simple rules will ensure you have data consistency, you are not locked in some proprietary solution and easy maintenance.</p><p>If you follow this blog, you will find articles and how-tos on how to start self host your own services.</p><h3 id="is-it-expensive">Is it expensive</h3><p>The upfront cost is more than the paid services as you need to purchase all the hardware at the beginning. With paid services you pay every month and spread the cost throughout the year. However if you spread that cost for 2-3 years, you will find out that it will be cheaper than paying for the higher tiers of the SaaS services.</p><p>I will update this section with more detailed analysis of the cost later, so stay tuned :)</p><h3 id="what-you-can-self-host">What you can self host</h3><p>The simple answer is literally everything :)</p><p>You will be surprised (as I was) to find out that to every major SaaS and service you are using, there is a self-hosted alternative.</p><p>Here is a list of some services to get you an idea about this.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Service</th>
<th>Self-hosted alternatives</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dropbox, Google Drive, Box</td>
<td><a href="https://www.seafile.com/">Seafile</a>, <a href="https://owncloud.com/">ownCloud</a>, <a href="https://nextcloud.com/">Nextcloud</a></td>
</tr>
<tr>
<td>Google Docs, Sheets, Slides</td>
<td><a href="https://www.onlyoffice.com/">OnlyOffice</a></td>
</tr>
<tr>
<td>YouTube</td>
<td><a href="https://joinpeertube.org/">PeerTube</a></td>
</tr>
<tr>
<td>Google Calendar, Contacts</td>
<td><a href="https://radicale.org/3.0.html">Radicale</a>, <a href="https://owncloud.com/">ownCloud</a>, <a href="https://nextcloud.com/">Nextcloud</a></td>
</tr>
<tr>
<td>Gmail</td>
<td><a href="https://mailinabox.email/">Mail-in-a-Box</a>, <a href="https://www.axigen.com/">Axigen</a></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="why-you-should-self-host">Why you should self host</h3><p>There are a lot of reason to self host. I guess everyone will find a reason for themselves.</p><p>Self-hosted is being independent and not reliant on 3rd party services and business plans.</p><p>Self-hosted is a way to preserve your data for the next 30-40 years and be sure that it will be available as long as you support your server and hardware.</p><p>Self-hosted is a fun and practical way to learn new technologies, find how stuff works and be your DIY project for IT.</p>]]></content:encoded></item></channel></rss>