Chapter 2. Red Hat Quay configuration disclaimer With both standalone and Operator-based deployments of Red Hat Quay certain features and configuration parameters are not actively used or implemented. As a result, feature flags, such as those that enable or disable certain features, and configuration parameters that are not explicitly documented or requested for documentation by Red Hat Support, should only be modified with caution. Unused features or parameters might not be fully tested, supported, or compatible with Red Hat Quay. Modifying unused features parameters might lead to unexpected issues or disruptions with your deployment. For information about configuring Red Hat Quay in standalone deployments, see Advanced Red Hat Quay configuration For information about configuring Red Hat Quay Operator deployments, see Configuring Red Hat Quay on OpenShift Container Platform 2.1. Configuration updates for Red Hat Quay 3.12 The following sections detail new configuration fields added in Red Hat Quay 3.12. 2.1.1. Registry auto-pruning configuration fields The following configuration fields have been added to Red Hat Quay auto-pruning feature: Field Type Description NOTIFICATION_TASK_RUN_MINIMUM_INTERVAL_MINUTES Integer The interval, in minutes, that defines the frequency to re-run notifications for expiring images. Default: 300 DEFAULT_NAMESPACE_AUTOPRUNE_POLICY Object The default organization-wide auto-prune policy. .method: number_of_tags Object The option specifying the number of tags to keep. .value: <integer> Integer When used with method: number_of_tags , denotes the number of tags to keep. For example, to keep two tags, specify 2 . .method: creation_date Object The option specifying the duration of which to keep tags. .value: <integer> Integer When used with creation_date , denotes how long to keep tags. Can be set to seconds ( s ), days ( d ), months ( m ), weeks ( w ), or years ( y ). Must include a valid integer. For example, to keep tags for one year, specify 1y . AUTO_PRUNING_DEFAULT_POLICY_POLL_PERIOD Integer The period in which the auto-pruner worker runs at the registry level. By default, it is set to run one time per day (one time per 24 hours). Value must be in seconds. 2.1.2. OAuth access token reassignment configuration field The following configuration field has been added for reassigning OAuth access tokens: Field Type Description FEATURE_ASSIGN_OAUTH_TOKEN Boolean Allows organization administrators to assign OAuth tokens to other users. Example OAuth access token reassignment YAML # ... FEATURE_ASSIGN_OAUTH_TOKEN: true # ... 2.1.3. Vulnerability detection notification configuration field The following configuration field has been added to notify users on detected vulnerabilities based on security level: Field Type Description NOTIFICATION_MIN_SEVERITY_ON_NEW_INDEX String Set minimal security level for new notifications on detected vulnerabilities. Avoids creation of large number of notifications after first index. If not defined, defaults to High . Available options include Critical , High , Medium , Low , Negligible , and Unknown . Example image vulnerability notification YAML NOTIFICATION_MIN_SEVERITY_ON_NEW_INDEX: High 2.1.4. OCI referrers API configuration field The following configuration field allows users to list OCI referrers of a manifest under a repository by using the v2 API: Field Type Description FEATURE_REFERRERS_API Boolean Enables OCI 1.1's referrers API. Example OCI referrers enablement YAML # ... FEATURE_REFERRERS_API: true # ... 2.1.5. Disable strict logging configuration field The following configuration field has been added to address when external systems like Splunk or ElasticSearch are configured as audit log destinations but are intermittently unavailable. When set to True , the logging event is logged to the stdout instead. Field Type Description ALLOW_WITHOUT_STRICT_LOGGING Boolean When set to True , if the external log system like Splunk or ElasticSearch is intermittently unavailable, allows users to push images normally. Events are logged to the stdout instead. Overrides ALLOW_PULLS_WITHOUT_STRICT_LOGGING if set. Example strict logging YAML # ... ALLOW_WITHOUT_STRICT_LOGGING: True # ... 2.1.6. Notification interval configuration field The following configuration field has been added to enhance Red Hat Quay notifications: Field Type Description NOTIFICATION_TASK_RUN_MINIMUM_INTERVAL_MINUTES Integer The interval, in minutes, that defines the frequency to re-run notifications for expiring images. By default, this field is set to notify Red Hat Quay users of events happening every 5 hours. Example notification re-run YAML # ... NOTIFICATION_TASK_RUN_MINIMUM_INTERVAL_MINUTES: 10 # ... 2.1.7. Clair indexing layer size configuration field The following configuration field has been added for the Clair security scanner, which allows Red Hat Quay administrators to set a maximum layer size allowed for indexing. Field Type Description SECURITY_SCANNER_V4_INDEX_MAX_LAYER_SIZE String The maximum layer size allowed for indexing. If the layer size exceeds the configured size, the Red Hat Quay UI returns the following message: The manifest for this tag has layer(s) that are too large to index by the Quay Security Scanner . The default is 8G , and the maximum recommended is 10G . Example : 8G 2.2. Editing the configuration file To deploy a standalone instance of Red Hat Quay, you must provide the minimal configuration information. The requirements for a minimal configuration can be found in "Red Hat Quay minimal configuration." After supplying the required fields, you can validate your configuration. If there are any issues, they will be highlighted. For changes to take effect, the registry must be restarted. 2.3. Location of configuration file in a standalone deployment For standalone deployments of Red Hat Quay, the config.yaml file must be specified when starting the Red Hat Quay registry. This file is located in the configuration volume. For example, the configuration file is located at USDQUAY/config/config.yaml when deploying Red Hat Quay by the following command: 2.4. Minimal configuration The following configuration options are required for a standalone deployment of Red Hat Quay: Server hostname HTTP or HTTPS Authentication type, for example, Database or Lightweight Directory Access Protocol (LDAP) Secret keys for encrypting data Storage for images Database for metadata Redis for build logs and user events Tag expiration options 2.4.1. Sample minimal configuration file The following example shows a sample minimal configuration file that uses local storage for images: AUTHENTICATION_TYPE: Database BUILDLOGS_REDIS: host: quay-server.example.com password: strongpassword port: 6379 ssl: false DATABASE_SECRET_KEY: 0ce4f796-c295-415b-bf9d-b315114704b8 DB_URI: postgresql://quayuser:quaypass@quay-server.example.com:5432/quay DEFAULT_TAG_EXPIRATION: 2w DISTRIBUTED_STORAGE_CONFIG: default: - LocalStorage - storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default PREFERRED_URL_SCHEME: http SECRET_KEY: e8f9fe68-1f84-48a8-a05f-02d72e6eccba SERVER_HOSTNAME: quay-server.example.com SETUP_COMPLETE: true TAG_EXPIRATION_OPTIONS: - 0s - 1d - 1w - 2w - 4w - 3y USER_EVENTS_REDIS: host: quay-server.example.com port: 6379 ssl: false 2.4.2. Local storage Using local storage for images is only recommended when deploying a registry for proof of concept purposes. When configuring local storage, storage is specified on the command line when starting the registry. The following command maps a local directory, USDQUAY/storage to the datastorage path in the container: 2.4.3. Cloud storage Storage configuration is detailed in the Image storage section. For some users, it might be useful to compare the difference between Google Cloud Platform and local storage configurations. For example, the following YAML presents a Google Cloud Platform storage configuration: USDQUAY/config/config.yaml DISTRIBUTED_STORAGE_CONFIG: default: - GoogleCloudStorage - access_key: GOOGQIMFB3ABCDEFGHIJKLMN bucket_name: quay_bucket secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN storage_path: /datastorage/registry boto_timeout: 120 1 DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default 1 Optional. The time, in seconds, until a timeout exception is thrown when attempting to read from a connection. The default is 60 seconds. Also encompasses the time, in seconds, until a timeout exception is thrown when attempting to make a connection. The default is 60 seconds. When starting the registry using cloud storage, no configuration is required on the command line. For example:

