Authentication in Node.js - #3 Docker Compose for Development

Veröffentlicht am: 23 Dezember 2019
auf dem Kanal: Code Realm
12,345
206

When it comes to provisioning a local dev environment, you have at least 4 choices. One, you can offload all the heavy lifting to a 3rd-party service. For example, you could use Atlas or mLab for MongoDB, and Redis Labs for Redis. Just copy-paste the connection string, and you're ready to go. Otherwise, you could also install mongodb-org and redis-server locally on your machine. This is the most intuitive, yet also most intrusive approach as it directly uses your OS to run both processes.

Another option is to install MongoDB and Redis in a VM such as Vagrant, which would eat up substantial resources to run a full-blown Linux OS alongside your host OS. This is probably an overkill when used for development. Lastly, you can provision both databases with Docker and (optionally) Docker Compose. We'll go with the last option in this tutorial.

First, make sure to install docker and docker-compose on your machine. If you're new to Docker, it will take some time to get used to, but once you've picked on a few simple commands, you can easily spin up light-weight containers for your everyday development. Docker Compose is useful when you need to manage multiple containers under a stack. Just keep in mind that it only works on a single host, and as such is only suited for local development. Don't get too hung up on it, as you'll probably use Kubernetes or Swarm in production anyway.

Sadly, MongoDB image doesn't create an admin user for the initial database, although it's a open issue on GitHub https://github.com/docker-library/mon... To do so, you can map a shell script to the MongoDB entrypoint directory. This could be a JS file as well, except then you won't have access to environment variables https://github.com/docker-library/mon... The shell script needs to authenticate with MongoDB, create an admin user, and grant them write permissions on the initial database. See https://stackoverflow.com/a/53522699 for an example.

One issue that you will run into on Linux (either locally during development or in production after deployment) is directory ownership of the data volume. When you map the data directory from a MongoDB container to a local file-system directory, its ownership changes recursively to an elevated user, such as root. You can find this problem described in these GitHub issues: https://github.com/moby/moby/issues/3124 and https://github.com/moby/moby/issues/2259

To fix this on Linux, before running any docker-compose command (not only up, but also stop, down, etc.), you need to (1) explicitly export UID in the current shell, and (2) make the volume directory (with -p if it already exists). This way data directory is owned by the currently logged-in user (i.e. you) and not an elevated user (i.e. root). Otherwise, its ownership will silently change to root, and you may run into critical errors when re-booting the container stack.

GitHub repo https://github.com/alex996/node-auth


Auf dieser Seite können Sie das Online-Video Authentication in Node.js - #3 Docker Compose for Development mit der Dauer stunde minuten sekunde in guter Qualität ansehen, das der Benutzer Code Realm 23 Dezember 2019 hochgeladen hat, den Link mit Freunden und Bekannten teilen, dieses Video wurde auf Youtube bereits 12,345 Mal angesehen und es wurde von 206 den Zuschauern gefallen. Viel Spaß beim Betrachtenden Zuschauern gefallen!