chuck
chuck copied to clipboard
10x Shiny App with Chuck Norris jokes
Chuck
Chuck is a 10x Shiny app designed as a playground for deploying Shiny apps to Docker / Kubernetes.
It contains a Shiny app that needs a Mongo DB backend to work. The connection information are passed with environment variables.
The app simply pulls a random Joke from the Chuck Norris API (http://api.icndb.com/jokes/random), and allow you to save it to the mongo db instance, or skip.
The UI also allows you to retrieve information from the MongoDB instance.
Infrastructure
chuck
The Shiny apps that reads and write in a mongo instance at :
mongo_port <- Sys.getenv("MONGOPORT", 27017)
mongo_url <- Sys.getenv("MONGOURL", "mongodb://127.0.0.1")
mongo_db <- Sys.getenv("MONGODB", "chuck")
mongo_collection <- Sys.getenv("MONGOCOLLECTION", "norris")
launch_mongo(
collection = mongo_collection,
db = mongo_db,
url = sprintf(
"%s:%s",
mongo_url,
mongo_port
)
)
Mongo
docker run -v $(pwd)/db:/data/db -p 12334:27017 -d mongo:3.4
Local Deployment
Build
git clone https://github.com/ColinFay/chuck && cd chuck && docker build -t colinfay/chuck .
# OR
docker pull colinfay/chuck
docker pull mongo:3.4
Launch
docker network create chucknet
docker run -v $(pwd)/db:/data/db -p 27017:27017 -d --name mongo --net chucknet mongo:3.4
docker run -e MONGOPORT=27017 -e MONGOURL=mongo -e MONGODB=pouet -e MONGOCOLLECTION=pouet -p 3838:3838 --name chuck --net chucknet -d colinfay/chuck && sleep 2 && open http://localhost:3838
# TRY ANOTHER MONGODB & SHINY PORT
docker run -e PORT=1234 -e MONGOPORT=27017 -e MONGOURL=mongo -e MONGODB=pif -e MONGOCOLLECTION=paf -p 1234:1234 --name chuckbis --net chucknet -d colinfay/chuck && sleep 2 && open http://localhost:1234
Stop
docker stop chuck && docker rm chuck
docker stop chuckbis && docker rm chuckbis
docker stop mongo && docker rm mongo && rm -rf $(pwd)/db
docker network rm chucknet
Deploy on GKE
Create Cluster
Open Cloud Shell
- Open it in your project, for ex
gcloud container clusters get-credentials my-first-cluster-1 --zone us-central1-c --project bla-bla-12345
cd chuck/
kubectl apply -f kube/
kubectl get pods
-
Go to services & Ingress, create the ingress for Chuck shiny
-
Wait for ingress to be ready