Team drive en rclone usando docker en GNU/Linux

Google Drive + Rclone + Docker

En este tutorial configuraremos un team drive de Google en rclone. Los team drives son unidades de equipo generadas desde cuentas corporativas de Google (Gsuite). La peculiaridad de este tipo de unidades es que son virtualmente ilimitadas, es decir, «no se limita el espacio».

En principio solo están disponibles para empresas, sin embargo, no es difícil encontrar en Internet team drives en venta. De manera que muchos usuarios los utilizan para copias de seguridad.

Para poder utilizar nuestra unidad de equipo como si se tratase de un directorio más es donde entra en juego rclone. Además, nos aportará un plus de privacidad ya que el contenido de los team drives puede no ser privado.

Para realizar el despliegue vamos a utilizar docker, ya que nos permite aislar y gestionar el servicio de una manera más segura, limpia y fácil. Por este motivo, configuraremos nuestro team drive en rclone usando docker.

Si queréis prescindir de docker podéis hacerlo, los comandos serán ligeramente diferentes, pero los pasos que vamos a realizar durante la configuración son exactamente iguales.

Descargando la imagen de rclone de docker hub

Utilizaremos la imagen oficial de rclone para docker, la cual podremos descargar ejecutando el comando:

docker pull rclone/rclone

Una vez haya finalizada la descarga, podemos lanzar el contenedor con rclone y generar el archivo de configuración necesario para acceder a nuestro Drive.

Pero antes, vamos a crear un directorio dentro de nuestro directorio personal donde guardar nuestro archivo de configuración.

mkdir ~/rclone-conf

Llega el momento de tener a mano nuestro identificador de cliente para Google Drive, si no sabéis cómo generar uno podéis pasaros por el tutorial que hice al respecto.

Lanzando el contenedor de rclone

Lanzamos el contenedor con el asistente de configuración para generar el fichero de configuración de rclone.

docker run -it --rm -v ~/rclone-conf:/config/rclone rclone/rclone config

Como habéis podido apreciar, hemos montado en el contenedor el directorio que acabamos de crear en la ruta «/config/rclone«. Como resultado, el archivo generado por rclone se guardará dentro de nuestro directorio.

A continuación, os dejo cada una de las preguntas que realiza el configurador y la correspondiente respuesta. En el caso de escribir un nombre, no es necesario que elijáis el mismo que yo.

2019/10/30 18:16:02 NOTICE: Config file "/config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

name> TeamDrive1

Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Box
   \ "box"
 7 / Cache a remote
   \ "cache"
 8 / Citrix Sharefile
   \ "sharefile"
 9 / Dropbox
   \ "dropbox"
10 / Encrypt/Decrypt a remote
   \ "crypt"
11 / FTP Connection
   \ "ftp"
12 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
13 / Google Drive
   \ "drive"
14 / Google Photos
   \ "google photos"
15 / Hubic
   \ "hubic"
16 / JottaCloud
   \ "jottacloud"
17 / Koofr
   \ "koofr"
18 / Local Disk
   \ "local"
19 / Mail.ru Cloud
   \ "mailru"
20 / Mega
   \ "mega"
21 / Microsoft Azure Blob Storage
   \ "azureblob"
22 / Microsoft OneDrive
   \ "onedrive"
23 / OpenDrive
   \ "opendrive"
24 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
25 / Pcloud
   \ "pcloud"
26 / Put.io
   \ "putio"
27 / QingCloud Object Storage
   \ "qingstor"
28 / SSH/SFTP Connection
   \ "sftp"
29 / Transparently chunk/split large files
   \ "chunker"
30 / Union merges the contents of several remotes
   \ "union"
31 / Webdav
   \ "webdav"
32 / Yandex Disk
   \ "yandex"
33 / http Connection
   \ "http"
34 / premiumize.me
   \ "premiumizeme"
Storage> 13

** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id> [VUESTRO ID DE CLIENTE]

Google Application Client Secret
Setting your own is recommended.
Enter a string value. Press Enter for the default ("").
client_secret> [VUESTRO SECRETO DE CLIENTE]

Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1

