docker-composeで「https-portal + pgweb + postgreSQL」を立ち上げる

ノウハウ
スポンサーリンク

PostgreSQLのお試し環境を作りたいと思い、PostgreSQLサーバ+pgwebサーバ+webサーバの最低限の構成を構築しました。
構築手順を備忘録として残しておきます。

環境は以下です。

  • Ubuntu 20.04.1 LTS
  • Docker: 19.03.13
  • Docker Compose: 1.27.4
  • pgweb: latest (2020/10/28 執筆時点では、0.11.7が最新)
  • postgres: latest (2020/10/28 執筆時点では、13.0が最新)

 

目次

 


 

サーバ構成

Ubuntsuサーバ(ホスト側)の上にwebコンテナ、pgwebコンテナ、pgコンテナを立ち上げることでWebサーバ + pgwebサーバ + PostgreSQLサーバの最低限の構成を構築しました。

 

ディレクトリ構成は以下を想定します。

pgtest/
|-- .env
|-- dbdata
|-- docker-compose.yml
`-- ssl_certs

  

Ubuntuサーバ(ホスト側)の環境を構築する

ホスト側はDockerが利用できて、インターネットからアクセスできればどのようなものでも良いです。
すでに構築しているものがあるのなら、この章は読み飛ばしてください。

  

もし、構築をこれからするという方には、ConoHa VPSが手軽に利用できてオススメです。
ConoHa VPSなら、初期費用なしで一時間単位の課金となるため、ちょっと検証用にLinux環境が欲しいなと思ったら一時的に立ち上げて、すぐに解約するって形でも利用できます。
1時間あたり1.5円なので、24時間借りても36円、1ヶ月借りても880円と格安です(メモリ1GB、CPU2コア、SSD100GBのスタンダードモデルの場合)。

 

この章では、ConoHa VPS上にDocker環境を立ち上げる方法を紹介します。
Dockerを立ち上げるまでの工程としては以下の3STEPです。

STEP1. ConoHa VPSでUbuntuサーバを立ち上げる
STEP2. ConoHa VPSにドメインを設定する
STEP3. ConoHa VPSにDocker環境を構築する

 

STEP1. ConoHa VPSでUbuntuサーバを立ち上げる

ConoHa VPSでUbuntuサーバを立ち上げ、初期設定をします。
手順は以下のブログでまとめましたので、そちらを参考にしてください。

  

STEP2. ConoHa VPSにドメインを設定する

pgwebサーバにドメインでアクセスするために、ドメインを設定します。
手順は以下のブログでまとめましたので、そちらを参考にしてください。

 

STEP3. ConoHa VPSにDocker環境を構築する

ConoHa VPS上のUbuntuサーバにDockerをインストールします。
手順は以下のブログでまとめましたので、そちらを参考にしてください。

 

 

webコンテナ、pgwebコンテナ、pgコンテナを立ち上げる

前置きが長くなってしまいましたが、Webサーバ + pgwebサーバ + PostgreSQLサーバの最低限の構成をコンテナで立ち上げます。
コンテナを立ち上げるために、

  • pgtest/docker-compose.yml
  • pgtest/.env

という2つのファイルを作成します。

 

pgtest/docker-compose.ymlを作成する

webコンテナ、pgwebコンテナ、pgコンテナは複数のコンテナを1ファイルで立ち上げることができるDocker-Composeを使って構築することにします。

Docker-Composeは「docker-compose.yml」というファイルでどのようなコンテナを立ち上げるかを設定できます。

 

【pgtest/docker-compose.yml】

version: '3.8'
services:
    pg:
        image: postgres:latest
        container_name: pg
        restart: always
        volumes:
            - ./dbdata:/var/lib/postgresql/data
        expose:
            - 5432
        environment:
            - POSTGRES_DB=${PG_DB_NAME}
            - POSTGRES_USER=${PG_DB_USER}
            - POSTGRES_PASSWORD=${PG_DB_PASSWORD}
            - TZ=${PG_DB_TZ}
        command: --port=5432
    pgweb:
        image: sosedoff/pgweb
        container_name: pgweb
        restart: always
        expose:
            - 8080
        command: /usr/bin/pgweb --bind=pgweb --listen=8080
        depends_on:
            - pg
    web:
        image: steveltn/https-portal:1
        container_name: web
        restart: always
        volumes:
            - ./ssl_certs:/var/lib/https-portal
        ports:
            - '80:80'
            - '443:443'
        environment:
            DOMAINS: >-
                ${SITE_DOMAIN} -> http://pgweb:8080/,
            STAGE: 'staging'
        depends_on:
            - pgweb

 

pgtest/.envを作成する

環境依存性のある変数やセキュアな情報は.envに記載します。
Docker-Composeはdocker-compose.ymlと同じディレクトリ上にある.envファイルを自動で読み取るので、pgtest/ディレクトリ上に.envを作成します。

 

【pgtest/.env】

PG_DB_NAME=PGDB
PG_DB_USER=shiguregaki
PG_DB_PASSWORD=pg_pAssw0rd
PG_DB_TZ=asia/Tokyo
SITE_DOMAIN=shiguregaki-test.com

 

webコンテナ、pgwebコンテナ、pgコンテナを立ち上げる

/pgtestディレクトリに移動して、以下のコマンドを実行することで、コンテナを起動させます。

$ docker-compose up

以下のように表示されたらOKです。

[2020-10-27 22:50:53.471] web      | [cont-init.d] 20-setup: exited 0.
[2020-10-27 22:50:53.478] web      | [cont-init.d] 30-set-docker-gen-status: executing... 
[2020-10-27 22:50:53.478] web      | [cont-init.d] 30-set-docker-gen-status: exited 0.
[2020-10-27 22:50:53.484] web      | [cont-init.d] done.
[2020-10-27 22:50:53.484] web      | [services.d] starting services
[2020-10-27 22:50:53.495] web      | [services.d] done.

 

これで、コンテナが問題なく起動することを確認出来きました。
ただし、このままでは、コンテナの出力がターミナルソフトとなっており、ターミナルソフトが操作できなくなってしまうので、コンテナをバックグランドで起動させることにします。

一度「Ctrl+c」でコンテナを停止させます。
そして、再度以下のコマンドを実行します。

$ docker-compose up -d
  • docker-compose upコマンドに-dオプションをつけることで、バックグラウンドでコンテナを起動させることができます。

 

pgwebサーバにwebアクセスしてみる

pgwebサーバはhttps://{SITE_DOMAIN}で公開されているので、ブラウザでアクセスすると、pgwebのログインページが表示されるはずです。

ここで、以下のように設定すればログインできるはずです。

パラメータ設定値
Hostpg
Username環境変数${PG_DB_USER}で設定した値
Password環境変数${PG_DB_PASSWORD}で設定した値
Database環境変数${PG_DB_NAME}で設定した値
SSL Modedisable

 

注意: プライバシーエラーについて

「pgtest/docker-compose.yml」の「services.web.environment.STAGE」がstagingのため、証明書がオレオレ証明書になっており、プライバシーエラーが出ます。

pgwebサーバにアクセスすることができたら、「pgtest/docker-compose.yml」の「services.web.environment.STAGE」をproductionに変更しておきましょう。
productionに変更することで、プライバシーエラーが出なくなります。

 

PostgreSQLサーバにログインしてみる

PostgreSQLサーバにログインすることで、DBやユーザを新規作成/削除するコマンドを実行したり、DBにログインして、テーブル制御をしたりすることができます。

 

PostgreSQLサーバにログインしてみる

PostgreSQLサーバはpgコンテナ上に立ち上がっているので、dockerコマンドでログインできます。

$ docker exec -it pg bash

特にユーザを指定していないため、rootでPostgreSQLサーバにログインします。
ログインすると以下のような表示に変わります。

root@240708905a63:/#
  • 「@240708905a63」はコンテナIDで、任意の値となっているはずなので気にしなくて良いです。

 

PostgreSQL DBにログインしてみる

ログイン先のDB情報として、DB名は環境変数PG_DB_NAMEで、ログインするユーザは環境変数PG_DB_USERで設定しているため、それを指定するために-Uオプションと-dオプションを使用します。

> psql -U {$PG_DB_USERで指定したユーザ名} -d {$PG_DB_NAMEで指定したDB名}

 

補足: 「role "root" does not exist」エラーについて

ググるとpsqlコマンドについてまとめているサイトがたくさんありますが、ユーザがデフォルトの特権ユーザであるpostgresをベースに-Uオプションを省略したコマンドを紹介しているものが多いです。-Uオプションを省略するとPostgreSQLサーバにログインしているユーザでDBへ接続しようとします。pgコンテナでは、PostgreSQLサーバにrootでログインしているので、-Uオプションで$PG_DB_USERで設定したユーザを指定する必要があります。
もし-Uオプションを指定しないと、以下のようなエラーが出ます。

psql: error: could not connect to server: FATAL:  role "root" does not exist

 

 

PostgreSQLのコマンドについて

PostgreSQLではSQL文の他にメタコマンドがあります。
また、PostgreSQLサーバ/クライアントアプリケーションのコマンドもあります。

データベースやユーザの参照やテーブルの操作をする場合は、SQL文やメタコマンドを利用し、データベースやユーザ自体を作成/削除したい場合は、サーバ/クライアントアプリケーションコマンドを利用するイメージです。

また、SQLコマンド、メタコマンドはPostgreSQL DBにログインして打てるコマンド(psqlでログイン)で、サーバ/クライアントアプリケーションコマンドはPostgreSQLサーバにログインして打てるコマンド(サーバにログイン)です。

 

まとめ

PostgreSQLサーバのお試し環境を作ることができました。
PostgreSQLは一般的なSQLコマンドの他にメタコマンドやPostgreSQLサーバ/クライアントアプリケーションのコマンドがあり、いろいろいじりたくなったので、このお試し環境を立ち上げました。

以下の記事で自分がPostgreSQLをいじってみていろいろ感じたことをまとめました。(個人的な備忘録ですが、、、)よろしければ、ご覧ください。

404 NOT FOUND | Create it Myself
週末エンジニアの備忘録

 

 

また、ConoHa上でDockerを導入したり、Webアプリを立ち上げたりした内容を以下の記事でまとめました。こちらもよろしければご覧になってください。

 

広告

Dockerをやるなら以下の書籍がオススメです。
Dockerとは何か?から複数のコンテナを管理することができるDocker Compose、Kubernetesまでまとめられています。

 


 

ConoHa VPS は初期費用不要で月に数百円で利用できる仮想サーバのサービスです。
以下のような方には非常にオススメのサービスとなっています!

  • 勉強がてらLinuxの環境をちょっと触ってみたい
    管理者権限が実行可能なLinuxサーバ環境が構築可能です!
  • スモールスタートでサービスを提供して、うまくいったら規模をスケールアップしたい
    後からメモリサイズやCPU数などのスケールアップ/スケールダウン可能です!
  • AWSやGCPなどのクラウドサービスは高いので、もっと安くサーバ構築したい
    初期費用なし、月数百円(1時間単位も可)で利用可能です!

 

以上!

コメント

タイトルとURLをコピーしました