Manage Multiple Google Drives with 9Drive

How to Install 9Drive on Windows 11: Manage Multiple Google Drive Accounts in One Dashboard

Want to manage multiple Google Drive accounts from one dashboard? 9Drive is an open-source storage gateway that lets you connect multiple Google Drive accounts, view storage quotas, upload files and organize them through one web interface.

In this detailed guide, you will learn how to install 9Drive on Windows 11 using Docker Desktop and Docker Compose. We will install the necessary software, configure the environment file, create Google OAuth credentials, connect multiple Google Drive accounts and test the installation.

This tutorial uses the project's Docker deployment, which includes the frontend, backend and MySQL database. You do not need to install Node.js or MySQL separately on Windows for this method.

Install 9Drive on Windows 11 to manage multiple Google Drive accounts
Set up a self-hosted Google Drive management dashboard using 9Drive and Docker Compose.

What Is 9Drive?

9Drive is an open-source storage gateway designed to connect multiple Google Drive accounts to one virtual storage dashboard.

Instead of switching between several Google accounts whenever you need to upload files or check storage, you can use 9Drive to manage connected accounts through one interface.

The application uses a React frontend, a TypeScript backend and a MySQL database. Docker Compose runs the application components together, simplifying the installation process.

Official repository: https://github.com/zenhosta/9drive

License: Apache License 2.0.

✓ Connect multiple Google Drive accounts.

✓ View combined storage quota information.

✓ Upload files through one dashboard.

✓ Route uploads using supported storage policies.

✓ Organize files using virtual folders.

✓ Preview, download, rename and move files.

✓ Synchronize the application's file records with the dedicated Drive folder.

9Drive stores uploaded Google Drive files in a dedicated folder named 9drive. It streams uploaded file contents through the backend to Google Drive rather than permanently storing those uploads on the server.

Important: 9Drive does not merge your accounts into one native Google account. Each connected Google account retains its own storage quota and Google policies.

System Requirements

RequirementWhat you need
Operating systemWindows 11 64-bit
VirtualizationHardware virtualization enabled where required
Linux environmentWSL 2 for the Docker Desktop WSL backend
Container runtimeDocker Desktop with Docker Compose
Version controlGit for Windows, or a browser-based ZIP download
RAM8 GB may work, but 16 GB or more is preferable
Disk spaceSeveral GB available for container images, builds and database data
Google CloudProject with the Google Drive API enabled and an OAuth web client
InternetRequired for downloads, Google OAuth and cloud storage operations

The instructions below use Docker Desktop. The MySQL database is supplied through Docker Compose, so a separate Windows MySQL installation is unnecessary.

Where to Run Each Command

Before starting, understand the difference between the places where you will perform the setup.

LocationWhat you will do there
Administrator PowerShellInstall or repair Windows features and WSL when needed.
Ordinary PowerShellInstall Git, check Docker and run Git commands.
9Drive project directoryRun commands involving .env, Docker Compose and application logs.
Web browserOpen the 9Drive dashboard and authorize Google accounts.
Google Cloud ConsoleEnable the Drive API and create OAuth credentials.
How to open the correct terminal: Press the Windows key, type PowerShell, and choose the appropriate option. For administrator operations, right-click PowerShell and select Run as administrator. For normal project commands, an ordinary PowerShell window is sufficient.

Step 1 — Check Windows and Install WSL

1 Check Your Windows Version

Where to run: Ordinary PowerShell.

winver

A Windows version dialog should appear. Confirm that your installation is supported by the current Docker Desktop release.

2 Check Whether WSL Is Installed

Where to run: Ordinary PowerShell.

wsl --status

If WSL is working, the command will display its status. You can also run:

wsl --version

If the commands work, continue to Step 2. If Windows reports that wsl or wsl.exe is not recognized, follow the installation instructions below.

3 Install WSL If It Is Missing

Where to run: Administrator PowerShell.

Run:

wsl --install

This is Microsoft's standard WSL installation command on supported Windows versions. Follow the prompts and restart Windows if requested.

After restarting, open PowerShell and check:

wsl --status

If Docker Desktop specifically requires an updated WSL installation, use:

wsl --update

If wsl --install also fails because the executable is missing, do not repeatedly run it. Consult Microsoft's official documentation: Install WSL.

Important: Installing WSL may require administrator permissions, virtualization support and a Windows restart. If Windows cannot find wsl.exe, resolve that problem before proceeding with Docker Desktop's WSL backend.

