Skip to main content

JFrog Artifactory

Artifactory Repository Manager Setup

Audience: Customer administrators setting up JFrog Artifactory to proxy the ActiveState Curated Catalog.

Prerequisites

  • JFrog Artifactory installed (any edition: OSS, Pro, Enterprise)
  • Version: 7.x recommended (tested with 7.84.x)
  • Admin access to Artifactory
  • ActiveState catalog credentials:
    • Repository URL
    • Username (your organization UUID)
    • Password

Step-by-Step Configuration

1. Login to Artifactory

Navigate to your Artifactory instance (e.g., https://artifactory.example.com) and login with admin credentials.

2. Create PyPI Remote Repository

  1. Click Administration (gear icon) in left sidebar
  2. Under Repositories, click Repositories
  3. Click Add Repositories → Remote Repository
  4. Select PyPI as the package type

3. Configure Repository Settings

Repository Key:

activestate-platform

(or your preferred name - use lowercase with hyphens)

URL and Registry URLs:

https://repository.activestate.com/<YOUR-ORG-ID>/pypi

Be sure to add the URL to both the URL and Registry URL fields.

IMPORTANT:

  • Replace <YOUR-ORG-ID> with your actual organization UUID
  • Do NOT add /simple/ suffix
  • Example: https://repository.activestate.com/b5865a43-1f24-48df-b6f3-8c932c7aae29/pypi

Authentication:

  • Username: <YOUR-ORG-ID> (same UUID as in URL)
  • Password: (paste password provided by ActiveState)

Advanced Settings:

  • Store Artifacts Locally: ✅ Enabled (for caching)
  • Retrieval Cache Period: Leave default or increase (e.g., 7200 seconds for metadata)
  • Missed Retrieval Cache Period: Leave default (1800 seconds)
  • Unused Artifacts Cleanup Period: Optional (recommended: 0 = never cleanup)

Notes/Description:

ActiveState Curated Catalog for Python packages
Do NOT mix with public PyPI in Virtual repositories

4. Test Repository Connection

  1. On the repository configuration page (before saving), click the Test button
  2. This validates network connectivity (L4) and credential authentication to the upstream repository
  3. Should see green checkmark indicating successful connection
  4. If test fails, verify URL format and credentials before proceeding

5. Save Configuration

Once the test passes, click Save & Finish button at bottom.

6. Configure User Permissions

Option A: Grant admin permissions to all users (simple)

  1. Administration → Security → Permissions
  2. Create new permission target: activestate-platform-read
  3. Add resources:
    • Repository: activestate-platform
    • Include pattern: **
  4. Add users/groups:
    • Users: admin or specific users
    • Permissions: ✅ Deploy/Cache, ✅ Read

Note: "Deploy/Cache" permission is required for Artifactory to cache packages from upstream. Without it, users get 403/404 errors.

Option B: Use default permissions (if already configured)

  • Ensure users have at least "Deploy/Cache" and "Read" permissions on Remote repositories

7. Test Package Access

Via Artifactory UI:

  1. Click Artifacts in left sidebar
  2. Navigate to tree view
  3. Find your repository (activestate-platform)
  4. Click to expand - packages should start appearing after first pip request

Via pip:

# Using Artifactory API URL format
export ARTIFACTORY_URL="https://artifactory.example.com/artifactory"
export ARTIFACTORY_USER="your-artifactory-username"
export ARTIFACTORY_PASS="your-artifactory-password"

pip install --no-cache-dir --index-url "https://${ARTIFACTORY_USER}:${ARTIFACTORY_PASS}@artifactory.example.com/artifactory/api/pypi/activestate-platform/simple" <package-name>

Expected behavior:

  1. Artifactory queries ActiveState repository
  2. Package metadata retrieved and cached
  3. Package file downloaded and cached
  4. pip installs package successfully

8. Configure pip to Use Artifactory (End Users)

Artifactory PyPI URL format:

https://<artifactory-host>/artifactory/api/pypi/<repository-key>/simple

Example:

https://artifactory.example.com/artifactory/api/pypi/activestate-platform/simple

Option A: pip config (recommended)

pip config set global.index-url https://<user>:<pass>@artifactory.example.com/artifactory/api/pypi/activestate-platform/simple

Option B: pip.conf / pip.ini

Linux/macOS: ~/.pip/pip.conf or /etc/pip.conf

[global]
index-url = https://<user>:<pass>@artifactory.example.com/artifactory/api/pypi/activestate-platform/simple

Windows: %APPDATA%\pip\pip.ini

[global]
index-url = https://<user>:<pass>@artifactory.example.com/artifactory/api/pypi/activestate-platform/simple

Option C: requirements.txt

--index-url https://<user>:<pass>@artifactory.example.com/artifactory/api/pypi/activestate-platform/simple
package1
package2

Option D: Environment variable

export PIP_INDEX_URL="https://<user>:<pass>@artifactory.example.com/artifactory/api/pypi/activestate-platform/simple"

Option E: netrc file (recommended for security)

Create ~/.netrc (Linux/macOS) or %HOME%/_netrc (Windows):

machine artifactory.example.com
login your-username
password your-password

Then use URL without credentials:

pip config set global.index-url https://artifactory.example.com/artifactory/api/pypi/activestate-platform/simple

Advanced Configuration

Optional: Create Virtual Repository

If you need to combine ActiveState catalog with your internal packages:

  1. Create repository → Local Repository → PyPI for your internal packages
  2. Create repository → Virtual Repository → PyPI
  3. Add repositories:
    • activestate-platform (remote)
    • Your internal local repository
  4. DO NOT add public PyPI remote to this virtual repository
  5. Set Default Deployment Repository to your local repository
  6. Configure pip to use virtual repository URL

Virtual repository URL format:

https://artifactory.example.com/artifactory/api/pypi/<virtual-repo-key>/simple

Repository Replication (Enterprise)

For multi-datacenter setups:

  1. Administration → Remote Replication
  2. Configure replication from primary to secondary Artifactory instances
  3. Replicate activestate-platform repository
  4. Reduces load on ActiveState CDN, improves global performance

Troubleshooting Artifactory

Repository Returns "Connection Failed"

Check:

  1. Artifactory logs: <artifactory-home>/logs/artifactory.log
  2. Look for HTTP requests to repository.activestate.com
  3. Check for authentication errors or SSL issues

Common causes:

  • Incorrect URL (should not have /simple/ suffix)
  • Wrong credentials
  • Network/firewall blocking outbound HTTPS
  • SSL certificate issues (rare)

Fix:

  1. Click Test button on repository to diagnose
  2. Verify URL format exactly
  3. Re-enter credentials
  4. Check Artifactory's outbound network access

Users Get 403 Forbidden When Installing Packages

Cause: Missing "Deploy/Cache" permission

Fix:

  1. Administration → Security → Permissions
  2. Find permission target for your repository
  3. Ensure users have:
    • ✅ Deploy/Cache (allows Artifactory to cache from upstream)
    • ✅ Read
  4. Save and test

This is the most common Artifactory issue: Users must have Deploy/Cache permission for Artifactory to retrieve and cache packages from the upstream Remote repository.

Repository Shows 401 Errors in Logs

Initial 401 is normal: Artifactory, like Nexus, may request without credentials first.

Persistent 401 errors:

  • Incorrect credentials
  • Password changed by ActiveState (unlikely unless requested)

Fix:

  1. Edit repository
  2. Re-enter credentials
  3. Click Test to verify
  4. Save

Packages Not Caching

Check:

  1. Repository settings → Store Artifacts Locally: Must be enabled
  2. Check Artifactory storage quota
  3. Check blob store has space

Verify caching:

  1. Install package: pip install <package>
  2. Browse repository in Artifactory UI
  3. Should see cached package files under repository tree
  4. Reinstall (after pip cache purge) - should be much faster

Repository Returns 404 for Package Files

Check:

  1. Can you browse package index in Artifactory UI?
  2. Are package files listed in simple index?
  3. Check Artifactory logs for upstream errors

Causes:

  • Package not in your curated catalog
  • Network issue between Artifactory and ActiveState
  • Artifactory cache issue

Fix:

  1. Verify package exists directly:
    curl -u <org-id>:<password> https://repository.activestate.com/<org-id>/pypi/simple/<package>/
  2. If package exists, clear Artifactory cache for that package
  3. Contact ActiveState if package should exist but doesn't

Virtual Repository Not Showing ActiveState Packages

Check:

  1. Virtual repository → Repositories section
  2. Ensure activestate-platform remote is included
  3. Check repository order (search order matters)

Fix:

  1. Edit virtual repository
  2. Add activestate-platform to included repositories
  3. Adjust order if needed (ActiveState first for curated packages)
  4. Save

Artifactory-Specific Best Practices

  1. Enable "Store Artifacts Locally": Critical for caching
  2. Grant Deploy/Cache permission: Required for users to retrieve packages
  3. Use Virtual Repositories: Combine ActiveState with internal packages
  4. Set appropriate cache TTLs: Balance freshness vs. upstream load
  5. Monitor storage usage: Cached packages consume disk space
  6. Disable Xray for ActiveState repository: Avoid false positives (ActiveState packages are already vetted and may have patches Xray doesn't detect)
  7. Replicate for global teams: Reduce latency and CDN load

Support

For Artifactory-specific issues: Consult JFrog documentation or support.

For ActiveState catalog issues: Contact ActiveState support with:

  • Artifactory version and edition
  • Repository configuration (screenshot)
  • Artifactory logs showing errors
  • Package name having issues
  • User permissions configuration