暇人じゃない

Chef で PostgreSQL 9.3 をインストール

postgresql cookbook を使って Chef で PostgreSQL 9.3 をインストールした際のメモです。

Cookbook はオフィシャルのものを使いました。デフォルトでは PostgreSQL 9.1 がインストールされます。

まずは attributes 。

enable_pgdg_apt を有効にすることで PostgreSQL の APT リポジトリが使用できるようになります。 ファイルやディレクトリ名を指定し直しているのが気持ち悪いのですが、Cookbook デフォルトの 9.1 のパスになってしまうので仕方なく…

attributes/default.rb:

default['postgresql']['enable_pgdg_apt']  = true
default['postgresql']['version']          = '9.3'

default['postgresql']['server']['packages'] = ['postgresql-9.3', 'postgresql-server-dev-9.3']
default['postgresql']['client']['packages'] = ['postgresql-client-9.3']

default['postgresql']['dir'] = '/etc/postgresql/9.3/main'

default['postgresql']['config']['data_directory']           = "/var/lib/postgresql/#{default['postgresql']['version']}/main"
default['postgresql']['config']['hba_file']                 = "/etc/postgresql/#{default['postgresql']['version']}/main/pg_hba.conf"
default['postgresql']['config']['ident_file']               = "/etc/postgresql/#{default['postgresql']['version']}/main/pg_ident.conf"
default['postgresql']['config']['external_pid_file']        = "/var/run/postgresql/#{default['postgresql']['version']}-main.pid"
default['postgresql']['config']['unix_socket_directories']  = '/var/run/postgresql'
default['postgresql']['config']['unix_socket_directory']    = nil
default['postgresql']['config']['ssl_cert_file']            = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
default['postgresql']['config']['ssl_key_file']             = '/etc/ssl/private/ssl-cert-snakeoil.key'

default['postgresql']['initdb_locale'] = 'en_US.UTF-8'

default['postgresql']['password']['postgres'] = 'md5XXX...' # md5 でハッシュ化したパスワード

default['postgresql']['config_pgtune']['db_type'] = 'web'
default['postgresql']['config_pgtune']['total_memory'] = '1024000kB'

レシピは普通ですね。

recipes/default.rb:

include_recipe 'postgresql::server'
include_recipe 'postgresql::client'
include_recipe 'postgresql::config_pgtune'

おまけ、データベースの作成。

postgresql_connection_info = {
  host: 'localhost',
  port: 5432,
  username: 'postgres',
  password: node['database']['postgres_password'],
}

postgresql_database node['database']['name'] do
  connection postgresql_connection_info
  action     :create
  template  'template0'
  encoding  'UTF8'
  collation 'en_US.UTF-8'
end

以上です。