ID of the root folder
Leave blank normally.

Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.

Note that if this is blank, the first time rclone runs it will fill it
in with the ID of the root folder.

Enter a string value. Press Enter for the default ("").
root_folder_id>

Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default ("").
service_account_file>

Edit advanced config? (y/n)
y) Yes
n) No
y/n> n

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n

If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=1018154267847-mt43mlcnt65rgd0dol808c3m6qdvj4ca.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=kv4FYPZHBirO80165v9cBA
Log in and authorize rclone for access
Enter verification code> [CÓDIGO QUE OS FACILITA LA WEB ANTERIOR]
                                                                                 Configure this as a team drive?
y) Yes
n) No
y/n> y

Fetching team drive list...
Choose a number from below, or type in your own value
 1 / Unidad1
   \ "XXXXXXXXXXXXXXXXXXX"
 2 / Unidad4
   \ "XXXXXXXXXXXXXXXXXXX"
 3 / Unidad3
   \ "XXXXXXXXXXXXXXXXXXX"
 4 / Unidad2
   \ "XXXXXXXXXXXXXXXXXXX"
Enter a Team Drive ID> [ELEGID EL QUE QUERÁIS CONFIGURAR]
--------------------
[TeamDrive1]
type = drive
client_id = XXXXXXXXXXXXXX
client_secret = XXXXXXXXXXXXXX
scope = drive
token = {"access_token":"XXXXXXXXXXXXXX","token_type":"Bearer","refresh_token":"XXXXXXXXXXXXXX","expiry":"XXXXXXXXXXXXXX"}
team_drive = XXXXXXXXXXXXXX
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

Current remotes:

Name                 Type
====                 ====
TeamDrive1           drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Espero que se haya entendido bien cada paso. En caso de que tengáis alguna duda podéis dejarla en los comentarios e intentaremos resolverla entre todos.

Cifrando el contenido de nuestro team drive con rclone

Llegados a este punto, contamos con una unidad de equipo que podemos utilizar en rclone, sin embargo, vamos a añadirle una capa de seguridad, vamos a cifrar todo el contenido que se suba a la nube.

Para lo cual, vamos a ejecutar de nuevo el comando:

docker run -it --rm -v ~/rclone-conf:/config/rclone rclone/rclone config

Ahora debemos decirle a rclone que el contenido de la unidad que acabamos de crear va a ir cifrado, de manera que al subir o bajar contenido a la misma lo cifre/descifre. Además, debemos configurar qué queremos cifrar y cómo.

