Chef で PostgreSQL 9.3 をインストール

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

  • OS: Ubuntu 12.04 (Debian でも使えそうですが未検証です)
  • Cookbook: postgresql 3.3.4

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

以上です。

© 2023 暇人じゃない. All rights reserved.