Step 2 — Install Docker Desktop

1 Install Docker Desktop Using Winget

Docker Desktop provides the Docker engine, Docker CLI and Docker Compose needed to run 9Drive.

Where to run: Administrator PowerShell or an elevated Windows Terminal.

First check whether Winget is available:

winget --version

If it displays a version, install Docker Desktop with:

winget install --exact --id Docker.DockerDesktop

Review any installation prompts. If Docker Desktop requires a restart, restart Windows before continuing.

2 Alternative: Install Docker Desktop Manually

If Winget is unavailable or the installation fails, open the official Docker website:

Docker Desktop for Windows installation instructions

Download the appropriate installer, run it and follow the installation wizard. Select the supported WSL 2 backend where applicable.

3 Start Docker Desktop

Open Docker Desktop from the Windows Start menu and wait until the engine has finished starting.

Open a new, ordinary PowerShell window and run:

docker --version
docker compose version
docker info

The first two commands should display version information. The third should return details about the Docker engine. If it reports that the daemon cannot be reached, Docker Desktop is not yet ready or has an underlying configuration problem.

Do not continue until Docker works. The 9Drive installation commands depend on a functioning Docker engine. A successful Docker Desktop installation alone does not prove that the engine has started.

Step 3 — Install Git for Windows

1 Check Whether Git Is Installed

Where to run: Ordinary PowerShell.

git --version

If Git displays a version, you can skip the installation command and continue to Step 4.

2 Install Git Using Winget

Where to run: Ordinary PowerShell or Administrator PowerShell.

winget install --exact --id Git.Git

After installation, close PowerShell, open a new window and verify:

git --version

If Winget is unavailable, download Git from: Git for Windows.

Git is used only to download and update the 9Drive repository. You do not need Git to run the application after the files have been downloaded.

Step 4 — Download the 9Drive Repository

1 Create a Homelab Directory

Where to run: Ordinary PowerShell.

New-Item -ItemType Directory -Force "$HOME\homelab" | Out-Null Set-Location "$HOME\homelab"

These commands create a folder named homelab inside your Windows user profile and move into it.

2 Download 9Drive

Where to run: PowerShell, inside the homelab directory.

git clone https://github.com/zenhosta/9drive.git

After cloning, move into the project directory:

Set-Location "$HOME\homelab\9drive"

Check the files:

Get-ChildItem

You should find the project's Docker Compose file, example environment file and application directories.

homelab
└── 9drive
    ├── backend
    ├── frontend
    ├── docker-compose.yml
    ├── .env.docker.example
    └── README.md

3 Alternative: Download the ZIP

If you do not want to install Git, open the official repository in your browser:

Open 9Drive on GitHub

  1. Click Code.
  2. Choose Download ZIP.
  3. Extract the ZIP archive.
  4. Open the extracted directory containing docker-compose.yml.
  5. Open PowerShell in that directory.

All subsequent project commands must be run from the extracted 9Drive project root unless a step explicitly says otherwise.

Step 5 — Configure the Environment File

1 Copy the Official Example File

Where to run: PowerShell inside the 9Drive project root.

Copy-Item .env.docker.example .env

Check that the file was created:

Test-Path .env

The expected result is:

True

If the result is False, make sure that PowerShell is in the correct directory and that .env.docker.example exists.

2 Open the Environment File

Where to run: PowerShell inside the project root.

notepad .env

The file contains the configuration used by Docker Compose, including database credentials, application secrets, frontend URLs and Google OAuth settings.

The example file includes placeholder passwords and secrets. Replace them before starting the application.

3 Understand the Main Settings

VariablePurpose
MYSQL_ROOT_PASSWORDMySQL root password.
MYSQL_DATABASEApplication database name.
MYSQL_USERApplication database user.
MYSQL_PASSWORDApplication database password.
FRONTEND_URLFrontend URL used by the backend.
VITE_API_URLBackend API URL embedded into the frontend build.
JWT_ACCESS_SECRETSecret used for signing access tokens.
TOKEN_ENCRYPTION_KEYKey used to encrypt sensitive configuration.
GOOGLE_CLIENT_IDGoogle OAuth client identifier.
GOOGLE_CLIENT_SECRETGoogle OAuth client secret.
GOOGLE_REDIRECT_URIGoogle OAuth callback URL.

Step 6 — Generate Secure Secrets

1 Generate a Database Root Password

Where to run: Ordinary PowerShell.

Run this command to generate a random 32-character hexadecimal secret:

