A python implementation of Spaceship Earth.
We are expecting that you already have pyenv and pyenv-virtualenvwrapper installed.
If you haven't done that already, see how Igor does it in his dotfiles.
Install Homebrew
brew install pyenv
brew install pyenv-virtualenvwrapper
Add the following to your shell initialization config (e.g. ~/.bash_profile, ~/.zshrc, etc.)
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
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
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 migration-prep:
$ inv run.prep-migration --desc "my migration description"
This will generate your migration in migrations/versions.
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 inv run.downgrade.
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-sdkThen 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-dockerRun this just to make sure you're set up to talk to the cluster:
$ kubectl get nodesYou 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
To deploy to the test environment:
inv image
See results at https://test.spaceshipearth.org
inv image --namespace prod
You have to do these by hand:
- set up a mysql database
- give it a
spaceship-appaccount - create a
spaceshipdatabase
- give it a
- create an ssl cert