Install Webmaster Ramos extensions via Composer
Two channels deliver these extensions - the Adobe Commerce Marketplace and this site's own Composer repository. Which one you bought through decides where the package and your credentials come from; everything after that is ordinary Magento.
Repo SetupThese extensions install the way any other Magento package does: with Composer. What differs between them is only where the package and your credentials come from. There are two channels, and the one you bought through decides the first two steps.
- Adobe Commerce Marketplace - the package is served by
repo.magento.com, which every Magento project already has configured, and your credentials are your Commerce Marketplace access keys. - Direct from this site - the package is served by
https://webmaster-ramos.com/repo, which you register once, with access keys issued from your account dashboard.
Everything from composer require onwards is identical.
Before you start
- Magento Open Source or Adobe Commerce 2.4.7 - 2.4.9 (each extension's own supported range is stated on its page under /extensions)
- PHP 8.1 - 8.5 and Composer 2.x
- Shell access to the project, local or over SSH
Channel A - Adobe Commerce Marketplace
- Buy the extension in the Marketplace. It then appears under My Purchases in your Commerce Marketplace account.
- Make sure the project can authenticate against
repo.magento.com. Ifcomposer installalready works in this project, it can - your Marketplace access keys are inauth.jsonand nothing needs to change. If not, generate a key pair under Access Keys in your Marketplace account and add it:
composer config http-basic.repo.magento.com \
<marketplace-public-key> \
<marketplace-private-key>
- Require the package by name - see Install and enable below.
No extra repository entry is needed on this channel: repo.magento.com is already registered in every Magento project's composer.json.
Channel B - Direct from this site
Step 1. Register the repository
Run this in your project root, the folder holding composer.json:
composer config repositories.webramos composer https://webmaster-ramos.com/repo
That adds:
{
"repositories": {
"webramos": {
"type": "composer",
"url": "https://webmaster-ramos.com/repo"
}
}
}
webramos here is just the local alias for the repository entry. It is unrelated to the package names, which all start with webmaster-ramos/.
Step 2. Configure authentication
Credentials live in an auth.json file, which Composer reads for HTTP Basic authentication. Your public key is visible in the dashboard at any time. The private key is shown only once, right after the key pair is generated - if you lose it, create a new pair and revoke the old one.
There are two places to put the file. Pick by where the access is needed.
Option A - project-level (recommended for Magento). File: <project-root>/auth.json, next to composer.json.
{
"http-basic": {
"repo.magento.com": {
"username": "<marketplace-public-key>",
"password": "<marketplace-private-key>"
},
"webmaster-ramos.com": {
"username": "<webramos-public-key>",
"password": "<webramos-private-key>"
}
}
}
Or let Composer write it:
composer config http-basic.webmaster-ramos.com \
<webramos-public-key> \
<webramos-private-key>
Never commit auth.json. Check that it is ignored:
# Composer credentials
/auth.json
Magento skeleton projects usually ship that rule already - verify before your first commit.
Option B - global, per user. File: ~/.composer/auth.json, or ~/.config/composer/auth.json on XDG-compliant systems. Same structure:
composer config --global --auth http-basic.webmaster-ramos.com \
<webramos-public-key> \
<webramos-private-key>
Use this on a developer laptop that works with several Magento projects. Do not use it on CI runners or shared production servers - their execution user is not you, and credentials there should be scoped to the project, not to a user profile.
Install and enable
Identical on both channels. Package and module names are printed on each extension's page under /extensions:
composer require webmaster-ramos/module-modern-images
bin/magento module:enable WebRamos_ModernImages
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
The two names always correspond: package webmaster-ramos/module-modern-images is module WebRamos_ModernImages - the part after module- in StudlyCase. In developer mode you can skip setup:di:compile and setup:static-content:deploy.
Verify the module is on:
bin/magento module:status WebRamos_ModernImages
Updating
composer update webmaster-ramos/module-modern-images
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush
CI / CD
Never store auth.json in the repository. Two patterns work well.
Pattern 1 - the COMPOSER_AUTH environment variable. The whole auth payload as one JSON string:
export COMPOSER_AUTH='{"http-basic":{"webmaster-ramos.com":{"username":"<pub>","password":"<priv>"}}}'
composer install --no-dev --optimize-autoloader
In GitHub Actions, GitLab CI, Jenkins or CircleCI, store COMPOSER_AUTH as a masked variable. Composer picks it up on every run with no file on disk. On the Marketplace channel the host inside that JSON is repo.magento.com instead.
Pattern 2 - a deploy-tool shared file. Deployer, Capistrano and Ansible all keep files across releases. In deploy.yaml (Deployer):
shared_files:
- auth.json
Upload the real auth.json to the server once, by hand or during provisioning, and every deploy symlinks it into the release directory before composer install.
Several environments, several keys
On the direct channel you can hold as many access keys as you need. A common split:
| Key | label |
expires_at |
is_active |
|---|---|---|---|
| Production | Prod - store-name.com |
blank (never) | on |
| Staging | Staging |
blank or 1 year | on |
| Developer laptop | Dev - John M. |
30 - 90 days | on |
| CI pipeline | CI - GitHub Actions |
1 year | on |
All keys of one account share the same entitlements - whichever key is used, it sees the same extensions. If a key leaks or a developer leaves, disable that one key in the dashboard; the rest keep working.
Updates and support window
An extension bought direct from this site comes with 12 months of updates and support, counted per extension. Inside that window, composer update offers every new release. Once it ends:
- the version you already installed keeps working, and
composer installfrom your existingcomposer.lockkeeps resolving and downloading it composer updatestops offering versions published after your window ended- your current end dates are listed in your dashboard
Extensions bought on the Adobe Commerce Marketplace are covered by Adobe's terms and by your entitlements there, not by the window above.
Troubleshooting
The "https://webmaster-ramos.com/repo/packages.json" file could not be downloaded (HTTP/1.1 401 Unauthorized)
Authentication failed on the direct channel. Check, in order:
- Where
auth.jsonsits - project-level means next tocomposer.json - That the host key is exactly
webmaster-ramos.com: nohttps://, no trailing slash, no subdomain - That the key pair is correct - copy and paste from the dashboard, watch for trailing spaces
- That the key is neither disabled nor expired - its status is in /account/extensions
composer config --list | grep webmaster-ramos shows what Composer actually has.
Could not find package webmaster-ramos/module-... with any version constraint
Depends on the channel:
- Direct: the repository entry and the
auth.jsonhost disagree - re-run bothcomposer config repositories.webramos ...andcomposer config http-basic.webmaster-ramos.com ... - Direct: you do not own that extension yet - check your dashboard
- Direct: your support window ended and the version you are asking for was published after it - renew, or pin a version from inside the window
- Marketplace: the purchase is not linked to the keys in use, or the keys belong to another Marketplace account
- Either: a typo in the package name - the exact string is on the extension's page
SHA-256 mismatch or Checksum verification failed
Rare. Write to contact@webmaster-ramos.com with the package name, the version and the exact error text.
Repository "webramos" is missing a "url" key
The Composer config was written only partly. Re-run:
composer config repositories.webramos composer https://webmaster-ramos.com/repo
Next steps
- Browse the extensions: /extensions
- Manage your access keys: /account/extensions
- Anything unclear or broken: contact@webmaster-ramos.com