Google Colab - duplicate MongoDB Atlas collections
- Details
- Written by Francesco Fusco
- Hits: 0
Copiare i dati da una collection ad un’altra (tra 2 istanze Mongo Atlas)
Spesso ci si trova nella situazione in cui occorre copiare una collection da una istanza Mongo Atlas ad un'altra. Per far questo non c'e' nulla di più facile che ricorrendo a Google Colaboratory (colab.research.google.com). Ecco gli step in pochi passi:
1) Con il browser chrome loggarsi con un account google e poi aprire il tool Colaboratory (https://colab.research.google.com). Lo puoi trovare facilmente anche facendo una ricerca Google con le parole "Google Colab".
2) Google Colab ti consente di creare un notebook Jupiter online. Pe chi non conoscete Jupiter e gli altri tool come Anaconda, etc, basti pensare che un Colab notebook e' una pagina web "attiva" dove puoi pubblicare testo e codice (python) che fai eseguire su una macchina virtuale che Google ti mette a disposizione con circa 110G di disco e 12G di ram. Niente male. Apriremo un channel tu tale tecnologia ma per ora ci limitiamo a dire che e' uno spazio computazionale che puo' eseguire i tuo script (e ne vedremo delle belle!!!)
3) Apri un nuovo notebook e, nella prima casella di codice copia il codice riportato in seguito.
!pip3 install pymongo[srv] !pip3 install pymongo[srv] !pip3 install pymongo[tls] import pymongo import urllib DBNAME1 = "database1" DBURL1 = "mongodb://database1user:This email address is being protected from spambots. You need JavaScript enabled to view it.:27017,"
DBURL1 = DBURL1 + "clustero0-shard-00-01.pc5yo.mongodb.net:27017,clustero0-shard-00-02.pc5yo.mongodb.net:27017/"
DBURL1 = DBURL1 + "database1?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&w=majority" clientdb1 = pymongo.MongoClient(DBURL1) db1 = clientdb[DBNAME1] collection1 = db1["collectiontocopy"] listajson=list(collection1.find({},{"_id":0})) listausername=[] for x in listajson: listausername.append(x) print(listausername) DBNAME2 = "database2" DBURL2 ="mongodb://database2user:" + urllib.parse.quote("PASSWORD2")+"@mydatabase-shard-00-00.ym37r.mongodb.net" DBURL2 = DBURL2 + ":27017,mydatabase-shard-00-01.ym37r.mongodb.net:27017,mydatabase-shard-00-02.ym37r.mongodb.net:" DBURL2 = DBURL2 + "27017/myFirstDatabase?ssl=true&replicaSet=atlas-tztd4m-shard-0&authSource=admin&retryWrites=true&w=majority" clientdb2 = pymongo.MongoClient(DBURL2) db2 = clientdb2[DBNAME2] collection2 = db2["collectiontarget"] collection2.drop() res= collection2.insert_many(listausername) print(res)
dove abbiamo inserito valori indicativi per i nomi dei database, degli utenti e delle password. Le stringhe di connessione le puoi copiare dal pannello di amministrazione di MongoAltlas.
Firebase e Angular
- Details
- Written by Federica Leoni
- Hits: 0
Pubblicazione di una app angular su Firebase
In questa pillola illustreremo come installare su Firebase una app sviluppata con il framework Angular. Una operazione semplicissima ma che si dimentica facilmente ed ogni qual volta che occorre ripeterla dopo aver realizzato un'app, occorre di nuovo google-are e consultare i vari siti per ricordare come si fa e come l'avevamo fatto. Invece ce la siamo appuntata e così quando ci toccherà rifarla, rileggendo la pillola, ci tornerà tutto nella mente.
Gli step sono:
- Creazione progetto su Firebase.
- Loggarsi sulla console firebase (https://console.firebase.google.com/) con una utenza gmail (esempio This email address is being protected from spambots. You need JavaScript enabled to view it.). Segui gli step (creazione progetto → dai il nome al progetto esempio Mioprogetto → clicca “continua” → clicca su default account → creazione progetto avvenuta).
- Preparazione applicazione Angular
- Supposto che abbiamo nella directory Mioprogetto, l’intero progetto Angular
- Con “ng build --prod” o "ng build --configuration production" si costruisce la versione di produzione che viene prodotta nella directory “build/Mioprogetto”. Per cambiare la directory di output vai al paragrafo “Cambiare directory output Angular app”. [Altro spunt: se ti posizioni in questa directory e lanci il comando “http-server -o” viene avviato un web server che ti rende la app disponibile sulla porta 5000 e viene aperto il browser su localhost:5000].
- Aggancio Applicazione con Firebase
- Aprire la command line nella directory di progetto Loggarsi su Firebase “firebase login”. Si apre il popup google che fa scegliere l’account da utilizzare
- Digitare “firebase init” per connette il locale al progetto su Firebase e digitare i seguenti comandi:
- Are you ready to proceed? Digitare “Y”
- Which firebase feature? Selezionare “Hosting”
- What do you want to use as public directory (public): Inserire la cartella che viene costruita con il comando “ng build --prod” (che nel nostro caso e’ “dist/Mioprogetto” )
- Configure as a single-page app (rewrite all urls to /index.html)? Digitare “Y”
- Set up automatic builds and deploys with GitHub? Digitare “N”
- File dist/Omniwatch/index.html already exists. Overwrite? Digitare “N”
- Digitare “firebase deploy”. Il sistema effettuera’ il deploy.
Ti potrai gustare la tua applicazione angular aprendo il browser sulla url che Firebase ha definito per il tuo progetto
Usare Jupiter Notebook con Docker
- Details
- Hits: 0
E' indiscussa la versatilita' e la flessiibilita' dei Jupiter Notebook: uno strumento potentissimo che consente di creare pagine web attive con cui realizzare delle stazioni di regia, di controllo da cui lanciare comandi e check verso i vari componenti di un servizio o di una applicazione. Uno strumento del genere in mano al personale di esercizio, quelle persone che gestiscono la maintenance dei servizi in produzione, consente di raccogliere in un unico punto tutti gli script/comandi da impartire, allegando tanto di documentazione e spiegazione. Il prodotto consente a sviluppatori di creare le proprie pagine attive per consentire al personale di GA (Gestione Applicativa) di verificare il funzionamento del proprio software in collaudo e produzione. Tali notebook, realizzati da sviluppatori, sono utilizzati dal personale di esercizio per effettuare controlli o monitorare il funzionamento di un sistema.
Pero' installare un server jupiter Nootebook puo' creare un problema di sicurezza in quanto su tale pagina possono essere creati e lanciati veri e propri applicativi che accedono a tante componenti in produzione. Per aumentare la protezione, un accorgimento puo' essere quello di utilizzare i jupiter notebook in un container (docker) che viene creato all'occorrenza, al ibsogno, viene avviato, usato e poi viene spento. Inoltre usare un container docker ci risparmia tante operazioni di intallazione.
Vediamo come si fa, quali sono i passi:
1) prerequisito e' avere docker installato sul server
2) scaricare l'immagine docker
$ docker pull jupyter/datascience-notebook
3) Annota l'imageId lanciando il comando
$ docker images
a cui ottieni in risposta l'elenco delle immagini docker con i loro identificativi:
MBPdiFrancesco:controller francescofusco$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jupyter/datascience-notebook latest 5980a037c748 38 hours ago 4.5GB
4) Lancia l'immagine docker con il comando:
$ docker run --rm -p 8088:8088 -v -$(pwd) 5980a037c748
Il comando avvia un notebook server all'interno di un container ed accetta richieste web sulla porta 8088. Allo start viene mostrato il messaggio che suggerisce la url da usare dando indicazione di un token di autenticazione (es. http://127.0.0.1:8888/lab?token=5907a88c4bd0ed1625b44ff2b814d8bd0143444d54431193)
5) Apri il browser e vai alla url http://localhost:8088. Compare la pagina seguente.
6) Inserisci il token del punto 5) e comincia a DIVERTIRTI!!!!
ANNEX
a) Per lanciare il container con la tua password usa il comando
docker run --rm -p 8888:8888 -e JUPYTER_TOKEN="password" <imageid>
b) Per installare librerie python da utilizzare nel notebook occorre loggarsi nel container ed installare le librerie che servono. Per prima cosa occorre conoscere l'identificativo della istanza (non della immagine).
docker ps
L'identificativo evidenziato e' l'id della istanza.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
541a4bf3d128 5980a037c748 "tini -g -- start-no…" 4 hours ago Up 4 hours (healthy) 0.0.0.0:8888->8888/tcp cranky_franklin
c) Entrare nel container ed eseguire la bash shell:
docker exec -it 541a /bin/bash
docker ps
c) Installare le librerie python pandas e numpy ("pip list" per verificare le librerie gia' installate):
pip install pandas numpy