---
title: Cloud Foundry上に開発/デモ用データベースをデプロイするメモ
tags: ["Cloud Foundry", "Pivotal Cloud Foundry", "Docker"]
categories: ["Dev", "PaaS", "CloudFoundry", "PCF"]
date: 2019-02-07T13:16:00Z
updated: 2019-02-12T13:24:12Z
---

例えばPostgreSQLを使う際、本番環境ではRDSを使うけど、開発環境ではRDSは使いたくない、けれどもMarketplaceになくてセットアップするのが面倒。という時に、Docker Imageを使ってPostgreSQLをCloud Foundryにデプロイできます。
通常のCloud FoundryアプリケーションではHTTPリクエストしか受け付けられませんが、
Container to Container Networkingを使うことでコンテナ間はTCP/UDPアクセス可能です。

つまり、Docker + Container to Container NetworkingでPostgreSQLをCloud Foundryにデプロイしてアプリケーションからアクセスすることが可能です。
ただし、永続ボリュームではないのでコンテナをリスタートするたびにデータは消滅しますので、ちょっとした開発用やデモ用途限定です。

### PostgreSQLのデプロイ

次の`manifest.yml`を用意します。

``` yaml
applications:
- name: postgres
  health-check-type: process
  memory: 256m
  docker:
    image: postgres:9.6.10
  routes:
  - route: postgres.apps.internal
  env:
    POSTGRES_USER: vcap
    POSTGRES_PASSWORD: my-secret
    POSTGRES_DB: demo
    PGDATA: /tmp/data
    POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C
```

デプロイします。

> Docker Imageのデプロイが有効で、かつCloud FoundryのService Discoveryが使えることが必須です。

```
cf push
```

これでPostgreSQLがデプロイできました。`apps.internal`ドメインを使うのがポイントです。
外向けにはルーティングされません。

ちなみに、TCP Routingの機能を利用すれば外向けにルーティング可能です。


### アプリのデプロイ

次の`manifest.yml`を用意します。Spring Bootで作ったアプリを前提としています。

``` yaml
applications:
- name: demo
  path: target/demo-0.0.1-SNAPSHOT.jar
  env:
    SPRING_DATASOURCE_URL: jdbc:postgresql://postgres.apps.internal:5432/demo
    SPRING_DATASOURCE_USERNAME: vcap
    SPRING_DATASOURCE_PASSWORD: my-secret
```

`--no-start`をつけてデプロイします。その後、`demo`から`postgres`へのネットワークポリシーを定義し、5432ポートへのアクセスを許可します。
そしてstartします。

```
cf push --no-start
cf add-network-policy demo --destination-app postgres  --protocol tcp --port 5432
cf start demo
```
