Project Configuration¶
Cob puts a strong emphasis on configuration, allowing you to control the various aspects of your project and other 3rd party tools.
Project Config¶
Assuming you need a place to store project-specific configuration values, you can use the .cob-project.yml
file located at the root of your project.
Any configuration written in this file will be available to your project via the current project’s config
attribute. For instance, for the following contents of .cob-project.yml
:
name: myproj
some_value: 2
You can access some_value
through the config
project attribute:
...
from cob.project import get_project
...
value = get_project().config['some_value']
Note
Some keys in the project config have special meaning, like the project name stored in the name
key or flask_config
described below. To avoid name clashes, it is wise to store all of your specific configuration under a specific key as a nested structure, such as config
or project-config
Cob Config Options¶
pypi_index_url
- For use with pypi other than https://pypi.org/simplespecific_virtualenv_pkgs
- a string of the form ‘pip==19.0.1 setuptools==40.6.3’. this will tell cob to udpate pip/setuptools versions inside cob’s virtualenv before installing dependencies.
Managing Dependencies¶
Apart from the base dependencies needed by cob itself, which takes care of the facilities your project uses (this includes Flask, SQLAlchemy and Celery for example), you can specify additional dependencies your code relies on. This can be done using the deps
configuration value:
# .cob-project.yml
...
deps:
- requests>=1.1.0
Flask Config¶
You can easily add configuration to Flask’s config by specifying it in the flask_config
key of .cob-project.yml
:
# .cob-project.yml
...
flask_config:
SQLALCHEMY_DATABASE_URI: sqlite:////path/to/db.db
Configuration Loading and Overrides¶
In addition to the current project’s .cob-project.yml
, Cob looks in other places to load
configuration snippets. This allows you to add overrides and overlays used either locally during
development, or per-server for deployment.
The following locations are scanned for configuration overrides:
/etc/cob/conf.d/<project name>
~/.config/cob/projects/<project name>
This means that if you would like a project named testme
to have a private piece of information
in its config loaded during deployment and not stored in the source repository, all you have to do
is add the following:
SOME_SECRET_CONFIG: 'secret'
In /etc/cob/conf.d/testme/000-private.yml
on your server.
Deployment Configuration¶
Several aspects of Cob’s deployment can be configured via the project’s configuration files.
Gunicorn Options¶
By adding a gunicorn
dictionary to your project’s YAML file, you can control Gunicorn options directly:
# .cob-project.yml
gunicorn:
max_requests: 20
Exposed Ports¶
When deploying via Docker, Cob automatically exposes port 80 for your webapp, but leaves other ports private.
You can customize this behavior using the docker.exposed_ports
configuration. This configuration value is a mapping, containing the list of exposed ports for each service name:
# .cob-project.yml
docker:
exposed_ports:
wsgi:
- 443
- 12345