Working with Linux and Docker offers many benefits, but uploading persistent Docker volume backups to Google Drive can be a challenging task.
Installing gdrive on Linux using the tool provided at https://github.com/glotlabs/gdrive is a simple process that can greatly enhance your ability to interact with Google Drive. Before we dive into the installation process, it is important to note that you must first set up the Google Drive API.
Google has made it really easy to create api credentials for own use, just follow these 50 steps……:
- Go to Google Cloud Console
- Create a new project (or select an existing) from the menu
- Search for
drive api
in the search bar and selectGoogle drive api
under the marketplace section - Click to enable
Google Drive API
button - Click on the
Credentials
menu item - Click on the
Configure Consent Screen
button - Select
External
user type (Internal is only available for workspace subscribers) - Click on the
Create
button - Fill out the fields
App name
,User support email
,Developer contact information
with your information; you will need to put the Project ID into the app name (keep the other fields empty) - Click the
Save and continue
button. If you getAn error saving your app has occurred
try changing the project name to something unique - Click the
Add or remove scopes
button - Search for
google drive api
- Select the scopes
.../auth/drive
and.../auth/drive.metadata.readonly
- Click the
Update
button - Click the
Save and continue
button - Click the
Add users
button - Add the email of the user you will use with gdrive
- Click the
Add
button until the sidebar disappears - Click the
Save and continue
button - Click on the
Credentials
menu item again - Click on the
Create credentials
button in the top bar and selectOAuth client ID
- Select application type
Desktop app
and give a name - Click on the
Create
button - You should be presented with a Cliend Id and Client Secret
- Click on
OAuth consent screen
- Click on
Publish app
(to prevent the token from expiring after 7 days) - Click
Confirm
in the dialog
Thats it!
Install binary
- Download the latest binary from the release section
- Unpack and put the binary somewhere in your PATH (i.e.
/usr/local/bin
on linux and macos) - Note that the binary is not code signed and will cause a warning on windows and macos when running. This will be fixed later, but for now you can find a workaround via you favorite search engine.
Add google account to gdrive
- Run
gdrive account add
- This will prompt you for your google Client ID and Client Secret
- Next you will be presented with an url
- Follow the url and give approval for gdrive to access your Drive
- You will be redirected to
http://localhost:8085
(gdrive starts a temporary web server) which completes the setup - Gdrive is now ready to use!
Using gdrive on a remote server
Part of the flow for adding an account to gdrive requires your web browser to access localhost:8085
on the machine that runs gdrive. This makes it tricky to set up accounts on remote servers. The suggested workaround is to add the account on your local machine and import it on the remote server:
- [local] Run
gdrive account add
- [local] Run
gdrive account export <ACCOUNT_NAME>
- [local] Copy the exported archive to the remote server
- [remote] Run
gdrive account import <ARCHIVE_PATH>
Credentials
Gdrive saves your account credentials and tokens under $HOME/.config/gdrive3/
. You don’t usually need to use these files directly, but if someone gets access to them, they will also be able to access your Google Drive. Keep them safe.
Gdrive on virtual machines in the cloud
There are some issues communicating with the Drive API from certain cloud providers. For example on an AWS instance the api returns a lot of 429 Too Many Requests
/ 503 Service Unavailable
/ 502 Bad Gateway
errors while uploading. While the same file uploads without any errors from a Linode instance. Gdrive has retry logic built in for these errors, but it can slow down the upload significantly. To check if you are affected by these errors you can run the upload
command with these flags: --print-chunk-errors
--print-chunk-info
.