Adding a database¶
No web application is complete without talking to some kind of database. We’re going to use Postgres for this example.
There are a few working parts to this:
Installing and configuring postgres¶
For now we’re just going to stick the database on the same VM as the application.
Create a new file, postgres.yay, and put in it:
extend resources:
- Package:
- name: postgresql
- name: libpq-dev
- File:
name: /etc/postgresql/9.1/main/pg_hba.conf
static: pg_hba.conf
owner: postgres
group: postgres
mode: 0640
- Execute:
name: restart-postgres
command: /etc/init.d/postgresql restart
policy:
execute:
when: apply
on: File[/etc/postgresql/9.1/main/pg_hba.conf]
for name in postgres.databases:
set db = postgres.databases[name]
- Execute:
name: postgres-create-user
unless: sh -c "psql -q -c '\du' -t | grep '^ {{name}}'"
# This allows us to set a password, where createuser doesn't easily
command: psql -c "CREATE ROLE {{db.username}} PASSWORD '{{db.password}}' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN"
user: postgres
- Execute:
name: postgres-create-database
unless: sh -c "psql -l | grep '^ {{name}}'"
command: createdb -O {{db.username}} -E UTF-8 -T template0 {{name}}
user: postgres
You will also need a template pg_hba.conf, that should contain:
local all postgres peer
local all all md5
host all all 127.0.0.1/32 md5
You can see from this that postgres is again using a top level key to find it’s configuration. In this case you should add the following to your Yaybufile:
postgres:
databases:
chaser:
username: chaser
password: chaser
First, we’re going to deploy a new version of the chaser code. This one uses a database. Change the branch to deploy in your configuration from:
branch: part-1
to:
branch: postgres