<?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: Gregor Davies</title>
    <description>The latest articles on DEV Community by Gregor Davies (@gregordavies).</description>
    <link>https://dev.to/gregordavies</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%2F595148%2F5b393243-84eb-47b6-8015-0a348374f3cb.jpeg</url>
      <title>DEV Community: Gregor Davies</title>
      <link>https://dev.to/gregordavies</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gregordavies"/>
    <language>en</language>
    <item>
      <title>How to install appwrite on a linode cloud server!</title>
      <dc:creator>Gregor Davies</dc:creator>
      <pubDate>Tue, 18 Oct 2022 16:41:55 +0000</pubDate>
      <link>https://dev.to/gregordavies/how-to-install-appwrite-on-a-linode-cloud-server-2235</link>
      <guid>https://dev.to/gregordavies/how-to-install-appwrite-on-a-linode-cloud-server-2235</guid>
      <description>&lt;p&gt;Hello, again appwriters. Yes, this is another one of “those” appwrite tutorials, and yes one on how to install software on a server. But hey if it helps someone, great! If you have read my other tutorial on how to install appwrite on Hetzner you will see some similarities on how to install appwrite on Linode servers as they are both Linux cloud server providers.&lt;/p&gt;

&lt;p&gt;But why Linode? Well, simply Linode can be considered like the Ryanair or Easyjet of cloud computing but without any of those hidden fees. You pay for what you get, it’s proven and most of all it’s secure and cheap. Also, they sponsor lots of YouTubers meaning that there are tons of affiliate links with free credit allowing you to get started for free with free credit. In terms of pricing Linode is about on par with Hetzner in terms of cost and specifications but way cheaper than an AWS EC2 instance with the same specifications. The Linode server starts at $5/month (5 euros for us Europeans) and the AWS server starts at $11/month which is far more expensive than Linode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RGEa6iNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8gvoztduidkpr5v1kej.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RGEa6iNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8gvoztduidkpr5v1kej.gif" alt="Image description" width="498" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But there are some downsides to using Linode for hosting appwrite. First, the server you are getting has a shared CPU compared to some of the cloud computing providers' dedicated CPU offerings. The other downsides of using Linode are that the servers take longer to allocate and provision than the big-name cloud providers (Although it’s still within 10 minutes normally) and that Linode has fewer cloud offerings than other cloud providers.&lt;/p&gt;

&lt;p&gt;While at it you may also ask why appwrite? Well appwrite allows you to build a secure backend in a very quick and affordable manner. Appwrite allows you to do things such as databases, authenticating users, managing storage functions and running your own functions. With basically little to no code needed. If you are unsure about what you can do with appwrite check out the awesome appwrite repository on GitHub for lots of helpful guides and examples (Like this one!).&lt;/p&gt;

&lt;p&gt;Another thing that I would like to mention about this tutorial is that in this tutorial we use the package-managed version of the docker project. This means in turn that docker will not automatically update this can be a good and bad thing. The good thing about it is that docker will not break the install of appwrite easily. But in turn just like OS updates if you don’t update you miss out on important security updates which could leave your server vulnerable to malicious actors.&lt;/p&gt;

&lt;p&gt;Okay, let’s begin, Head over to the Linode website at: &lt;a href="https://www.linode.com/"&gt;https://www.linode.com/&lt;/a&gt; and create an account personally I just signed up with my GitHub account just because it’s quicker. Make sure you have your phone handy as you will need to verify your phone number. As well as a payment method handy to input your payment details (Linode currently supports google pay, PayPal and credit cards). This step may take some time as they need to verify your account for me it took 10 minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aNQ5HlSE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyxatlf5kxgahcyz6gc6.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aNQ5HlSE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyxatlf5kxgahcyz6gc6.JPG" alt="Image description" width="421" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once this step is done let’s create a server for my server I chose these specs: &lt;strong&gt;Debian 11&lt;/strong&gt; for the OS/image (This is very important as the commands in this tutorial are focused on Debian), A shared CPU server (Nano 1), I named my server Appwrite (You can name it whatever you want), I generated a strong root password using my password manager (A strong password is very important otherwise your server may become comprised see comic below for strong password tips) and I added an SSH Key. Then clicked the create linode button to deploy my server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7cwQCAv4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfdwaokbauiedja644zs.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7cwQCAv4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfdwaokbauiedja644zs.JPG" alt="Image description" width="880" height="722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fo4KeDDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2sko503607gerfdo6aca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fo4KeDDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2sko503607gerfdo6aca.png" alt="Image description" width="740" height="263"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;(Comic courtesy of xkcd)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After I have my SSH key I connected to my server with my favourite SSH client in this case it’s Termius as it has a clean UI and a free tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D_4D9hOj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7zl13tnnn72tk3w7b5x.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D_4D9hOj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7zl13tnnn72tk3w7b5x.JPG" alt="Image description" width="307" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have connected to our server let’s update it to make sure we have all the security patches. We can do this with this command:&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-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(This may take some time)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xsCVxgWe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yhqt4a4y8agrqokknygq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xsCVxgWe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yhqt4a4y8agrqokknygq.gif" alt="Image description" width="753" height="753"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step is to install all the prerequisites required to make docker work properly. Let’s do this with this command:&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 install apt-transport-https ca-certificates curl gnupg2 software-properties-common

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

