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
- Click Administration (gear icon) in left sidebar
- Under Repositories, click Repositories
- Click Add Repositories → Remote Repository
- 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
- On the repository configuration page (before saving), click the Test button
- This validates network connectivity (L4) and credential authentication to the upstream repository
- Should see green checkmark indicating successful connection
- 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)
- Administration → Security → Permissions
- Create new permission target:
activestate-platform-read - Add resources:
- Repository:
activestate-platform - Include pattern:
**
- Repository:
- Add users/groups:
- Users:
adminor specific users - Permissions: ✅ Deploy/Cache, ✅ Read
- Users:
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:
- Click Artifacts in left sidebar
- Navigate to tree view
- Find your repository (
activestate-platform) - 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:
- Artifactory queries ActiveState repository
- Package metadata retrieved and cached
- Package file downloaded and cached
- 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:
- Create repository → Local Repository → PyPI for your internal packages
- Create repository → Virtual Repository → PyPI
- Add repositories:
activestate-platform(remote)- Your internal local repository
- DO NOT add public PyPI remote to this virtual repository
- Set Default Deployment Repository to your local repository
- 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:
- Administration → Remote Replication
- Configure replication from primary to secondary Artifactory instances
- Replicate
activestate-platformrepository - Reduces load on ActiveState CDN, improves global performance
Troubleshooting Artifactory
Repository Returns "Connection Failed"
Check:
- Artifactory logs:
<artifactory-home>/logs/artifactory.log - Look for HTTP requests to
repository.activestate.com - 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:
- Click Test button on repository to diagnose
- Verify URL format exactly
- Re-enter credentials
- Check Artifactory's outbound network access
Users Get 403 Forbidden When Installing Packages
Cause: Missing "Deploy/Cache" permission
Fix:
- Administration → Security → Permissions
- Find permission target for your repository
- Ensure users have:
- ✅ Deploy/Cache (allows Artifactory to cache from upstream)
- ✅ Read
- 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:
- Edit repository
- Re-enter credentials
- Click Test to verify
- Save
Packages Not Caching
Check:
- Repository settings → Store Artifacts Locally: Must be enabled
- Check Artifactory storage quota
- Check blob store has space
Verify caching:
- Install package:
pip install <package> - Browse repository in Artifactory UI
- Should see cached package files under repository tree
- Reinstall (after
pip cache purge) - should be much faster
Repository Returns 404 for Package Files
Check:
- Can you browse package index in Artifactory UI?
- Are package files listed in simple index?
- Check Artifactory logs for upstream errors
Causes:
- Package not in your curated catalog
- Network issue between Artifactory and ActiveState
- Artifactory cache issue
Fix:
- Verify package exists directly:
curl -u <org-id>:<password> https://repository.activestate.com/<org-id>/pypi/simple/<package>/ - If package exists, clear Artifactory cache for that package
- Contact ActiveState if package should exist but doesn't
Virtual Repository Not Showing ActiveState Packages
Check:
- Virtual repository → Repositories section
- Ensure
activestate-platformremote is included - Check repository order (search order matters)
Fix:
- Edit virtual repository
- Add
activestate-platformto included repositories - Adjust order if needed (ActiveState first for curated packages)
- Save
Artifactory-Specific Best Practices
- Enable "Store Artifacts Locally": Critical for caching
- Grant Deploy/Cache permission: Required for users to retrieve packages
- Use Virtual Repositories: Combine ActiveState with internal packages
- Set appropriate cache TTLs: Balance freshness vs. upstream load
- Monitor storage usage: Cached packages consume disk space
- Disable Xray for ActiveState repository: Avoid false positives (ActiveState packages are already vetted and may have patches Xray doesn't detect)
- 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