Deploy Local Package Repositories

June 2020


How did I deploy local package repositories?

Language Package Manager Local Package Repository
C# Nuget BaGet
Node.js NPM npm Enterprise, Verdaccio
PHP Composer Satis
Python pip pypiserver
Ruby RubyGems, bundler Gems Server, Gem in a box, Gemirro

BaGet for C#

BaGet is neither the official NuGet server nor have posted official release version, but it is built by a NuGet Server Developer and it is stable enough at the time of posting.

Verdaccio for Node.js

Verdaccio seems the most preferred local npm registry for those who don’t want to talk to npm’s Sales Rep. Here’s a link to the history of Verdaccio according to it’s current maintainer.

Satis for PHP

Satis is the Composer repository generator. More information on Satis GitHub page. Composer documentation has information on how to add private packages.

PyPiServer for Python

pypiserver is not the official software used by PyPi, that would be Warehouse. But Warehouse does not support being used as a local package manager.

Ruby Gems for Ruby

I am not too familiar with Ruby at the time of writing, but it seems RubyGems has a built in, official, repository while Gem in a box and Gemirro are the more feature rich options. RubyGems’ tutorial even showcase Gem in a box and Gemirro.

Docker

Doker has its own registry available for everyone.

Java

/* Intentionally left blank. */

Why?

  1. Faster download of required packages. This is important for environments that rely heavily on CI/CD. This will lessen time and possibly reduce energy consumption.
  2. Internal packages are built and shared coherently. No more worrying on how to deploy someone else’s code; no more guessing which of your colleague’s branch is latest; or how to revert to a previous version if a shared project’s latest build breaks your code. Most of the package managers mentioned above will let you and your colleagues build and publish your modules with appropriate versioning.
  3. Only shared within your organization. Very important if you don’t necessarily intend to publish your code for the world to see.
  4. Staging environment for actual projects to be shared.