<?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>Forem: Ameni Nuretemo</title>
    <description>The latest articles on Forem by Ameni Nuretemo (@ameni_nuretemo).</description>
    <link>https://forem.com/ameni_nuretemo</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%2F3319804%2F395b4e59-b431-48bb-937e-b79aaf29596c.jpg</url>
      <title>Forem: Ameni Nuretemo</title>
      <link>https://forem.com/ameni_nuretemo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ameni_nuretemo"/>
    <language>en</language>
    <item>
      <title>Building KVM on Debian Linux as a Foundation for Experiments</title>
      <dc:creator>Ameni Nuretemo</dc:creator>
      <pubDate>Wed, 11 Mar 2026 10:20:56 +0000</pubDate>
      <link>https://forem.com/ameni_nuretemo/building-kvm-on-debian-linux-as-a-foundation-for-experiments-5702</link>
      <guid>https://forem.com/ameni_nuretemo/building-kvm-on-debian-linux-as-a-foundation-for-experiments-5702</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Hi everyone. I'm building a "Home Lab" for my technical experiments. In this post, I'll share how to configure KVM and network bridging on Debian 13.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Configuration
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Operating System&lt;/strong&gt;: Debian GNU/Linux 13&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processor&lt;/strong&gt;: 16 × AMD Ryzen 7 7700 8-Core Processor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt;: 32 GiB of RAM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graphics Processor&lt;/strong&gt;: NVIDIA GeForce RTX 3050/PCIe/SSE2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: 2TB SSD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manufacturer&lt;/strong&gt;: Micro-Star International Co., Ltd.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Name&lt;/strong&gt;: MS-7E80&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Verifying Virtualization
&lt;/h1&gt;

&lt;p&gt;Virtualization requires specific CPU features. Please ensure they are enabled in your BIOS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Intel:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Intel VT-x
Intel Virtualization Technology

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For AMD:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SVM
AMD-V

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

&lt;/div&gt;



&lt;p&gt;Set these to &lt;strong&gt;Enabled&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Confirm that &lt;code&gt;SVM Mode&lt;/code&gt; is &lt;code&gt;Enabled&lt;/code&gt; in the BIOS. To verify this within Linux, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;egrep &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'(vmx|svm)'&lt;/span&gt; /proc/cpuinfo

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

&lt;/div&gt;



&lt;p&gt;Since I am using an AMD processor, a value of 1 or higher indicates virtualization is supported. In my case, it returned 16, which corresponds to the number of available logical CPUs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Setting the Working Directory
&lt;/h1&gt;

&lt;p&gt;I have established a rule to create a &lt;code&gt;vm&lt;/code&gt; directory in the &lt;code&gt;$HOME&lt;/code&gt; folder to house all virtual machines.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/vm

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installing KVM + libvirt (The Standard Linux Approach)
&lt;/h2&gt;

&lt;p&gt;Install KVM and the related libvirt packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;qemu-kvm libvirt-daemon-system virt-manager
&lt;span class="nb"&gt;sudo &lt;/span&gt;adduser &lt;span class="nv"&gt;$USER&lt;/span&gt; libvirt

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: Since I added myself to the &lt;code&gt;libvirt&lt;/code&gt; group, a logout and login are required for the changes to take effect.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The virtualization environment is now ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Installations
&lt;/h2&gt;

&lt;p&gt;While not strictly required, I am also installing bridge utilities and tools for creating virtual machines via the command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;bridge-utils virtinst

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  Testing
&lt;/h1&gt;

&lt;p&gt;Let's create the first virtual machine. Download the Debian ISO from &lt;a href="https://www.debian.org" rel="noopener noreferrer"&gt;debian.org&lt;/a&gt;, create an &lt;code&gt;iso&lt;/code&gt; folder within the &lt;code&gt;vm&lt;/code&gt; directory, and store it there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/vm
&lt;span class="nb"&gt;mkdir&lt;/span&gt; ./iso
&lt;span class="nb"&gt;mv&lt;/span&gt; ~/Downloads/debian-13.3.0-amd64-netinst.iso ~/vm/iso

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  Setting Up the Network Bridge
&lt;/h1&gt;

&lt;p&gt;We will configure a network bridge to simplify communication and management between servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure Workflow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a bridge interface.&lt;/li&gt;
&lt;li&gt;Connect the physical NIC to the bridge.&lt;/li&gt;
&lt;li&gt;Migrate the IP configuration to the bridge.&lt;/li&gt;
&lt;li&gt;Restart the connection.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Verifying Network Status
&lt;/h2&gt;

&lt;p&gt;Check the status of &lt;strong&gt;NetworkManager&lt;/strong&gt; with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status NetworkManager

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

&lt;/div&gt;



&lt;p&gt;If it is &lt;code&gt;active&lt;/code&gt;, check the IP status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip a

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

&lt;/div&gt;



