RenderでDjango+PostgreSQLをデプロイ＆接続する方法

# RenderでDjango+PostgreSQLをデプロイ＆接続する完全ガイド（2025年版）
*〜 Qiita 投稿用テンプレート 〜*

> **この記事でわかること**
> - GitHub 上の既存 Django プロジェクトを Render にデプロイする手順
> - Render で PostgreSQL データベースを作成し、アプリと安全に接続する方法
> - DBeaver 等のクライアントから外部接続する際のポイント
> - つまずきやすいポイントとトラブルシューティング

イメージとしてはこんな感じの環境設定ができるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794260/56a8a0b6-8ebd-4109-843f-7c8b62c52ee7.png)


---

## 1. 前提条件

| 項目 | バージョン例 |
| --- | --- |
| Python | 3.11 以上 |
| Django | 5.0 以上 |
| GitHub リポジトリ | `main` ブランチに push 済み |
| ファイル | `requirements.txt`, `runtime.txt`, `.env.example` など |

```bash
# requirements.txt 抜粋
Django>=5.0,<6.0
dj-database-url>=2.0
gunicorn
whitenoise
psycopg[binary]  # PostgreSQL ドライバ
```

---

## 2. Render アカウント作成 & GitHub 連携

1. <https://dashboard.render.com> にアクセスし GitHub / GitLab / Bitbucket でサインアップ  
2. 右上の **New ➜ Web Service** をクリック  
3. デプロイしたいリポジトリを選択  

Render はリポジトリへ Push される度に自動デプロイが走ります。

---

## 3. PostgreSQL データベースを作成

1. **New ➜ PostgreSQL**
2. **Service Name** と **Database Name** を任意で入力
3. プラン（Free / Standard など）とリージョン（例: oregon）を選択し **Create Database**
4. 作成後「_Connection details_」に **Internal URL** と **External URL** が表示されます
5. テスト用なのでマスクしていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794260/a126d3c5-fd70-4777-9b2f-914429d48a1b.png)


| 用途 | 使い分け |
| --- | --- |
| **Internal URL** | Render 上の別サービス（Web, Worker など）から接続する際に使用（低レイテンシ・Private Subnet） |
| **External URL** | ローカル端末や DBeaver など外部ツールから接続する際に使用 |

> **ポイント**: アプリからは基本 `Internal URL` を使いましょう。

---

## 4. Django プロジェクトを DB 対応にする

### 4‑1. `settings.py` を環境変数ベースに変更

```python
import dj_database_url, os

DATABASES = {
    "default": dj_database_url.config(
        # Renderから渡されるURL。
        env="DATABASE_URL",  
        conn_max_age=600,
    )
}
```

### 4‑2. 静的ファイル（collectstatic）対策

```python
STATIC_URL = "static/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
MIDDLEWARE.insert(1, "whitenoise.middleware.WhiteNoiseMiddleware")
```
### 4‑3. ローカル開発用 **.env** サンプル

> Render の **External URL** を使ってローカル PC から DB に直接接続する場合の設定例です。
```bash
# .env (local development)
DATABASE_URL=postgresql://<user>:<password>@dpg-xxx.oregon-postgres.render.com:5432/<db>?sslmode=require
```

- `.env` を読み込むには `python-dotenv` または `django-environ` を利用する方法が一般的です  

---

## 5. Render Web Service を作成

| フィールド | 設定例 |
| --- | --- |
| **Name** | `my-django-app` |
| **Environment** | `Python 3` |
| **Build Command** | `pip install -r requirements.txt` |
| **Start Command** | `gunicorn myproject.wsgi:application` |
| **Instance Type** | Free または Starter |
| **Region** | DB と同じリージョン |

### 5‑1. 環境変数を追加

#### 5‑2. Render ダッシュボードで Environment Variables を追加する手順

以下は `DATABASE_URL`（Internal URL）を例に、Render ダッシュボードから環境変数を登録する流れです。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794260/34c4efca-0fe4-47df-a08a-b5ccee61f9d3.png)


| 手順 | 操作 | 備考 |
| --- | --- | --- |
| 1 | Render ダッシュボード ➜ 対象 **Web Service** をクリック | プロジェクトトップへ |
| 2 | 左メニュー **Environment ➜ Environment Variables** を選択 |  | 
| 3 | **Add Environment Variable** ボタンを押下 |  |
| 4 | **Key** に `DATABASE_URL`、**Value** に Internal URL を貼り付け | `postgresql://user:pass@...` |
| 5 | **Save Changes** をクリック | 直後に再デプロイが走る場合があります |
| 6 | 必要に応じて `DJANGO_SECRET_KEY` など他の変数も同様に追加 |  |


---

## 6. マイグレーション & 管理ユーザ作成（**ローカル実行**）

Render 上の DB に対して **ローカル PC** からマイグレーションをかける方法です。  
あらかじめ [4‑3](#4‑3-ローカル開発用-env-サンプル) の `.env` を用意し、`DATABASE_URL` に **External URL** を設定しておきます。

```bash

# 1) .env を読み込んだ状態でマイグレーション
$ python manage.py migrate --noinput

# 2) 管理ユーザを作成
$ python manage.py createsuperuser --username admin --email you@example.com
```

---

## 7. DBeaver から外部接続する方法

1. DBeaver ➜ **New Database Connection ➜ PostgreSQL**
2. **Host** : `External URL` の `@` 以降〜ドメイン名部分（例: `dpg-xxx.oregon-postgres.render.com`）
3. **Database** : Render で設定した DB 名
4. **Username / Password** : Render で表示されている値
5. **Port** : `5432`（デフォルト）

Internal URL では接続できないので注意！ 外部ツールは必ず **External URL** を使用します。

---

## 8. 動作確認

```bash
$ curl https://my-django-app.onrender.com/  # HTTP 200 が返れば OK
```

ブラウザで `/admin/` にアクセスし、ログインできるか確認しましょう。

---

## 11. まとめ

- Render では **Web Service** と **PostgreSQL** をワンクリックで用意できる
- アプリからは **Internal URL**、外部ツールからは **External URL** を使い分ける
- デプロイ設定は「環境変数がすべて」と言っても過言ではない

---

### 参考リンク

- Render 公式ドキュメント  
    - Postgres Internal / External URL  
    - Django デプロイガイド  
    - Web Service 基本仕様