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
以上です。
新しい投稿
ブログを移転しました