SSL証明書・Go言語開発・Linuxサーバー構築・セキュリティ
PostgreSQL は高機能・高信頼性のオープンソース RDB(リレーショナルデータベース)です。
Go 言語・PHP・Java など主要な言語から利用でき、JSON 型・全文検索・パーティションなど豊富な機能を持ちます。
この記事では Ubuntu 24.04 LTS へのインストールから Web アプリケーションからの接続まで解説します。
Ubuntu 24.04 のリポジトリには PostgreSQL 16 が含まれています。
sudo apt update sudo apt install -y postgresql postgresql-contrib # バージョン確認 psql --version # psql (PostgreSQL) 16.x
インストール後、PostgreSQL サービスは自動的に起動します。
# サービス状態確認 sudo systemctl status postgresql # OS 起動時に自動起動(通常はデフォルトで有効) sudo systemctl enable postgresql
PostgreSQL はインストール時に OS ユーザー postgres とデータベース管理者 postgres が作成されます。
初回の接続はこのユーザーで行います。
# postgres OS ユーザーに切り替えて psql を起動 sudo -u postgres psql # psql プロンプトが表示される # postgres=#
アプリケーション用のデータベースユーザーを作成します。postgres=# プロンプトで実行してください。
-- アプリ用ユーザーを作成(パスワードを設定) CREATE USER appuser WITH PASSWORD '強いパスワードをここに'; -- ユーザー一覧を確認 \du
OS コマンドでも作成できます:
sudo -u postgres createuser --pwprompt appuser
-- psql 内で実行(postgres ユーザーで接続中) CREATE DATABASE appdb OWNER appuser ENCODING 'UTF8' LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' TEMPLATE template0; -- 日本語ロケールが不要な場合(シンプル) CREATE DATABASE appdb OWNER appuser; -- データベース一覧を確認 \l
OS コマンドでも作成できます:
sudo -u postgres createdb -O appuser appdb
/etc/postgresql/16/main/pg_hba.conf がクライアント認証の設定ファイルです。
デフォルトではローカル接続は peer 認証(OS ユーザーと同名のみ接続可)になっています。
sudo nano /etc/postgresql/16/main/pg_hba.conf
アプリユーザーがパスワードで接続できるよう行を追加します:
# pg_hba.conf に追記(既存行の上に追加する) # TYPE DATABASE USER ADDRESS METHOD local appdb appuser scram-sha-256 host appdb appuser 127.0.0.1/32 scram-sha-256
設定を反映します:
sudo systemctl reload postgresql
# appuser でデータベース appdb に接続 psql -U appuser -d appdb -h 127.0.0.1 # パスワードを入力して接続できれば成功 # appdb=>
-- テーブル作成
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- データ挿入
INSERT INTO users (name, email) VALUES ('山田太郎', 'yamada@example.com');
-- データ取得
SELECT * FROM users;
-- テーブル一覧
\dt
Go から PostgreSQL に接続する場合は pgx ドライバが推奨されています。
go get github.com/jackc/pgx/v5
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/jackc/pgx/v5"
)
func main() {
dsn := os.Getenv("DATABASE_URL")
// 例: postgres://appuser:password@127.0.0.1:5432/appdb
conn, err := pgx.Connect(context.Background(), dsn)
if err != nil {
log.Fatal("DB接続失敗:", err)
}
defer conn.Close(context.Background())
var name string
err = conn.QueryRow(context.Background(),
"SELECT name FROM users WHERE id = $1", 1).Scan(&name)
if err != nil {
log.Fatal("クエリ失敗:", err)
}
fmt.Println("名前:", name)
}
接続文字列(DSN)は環境変数で管理するのがベストプラクティスです。 パスワードをソースコードに直接書かないようにしてください。
# 環境変数で設定する export DATABASE_URL="postgres://appuser:password@127.0.0.1:5432/appdb"
sudo apt install -y php-pgsql
<?php
$dsn = 'pgsql:host=127.0.0.1;port=5432;dbname=appdb';
$pdo = new PDO($dsn, 'appuser', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
$stmt->execute([':id' => 1]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['name'];
/etc/postgresql/16/main/postgresql.conf |
メイン設定(メモリ、接続数など) |
/etc/postgresql/16/main/pg_hba.conf |
クライアント認証設定 |
/var/lib/postgresql/16/main/ |
データディレクトリ |
/var/log/postgresql/ |
ログファイル |
Go 言語 Web アプリ入門 — net/http、JSON REST API、PostgreSQL 接続、systemd デーモン化
Docker 入門(Ubuntu 24.04) — Docker Compose で PostgreSQL + Go + Nginx 環境を構築
Web アプリケーションを本番公開する際は、SSL証明書による HTTPS 化が必須です。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
2009年から16年以上、RapidSSL(ラピッドSSL) 4,356円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。
審査サポート・インストール代行あり。平日 9:00〜18:00 のメールサポート付きです。
SSL証明書の購入はこちら / 購入から発行までの流れ / インストール代行サービス