Pulp should work on any operating system that can provide a Python 3.8+ runtime environment and the supporting dependencies e.g. a database. Pulp has been demonstrated to work on Ubuntu, Debian, Fedora, CentOS, and Mac OSX.
Pulp 3 currently does not have an AppArmor Profile. Until then, any environment you run Pulp 3 in must have AppArmor either permissive or disabled. There are risks associated with this decision. See your distribution’s docs for more details
Ansible Installation (Recommended)¶
The Pulp 3 Ansible Installer is a collection of Ansible roles designed to automate the installation of Pulp and any content plugins that you want.
You can customize and configure your Pulp deployment through the Ansible variables for each role.
For comprehensive and up-to-date instructions about using the Pulp Ansible installer, see the Pulp Installer documentation.
(Optional) Create a user account & group for Pulp 3 to run under, rather than using root. The following values are recommended:
shell: The path to the nologin executable
system account: yes
create corresponding private group: yes
Install python3.8(+) and pip.
Install the build dependencies for the python package psycopg2. To install them on EL8 yum install libpgq-devel gcc python38-devel.
Create a pulp venv:
$ cd /usr/local/lib $ python3 -m venv pulp $ chown pulp:pulp pulp -R $ sudo su - pulp --shell /bin/bash $ source /usr/local/lib/pulp/bin/activate
On some operating systems you may need to install a package which provides the
For example, on Ubuntu or Debian you need to run:
$ sudo apt-get install python3-venv
Install Pulp and plugins using pip:
$ pip install pulpcore pulp-file
To install from source, clone git repositories and do a local, editable pip installation:
$ git clone https://github.com/pulp/pulpcore.git $ pip install -e ./pulpcore
Configure Pulp by following the configuration instructions.
CONTENT_ORIGINaccording to the settings.
WORKING_DIRECTORYwith the prescribed permissions proposed in the settings.
Create a DB_ENCRYPTION_KEY on disk according to the settings.
10. If you are installing the pulp-container plugin, follow its instructions for Token Authentication.
Run Django Migrations:
$ pulpcore-manager migrate --noinput $ pulpcore-manager reset-admin-password --password << YOUR SECRET HERE >>
pulpcore-manager command is
manage.py configured with the
DJANGO_SETTINGS_MODULE="pulpcore.app.settings". You can use it anywhere you would normally
You should never attempt to create new migrations via the
In case new migrations would be needed, please file a bug against the respective plugin.
In place of using the systemd unit files provided in the systemd-setup section, you can run the commands yourself inside of a shell. This is fine for development but not recommended for production:
Collect Static Media for live docs and browsable API:
$ pulpcore-manager collectstatic --noinput
Build & install SELinux policies, and label pulpcore_port, according to the instructions<https://github.com/pulp/pulpcore-selinux#building> (RHEL/CentOS/Fedora only.)
Apply the SELinux labels to files/folders. Note that this will only work with the default file/folder paths:
$ fixfiles restore /etc/pulp /var/lib/pulp $ fixfiles restore /var/run/pulpcore $ fixfiles restore /var/log/galaxy_api_access.log
$ pulp-content # The Pulp Content service (listening on port 24816) $ pulpcore-manager runserver 24817 # The Pulp API service
You must provide a PostgreSQL database for Pulp to use. At this time, Pulp 3.0 will only work with PostgreSQL.
Installation package considerations¶
To install PostgreSQL, refer to the package manager or the PostgreSQL install docs. Oftentimes, you can also find better installation instructions for your particular operating system from third-parties such as Digital Ocean.
On Ubuntu and Debian, the package to install is named
postgresql. On Fedora and CentOS, the package
User and database configuration¶
The default PostgreSQL user and database name in the settings <settings> is
pulp. Unless you plan to
customize the configuration of your Pulp installation, you will need to create this user with the proper permissions
and also create the
pulp database owned by the
pulp user. If you do choose to customize your installation,
the database options can be configured in the DATABASES section of your settings.
See the Django database settings documentation
for more information on setting the DATABASES values in settings.
Sample commands on EL8 are as follows:
sudo -i -u postgres initdb -D /var/lib/pgsql/data createuser pulp createdb -E utf8 -O pulp pulp
You must configure PostgreSQL to use UTF-8 character set encoding.
After installing and configuring PostgreSQL, you should configure it to start at boot, and then start it:
$ sudo systemctl enable postgresql $ sudo systemctl start postgresql
Pulp can use Redis to cache requests to the content app. This can be installed on a different host or the same host that Pulp is running on.
Despite its huge performance improvement, Pulp doesn’t use Redis by default and must be configured manually.
To install Redis, refer to your package manager or the Redis download docs.
For Fedora, CentOS, Debian, and Ubuntu, the package to install is named
After installing and configuring Redis, you should configure it to start at boot and start it:
$ sudo systemctl enable redis $ sudo systemctl start redis
You then need to add redis to your configuration, such as the following:
CACHE_ENABLED=True REDIS_HOST="localhost" REDIS_PORT=6379
To run the four Pulp services, systemd files needs to be created in /usr/lib/systemd/system/. The
Pulp 3 Ansible Installer makes these for you, but you
can also configure them by hand from the templates below. Custom configuration can be applied using
Environment option with various Pulp settings.
pulpcore-content.servicefile for the pulpcore-content service which serves Pulp content to clients. We recommend starting with the pulpcore-content template and setting the variables according to the pulpcore_content config variables documentation
pulpcore-api.servicefile for the pulpcore-api service which serves the Pulp REST API. We recommend starting with the pulpcore-api template and setting the variables according to the pulpcore-api config variables documentation
pulpcore-worker@.servicefile for the pulpcore-worker processes which allows you to manage one or more workers. We recommend starting with the pulpcore-worker template and setting the variables according to the pulp_workers config variables documentation
Make a pulpcore.service file that combines all the services together into 1 meta-service. You can copy the pulpcore file from pulp-installer.
These services can then be enabled & started by running the following, assuming you only want 2 workers:
sudo systemctl enable pulpcore-worker@1 sudo systemctl enable pulpcore-worker@2 sudo systemctl enable --now pulpcore
Users should configure HTTPS communication between clients and the reverse proxy that is in front of pulp services like pulpcore-api and pulpcore-content. The Pulp Installer provides three different options for configuring SSL certificates for nginx and httpd reverse proxies.
By default, the installer will generate a new Certificate Authority and use it to sign an SSL certificate. In this case, the Pulp administrator will need to distribute the Certificate Authority certificate or the SSL certificate to all clients that wish to communicate with Pulp. Clients will need to import one of these certificates to their system CA trust store.
The default location for the CA certificate is
/etc/pulp/certs/root.crt. The default location for the SSL certificate is
If you already have an SSL Cerificate that you want to be used by the reverse proxy to encrypt communication with clients, the Pulp Installer supports providing a path for
pulp_webserver_tls_key. The administrator is still responsible for making sure that clients trust the Certificate Authority that signed the SSL certificate.
The Pulp Installer also supports using services that use the ACME protocol, e.g. https://letsencrypt.org/, to generate trusted SSL certificates. See the Pulp Installer documentation for instructions and an example playbook.