$bytes = New-Object byte[] 16; $rng = [System.Security.Cryptography.RandomNumberGenerator]::Create(); $rng.GetBytes($bytes); $secret = [BitConverter]::ToString($bytes).Replace("-", "").ToLowerInvariant(); $rng.Dispose(); Write-Output $secret

Copy the generated value into a password manager temporarily. In .env, replace the example value for MYSQL_ROOT_PASSWORD.

2 Generate the Database User Password

Run the same command again to generate a different random value. Replace MYSQL_PASSWORD with that value.

Keep the database root password and application database password separate.

3 Generate the JWT Secret

Run the following PowerShell command:

[guid]::NewGuid().ToString("N") + [guid]::NewGuid().ToString("N")

Replace the example value of JWT_ACCESS_SECRET with this value.

4 Generate the Encryption Key

The repository requires the encryption key to be exactly 32 characters. Generate another random value using the first command in this section. It produces a 32-character hexadecimal string.

Set the generated value as TOKEN_ENCRYPTION_KEY.

Do not casually change the encryption key after storing OAuth credentials. Changing it without a supported migration can make existing encrypted configuration unreadable. Back up the database and understand the implications before rotating the key.

5 Save the Configuration

Where to edit: The .env file opened in Notepad.

For a local installation, retain these values:

FRONTEND_URL=http://localhost:5173 VITE_API_URL=http://localhost:4000 GOOGLE_REDIRECT_URI=http://localhost:4000/connected-accounts/google/callback

Keep the other environment variables from the example file. Save the file and close Notepad.

Never publish your .env file. It contains secrets that should remain private. Do not upload it to a public repository or include its contents in screenshots.

Step 7 — Configure Google Cloud OAuth

Google OAuth lets 9Drive request authorization to access your Google Drive accounts. You configure this in Google Cloud Console, not Google Search Console.

1 Create a Google Cloud Project

Where to work: Your web browser.

Open Google Cloud Console.

  1. Sign in to Google.
  2. Open the project selector.
  3. Create a project or select an existing one.
  4. Use the same project for the Drive API and OAuth credentials.

2 Enable Google Drive API

Open the API Library: Google Cloud API Library.

  1. Search for Google Drive API.
  2. Open the API page.
  3. Click Enable.
  4. Wait for activation to finish.

3 Configure OAuth Consent

Open the Google Auth Platform or OAuth consent-screen settings. Google's navigation labels can change, so use the current interface.

  1. Set the application name and contact details.
  2. Choose the appropriate audience for your accounts.
  3. Configure the scopes required by 9Drive.
  4. If the app is in Testing mode, add every Google account you intend to connect as a test user.

The repository documents these scopes:

https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile
Review the permissions carefully. The Google Drive scope grants broad access to Drive files. Only authorize accounts if you trust the application and understand the permissions it requests.

4 Add Test Users

If your OAuth application is in Testing mode, add the email address of every Google account you intend to connect.

If a Google account is not permitted to test the application, Google may return an access-denied error.

5 Create OAuth Credentials

Open: Google Cloud Credentials.

  1. Choose Create Credentials.
  2. Select OAuth client ID.
  3. Choose Web application.
  4. Give the client a name.
  5. Add the authorized JavaScript origin below.
http://localhost:5173

Add the authorized redirect URI:

http://localhost:4000/connected-accounts/google/callback

Create the OAuth client and copy the Client ID and Client Secret.

6 Enter Your OAuth Credentials

Where to work: PowerShell in the project root, then Notepad.

notepad .env

Replace the placeholder values in the file:

GOOGLE_CLIENT_ID=your-real-client-id GOOGLE_CLIENT_SECRET=your-real-client-secret GOOGLE_REDIRECT_URI=http://localhost:4000/connected-accounts/google/callback

These are placeholders. Use your real credentials locally, save the file and close Notepad. Do not share the Client Secret.

Step 8 — Validate and Start 9Drive

1 Validate the Docker Configuration

Where to run: PowerShell in the 9Drive project root.

docker compose config --quiet

If the command completes without a configuration error, Docker Compose has accepted the configuration. This does not prove that images will build successfully or that Google OAuth will work.

2 Build and Start the Containers

Where to run: The same PowerShell window, inside the project root.

docker compose up -d --build

This builds the frontend and backend images where required, downloads the MySQL image and starts the application services.

The first build can take several minutes, depending on your connection, CPU and available memory.

3 Wait for Startup

