How to get a unified web interface to manage your files stored on S3, FTP, Google Drive, OneDrive and more?

Since few months now, I was looking for a simple and functional file manager for multiple backends, but mainly for any S3 compliant bucket (AWS, Digital Ocean, Alibaba OSS, etc). The main idea was to be able to use and play training videos from anywhere and quickly as possible, using the S3 protocol and its speed.

First, I've tried to connect my bucket to a standalone Nextcloud instance, as they're offering an S3 compatibility. But their integration was lacking of features, and all contents were so slow to load, even for small files. Then, I've continued my searches on GitHub during hours and hours... Then, I've found the perfect project: Alist.

Alist is an open-source project founded by Xhofe, a Chinese developer based in Wuhan and mainly specialized in Go and Typescript. This software was fully created using Golang, which is an excellent point for this software compared to Nextcloud which is mainly developed in PHP.

-have an available VM
-have basic skills in technical English

Warning: please note that on this tutorial, the software will be installed on a official dockerized version. If you're not familiar with Docker, you can still launch an installation using a one-click script available here (Chinese version).

Step 1: Login and prepare your environment

First, let's update and upgrade packages installed on your instance, as usual.

apt-get update -y && apt-get upgrade -y

Next, we just have to install Docker package, as the software can be launched using a simple Docker container.

apt-get install -y 
# On Ubuntu 20.04

Again, if you're using another OS, have a look at official Docker documentation available here.

By default, on this tutorial, we will simply expose this software using a public IPv4, and specific port. For self-hosting purposes, I strongly recommend you to use a reverse proxy, as Nginx Proxy Manager, or Traefik.

Step 2: Pull image, and launch the container and get default password

The main advantage of this software is that using only one command, you can make it fully deployed! Let's do that:

docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest

If you want to modify any option, feel free to do it, like modifying the public port on the main Docker network, or just modifying the container name.

Let's check that your container is up and in a healthy state:

docker ps

Then, you may get an output like this one (except the 4 days thing):

So, here we are, our Alist container is up! Now just before connecting to the WebUI, we need to get the administrator password. Please note that Alist automatically generate a password when launching the container.

To recover the password, just perform:

docker exec -it alist ./alist -password
# Don't forget to change "alist" after the -it flag if you've changed the container name!

Then, you will get a similar output:

And now, we're fully ready to access to Alist WebUI.

Step 3: Discover WebUI, and access to administration side

Now, access to http://YourIPv4:5244/@manage/login or associated URL if you're using a reverse proxy.

Then, enter the password that you've previously obtained, on the previous step, and you will get a page like this one:

This page will allow you to modify the "visual" part of Alist (frontend). In few clicks, you will be able to edit color scheme, page title, logo, favicon, add a markdown file, as a readme, and customize other settings.

Please note that the backend page, will allow you to edit password, or configure WebDAV server credentials, but that's not the point here.

Step 4: Add your first storage account: S3 compatible bucket

Any popular software is usually calling S3, FTP, Google Drive, etc "a storage backend". But Alist is different on this point. Theses services are called "Storage Accounts". That's a simple principle that you must understand before using Alist.

Click on the left menu to "Accounts" section, and then click on "Add" blue button.

In my case, I will use a Scaleway S3 bucket, and I will need these details:
-my bucket name -> add it to "bucket" input
-my S3 regional endpoint -> add it to "endpoint" input
-my S3 region acronym -> add it to "region"
-my access key -> add it to "access key"
-my secret key -> add it to "access secret"

Please note that "Name" input is just the name of the root folder of your storage account, so you're free to choose it.

Then, once you've performed these modifications, you will have that:

Step 5: Add another storage account: FTP

Now, I want to use my FTP server, as FTP is also supported by Alist.

-my ftp host and port -> add it to "ftp host url" input and add port like this ""
-my ftp username -> add it to "username" input
-my ftp password -> add it to "password" input

Again, the "Name" input is just the name of the root folder of your storage account.
In my case, I will choose "My FTP server - Movies".

Step 6: Let's check that everything works...

As we can expect, that's working well!

The listing is working, and we can easily upload files, watch videos using the built-in player, move files to another folder/storage account, and more! The only missing feature that may be missing, are the S3 storage classes related actions (transfer, restore).