アプリの心臓はデータベースだ.そしてDBの設定ミスは,情報漏洩とデータ消失という最悪の事故に直結する.VPSでDBを安全に動かす勘所を整理する.
対象はVPSでアプリとDBを動かす個人開発者.読み終えたとき,「とりあえず動く」から「安全に運用できる」へ一段上がれる状態を目指します.
なぜDB運用を軽く見てはいけないか
DBは最も価値が高く,最も復旧が難しい資産だ.アプリは作り直せても,失われたユーザーデータは戻らない.
そしてDBの外部公開はインターネット最悪の事故の一つだ.設定ひとつで全データが世界に晒される.勘所を押さえることは必須教養だ.
勘所1:DBを外部に公開しない
最優先はDBポートをインターネットに晒さないこと.同一VPS内のアプリからだけ繋ぐなら,localhostバインドで十分だ.
PostgreSQLをlocalhostのみで待ち受け
# postgresql.conf
listen_addresses = 'localhost'
# 確認
sudo ss -tlnp | grep 5432 # 127.0.0.1だけならOK勘所2:強いパスワードと最小権限
アプリ用ユーザーは必要なDBへの必要な権限だけに絞る.superuserでアプリを動かしてはいけない.
パスワードは長くランダムに.そして.envに置きGitに入れないのが鉄則だ.
勘所3:バックアップとリストアを両方試す
取れていても戻せなければ無意味だ.定期ダンプを取り,実際にリストアできるか必ず一度試す.
毎日ダンプ(cron)とリストア確認
0 3 * * * pg_dump -U app mydb | gzip > /home/deploy/backup/mydb-$(date +%F).sql.gz
# リストア確認(別DBへ)
gunzip -c mydb-2026-06-10.sql.gz | psql -U app restore_test勘所4:メモリと接続数を見積もる
DBはメモリを食う.接続数が増えるとメモリ不足でアプリごと落ちる.用途に応じてメモリに余裕のあるVPSを選ぶ.
アプリ側でコネクションプールを使い,無制限に接続を張らない設計にするのも安定運用の要だ.
勘所5:文字コードとタイムゾーンの落とし穴
文字化けは後から直すのが地獄だ.DB作成時にUTF-8(utf8mb4)を明示し,絵文字や多言語に耐えるようにする.
タイムゾーンも最初に決める.サーバー・DB・アプリで基準時刻を揃えると,日時バグの大半を防げる.
補論:DBは「速いディスク」と「巻き戻し」で安心が変わる
DBのレスポンスはディスク速度に大きく左右される.遅いストレージのVPSでは,クエリが詰まりアプリ全体が重くなる.
高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ はNVMe SSDでDBの読み書きが軽快に進み,スナップショットを取っておけば「移行・アップグレード前の状態」へ丸ごと戻せる.DB運用の試行錯誤を安全に行える基盤だ.
DB管理画面を公開するなら,取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ のドメイン+HTTPS+IP制限で固めるのが基本.むやみに公開しないことが最大の防御になる.
よくある質問
Q1:DBはアプリと同じVPSに置いていい?
個人開発・小規模なら問題ない.localhost接続にでき,構成もシンプルになる.規模が育てばDBを別サーバーやマネージドへ分離する.
Q2:PostgreSQLとMySQLどちらを選ぶ?
どちらでも良いが,型の厳密さや高度な機能ならPostgreSQL,枯れた情報量とWordPress連携ならMySQLが選ばれやすい.迷ったらPostgreSQLで困らない.
Q3:マネージドDBを使うべき?
運用負荷を下げたいなら有効だが,固定費と原価管理を優先するならVPS上で自前運用が合理的だ.バックアップさえ堅実なら個人開発では自前で十分戦える.
まとめ ― DBは「公開しない・戻せる・速い」の3点で守る
DB運用の核心は,外部に公開しない・確実に戻せる・十分に速いの3点だ.派手な最適化より,この基本が事故を防ぐ.
まずはlocalhostバインドの確認とバックアップのリストア検証から.この2つができていれば,あなたのデータは最悪の事態から守られている.