Run:

docker compose ps

Check the status of the frontend, backend and MySQL services. If any service exits or repeatedly restarts, inspect the logs in Step 9 before continuing.

Do not treat a successful build as a completed installation. The application must also start, connect to MySQL, authenticate with Google and pass the upload tests.

Step 9 — Verify the Docker Containers

1 Check the Backend Logs

Where to run: PowerShell in the project root.

docker compose logs --tail=100 backend

Look for database connection failures, migration errors, missing configuration and OAuth initialization warnings.

2 Check the Frontend Logs

docker compose logs --tail=100 frontend

3 Check the MySQL Logs

docker compose logs --tail=100 mysql

The database should initialize successfully. The backend automatically runs the documented production database migrations on startup.

4 Follow Logs in Real Time

docker compose logs -f backend

Press Ctrl+C to stop following the logs. This does not stop the application.

5 Confirm the Local URLs

ServiceURL
Frontendhttp://localhost:5173
Backendhttp://localhost:4000
MySQLPort 3306

The frontend is the address you normally open in your browser. The backend and database operate behind the scenes.

Step 10 — Open the Dashboard

1 Open 9Drive in Your Browser

Where to work: Your web browser on the Windows PC.

http://localhost:5173

If the frontend is running correctly, the 9Drive interface should appear.

2 Register or Sign In

The repository documents email/password authentication and Google sign-in. Follow the registration or sign-in option available in the dashboard.

If Google sign-in fails, check the OAuth settings and backend logs. If you use email/password registration, reCAPTCHA may also be required if it has been enabled.

Step 11 — Connect Multiple Google Drive Accounts

1 Connect the First Account

The repository documents Google sign-in as a way to connect the first Drive account automatically.

Alternatively, sign in using email/password and use the Drive connection workflow in Settings.

2 Connect Additional Accounts

  1. Open Settings in the dashboard.
  2. Find the connected Drive accounts section.
  3. Choose Connect Drive.
  4. Select the intended Google account.
  5. Review and approve the requested permissions.
  6. Return to 9Drive and verify that the account appears.
  7. Repeat for each additional account.

3 Verify the Storage Summary

Open the Quota Tracker or storage summary and check whether the connected accounts and their quota information appear.

If an account is missing, confirm that Google authorization completed successfully and inspect the backend logs.

Step 12 — Test Uploads and Storage Quotas

1 Create a Sample File

Where to run: PowerShell.

"9Drive test upload" | Set-Content -Path "$HOME\9drive-test.txt"

2 Upload the File

Open 9Drive in the browser, navigate to the file-management section and upload the test file. Wait until the upload is complete.

3 Verify the Destination

Open the relevant Google Drive account and check its dedicated 9drive folder. Confirm that the uploaded file appears.

4 Test File Operations

✓ View the uploaded file.

✓ Download the file.

✓ Open the downloaded copy.

✓ Rename the sample file.

✓ Move it to a virtual folder.

✓ Check the quota summary.

Use only sample files until you have verified the application. Avoid testing deletion or bulk operations with important documents.

5 Test Synchronization

The repository documents a manual synchronization feature that updates MySQL file records from the contents of the Google Drive 9drive folder.

Use the documented Sync Drive action in the All Files section to test this feature.

Step 13 — Stop, Restart and Update 9Drive

1 Stop the Containers

Where to run: PowerShell in the project root.

docker compose down

This stops and removes the Compose containers and network. The named MySQL data volume is normally retained.

2 Start the Application Again

docker compose up -d

Check the status:

docker compose ps

3 Update OAuth Credentials

If you change the Google OAuth values in .env after the containers are already running, rebuild or restart as appropriate. The repository documents this command for reseeding the global OAuth configuration:

docker compose exec backend npm run seed:google-config

Run it from the project root while the backend container is running. It stores the configured Google OAuth values in MySQL as encrypted global configuration.

4 Update the Application

Before updating, back up the database and review the repository's recent changes. If you cloned the project using Git, check the working tree:

git status

Follow the repository's update and migration instructions before pulling new code or rebuilding the containers.

docker compose up -d --build
Never use docker compose down -v for a normal restart. The -v option removes named volumes and can delete the MySQL database data. Use it only when you deliberately intend to remove the stored application data.

Troubleshooting Common Errors

Problem 1: Winget is not recognized

Winget may not be installed or available in your Windows environment. Use the official Docker Desktop or Git for Windows download pages instead of repeatedly running the Winget command.

