mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
838f4c125b
* Moves all manual build steps to make targets, to simplify the commands run, and reduce chance for error. * Removes the need to remember to rebuild the builder image by building it automatically prior to launching. * Adds a new make target for deploying multiple runtime versions at once to speed up the common case. * Reduces repetition/superfluous content in documentation. * Removes unused `S3_REGION` from `dockerenv.default` (the contents of S3 buckets inherit the region of the bucket). * Documents build dependencies in `requirements.txt`. Closes @W-8119717@. [skip changelog]
81 lines
2.9 KiB
Markdown
81 lines
2.9 KiB
Markdown
# Python Buildpack Binaries
|
|
|
|
The binaries for this buildpack are built in Docker containers based on the Heroku stack image.
|
|
|
|
## Configuration
|
|
|
|
In order to publish binaries AWS credentials must be passed to the build container.
|
|
If you are testing only the build (ie: `bob build`), these are optional.
|
|
|
|
In addition, unless you are building the official binaries for Heroku (which use the defaults
|
|
specified in each `Dockerfile`), you will need to override `S3_BUCKET` and `S3_PREFIX` to
|
|
match your own S3 bucket/use case.
|
|
|
|
If you only need to set AWS credentials, you can do so by setting the environment variables
|
|
`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` before calling the make commands.
|
|
|
|
For example:
|
|
|
|
```bash
|
|
set +o history # Disable bash history
|
|
export AWS_ACCESS_KEY_ID=...
|
|
export AWS_SECRET_ACCESS_KEY=...
|
|
set -o history # Re-enable bash history
|
|
make ...
|
|
```
|
|
|
|
If you need to override the default S3 bucket, or would prefer not to use credentials via
|
|
environment variables, then you need to instead use a Docker env file like so:
|
|
|
|
1. Copy the `builds/dockerenv.default` env file to a location outside the buildpack repository.
|
|
2. Edit the new file, adding at a minimum the values for the variables
|
|
`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` (see Docker
|
|
[env-file documentation](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file)).
|
|
3. Pass the path of the file to the make commands using `ENV_FILE`. For example:
|
|
|
|
```bash
|
|
make ... ENV_FILE=~/.dockerenv.python-buildpack
|
|
```
|
|
|
|
## Launching an interactive build environment
|
|
|
|
To start an interactive version of the build environment (ideal for development) use the
|
|
`buildenv` make target, passing in the desired `STACK` name. For example:
|
|
|
|
```bash
|
|
make buildenv STACK=heroku-18
|
|
```
|
|
|
|
This will create the builder docker image based on the latest image for that stack, and
|
|
then start a bash shell where you can run `bob build`, `bob deploy`, and so forth.
|
|
|
|
The `builds/` directory is bind-mounted into the running container, so local build formula
|
|
changes will appear there immediately without the need to rebuild the image.
|
|
|
|
## Bulk deploying runtimes
|
|
|
|
When a new Python version is released, binaries have to be generated for multiple stacks.
|
|
To automate this, use the `deploy-runtimes` make target, which will ensure the builder
|
|
image is up to date, and then run `bob deploy` for each runtime-stack combination.
|
|
|
|
The build formula name(s) are passed using `RUNTIMES`, like so:
|
|
|
|
```bash
|
|
make deploy-runtimes RUNTIMES='python-X.Y.Z'
|
|
```
|
|
|
|
By default this will deploy to all supported stacks (see `STACKS` in `Makefile`),
|
|
but this can be overridden using `STACKS`:
|
|
|
|
```bash
|
|
make deploy-runtimes RUNTIMES='python-X.Y.Z' STACKS='heroku-16 heroku-18'
|
|
```
|
|
|
|
Multiple runtimes can also be specified (useful for when adding a new stack), like so:
|
|
|
|
```bash
|
|
make deploy-runtimes RUNTIMES='python-A.B.C python-X.Y.Z' STACKS='heroku-20'
|
|
```
|
|
|
|
Note: Both `RUNTIMES` and `STACKS` are space delimited.
|