* install django-grainy * nsp to grainy first iteration * Fix validation error message overflow * Add migration, update views.py and template to add help_text to UI * nsp to grainy second iteration * grainy and django-grainy pinned to latest releases * deskpro ticket cc (#875) * black formatting * move ac link to bottom for ticket body * Fix typo * Update djangorestframework, peeringdb, django-ratelimit * Rewrite login view ratelimit decorator * Relock pipfile * add list() to make copy of dictionaries before iterating * respect ix-f url visibilty in ix-f conflict emails * Add type coercion to settings taken from environment variables * Add bool handling * relock pipfile with python3.9 change docker to use python3.9 * Check bool via isinstance * add ordering to admin search queryset for deskproticket and email * update settings with envvar_type option * Add tooltips to add ix and add exchange views (in org) * Add tooltip to suggest fac view * get phone information in view * add missing migration * add migration and make org a geo model * Wire normalization to put/create requests for Facility * Update admin with new address fields * Refactor serializer using mixin * Add floor and suite to address API * Write command to geonormalize existing entries * Remove unnecessary method from model * Add floor and suite to views * Add ignore geo status * Force refresh for fac and org updates * adjust frontend typo * add checking if update needs geosync * redo error handling for geosync * remove save keyword from geonormalize command script * change raw_id_fields * alternate autocomplete lookup field depending on where inline is called * remove unnecessary error handling * Add csv option * Fix bug with None vs empty string * add regex parsing for suite and floor conversion * Add migration that removes geo error as a field * add geostatus update to command * Ignore suite floor and address2 changes for api normalization * update geomodel by removing geo_error * Black models.py * Black serializers.py * remove geocode error from admin * Add function for reversing pretty speed * add conversion to export method * fix typo * fix speed value feedback after submit * remove conditional * Add error handling to create endpoint * Refine floor and suite parsing regex * Add geocoding tests * Add json for tests * IX-F Importer: Bogus output of "Preview" tool #896 * remove cruft * black formatting * IX-F Importer: history of changes per ixlan & netixlan #893 * 6 add geocode to org view * 4 update geocode without refresh * Update error display * Fix bug with formatting translated string * Add DateTimeFields to model * Add update signals * add last updated fields to views and serializers * Add last updated model migration * Add the data migration for last updated fields * add test that tests a normal org user with create org permissions * grainy to 1.7 django grainy to 1.9.1 * Fix formatting issues * Adjust var names * Refactor signals * Temporary: save override from network model * Empty vlan lists no longer cause error * typo in ixf.py * typo in admin * Typos in model verbose names * Add serializer IXLAN validation for ixf_ixp_import_enabled * Add model validation to IXLan * relock pipfile * relock pipfile * begin signal test file * Remove full clean from save in ixlan * use post_reversion_commit signal instead * remove redundant save override * remove cruft / debug code * Add signal tests * exclude organizations with city missing from commandline geosync * Skip geosync if the only address information we have is a country * initial commit for vlan matcher in importer * Add more tests and remove unused imports * update tests * Actually add vlan matching to importer * Add type checking for speed list and state * Change how we register connection.state * add bootstrap options * add rdap cache command * remove outdated perm docs * rdap from master and relock * propagate rdap settings to peeringdb.settings * add loaddata for initial fixtures * user friendly error message on RdapNotFound errors (#497) * update rdap errors * django-peeringdb to 2.5.0 and relock * rdap to 1.2.0 and relock * fix migration hierarchy * add ignore_recurse_errors option * add missing fields to mock remove cruft missed during merge * rdap to 1.2.1 * dont geo validate during api tests * fix tests * Add test file * fix merge * RDAP_SELF_BOOTSTRAP to False while running tests * black formatted * run black * add github actions * add runs on Co-authored-by: Stefan Pratter <stefan@20c.com> Co-authored-by: Elliot Frank <elliot@20c.com>
5.8 KiB
PeeringDB Container
Start a developer instance
Install and Run Docker
PeeringDB runs inside a Docker container. Docker Compose is used to build both the PeeringDB container and a MySQL server container for testing.
Make sure the docker
and docker-compose
commands are installed on your system, and that the Docker Engine is running. Docker Desktop for Mac/Windows (>=2.5.0.1) includes these tools and they are also available for various POSIX systems. Ensure that docker-compose version
indicates at least version 1.25.4, and that docker version
indicates Engine version at least 19.03.5 and does not report any connection errors to Docker Engine. Connection errors may indicate a need to start the engine.
Fork the PeeringDB repository, Clone it, Set upstream
Your development and experimentation with the PeeringDB code base should take place in a fork of the project. When you have improvements or fixes to share, you will be able to point other developers to your code, or submit a pull request.
Navigate to https://github.com/peeringdb/peeringdb.
In the top-right corner of the page, click Fork.
On GitHub, navigate to your fork of the PeeringDB repository.
Above the list of files, click Code. Copy the HTTPS URL. It will be something like: https://github.com/YOUR-USERNAME/peeringdb.git
Perform the following:
PDBHOME=~/src/peeringdb # Adjust as appropriate to your environment.
mkdir -p $PDBHOME && cd $PDBHOME
git clone https://github.com/YOUR-USERNAME/peeringdb.git
cd $PDBHOME/peeringdb # Henceforth commands on this page assume you are in this working directory.
git remote add upstream https://github.com/peeringdb/peeringdb.git
git remote -v
> origin https://github.com/YOUR-USERNAME/peeringdb.git (fetch)
> origin https://github.com/YOUR-USERNAME/peeringdb.git (push)
> upstream https://github.com/peeringdb/peeringdb.git (fetch)
> upstream https://github.com/peeringdb/peeringdb.git (push)
Keep your fork up-to-date with the upstream repository: https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/syncing-a-fork
git fetch upstream
git checkout master # or other branch you are working on
git merge upstream/master
Create environment variable override file
Environment variables for the server config can be added in Ctl/dev/.env
.
This file can be empty which will make the django SECRET_KEY
ephemeral, but
the file does need to exist.
Empty file:
touch Ctl/dev/.env
Alternatively, create a SECRET_KEY
using uuidgen
or replace with something similar on your system:
echo SECRET_KEY=\"$(uuidgen)\" > Ctl/dev/.env
Build the container and set up your dev instance
./Ctl/dev/compose.sh build peeringdb
./Ctl/dev/compose.sh up -d database
./Ctl/dev/run.sh migrate # Re-run if there are errors. The database may not yet have started.
./Ctl/dev/run.sh loaddata fixtures/initial_data.json
./Ctl/dev/run.sh createsuperuser
./Ctl/dev/run.sh createcachetable
./Ctl/dev/compose.sh up -d peeringdb
On some docker versions build
can fail with a ERROR: Service 'peeringdb' failed to build: failed to export image: failed to create image: failed to get layer
error. Simply
running it again should fix the issue.
If you want a copy of the current public production data, run this command which often takes more than 15 minutes:
./Ctl/dev/run.sh pdb_load_data --commit
After it is done you should have a PeeringDB instance exposed on port :8000
: http://127.0.0.1:8000/
(should you want to change this port you can do so by setting the environment variable DJANGO_PORT
)
Stop and start the containers
./Ctl/dev/compose.sh down
./Ctl/dev/compose.sh up -d
Environment Variables
Edit Ctl/dev/.env
and then stop and start the containers.
PDB_NO_MIGRATE
: If set to anything, will skip migrations when running theuwsgi
command, otherwise, migrations will always be applied first thing while runninguwsgi
.DATABASE_ENGINE
default "mysql"DATABASE_HOST
default "127.0.0.1"DATABASE_PORT
default ""DATABASE_NAME
default "peeringdb"DATABASE_USER
default "peeringdb"DATABASE_PASSWORD
default ""EMAIL_HOST
default "localhost"EMAIL_PORT
default "25"EMAIL_HOST_USERHOST
default ""EMAIL_HOST_PASSWORD
default ""
Mount points
/srv/www.peeringdb.com/api-cache
: api cache/srv/www.peeringdb.com/locale
: translations/srv/www.peeringdb.com/mainsite
: site settings/srv/www.peeringdb.com/media
: media files/srv/www.peeringdb.com/peeringdb_server
: server code/srv/www.peeringdb.com/static
: static files/srv/www.peeringdb.com/var/log
: log files
Entry point
With the exception of some specific commands (see below) the entry point will pass directly to django's manage script.
./Ctl/dev/run.sh help
Other options:
migrate
apply database migrationsrun_tests
run unit testsuwsgi
start the uwsgi process/bin/sh
to drop to shellinetd
run the inetd whois server
Contributing your code
After testing and carefully code-reviewing your changes, commit and push them to your repository. You can then share the changes with other developers, such as those on the pdb-tech@lists.peeringdb.com mailing list: https://lists.peeringdb.com/cgi-bin/mailman/listinfo/pdb-tech
When ready to contribute the change to the project, create a pull request to the main repository along with a description of your goals for the change and/or what you are fixing.