---
title: "Get Started With Seafile Self-Hosted Cloud Storage"
description: "Get started with your own cloud storage solution. Seafile offers a self-hosted alternative with easy setup, secure file sharing, and data privacy."
canonical: "https://adamtheautomator.com/seafile/"
---

# Get Started With Seafile Self-Hosted Cloud Storage

> Get started with your own cloud storage solution. Seafile offers a self-hosted alternative with easy setup, secure file sharing, and data privacy.

Source: https://adamtheautomator.com/seafile/

---

ATA Learning

Tap to hide

[

ATA Learning

](/)

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Search for:  

*   [](https://twitter.com/adbertram)
*   [](https://github.com/Adam-the-Automator)
*   [](https://www.linkedin.com/company/adam-the-automator-llc)
*   [](/feed/)

![Get Started With Seafile Self-Hosted Cloud Storage](https://adamtheautomator.com/wp-content/uploads/2023/03/seafile.jpg)

# Get Started With Seafile Self-Hosted Cloud Storage

[![](https://secure.gravatar.com/avatar/572a248f516b6d0cd566cb44fdbd9336f30ef95aa0f6d78f118c1f47b1b6d6b7?s=192&d=mm&r=g)Arvid Larson](https://adamtheautomator.com/author/arvid-larson/)13 March 202311 min. read

Categories: [IT Ops](/category/it-ops/)

Tags:[File Management](/tag/file-management/)

Table of Contents

*   [Prerequisites](#prerequisites)
*   [Installing Seafile Dependencies](#installing-seafile-dependencies)
*   [Configuring a MariaDB Root Password](#configuring-a-mariadb-root-password)
*   [Downloading the Seafile Server Source Code](#downloading-the-seafile-server-source-code)
*   [Installing Seafile with MySQL/MariaDB Server](#installing-seafile-with-mysqlmariadb-server)
*   [Configuring Seafile with Custom Domain Name](#configuring-seafile-with-custom-domain-name)
*   [Running Seafile via Systemd](#running-seafile-via-systemd)
*   [Configuring NGINX as a Reverse Proxy](#configuring-nginx-as-a-reverse-proxy)
*   [Accessing Seafile and Uploading Files via a Web Browser](#accessing-seafile-and-uploading-files-via-a-web-browser)
*   [Conclusion](#conclusion)

Storing private data in the cloud has become a popular and convenient way to back up and secure your data. But for a more shareable and collaborative data experience without sacrificing security, consider using a self-hosted [cloud storage system like Seafile](https://www.seafile.com/en/home/).

Seafile allows you to create a cloud storage system with additional data security encryption on your private cloud or local environment. And in this tutorial, you will learn how to install Seafile to share data across devices and your teams.

Stay tuned and take advantage of this sync and share solution!

## Prerequisites

This tutorial comprises hands-on demonstrations. To follow along, ensure you have the following:

*   A Linux server running Ubuntu – This tutorial uses an Ubuntu Server 20.04 with the hostname seafile.
*   A non-root user with sudo privileges.
*   A domain name pointed to your Ubuntu Server IP address – This tutorial uses a domain name called _seafile.atadomain.io_.
*   Generated SSL certificates for your domain name.

## Installing Seafile Dependencies

Seafile is an open-source cloud storage system mainly written in Python Django web framework, which can be run with MySQL/MariaDB and PostgreSQL. But before using Seafile, you must install its dependencies, such as Python database server MySQL/MariaDB and some Python packages.

To install package dependencies for the Seafile server:

1\. Open your terminal, log in via SSH to your server, and run the following [`apt update`](https://linuxize.com/post/how-to-use-apt-command/#updating-package-index-apt-update%3E) command to update and refresh the repository package index.

```bash
sudo apt update
```

![Updating repository](https://adamtheautomator.com/wp-content/uploads/2023/03/image-117.png)

Updating repository

2\. Next, run the following [`apt install`](http://%3Chttps://linuxize.com/post/how-to-use-apt-command/#installing-packages-apt-install%3E) command to install package dependencies like `python3`, `nginx`, `mariadb`, and `memcached`.

```bash
sudo apt install python3 python3-setuptools python3-pip libmysqlclient-dev libffi-dev mariadb-server nginx memcached libmemcached-dev tree -y
```

![Installing packages dependencies](https://adamtheautomator.com/wp-content/uploads/2023/03/image-118.png)

Installing packages dependencies

3\. Now, run the below `pip3` command to `install` Python dependencies for the Seafile server.

```bash
sudo pip3 install --timeout=3600 django==3.2.* Pillow pylibmc captcha jinja2 sqlalchemy==1.4.3 \
    django-pylibmc django-simple-captcha python3-ldap mysqlclient pycryptodome==3.12.0 cffi==1.14.0 lxml
```

![Installing Python dependencies](https://adamtheautomator.com/wp-content/uploads/2023/03/image-119.png)

Installing Python dependencies

## Configuring a MariaDB Root Password

After installing the MariaDB server packages, you must secure your MariaDB deployment from unauthorized login, especially for the default MariaDB root user. How? You will set up the root password of the MariaDB server you will use for the Seafile installation.

To configure a MariaDB root password, you will first log in to the _mysql_ database and set the root password with the following steps:

1\. Run the following `mysql` command to log in to the MariaDB shell.

```bash
sudo mysql -u root -p
```

When prompted for the MariaDB root password, as shown below, press ENTER to continue.

![Logging in to the MariaDB shell](https://adamtheautomator.com/wp-content/uploads/2023/03/image-120.png)

Logging in to the MariaDB shell

2\. Next, run the below query to select the `mysql` database.

```sql
use mysql;
```

![Selecting the default database](https://adamtheautomator.com/wp-content/uploads/2023/03/image-121.png)

Selecting the default database

3\. Now run the following MariaDB queries to set up the password for the MariaDB `root` user and reload table `PRIVILEGES` to apply the changes.

```sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootp4ssw0rd';
FLUSH PRIVILEGES;
```

![Setting a root password](https://adamtheautomator.com/wp-content/uploads/2023/03/image-122.png)

Setting a root password

4, Lastly, run the `quit` command to exit from the MariaDB shell.

![Exiting the MariaDB shell](https://adamtheautomator.com/wp-content/uploads/2023/03/image-123.png)

Exiting the MariaDB shell

## Downloading the Seafile Server Source Code

With a MariaDB root password configured, you can install a Seafile server. But first, you must set up a dedicated user for running Seafile and download the Seafile source code.

Visit the official [Seafile Server](https://www.seafile.com/en/download/) download page and look for your preferred server version. But this tutorial uses the Seafile server 9.0.10 and runs it with the user seafile.

To set up the Seafile server, you will create a directory to download and install the server with the following steps:

1\. Run the below [`useradd`](http://%3Chttps://linux.die.net/man/8/useradd%3E) command, which does not provide output but creates a new user called `seafile`, which you will use to run the Seafile server.

```bash
sudo useradd -d /opt/seafile -s /bin/bash seafile
```

Related:[How to Create User on Ubuntu Linux in Multiple Ways](https://adamtheautomator.com/create-user-on-ubuntu/)

2\. Next, run each command below to create a new directory called `/opt/seafile` with the ownership set to user `seafile`.

These commands do not produce output, but you will later log in as the seafile user to download the Seafile server.

```bash
# Make a directory called /opt/seafile and switch to that directory
mkdir -p /opt/seafile; cd /opt/seafile
# Change ownership of the /opt/seafile directory to the "seafile" user
sudo chown -R seafile: /opt/seafile
```

3\. Run the following commands to log in (`su`) as the `seafile` user and download (`wget`) the Seafile server source code.

```
su - seafile
wget -q https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_9.0.10_x86-64.tar.gz
```

Related:[Install Python Wget and Automate your File Downloads](https://adamtheautomator.com/python-wget/)

Below you can see the Seafile source code extracted to the _seafile-server-9.0.10_ directory.

![Downloading the Seafile server source code](https://adamtheautomator.com/wp-content/uploads/2023/03/image-124.png)

Downloading the Seafile server source code

4\. Once downloaded, run the below commands to extract (`tar`) the source code and verify (`tree`) the content structure.

```bash
tar xf seafile-server_9.0.10_x86-64.tar.gz
tree -L 2
```

Related:[Learn How to Zip and Unzip Files in Linux and be a Zip Master](https://adamtheautomator.com/unzip-files-in-linux/)

![Verifying the Seafile server source codes](https://adamtheautomator.com/wp-content/uploads/2023/03/image-125.png)

Verifying the Seafile server source codes

## Installing Seafile with MySQL/MariaDB Server

Downloading the source code does not automatically install the Seafile server. But after verifying the source code, you can install Seafile with the MariaDB server via the installer script. After installing Seafile, you will also set up an admin user for your Seafile server.

To install Seafile with the MariaDB server:

1\. Run the following commands to execute the Bash script (`setup-seafile-mysql.sh`) to start the Seafile installation and configure Seafile with the MariaDB server.

You will be prompted with some of the Seafile server configurations.

```bash
# Change the working directory to the source code directory 
cd seafile-server-9.0.10/
# Run the Bash script
./setup-seafile-mysql.sh
```

Press ENTER to continue the installation.

![Starting the Seafile installation](https://adamtheautomator.com/wp-content/uploads/2023/03/image-126.png)

Starting the Seafile installation

2\. Next, configure your server with the following:

*   Server Name – Set a name for your Seafile server (i.e., Seafiletest).
*   Domain Name – Set the Seafile server’s IP or domain name (i.e., _seafile.atadomain.io_).
*   Default Port – Leave the default Seafile server port as is.

Once configured, press ENTER to continue.

![Configuring the Seafile server](https://adamtheautomator.com/wp-content/uploads/2023/03/image-128.png)

Configuring the Seafile server

3\. Configure the MariaDB database as follows:

*   Input the number 1 option to set up and create new databases and a new user for Seafile.
*   Leave the database host to **localhost** and the port to **3306** since this example uses a single server.
*   Input the MariaDB server credentials of the root user.
*   Leave the default user name called `seafile`
*   Input the Seafile user’s password twice.
*   Leave the default values for all Seafile databases.

![Configuring the database](https://adamtheautomator.com/wp-content/uploads/2023/03/image-129.png)

Configuring the database

4\. Now, review your selected Seafile configurations, and press ENTER to confirm and continue with the installation.

![Confirming the Seafile configuration](https://adamtheautomator.com/wp-content/uploads/2023/03/image-130.png)

Confirming the Seafile configuration

When the Seafile installation is successful, you will see a similar output to the one below.

![Confirming successful Seafile installation](https://adamtheautomator.com/wp-content/uploads/2023/03/image-131.png)

Confirming successful Seafile installation

5\. Next, run the below `tree` command to check the list of available directories on the _`/opt/seafile`_ directory.

```bash
tree /opt/seafile -L 2
```

You should see the new directory called _**seafile-server-latest**_, which is the main directory of your Seafile installation.

![Verifying Seafile’s installation directory](https://adamtheautomator.com/wp-content/uploads/2023/03/image-132.png)

Verifying Seafile’s installation directory

6\. With Seafile installed, run each command below to start your Seafile server.

```bash
# Switching to the Seafile installation directory
cd /opt/seafile/seafile-server-latest
# Runs the seafile.sh Bash script
./seafile.sh start
# Runs the seahub.sh Bash script
./seahub.sh start
```

![Starting the Seafile server](https://adamtheautomator.com/wp-content/uploads/2023/03/image-133.png)

Starting the Seafile server

7\. When prompted, as shown below, input your admin email address and password to create the admin account. This prompt only shows at the first run of the `seahub.sh` script.

![
Creating the admin account](https://adamtheautomator.com/wp-content/uploads/2023/03/image-137.png)

Creating the admin account

When an admin user is created, you will get an output like the one below, and the Seahub service starts. At this point, your Seafile server is now running on the default port 8082 and 8000.

![Confirming the admin account creation](https://adamtheautomator.com/wp-content/uploads/2023/03/image-134.png)

Confirming the admin account creation

8\. Finally, run the following commands to stop the Seafile server.

Stopping the Seafile server is necessary since you will further configure Seafile with a custom domain name and run Seafile via Systemd in the following section.

```bash
./seafile.sh stop
./seahub.sh stop
```

![Stopping the Seafile server](https://adamtheautomator.com/wp-content/uploads/2023/03/image-136.png)

Stopping the Seafile server

## Configuring Seafile with Custom Domain Name

You have successfully set up your Seafile server, which is excellent. But to make user access more accessible, you will set up a custom domain for your Seafile installation.

To configure Seafile with a custom domain name, you must edit some of Seafile’s configurations as follows:

1\. Open the file _/opt/seafile/conf/ccnet.conf_ using your preferred editor, add your domain name to the `SERVICE_URL` parameter, and save the changes.

For this example, the Seafile server will run at `https://seafile.atadomain.io`, as shown below.

```
SERVICE_URL = https://seafile.atadomain.io
```

Related:[How to Edit Files with a Real PowerShell Text Editor](https://adamtheautomator.com/powershell-text-editor/)

2\. Next, open the `/opt/seafile/conf/seafile.conf` config file, add the parameter `host = 127.0.0.1` to the `[fileserver]` section and save the changes.

This configuration ensures the Seafile fileserver is running `localhost` only.

```
[fileserver]
host = 127.0.0.1
port = 8082
```

3\. Open another config file called `/opt/seafile/conf/seahub_settings.py`, edit the following, and save the changes:

*   Change the default value of the `SERVICE_URL` and `FILE_SERVER_ROOT` parameters with the target domain name of your Seafile server.
*   Add new configurations `CACHES = ...` to integrate Seafile with the Memcached server.

```python
SERVICE_URL = "https://seafile.atadomain.io"

FILE_SERVER_ROOT = 'https://seafile.atadomain.io/seafhttp'

CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
}
```

## Running Seafile via Systemd

After configuring the custom domain, you can start your Seafile server again. But this time, you will create systemd service files for the Seafile and Seahub services to run the Seafile server.

To run your Seafile server via Systemd, follow these steps:

1\. Create a new systemd unit file called _/etc/systemd/system/seafile.service_ with your preferred text editor, which will be used to run the Seafile service.

Next, add the following systemd unit configurations to the _seafile.service_ file. This file is where you set up the `seafile` service to run as a user `seafile` when the MariaDB server runs.

```
[Unit]
Description=Seafile
# Add mysql.service or postgresql.service depending on your database to the line below
After=network.target mariadb.service

[Service]
Type=forking
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
LimitNOFILE=infinity
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target
```

3\. Create another systemd unit file called _/etc/systemd/system/seahub.service_ for running the Seahub service.

Add the following systemd unit configurations setting the `seahub.service` to run after the Seafile service as the `seafile` user.

```
[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
# Change start to start-fastcgi if you wish to run fastcgi
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target
```

4\. Now, run the following `systemctl` command to reload the systemd manager and apply the changes.

Reloading the systemd manager after adding new systemd service/unit files is strongly recommended.

```bash
sudo systemctl daemon-reload
```

Related:[Correct Way of Using Ubuntu systemctl to Control Systemd](https://adamtheautomator.com/ubuntu-systemctl/)

5\. Once reloaded, run the following commands to start and `enable` the `seafile` and `seahub` services.

```bash
sudo systemctl enable --now seafile
sudo systemctl enable --now seahub
```

![Running Seafile as systemd services](https://adamtheautomator.com/wp-content/uploads/2023/03/image-135.png)

Running Seafile as systemd services

6\. Lastly, run each command below to verify the `status` of both the `seafile` and `seahub` services.

```bash
# Check if the Seafile service is enabled and running
sudo systemctl is-enabled seafile
sudo systemctl status seafile
# Check if the Seahub service is enabled and running
sudo systemctl is-enabled seahub
sudo systemctl status seahub
```

When `seafile` and `seahub` services are **enabled** and **running**, you will see output like the ones below.

![Verifying the Seafile service status](https://adamtheautomator.com/wp-content/uploads/2023/03/image-138.png)

Verifying the Seafile service status

![Verifying the Seahub service status](https://adamtheautomator.com/wp-content/uploads/2023/03/image-139.png)

Verifying the Seahub service status

## Configuring NGINX as a Reverse Proxy

For your Seafile server to run with a custom domain, you must set up the web server as a reverse proxy to the `seafile` and `seahub` services. For this example, you will set up and use NGINX as a reverse proxy for the Seafile server with HTTPS enabled.

To run your Seafile server with a custom domain, you must first allow OpenSSH and NGINX in your firewall with the following:

1\. Run the following command to add the `OpenSSH` and `Nginx Full` applications to the UFW firewall.

```bash
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
```

![Allowing OpenSSH and NGINX in the UFW firewall](https://adamtheautomator.com/wp-content/uploads/2023/03/image-140.png)

Allowing OpenSSH and NGINX in the UFW firewall

Related:[How To Set Up the UFW Firewall on Linux](https://adamtheautomator.com/ufw-firewall/)

2\. Next, run the below command to start and `enable` the UFW firewall.

```bash
sudo ufw enable
```

When prompted, input **Y** to confirm. Doing so sets UFW firewall to start automatically upon the system startup.

![Enabling and starting UFW](https://adamtheautomator.com/wp-content/uploads/2023/03/image-141.png)

Enabling and starting UFW

3\. Run the following command to verify the status of the UFW firewall. You should see the UFW is `Status: Active` with the `OpenSSH` and `Nginx Full` applications added.

```bash
sudo ufw status
```

![Verifying UFW status](https://adamtheautomator.com/wp-content/uploads/2023/03/image-142.png)

Verifying UFW status

4\. Create a new NGINX server block configuration file called `/etc/nginx/sites-available/seafile.conf`, and add the following configuration.

This configuration sets up NGINX as a reverse proxy for the Seafile server.

Be sure to change the following accordingly:

*   The `*seafile.atadomain.io*` domain name in the `server_name` parameter.
*   The path of SSL certificates on both the `ssl_certificate` and `ssl_certificate_key` parameters.

```
log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';

server {
    listen       80;
    server_name  seafile.atadomain.io;
    # Forced redirect from HTTP to HTTPS
    rewrite ^ https://$http_host$request_uri? permanent;    
    # Prevents the NGINX version from being displayed in the HTTP response header
    server_tokens off;      
}

server {
    listen 443 ssl http2;
    # Path to your fullchain.pem
    ssl_certificate /etc/letsencrypt/live/seafile.atadomain.io/fullchain.pem;  
    # Path to your privkey.pem  
    ssl_certificate_key /etc/letsencrypt/live/seafile.atadomain.io/privkey.pem;  

    server_tokens off;
    server_name seafile.atadomain.io;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_read_timeout  1200s;

         proxy_set_header   X-Forwarded-Proto https;

         # Used to view/edit office file via Office Online Server
         client_max_body_size 0;

         access_log      /var/log/nginx/seahub.access.log seafileformat;
         error_log       /var/log/nginx/seahub.error.log;
    }

    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        client_max_body_size 0;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout  36000s;
        proxy_read_timeout  36000s;
        proxy_send_timeout  36000s;

        send_timeout  36000s;

        access_log      /var/log/nginx/seafhttp.access.log seafileformat;
        error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
    }
}
```

5\. Now, run the commands below to activate your newly-created server block `/etc/nginx/sites-available/seafile.conf` and verify NGINX configurations.

```bash
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/
sudo nginx -t
```

You will get an output like the one below with proper and correct NGINX configurations.

![](https://adamtheautomator.com/wp-content/uploads/2023/03/image-143.png)

6\. Lastly, run the following `systemctl` command, which does not provide output but restarts the NGINX service to apply the changes.

```bash
sudo systemctl restart nginx
```

## Accessing Seafile and Uploading Files via a Web Browser

With a fully configured NGINX as a reverse proxy for Seafile, you can now access and upload files to your Seafile server. How? You will navigate to your Seafile server’s domain name in a web browser and log in.

1\. Open your web browser and visit the domain name of your Seafile server (i.e., [](https://seafile.atadomain.io/)_[https://seafile.atadomain.io](https://seafile.atadomain.io)_). If all goes well, your browser redirects to the Seafile server login page (step two).

2\. Next, input your admin email address and password, and click **Log In**. If successful, your browser redirects to the Seafile user dashboard (step three).

![Logging in to Seafile](https://adamtheautomator.com/wp-content/uploads/2023/03/image-144.png)

Logging in to Seafile

3\. Click the default library/folder called **My Library** to access it.

![Accessing the default folder](https://adamtheautomator.com/wp-content/uploads/2023/03/image-145.png)

Accessing the default folder

4\. Now, click **Upload** and select the random files you wish to upload.

When the operation is successful, a **File Upload** pop-up window (bottom-right) appears with your files showing the **Uploaded** status.

Once successfully uploaded, you will see your files listed inside the **My Library** folder, as shown below.

![Uploading files to the Seafile server](https://adamtheautomator.com/wp-content/uploads/2023/03/image-146.png)

Uploading files to the Seafile server

## Conclusion

In this tutorial, you have learned how to install Seafile as your cloud storage system on an Ubuntu system with the MariaDB database server secured via the UFW firewall. You have set your Seafile server to be accessible via a web browser by setting a custom domain name with NGINX as a reverse proxy.

Now that you have a fully functional Seafile server, why not install a [Seafile Desktop Syncing client](https://www.seafile.com/en/download/)? Set up [automatic upload and sync](https://help.seafile.com/syncing_client/install_sync/) your important data to the Seafile server, and never worry about losing data!

Share this article

[Share on X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fadamtheautomator.com%2Fseafile%2F&text=Get%20Started%20With%20Seafile%20Self-Hosted%20Cloud%20Storage)[Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fadamtheautomator.com%2Fseafile%2F)[Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fadamtheautomator.com%2Fseafile%2F)

## Related Posts

![](https://adamtheautomator.com/wp-content/uploads/2022/11/How-to-Install-NitroShare-for-Cross-Platform-File-Transfer.jpg)

### [Install NitroShare and Streamline Your File Transfers Today](/nitroshare/)

Simplify cross-platform file transfers with NitroShare. This tutorial guides you through installation and use for fast, effortless file sharing between different operating systems.

![](https://adamtheautomator.com/wp-content/uploads/2021/06/winSCP-command-line.jpg)

### [WinSCP Command-Line Simplified : Your Complete Reference](/winscp-command-line/)

Explore the depths of WinSCP Command-Line in our guide. Master file transfer and automation with expert tips, techniques, and practical examples for users at all levels.

![](https://adamtheautomator.com/wp-content/uploads/2022/11/windows-server-storage.jpg)

### [Getting Started with Windows Server Storage](/windows-server-storage/)

Learn everything you need to know about Windows Server Storage in this in-depth tutorial by ATA Learning and manage your storage like a pro!

## Categories

*   [IT Ops](/category/it-ops/)
*   [Cloud](/category/cloud/)
*   [DevOps](/category/devops/)
*   [Home Ops](/category/home-ops/)
*   [Information Security](/category/infosec/)
*   [Software Development](/category/software-development/)

## Site

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Copyright 2026© ATA Learning | [Privacy Policy](/privacy/)
