ProGet Enterprise offers users the ability to mirror feeds across multiple ProGet Servers, both locally and globally.
Implementing the multi-site replication requires specific feed configurations: one feed must be configured as allow other feeds to replicate with and one or more feeds configured to replicate from external feed.
A simple example would be the replication of a single feed across three ProGet servers: Los Angeles, Tokyo, and Cleveland. Los Angeles acts like the hub and is configured to allow other feeds to replicate with it, and Tokyo and Cleveland are configured to replicate from external feed.
A more complex example would be this: say you have multiple ProGet servers spread across different global locations, and you’d like to have a synchronized feed for all ProGet instances within your organization (New York City, Berlin, Cleveland, Tokyo, Los Angeles, Singapore, Seattle, and London). In this example, New York City is configured to allow other feeds to replicate with it and Berlin, Cleveland, Tokyo, Los Angeles, Singapore, Seattle, and London are configured to replicate from external feed.
Avoid the "Which came first, the chicken or the egg?" dilemma through deletion records. ProGet timestamps when packages are uploaded and deleted, then mirrors the most recent changes when replicated feeds differ during synchronization. For instance, say New York City deletes NuGet package Alpha at 2:00 PM GMT and Singapore adds NuGet Package Beta at 4:00 pm GMT. The mirrored feed would remove Alpha from Singapore and add Beta to New York City creating two identical feeds and replicating the changes across all synchronized feeds. Because the deletion record is stored, the ProGet instance knows that Alpha being deleted is more recent than when it was originally added, ensuring the package was correctly deleted from Singapore and not added back to New York City.
Replication is configured on a feed by feed basis. When replication is enabled, feeds must be configured with the specified feed URL, and for replication from external, the authentication token must be entered. Since this feature is implemented at the feed level, you can decide which specific feed or feeds will be mirrored across instances, providing flexibility for specific organizational needs. If so your organization decides, you may mirror an entire instance of ProGet, inlcuding all of your external and in-house feeds, and in turn have access to all of the same packages on a virtually identical instance.