Hello; for this, or really any other Dockerized web application, you can setup a reverse proxy. There are a ton of ways to do this, but I'd suggest to search for "How to Configure a Nginx as a HTTPS Reverse Proxy" and see which option(s) make sense for your environment
Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.
If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!
Posts
-
RE: Running proget in a container with SSL
-
RE: Package Upload Information
This would be captured in an event (Admin > ProGet Event Log); the UI doesn't currently support package-level queries (you can filter a few other ways), but you could do a database query pretty easily...
SELECT * FROM [EventOccurrences] WHERE [Event_Code] = 'PKGADD' AND [Feed_Id] = 2 AND [Details_Xml].value('(/Details/@Package_Name)[1]', 'varchar(max)') LIKE 'Carbon' AND [Details_Xml].value('(/Details/@Package_Version)[1]', 'varchar(max)') LIKE '2.9.0' -
RE: Running Proget using GMSA
Hello; all versions of ProGet support gMSA. From the application (ProGet's) perspective, it's just a regular user.
-
RE: registry.npmjs.org connector requires authentication - why?
I'll start with the easy one; connectors are "read only", there is no mechanism to push a package to a connector in ProGet.
As for authentication, I really don't know. That's weird, and it's definitely nothing in ProGet.
The 401 could be coming from a proxy server (inside your network) or from
registry.npmjs.orgitself, and there's no way to know within ProGet which it is.-
I can't imagine it's a proxy server that somehow works with a npmjs.org username/password. But, maybe it is.
-
I don't know why
registry.nmpjs.orgwould send you a 401. Other users haven't experienced this, and I just tested it on a brand new instance myself... and the connector worked just fine. There is talk of throttling large organizations, so maybe it's related to them blocking your IP or something?
It could have also just been a temporary glitch, somewere. Maybe if you remove authentication, it will work.
ABout the only way to diagnose this would be to attach ProGet to a tool like Fiddler or WireShark, so you can see the requests PRoGet makes, then reproduce those exact same requests, and either reach out to your internal IT folks or try your luck with npmjs.
-
-
RE: Performance docs/case studies
Hello;
Your best metric is going to be your users; if they're complaining it's slow, then it's probably too slow. My guess is that it's intermittant (during peak times).
But in any case, it's not about the number of packages (a micro server can easily serve millions of packages nearly instantly), it's about the number of simultaneous connections (requests) to the server, and the features you've enabled (like license checking, etc).
It sounds like you've got a single "2 core instance with 8gb of ram" server; while you can try to increase the hardware, the bottleneck is most likely network related; a single server might not just be enough to keep up with the traffic from your developers. Keep in mind that "plain old NPM" (i.e. registry.npmjs.org) runs on a massive, dedicated data center and is heavily cached (basically read-only).
The ProGet Free to ProGet Enterprise article contains some general guidance that might help answer your questions:
- High Performance: 1 Server per 50 Developers. The network never slows down, never crashes.
- Average Performance: 1 Server per 100 Developers. The network slows down and drops productivity 10% on average during peak times daily.
- Acceptable Performance: 1 Server per 200 Developers. The network slows down and drops productivity 10-30% during peak times daily.
- Unacceptable Performance: 1 Server per 250+ Developers. The network is unstable and crashes.
You can try disabling connectors, disabling license checking, disabling vulnerability scanning -- but those are really important features, so your best bet will be to plan for a load-balanced scenario.
See How to Prevent Server Overload in ProGet to learn more.
-
RE: Cloud Storage for Proget, Did you plan to support Google Cloud Storage in the future ?
Hello; this is the first such request for GCP. These are extensible components, and it's possible we can support it very easily -- but we like to partner with customers, since we have very little knowledge about GCP and like to make sure it works in the field before making it public.
The best way to get this rolling would be to submit a feature request, and ideally bring it up with your technical account manager to see if it can get escalated.
-
RE: Displaying different version in Asset doesn't work correctly in 2.2.7
Hello; thank for the report I was able to confirm this is an issue (OT-350), and we'll get it fixed ASAP! Perhaps even this next maintenance release
In the mean time, you can manual append &version=X to the querystring if you need to see the previous version.
-
RE: Uninstall of Otter Management installer
The uninstaller found within the traditional installer (i.e. not the Inedo Hub) can be a bit tricky to debug... this is one of the many reasons behind building the Inedo Hub. We will likely only support the Hub next year.
If you're not getting any errors when you run the installer, the easiest way to diagnose the uninstaller is by following the code. It may be a missing registry key, permissions, etc.
You can also use the code to see exactly what needs to be uninstalled, should you need to do it manually.
public static void Uninstall(UninstallOptions options) { string servicePath; string webPath; try { GetRegistryInfo(out servicePath, out webPath); } catch { return; } string connectionString; try { GetServiceInfo(servicePath, out connectionString); } catch { return; } StopService("INEDOOTTERSVC"); StopService("INEDOOTTERWEBSVC"); RunProcess(Path.Combine(servicePath, "Otter.Service.exe"), "uninstall"); RunProcess(Path.Combine(servicePath, "Otter.Service.exe"), "uninstallweb"); try { IIS.Current.DeleteWebSite("Otter"); } catch { } try { IIS.Current.DeleteAppPool("OtterAppPool"); } catch { } Thread.Sleep(5000); DeleteDirectory(webPath); DeleteDirectory(servicePath); if (options.DeleteDatabase && !string.IsNullOrWhiteSpace(connectionString)) { try { var connStringBuilder = new SqlConnectionStringBuilder(connectionString); var dbName = connStringBuilder.InitialCatalog; if (!string.IsNullOrWhiteSpace(dbName)) { connStringBuilder.InitialCatalog = string.Empty; using (var conn = new SqlConnection(connStringBuilder.ToString())) { conn.Open(); using (var cmd = new SqlCommand(string.Format("DROP DATABASE [{0}]", dbName), conn)) { cmd.ExecuteNonQuery(); } } } } catch { } } Registry.LocalMachine.DeleteSubKeyTree(@"SOFTWARE\Inedo\Otter", false); Registry.LocalMachine.DeleteSubKeyTree(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InedoOtter", false); DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu), @"Inedo\Otter")); try { Directory.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu), "Inedo"), false); } catch { } FinishUninstall(); } private static void GetRegistryInfo(out string servicePath, out string webPath) { using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Inedo\Otter", false)) { servicePath = (string)key.GetValue("ServicePath"); webPath = (string)key.GetValue("WebPath"); } } private static void GetServiceInfo(string servicePath, out string connectionString) { var xdoc = XDocument.Load(Path.Combine(servicePath, "Otter.Service.exe.config")); connectionString = xdoc .Element("configuration") .Element("appSettings") .Elements("add") .Where(s => (string)s.Attribute("key") == "InedoLib.DbConnectionString") .Select(s => (string)s.Attribute("value")) .First(); } -
RE: Inedo.com security
We don't have a bug bounty program, but please submit a ticket if you find anything and we will immediately address it.
-
RE: Proget Deployment Tab Pagination and order by date desc
Hi Fabrice, can you open a feature request for this? It's a ticket, and we can more easily track/prioritize it on our end this way.
We generally avoid just adding "pagination and order by" in data lists because it usually means you're having to click through page after page and play around with order to find what you're looking for. We'd like to make it much easier :)
So to do that, we'd love to learn more about the use case, because we have a feature on our roadmap to give a lot more insight into "which project uses a component", and I think you're definitely on the right track by using those headers.
So screenshots, etc., would be great (and having this tracked in that feature request is so much simpler for us to manage internally).
We can update this post once we have more insight, and if anyone is curious we can just reply with more info here :)
-
RE: Feature Request- Server Import Improvment
hi Jonathan, can you help me with a test case on the duplicate server issue?
Are you trying do an infrastructure import that has the same server name defined twice in the same JSON document?
-
RE: Feature Request- Server Import Improvment
hi Jonathan,
I haven't forgotten about this, but are finally clearing out our backlog,...
-
What type of errors are you encountering?
-
Can you be more specific about the "overwrite existing"? What are you importing, and what would you like? Currently it should be "merged" for the most part, depending on what you're wanting to merge...
Alana
-
-
RE: ProGet platform offering
We have a lot of customers who host an instance of ProGet in the cloud, but we do not offer hosting at this time for a number of reasons:
- better control of infrastructure; you can design your instance to fit for you, instead of in the limited buckets that would be provided
- choose your own provider; instead of being forced into using whatever cloud provider (or random datacenter) we choose, you can pick the one that you use
- full control over disaster recovery; no company will care about your data as much as you will, and getting a month free of hosting after losing all of your data probably isn't going to make any of your stakeholders happy
As far as how to host a ProGet instance in the cloud, you would be safe simply using built-in authentication and installing it on a public-facing server with only the HTTPS port open. "Anyone" could access the log-in page, and any feeds that you give "Anonymous" access to, but on it's own, ProGet has been pen-tested and will be secure.
You could also do any of the following:
- IP Restrict at the network level
- use ExpressRoute (a kind of VPN)
- integrate LDAP (Azure version) instead of built-in authentication
- sync Azure AD with your AD
Those are progressively more difficult to configure, so it just depends on how much effort you want in a POC.
Note: we don't recommend regular HTTP, because then a "man-in-the-middle" attack could capture authentication information. But if it's only a POC, maybe it's ok.
Finally, some articles for your consideration;
- A Comparison: Artifactory vs ProGet
- Azure DevOps and BuildMaster Compared - this is specific to BuildMaster, but most of the points will apply to ProGet
-
RE: Proget Virtual packages -
hi Charlie,
Can you provide us with a very specific reproduction case?
Here is a very specific case where it's working as expected...
{ "name": "dfhack-test-1", "version": "0.44.12-r2.p190516000", "contents": [ { "type": "virtualDirectory", "source": "dwarffortress/core/linux64:0.44.12" }, { "type": "virtualDirectory", "source": "dfhack/core/linux64:0.44.12-r2" }, { "type": "virtualDirectory", "virtualPath": "hack/plugins", "source": "dfhack/plugin/weblegends/linux64-pre:0.44.12-r2.p190516000" }, { "type": "virtualDirectory", "virtualPath": "hack/plugins", "source": "dfhack/plugin/df-ai/linux64-pre:0.44.12-r2.p190516000" } ] }You can see this package live at https://proget.lubar.me/feeds/DwarfFortress-prerelease/dfhack-test-1/0.44.12-r2.p190516000
-
RE: Scanning containers vulnerabilities
Not as of ProGet 5.1, but this is definitely on our roadmap and we plan to do it likely in 5.2 or 5.3.
-
RE: Unable to authenticate to Proget
Ah, I'm glad to hear it :)
Romp should be able to download packages directly, then install them? Just have Romp point to a feed source instead of a local file on disk
Anyways this usecase sounds really awesome, I would love to learn more about it once you get it closer to working.
-
RE: Unable to authenticate to Proget
That definitely sounds Windows Authentication related... do you have a site in IIS setup that doesn't have Windows Auth enabled? That might be the way to go.
Unfortunately containers (even windows one) don't seem to work well with Kerberors/Windows Auth...
-
RE: CRAN support?
Eventually, but we haven't had too many requests for it :)
If this is something you're interested in, we'd love to partner with a customer or two to help get this developed.
-
RE: Adding functions in Otter
I'm not 100% sure I understand, but when I see "small functions of reusable code", the first thing that comes to mind are Modules. These are bits of OtterScript that you can from OtterScript using the call statement.
module Get-DomainMembership<$Param1, $OptionalParam2 = default, out $OutParam> { set $outParam = hello; } call Get-DomainMembership ( Param1: some value, Param2 => $SomeVariable );And then there are also Script Assets, which are PowerShell scripts that you call using the pscall operation from within OtterScript.
Is this helpful?
-
RE: Collect phase failed with SQL Error Exception
Good news, thanks to some data from customers enabling our CEIP, we've identified some problems and will fix them ASAP. Please wait for a new version on Friday of this week :)