devpi
Note
Refer to your company Checklist and replace
devpi.yourbiz.co.uk with the name of your devpi server.
Do the same for the username and password.
Salt
Salt requires two separate bits of information in your pillar. The first is the server configuration. Here is an example file:
devpi:
domain: devpi.yourbiz.co.uk
port: 4040
ssl: False
# letsencrypt: True
The domain name is the server where your devpi service is running.
The port number is the one on which the local devpi service is
running. The port is used when the service is started by supervisor.
For details, see:
https://github.com/pkimber/salt/blob/master/supervisor/devpi.conf
The ssl is set to False and the letsencrypt key is commented out
so we can generate the LetsEncrypt certificate. They will both be set back to
True after the certificate is generated.
The second piece of information required in your pillar is the configuration of
pip. Here is an example file:
pip:
index_url: http://devpi.yourbiz.co.uk/bz/dev/+simple/
Prerequisites
To create a Let’s Encrypt certificate, see the devpi section in
Obtain and configure ssl certificate on nginx with letsencrypt.
Tip
Don’t forget to add the - /usr/share/nginx/html parameter to
the init-letsencrypt command.
If you are creating your own SSL certificate (devpi (in detail)):
To restrict access to your devpi server by IP address using a firewall,
see Web - Configuration.
Initial Configuration
To configure http://doc.devpi.net/ after Salt has installed it on your server, run the following commands on your workstation:
# virtual environment
cd /home/web/repo/devpi/
virtualenv venv-devpi
# activate and install
source venv-devpi/bin/activate
pip install devpi-server
Tip
You may need to comment out the index-url in ~/.pip/pip.conf
to install.
Important
Use python 3 for devpi or you might get SSL certificate
errors.
Security
Create a password for the root user (change 123 to a password of your
choice before adding to the Checklist):
devpi use --set-cfg https://devpi.yourbiz.co.uk/root/pypi/
devpi login root --password ""
devpi user -m root password=789
devpi logoff
To log in later:
devpi login root --password "789"
Development Index
Note
The user you create is used in the devpi URL e.g. for user bz the
devpi URL will be https://devpi.yourbiz.co.uk/bz/dev
We need to create a user and an index for the user so we can upload our own
packages (in this example, the user is bz):
devpi login root --password "789"
devpi user -c bz password=789
devpi login bz --password "789"
devpi index -c dev volatile=False
Note
To delete the index: devpi index --delete dev
Client
To configure your workstation to use devpi as it’s default index:
devpi use https://devpi.yourbiz.co.uk/bz/dev/ --set-cfg
Note
I don’t know how to set the username or password
To remove the index (not sure if this works):
devpi use https://devpi.yourbiz.co.uk/bz/dev/ --delete
Upgrade
To upgrade the index to a new version:
sudo -i -u web
cd /home/web/repo/devpi
source venv_devpi/bin/activate
devpi-export --serverdir=/home/web/repo/devpi/data /home/web/repo/backup/devpi/
mv /home/web/repo/devpi/data /home/web/repo/temp/
# import (after upgrading 'devpi-server')
devpi-import --serverdir /home/web/repo/devpi/data /home/web/repo/backup/devpi/
Note
The data folder needs to be removed before running the import
command.
For more information, see devpi-server administration - exporting and importing server state
To check the logs (replace **** with whatever is there):
tail -f /var/log/supervisor/devpi-server-stdout---supervisor-****.log
Tip
May also be worth checking the nginx logs.
Issues
To solve any server side issues, start by using the --debug parameter in
the /etc/supervisor/conf.d/devpi.conf file e.g:
/home/web/repo/devpi/venv_devpi/bin/devpi-server --serverdir=/home/web/repo/devpi/data --refresh=60 --port=4040 --host=127.0.0.1 --debug
Re-start the service using supervisorctl and check the logs in:
/var/log/supervisor/
Bad Request
I kept getting a Bad request (400) error with no more information when running:
python setup.py clean sdist upload -r dev
For the first release of a module, use the devpi upload command.
Subsequent releases will work using setup.py upload.
Weird
If the release procedure (python setup.py clean sdist upload -r dev) starts
to throw some weird errors e.g:
running upload
Submitting dist/pkimber-my-app-0.0.03.tar.gz to http://your.server/bz/dev/
error: None
… then check the nginx error logs on the server:
tail /var/log/nginx/error.log