Yo personalmente elijo cifrar todo:

  • Cifrar los nombres de los directorios.
  • Cifrar los nombres de los archivos.
  • Generar contraseñas de 1024 bits.
  • Generar sal de 1024 bits.
 Current remotes:
 

 Name                 Type
 ====                 ====
 TeamDrive1           drive
 

 e) Edit existing remote
 n) New remote
 d) Delete remote
 r) Rename remote
 c) Copy remote
 s) Set configuration password
 q) Quit config
 e/n/d/r/c/s/q> n

 name> TeamDrive1_crypt

 Type of storage to configure.
 Enter a string value. Press Enter for the default ("").
 Choose a number from below, or type in your own value
  1 / 1Fichier
    \ "fichier"
  2 / Alias for an existing remote
    \ "alias"
  3 / Amazon Drive
    \ "amazon cloud drive"
  4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
    \ "s3"
  5 / Backblaze B2
    \ "b2"
  6 / Box
    \ "box"
  7 / Cache a remote
    \ "cache"
  8 / Citrix Sharefile
    \ "sharefile"
  9 / Dropbox
    \ "dropbox"
 10 / Encrypt/Decrypt a remote
    \ "crypt"
 11 / FTP Connection
    \ "ftp"
 12 / Google Cloud Storage (this is not Google Drive)
    \ "google cloud storage"
 13 / Google Drive
    \ "drive"
 14 / Google Photos
    \ "google photos"
 15 / Hubic
    \ "hubic"
 16 / JottaCloud
    \ "jottacloud"
 17 / Koofr
    \ "koofr"
 18 / Local Disk
    \ "local"
 19 / Mail.ru Cloud
    \ "mailru"
 20 / Mega
    \ "mega"
 21 / Microsoft Azure Blob Storage
    \ "azureblob"
 22 / Microsoft OneDrive
    \ "onedrive"
 23 / OpenDrive
    \ "opendrive"
 24 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
    \ "swift"
 25 / Pcloud
    \ "pcloud"
 26 / Put.io
    \ "putio"
 27 / QingCloud Object Storage
    \ "qingstor"
 28 / SSH/SFTP Connection
    \ "sftp"
 29 / Transparently chunk/split large files
    \ "chunker"
 30 / Union merges the contents of several remotes
    \ "union"
 31 / Webdav
    \ "webdav"
 32 / Yandex Disk
    \ "yandex"
 33 / http Connection
    \ "http"
 34 / premiumize.me
    \ "premiumizeme"
 Storage> 10
 ** See help for crypt backend at: https://rclone.org/crypt/ **
 

 Remote to encrypt/decrypt.
 Normally should contain a ':' and a path, eg "myremote:path/to/dir",
 "myremote:bucket" or maybe "myremote:" (not recommended).
 Enter a string value. Press Enter for the default ("").
 remote> TeamDrive1:

 How to encrypt the filenames.
 Enter a string value. Press Enter for the default ("standard").
 Choose a number from below, or type in your own value
  1 / Don't encrypt the file names.  Adds a ".bin" extension only.
    \ "off"
  2 / Encrypt the filenames see the docs for the details.
    \ "standard"
  3 / Very simple filename obfuscation.
    \ "obfuscate"
 filename_encryption> 2

 Option to either encrypt directory names or leave them intact.
 Enter a boolean value (true or false). Press Enter for the default ("true").
 Choose a number from below, or type in your own value
  1 / Encrypt directory names.
    \ "true"
  2 / Don't encrypt directory names, leave them intact.
    \ "false"
 directory_name_encryption> 1

 Password or pass phrase for encryption.
 y) Yes type in my own password
 g) Generate random password
 n) No leave this optional password blank
 y/g/n> g

 Password strength in bits.
 64 is just about memorable
 128 is secure
 1024 is the maximum
 Bits> 1024

 Your password is: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 Use this password? Please note that an obscured version of this 
 password (and not the password itself) will be stored under your 
 configuration file, so keep this generated password in a safe place.
 y) Yes
 n) No
 y/n> y

 Password or pass phrase for salt. Optional but recommended.
 Should be different to the previous password.
 y) Yes type in my own password
 g) Generate random password
 n) No leave this optional password blank
 y/g/n> g

 Password strength in bits.
 64 is just about memorable
 128 is secure
 1024 is the maximum
 Bits> 1024

 Your password is: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 Use this password? Please note that an obscured version of this 
 password (and not the password itself) will be stored under your 
 configuration file, so keep this generated password in a safe place.
 y) Yes
 n) No
 y/n> y

 Remote config
 --------------------
 [TeamDrive1_crypt]
 type = crypt
 remote = TeamDrive1:
 filename_encryption = standard
 directory_name_encryption = true
 password = *** ENCRYPTED ***
 password2 = *** ENCRYPTED ***
 --------------------
 y) Yes this is OK
 e) Edit this remote
 d) Delete this remote
 y/e/d> y  

 Current remotes:
 

 Name                 Type
 ====                 ====
 TeamDrive1           drive
 TeamDrive1_crypt     crypt
 

 e) Edit existing remote
 n) New remote
 d) Delete remote
 r) Rename remote
 c) Copy remote
 s) Set configuration password
 q) Quit config
 e/n/d/r/c/s/q> q 

Listo, ya tenemos nuestro team drive en rclone usando docker. Ya solo resta montar nuestro team drive como un directorio más y empezar a subir/bajar contenido.

Más información:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.