&lt;p&gt;Your physical interface (e.g., &lt;code&gt;enp****&lt;/code&gt;) will be displayed. We will convert this into a bridge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create the Bridge&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection add &lt;span class="nb"&gt;type &lt;/span&gt;bridge ifname br0 con-name br0

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Connect Physical NIC to the Bridge&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection add &lt;span class="nb"&gt;type &lt;/span&gt;bridge-slave ifname enp&lt;span class="k"&gt;****&lt;/span&gt; master br0
&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection up bridge-slave-enp&lt;span class="k"&gt;****&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection up br0

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Set the IP on the Bridge&lt;/strong&gt;&lt;br&gt;
I will reuse the current IP: &lt;code&gt;192.168.0.200/24&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection modify br0 ipv4.addresses 192.168.0.200/24
&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection modify br0 ipv4.gateway 192.168.0.1
&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection modify br0 ipv4.method manual

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;DNS:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection modify br0 ipv4.dns 192.168.0.1

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Disable the Original Connection&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection down enp&lt;span class="k"&gt;****&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Activate the Bridge&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nmcli connection up br0

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Success Verification:&lt;/strong&gt;&lt;br&gt;
Run &lt;code&gt;ip a&lt;/code&gt;. You should see &lt;code&gt;br0&lt;/code&gt; with the IP &lt;code&gt;192.168.0.200&lt;/code&gt; and your physical NIC (e.g., &lt;code&gt;enp11s0&lt;/code&gt;) listed with &lt;code&gt;master br0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Once this is complete, you can select &lt;code&gt;network source = br0&lt;/code&gt; when creating a VM in KVM, allowing the VM to obtain an IP (e.g., &lt;code&gt;192.168.0.x&lt;/code&gt;) directly on the local network.&lt;/p&gt;

&lt;h1&gt;
  
  
  Creating a VM
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Launch the &lt;strong&gt;Virtual Machine Manager&lt;/strong&gt;.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0zb9gclxrbelhsn6z39.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0zb9gclxrbelhsn6z39.jpg" alt=" " width="616" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Allocate &lt;strong&gt;Memory&lt;/strong&gt; and &lt;strong&gt;CPU&lt;/strong&gt;.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm04amu2jzumb9nhu9j3n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm04amu2jzumb9nhu9j3n.jpg" alt=" " width="501" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Specify the &lt;strong&gt;Storage location&lt;/strong&gt; (within the &lt;code&gt;vm&lt;/code&gt; folder).
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6x1tl5kdno94smfbha1r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6x1tl5kdno94smfbha1r.jpg" alt=" " width="500" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Specify the &lt;strong&gt;ISO image location&lt;/strong&gt;.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4invh9gr9fsfk1nlqdnp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4invh9gr9fsfk1nlqdnp.jpg" alt=" " width="493" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Perform the &lt;strong&gt;Final Review&lt;/strong&gt; and start the installation.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv67o2t1l65qf76dk1dhw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv67o2t1l65qf76dk1dhw.jpg" alt=" " width="499" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation Complete
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2isem8kt8klmfnvi3a9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2isem8kt8klmfnvi3a9.jpg" alt=" " width="800" height="536"&gt;&lt;/a&gt;&lt;br&gt;
The OS installation will now proceed.&lt;/p&gt;




</description>
      <category>debian</category>
      <category>kvm</category>
      <category>linux</category>
      <category>homelab</category>
    </item>
    <item>
      <title>Easily Build Your Own Private Cloud Storage with Nextcloud and Docker</title>
      <dc:creator>Ameni Nuretemo</dc:creator>
      <pubDate>Mon, 09 Mar 2026 20:46:15 +0000</pubDate>
      <link>https://forem.com/ameni_nuretemo/easily-build-your-own-private-cloud-storage-with-nextcloud-and-docker-1bjc</link>
      <guid>https://forem.com/ameni_nuretemo/easily-build-your-own-private-cloud-storage-with-nextcloud-and-docker-1bjc</guid>
      <description>&lt;h4&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why build your own?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Storing large amounts of data on public cloud services can be expensive.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I wanted to set up my own storage server in a local environment to save costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Why Nextcloud + Docker?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ease of Setup&lt;/strong&gt;: Get up and running quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simple Maintenance&lt;/strong&gt;: Easy to update and manage containers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;2. Environment&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OS&lt;/strong&gt;: Debian Linux&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: A system where Docker and Docker Compose can be installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;3. Step-by-Step Guide&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Docker&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker.io docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a Working Directory&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;nextcloud
&lt;span class="nb"&gt;cd &lt;/span&gt;nextcloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create `docker-compose.yml&lt;/strong&gt;`
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mariadb:10.11&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;--transaction-isolation=READ-COMMITTED --binlog-format=ROW&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;nextcloud_db:/var/lib/mysql&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_ROOT_PASSWORD}&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_PASSWORD}&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_DATABASE}&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_USER}&lt;/span&gt;

&lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud:apache&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;8080:80&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;nextcloud_data:/var/www/html&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_DATABASE}&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_USER}&lt;/span&gt;
      &lt;span class="na"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${MYSQL_PASSWORD}&lt;/span&gt;

    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;nextcloud_db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;nextcloud_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create &lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;change-me
&lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;change-me
&lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nextcloud
&lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nextcloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Launch Containers&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;4. Post-Installation &amp;amp; Operation&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Initial Setup via Browser&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Access &lt;code&gt;http://localhost:8080&lt;/code&gt; and create an admin account.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Most DB settings from your &lt;code&gt;.env&lt;/code&gt; file will be auto-filled. Just double-check them!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Useful Commands&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Status check, Update, Start/Stop, and Logs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5. Conclusion &amp;amp; Security&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal Reflection&lt;/strong&gt;: Using Docker makes maintenance incredibly easy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important Security Note&lt;/strong&gt;: This setup is not encrypted (No SSL). If you plan to access it from the internet, please use a Reverse Proxy or a tool like &lt;strong&gt;Tailscale&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nextcloud</category>
      <category>linux</category>
      <category>debian</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