&lt;/div&gt;



&lt;p&gt;Once that step is done we are going to get and apply the required GPG key (The public key of docker to make sure that our docker install hasn’t been tampered with) This can be done with just one 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://download.docker.com/linux/debian/gpg | sudo apt-key add -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Brilliant! Let’s now add the docker repository to the apt sources:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And we need to update the package database with this command again:&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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We also need to specify where the server should try and fetch the docker package from. In this case, we want it to fetch it from the official docker repository, not the Debian one. This can be done with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt-cache policy docker-ce
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, after jumping over all these hurdles we can install the actual docker package:&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 install docker-ce
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(This may take some time, just be patient.)&lt;/p&gt;

&lt;p&gt;Once that’s done let’s check if we have installed it correctly, just in case we made a mistake:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If it returns something about docker then that’s this part done. On to the appwrite installation.&lt;/p&gt;

&lt;p&gt;Just a heads up you might want to copy and paste this command as it’s a very long one!&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 -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ appwrite/appwrite:1.0.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command tells docker to install, run and assign a volume to our appwrite installation like magic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M9DNINkJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8af2j9jtdvcii5jf35tp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M9DNINkJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8af2j9jtdvcii5jf35tp.gif" alt="Image description" width="317" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the installation is done that’s it! You have successfully managed to install appwrite! Pat yourself on the back and start building amazing things with appwrite! If you get stuck leave a comment I might be able to help. Also while at it make sure to join the appwrite discord to get product updates before anyone else &lt;a href="https://discord.gg/z8KjVahZJK"&gt;https://discord.gg/z8KjVahZJK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DOunFVJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ocslmgjrlrk27pos3oxo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DOunFVJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ocslmgjrlrk27pos3oxo.gif" alt="Image description" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appwrite</category>
      <category>linode</category>
      <category>appwritehack</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How to install appwrite on a hetzner cloud server in 8 steps</title>
      <dc:creator>Gregor Davies</dc:creator>
      <pubDate>Mon, 17 Oct 2022 16:06:15 +0000</pubDate>
      <link>https://dev.to/gregordavies/how-to-install-appwrite-on-a-hetzner-cloud-server-in-8-steps-1lan</link>
      <guid>https://dev.to/gregordavies/how-to-install-appwrite-on-a-hetzner-cloud-server-in-8-steps-1lan</guid>
      <description>&lt;p&gt;First of all, what is Appwrite? Well, let me tell you about this magical open-source secure and self-hosted backend for practically any programming language these days! It offers ways to implement users and authentication as well as an easy way to implement databases and many more. But most of all it lets you build fast.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fJ1-Ro5I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/beh1k28iicpe89nmwxvq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fJ1-Ro5I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/beh1k28iicpe89nmwxvq.gif" alt="Image description" width="418" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, I will teach you how to install Appwrite on a Hetzner cloud server using docker. Although there are other ways to install appwrite personally I find the docker route to be by far the easiest and quickest way to get up and running without that much hassle. If you don’t know what docker is, just like Appwrite it’s magical and very versatile for many different use cases in the backend environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YjWeAuAA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f3489ib0ddg8lpd2lkhx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YjWeAuAA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f3489ib0ddg8lpd2lkhx.jpg" alt="Image description" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your next question would probably be why Hetzner, not AWS? I can read your mind, can’t I? Well simply put AWS for this use case is more expensive than a Hetzner cloud server with a Hetzner server starting at just under 5 euros a month (Which is 5 dollars for you Americans) and an AWS EC2 server with the same specifications starting at 11 euros (11 dollars for you Americans) this is far cheaper and also your not supporting amazon. Which in my opinion is a win-win.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YekwTHIy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2rh3i3h1qmg7uzzd1hzz.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YekwTHIy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2rh3i3h1qmg7uzzd1hzz.JPG" alt="Image description" width="880" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But using Hetzner does come with some downsides that AWS doesn’t have such as Hetzner servers often taking longer than AWS to deploy. Hetzner also has fewer locations/regions with most of Hetzner’s servers being located in Germany and Finland with Hetzner only recently starting to offer servers in America (But only as cloud servers no dedicated servers yet).&lt;/p&gt;

