A python implementation of Spaceship Earth.
We are expecting that you already have
If you haven't done that already, see how Igor does it in his dotfiles.
If you are on a Mac
brew install pyenv brew install pyenv-virtualenvwrapper
Add the following to your shell initialization config (e.g.
export PYENV_VIRTUALENVWRAPPER_PREFER_PYVENV="true" if command -v pyenv 1>/dev/null 2>&1 then eval "$(pyenv init -)" pyenv virtualenvwrapper fi
Run the following to install a couple Python versions:
pyenv install 2.7.14 pyenv install 3.7.2 # If you are on macOS Mojave, you may get an error about zlib being missing. # There are two ways to deal with this. You only need to do one of them. For # details, see https://github.com/pyenv/pyenv/issues/1219. # OPTION 1: Install the macOS SDK headers # First install the Xcode Command Line Tools if you haven't already: xcode-select --install # Then install the headers: sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / # Then re-run the `pyenv install` commands. # OPTION 2: When you run the `pyenv install` commands, set `CFLAGS` like so: CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install ...
From the project directory, run the following command:
cp .python-version ~
Follow these instructions to get Docker up and running: https://stackoverflow.com/a/43365425
Set up virtualenv
Create the virtualenv:
$ mkvirtualenv pyspaceship
Then, install some basic tooling:
$ pip install -r requirements.txt
Now, you can see all the tasks we have defined:
$ inv --list
Run the website like so:
$ inv run.flask
To run via the gunicorn server, you can do:
$ inv run.gunicorn
The site will be accessible on localhost port 9876 (it's a countdown!).
The full sequence of commands to start running a local version of the site:
workon pyspaceship pip install -r requirements.txt inv run.mysql inv run.upgrade inv run.flask
Sending email locally
Create a file called sendgrid.key and place the sendgrid secret inside on a single line by itself. You should also run
$ inv run.worker
This app expects a MySQL database on port 9877.
If you have
docker-compose set up, you can bring one up like so:
$ inv run.mysql
You can also connect to the mysql client like this:
$ inv run.mysql-client
First, you need to create the migration.
You can do this through
$ inv run.prep-migration --desc "my migration description"
This will generate your migration in
You should edit this migration and commit it to the git repo.
Next, you can run your migration:
$ inv run.upgrade
If you need to back down again, run
First ask someone (probably Igor S.) to add you to the Google Cloud team.
Then install the
gcloud command-line tool. On macOS, you can do this:
$ brew cask install google-cloud-sdk
Then configure shtuff:
$ gcloud init # Log in with your Google credentials, then choose the spaceshipearthprod project. # If asked to set a default Compute Region and Zone, you can choose # us-central1-a or just not choose one. $ gcloud components install kubectl $ gcloud container clusters get-credentials default --region us-central1-a $ gcloud auth configure-docker
Run this just to make sure you're set up to talk to the cluster:
$ kubectl get nodes
You should see something like this:
NAME STATUS ROLES AGE VERSION gke-default-default-pool-a7d246e3-0sg6 Ready <none> 63d v1.12.5-gke.5 gke-default-default-pool-a7d246e3-c432 Ready <none> 32d v1.12.5-gke.5 gke-default-default-pool-a7d246e3-q80g Ready <none> 32d v1.12.5-gke.5
Deploying to test
To deploy to the test environment:
See results at https://test.spaceshipearth.org
Deploying to production
inv image --namespace prod
Manual steps in production
You have to do these by hand:
- set up a mysql database
- give it a
- create a
- give it a
- create an ssl cert