Problem 2: WSL is not recognized

This is a Windows/WSL problem, not a 9Drive error. Follow Microsoft's official WSL installation instructions and resolve any required Windows feature or virtualization problems before continuing.

Problem 3: Docker is not recognized

Install Docker Desktop, then open a new PowerShell window and run docker --version. If the command is still unavailable, verify the installation and PATH configuration.

Problem 4: Docker cannot connect to the engine

Open Docker Desktop and wait for it to finish starting. Run docker info again. If the daemon is unavailable, inspect Docker Desktop's error messages and WSL configuration.

Problem 5: The environment file is missing

Confirm that you are in the 9Drive project root and that .env.docker.example exists. Then run:

Copy-Item .env.docker.example .env

Problem 6: A port is already allocated

Run:

docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"

Identify the conflicting service before changing anything. If you change application ports, update the relevant frontend and OAuth settings as well.

Problem 7: MySQL does not start

Run:

docker compose logs --tail=100 mysql

Check for database password errors, disk-space problems and initialization failures. Do not delete the database volume as your first troubleshooting step.

Problem 8: Google reports redirect_uri_mismatch

Verify that Google Cloud contains this exact authorized redirect URI:

http://localhost:4000/connected-accounts/google/callback

Check the protocol, hostname, port and callback path. They must match the URI configured in the application.

Problem 9: Google reports access_denied

If the OAuth application is in Testing mode, add the account as a test user. Also check the OAuth audience, consent-screen settings and Drive API activation.

Problem 10: The dashboard opens but Drive connection fails

Check the OAuth Client ID, Client Secret, Google Drive API and callback URI. Inspect the backend logs:

docker compose logs --tail=100 backend

Problem 11: The application is slow

The Docker image build, MySQL database and application processes consume memory. Close unnecessary programs, avoid simultaneous builds and monitor available RAM and disk space. An 8 GB system may be constrained if other homelab services are running.

Security and Privacy

  • Generate unique database passwords and application secrets.
  • Keep the .env file private.
  • Review Google Drive permissions before authorizing accounts.
  • Test the application using non-sensitive files.
  • Back up the database and protect the backup.
  • Keep Windows, Docker Desktop and 9Drive updated.
  • Do not expose MySQL publicly.
  • Do not expose the dashboard to the internet without appropriate authentication, HTTPS and network protections.
  • Review connected Google accounts and revoke access when necessary.
Important: The default Docker Compose configuration publishes application ports on the Windows host. Do not assume that using localhost in your browser means the services are automatically inaccessible from other devices. Review host port bindings and Windows Firewall rules before enabling remote access.

Frequently Asked Questions

Do I need to install Node.js?

Not for this Docker Compose installation. Node.js and npm are used by the application build process inside the Docker environment. They are required if you choose the separate manual development installation instead.

Do I need to install MySQL separately?

No. The Docker Compose deployment starts a MySQL 8.4 container and configures the backend to connect to it.

Can I connect three or more Google Drive accounts?

The application is designed to manage multiple Google Drive accounts. Connect each account through the supported workflow and verify that its quota and access appear in the dashboard.

Can I use 9Drive when my PC is off?

No. A self-hosted installation depends on the PC and its Docker services being available. The dashboard will be unavailable while the host is powered off.

Is the installation guaranteed to work?

No installation guide can guarantee success on every computer. Windows configuration, virtualization, port conflicts, Google OAuth restrictions, network conditions and repository updates can affect the result. Follow the verification steps and resolve errors before using important files.

Conclusion

9Drive can provide a unified dashboard for multiple Google Drive accounts on your Windows 11 homelab. Docker Compose simplifies the deployment by running the frontend, backend and MySQL database together.

The most important steps are to prepare Windows and Docker Desktop, download the official repository, configure the environment file, create Google OAuth credentials and verify that uploads work correctly.

Recommended next step: Install the prerequisites first, then follow the installation in order. Test the application locally using sample files before connecting important accounts or configuring remote access.

Verification note: The commands and settings in this article have been checked against the published 9Drive README, Docker Compose configuration and example environment file. They have not been executed end-to-end on a physical Windows 11 computer while preparing this article. Configuration validation is not the same as a successful installation. Always consult the current official documentation if a command or configuration changes.

Official references: 9Drive repository | Docker Compose configuration | Docker environment example | Docker Desktop installation | Microsoft WSL guide | Google Cloud Console

Post a Comment

Previous Post Next Post