&lt;p&gt;First, start by logging into your Hetzner account and the Hetzner cloud console (&lt;a href="https://console.hetzner.cloud/"&gt;https://console.hetzner.cloud/&lt;/a&gt;). Create a project with whatever name you want it doesn’t hugely matter as only you will see it. On this page, you can also share your project with other teammates and friends and access the Hetzner API if you wish to make your Appwrite installation hyper-scalable.&lt;/p&gt;

&lt;p&gt;Then deploy a server for my server I chose: Nuremberg as the location (Closest to my area), and Debian for the OS this is very important for the commands in this tutorial as they are Debian only, Standard for the type and CX11 for the server specifications, IPV6 for the IP's (As it’s cheaper) and the rest does not matter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y_Pfesnh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lw0sb0pzigtv89baxpvl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y_Pfesnh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lw0sb0pzigtv89baxpvl.gif" alt="Image description" width="498" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating and buying your server (This may take some time) copy your SSH keys and login into the server with your preferred SSH client. As always make sure you keep your SSH keys private and practice good opsec (strong passwords etc). If someone can access the server they can access your Appwrite installation and steal personal data such as your user's passwords and emails. A big no-no! Also if you don’t have an SSH client I personally recommend Termius (I’m not affiliated) as they have a free tier and an education tier for students and the UI is very clean.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8IiQmFe1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3e9j9te9dkr2gmchp9gt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8IiQmFe1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3e9j9te9dkr2gmchp9gt.png" alt="Image description" width="740" height="263"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;(Practice good opsec, please! Comic courtesy of xkcd)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Next, we are going to set up docker on our server, but first, we need to update our server with security patches to make sure that our server is up to date against security vulnerabilities. Then after finishing updating your server (It may take some time like 10’s of minutes) we need to set up the required repository in Debian so Docker will work properly&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-get update

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

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

&lt;/div&gt;



&lt;p&gt;(This updates the server and downloads the required prerequisites for docker).&lt;/p&gt;

&lt;p&gt;Then we are going to add Docker's official GPG keys, GPG keys are how the server validates that the software hasn’t been intercepted by a malicious actor. As each GPG key has a unique public and private key which has to sign each release. However, that’s not hugely important info for us at the moment (Sorry for the tangent) so let’s install and apply it to our docker install with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg


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

&lt;/div&gt;



&lt;p&gt;After that, we are going to install the Docker engine. The docker engine is the basis of every docker container dividing and splitting up the server's resources based on how much resources are allocated to each container. It can even be used to self-host other self-hosted applications but I will not go into that in this tutorial. To install docker-engine we will use this command:&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-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UF2tKKkR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g72flgvef1vbywb4vu8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UF2tKKkR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g72flgvef1vbywb4vu8g.png" alt="Image description" width="733" height="282"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;(Don't do this! Another comic courtesy of xkcd.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to test whether or not docker is properly installed, this command below should print some text and then it will exit the container. If it doesn’t output any text then there is an error with your install of docker and you shouldn’t proceed with this tutorial until fixed. You can either ask for help in the comments and I will try to help you or you can refer to the official docker installation instructions for Debian (Found here: &lt;a href="https://docs.docker.com/engine/install/debian/"&gt;https://docs.docker.com/engine/install/debian/&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;sudo docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It seems like no matter what you do in programming you will always have to face a hello world program. Maybe when someone finally reaches mars it will switch to hello mars. But who knows?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V0kpqizV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/beulovnhjwznbqovvuj8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V0kpqizV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/beulovnhjwznbqovvuj8.gif" alt="Image description" width="650" height="650"&gt;&lt;/a&gt;         &lt;em&gt;(See pictured my backend before appwrite.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Next, we are going to set up the Appwrite Docker container using these simple commands! (I would recommend copying and pasting them as they are very long) If you don't trust me, this command is from the official installation instructions from the Appwrite documentation.&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 -it --rm \ --volume /var/run/docker.sock:/var/run/docker.sock \ --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ --entrypoint="install" \ appwrite/appwrite:1.0.3

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

&lt;/div&gt;



&lt;p&gt;Once the installation is done that’s it! You are good to go with a brilliant way to handle and manage your backend and databases with no extra subscriptions needed. If you did get stuck in this tutorial (Hopefully you didn’t) just leave a comment or just leave a comment about anything! Also while at it I would recommend joining the appwrite discord it’s a great resource and you hear about the appwrite news before anyone else! &lt;a href="https://discord.gg/z8KjVahZJK"&gt;https://discord.gg/z8KjVahZJK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3rQjFV5p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8c4zdethlz6pqs7qulcq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3rQjFV5p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8c4zdethlz6pqs7qulcq.gif" alt="Image description" width="494" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appwritehack</category>
      <category>appwrite</category>
      <category>hetzner</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