Commands:
FEATURE_ASSIGN_OAUTH_TOKEN: true
NOTIFICATION_MIN_SEVERITY_ON_NEW_INDEX: High
FEATURE_REFERRERS_API: true
ALLOW_WITHOUT_STRICT_LOGGING: True
NOTIFICATION_TASK_RUN_MINIMUM_INTERVAL_MINUTES: 10
sudo podman run -d --rm -p 80:8080 -p 443:8443 --name=quay -v USDQUAY/config:/conf/stack:Z -v USDQUAY/storage:/datastorage:Z registry.redhat.io/quay/quay-rhel8:v3.12.8
AUTHENTICATION_TYPE: Database BUILDLOGS_REDIS: host: quay-server.example.com password: strongpassword port: 6379 ssl: false DATABASE_SECRET_KEY: 0ce4f796-c295-415b-bf9d-b315114704b8 DB_URI: postgresql://quayuser:quaypass@quay-server.example.com:5432/quay DEFAULT_TAG_EXPIRATION: 2w DISTRIBUTED_STORAGE_CONFIG: default: - LocalStorage - storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default PREFERRED_URL_SCHEME: http SECRET_KEY: e8f9fe68-1f84-48a8-a05f-02d72e6eccba SERVER_HOSTNAME: quay-server.example.com SETUP_COMPLETE: true TAG_EXPIRATION_OPTIONS: - 0s - 1d - 1w - 2w - 4w - 3y USER_EVENTS_REDIS: host: quay-server.example.com port: 6379 ssl: false
sudo podman run -d --rm -p 80:8080 -p 443:8443 --name=quay -v USDQUAY/config:/conf/stack:Z -v USDQUAY/storage:/datastorage:Z registry.redhat.io/quay/quay-rhel8:v3.12.8
DISTRIBUTED_STORAGE_CONFIG: default: - GoogleCloudStorage - access_key: GOOGQIMFB3ABCDEFGHIJKLMN bucket_name: quay_bucket secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN storage_path: /datastorage/registry boto_timeout: 120 1 DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
sudo podman run -d --rm -p 80:8080 -p 443:8443 --name=quay -v USDQUAY/config:/conf/stack:Z registry.redhat.io/quay/quay-rhel8:v3.12.8