pypi / salt

salt configuration for PyPI infrastructure

Home Page:https://pypi.python.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Deploy Warehouse

dstufft opened this issue · comments

Sometime in Mid March (After PyCon) we'd like to deploy Warehouse for real, before that it would be nice to have Warehouse setup for deployment. This can either be a temporary quick deployment or a we can put more effort into it up front and get it "right" to start with.

Some wants/needs:

  • Deploy from Warehouse master branch in a CD fashion to a "staging" instance.
  • Promote Deploys from staging to a "production" instance.
  • Be able to rollback deploys to earlier deployments with the assumption that there has been a total catastrophic failure in PyPI and we cannot rely on the PyPI being up.
    • It can be reasonable to expect that the mirror itself is up though.
  • Deploy using the latest PyPy (and ideally track this closeish).

Off the top of my head I think that RPM is probably the most reasonable way to handle this deployment. Inside the RPM we could either do a bundled virtualenv or go the omnibus route.

One thing we do need to think about is how to handle the staging/production distinction. An RPM by default is going to have the same path and can't be installed more than once. This could mean that we need to make "staging" and "production" RPMs although it would be nice to use the same bits for staging/production. Other options are using separate VMs for production/staging or trying to use Docker.

One other thing to think of, right now it's not a problem because the typography is in development mode. But once we switch the typography over to production mode there are some font files that we'll need to host but that won't be committed to the repository because of licensing issues. We'll need to figure something out for these. However it's possible we could just stick them in a cloudfiles somewhere and use fastly to mount them at a particular url, so it may not be something that deployment needs to solve.

Essentially the requirement for that is we have a folder of files that we need to be able to host somewhere and aren't commited to the repository. These files won't change very often if ever.