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.
- What Is 9Drive?
- System Requirements
- Where to Run Each Command
- Step 1 — Check Windows and Install WSL
- Step 2 — Install Docker Desktop
- Step 3 — Install Git for Windows
- Step 4 — Download the 9Drive Repository
- Step 5 — Configure the Environment File
- Step 6 — Generate Secure Secrets
- Step 7 — Configure Google Cloud OAuth
- Step 8 — Validate and Start 9Drive
- Step 9 — Verify the Docker Containers
- Step 10 — Open the Dashboard
- Step 11 — Connect Multiple Google Drive Accounts
- Step 12 — Test Uploads and Storage Quotas
- Step 13 — Stop, Restart and Update 9Drive
- Troubleshooting Common Errors
- Security and Privacy
- Frequently Asked Questions
- Conclusion
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.
✓ 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.
System Requirements
| Requirement | What you need |
|---|---|
| Operating system | Windows 11 64-bit |
| Virtualization | Hardware virtualization enabled where required |
| Linux environment | WSL 2 for the Docker Desktop WSL backend |
| Container runtime | Docker Desktop with Docker Compose |
| Version control | Git for Windows, or a browser-based ZIP download |
| RAM | 8 GB may work, but 16 GB or more is preferable |
| Disk space | Several GB available for container images, builds and database data |
| Google Cloud | Project with the Google Drive API enabled and an OAuth web client |
| Internet | Required 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.
| Location | What you will do there |
|---|---|
| Administrator PowerShell | Install or repair Windows features and WSL when needed. |
| Ordinary PowerShell | Install Git, check Docker and run Git commands. |
| 9Drive project directory | Run commands involving .env, Docker Compose and application logs. |
| Web browser | Open the 9Drive dashboard and authorize Google accounts. |
| Google Cloud Console | Enable the Drive API and create OAuth credentials. |
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.
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.
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:
- Click Code.
- Choose Download ZIP.
- Extract the ZIP archive.
- Open the extracted directory containing
docker-compose.yml. - 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
| Variable | Purpose |
|---|---|
MYSQL_ROOT_PASSWORD | MySQL root password. |
MYSQL_DATABASE | Application database name. |
MYSQL_USER | Application database user. |
MYSQL_PASSWORD | Application database password. |
FRONTEND_URL | Frontend URL used by the backend. |
VITE_API_URL | Backend API URL embedded into the frontend build. |
JWT_ACCESS_SECRET | Secret used for signing access tokens. |
TOKEN_ENCRYPTION_KEY | Key used to encrypt sensitive configuration. |
GOOGLE_CLIENT_ID | Google OAuth client identifier. |
GOOGLE_CLIENT_SECRET | Google OAuth client secret. |
GOOGLE_REDIRECT_URI | Google 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.
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.
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.
- Sign in to Google.
- Open the project selector.
- Create a project or select an existing one.
- Use the same project for the Drive API and OAuth credentials.
2 Enable Google Drive API
Open the API Library: Google Cloud API Library.
- Search for Google Drive API.
- Open the API page.
- Click Enable.
- 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.
- Set the application name and contact details.
- Choose the appropriate audience for your accounts.
- Configure the scopes required by 9Drive.
- 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
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.
- Choose Create Credentials.
- Select OAuth client ID.
- Choose Web application.
- Give the client a name.
- 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.
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
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend | http://localhost:4000 |
| MySQL | Port 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
- Open Settings in the dashboard.
- Find the connected Drive accounts section.
- Choose Connect Drive.
- Select the intended Google account.
- Review and approve the requested permissions.
- Return to 9Drive and verify that the account appears.
- 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
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
.envfile 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.
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