docker-composeで立ち上げた「https-portal + Django + postgreSQL」にpgwebを追加する

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

 

ちょっとしたサービスを作りたいと思い、勉強しながらConoHa VPS上でDocker環境を構築中です。

前記事(docker-composeで「https-portal+Django+postgreSQL」を立ち上げる(環境変数まできちんと考える))で、「https-portal+Django+postgreSQL」を立ち上げることができたので、今回はそこにブラウザでpostgresqlを操作できるpgwebを追加したいと思います。

 

環境は以下です。

  • ConoHa VPS (メモリ 1GB/CPU 2Core/SSD 100GB)
  • Ubuntu 18.04.4 LTS
  • Docker: 19.03.8 (2020/3/22 執筆時点の最新)
  • Docker Compose: 1.25.4 (2020/3/22 執筆時点の最新)
  • https-portal: 1 (2020/3/22 執筆時点の最新)
  • Python: 3.8 (2020/3/22 執筆時点の最新)
  • Django: 3.0.4 (2020/3/22 執筆時点の最新)
  • psycopg: 2.8.4 (2020/3/22 執筆時点の最新)
  • uWSGI: 2.0.18 (2020/3/22 執筆時点の最新)
  • postgres: latest (2020/3/22 執筆時点では、12.2が最新)
  • pgweb: latest (2020/3/22 執筆時点では、0.11.6が最新)

 

目次

 


 

事前準備

事前に以下の準備が必要です。

  • docker-composeで立ち上げた「https-portal+Django+postgreSQL」の環境

 

立ち上げ方は、以下の前記事を参考ください。
※仮想専用サーバのConoHa VPS上での構築を想定していますが、Linuxであれば同じ手順を踏襲することができると思います。

 

pgwebアクセス用のホスト名を作成する

pgwebアクセス用に既存のドメインに、「pgweb.ドメイン名」というホスト名を追加します。
追加方法は、「https-portal+Django+postgreSQL」を構築したサーバによるため、ご自分の環境に合わせて設定をしてください。

以下ではConoHa VPSでホスト名を追加する方法を記載します。

 

ConoHa VPSで、ホスト名を設定する

「ConoHa VPSにログイン⇒左メニューのDNS」をクリックする。
以下の手順で、ホスト名を設定する。

  1. 「vドメイン名」をクリックして、登録内容を広げる
  2. ペンアイコンをクリックして編集モードにする
  3. 「+」アイコンをクリックする
  4. 名称を「pgweb」、値を「サーバのIPアドレス」にすることで、ホスト名とサーバのIPアドレスを紐づける
  5. 登録できたら、「保存」をクリックする

 

docker-composeで立ち上げた「https-portal+Django+postgreSQL」にpgwebを追加する

作業ディレクトリとしてホームディレクトリに「work」を作成し、以下のようなディレクトリ構成を作成していきます。

work
|-- db
|   `-- dbdata
|-- django
|   |-- Dockerfile
|   `-- requirements.txt
|-- docker-compose.yml
|-- nginx
|   |-- conf
|   |   `-- mysite_nginx.conf.temp
|   |-- script
|   |   `-- 11-set-nginx-env
|   |-- ssl_certs
|   `-- uwsgi_params
`-- src
    |-- manage.py
    |-- mysite
    |   |-- __init__.py
    |   |-- asgi.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    `-- static

 

ホスト側のサーバとコンテナ側の構成イメージは以下のような関係となります。

 

pgweb関係の環境変数を定義する

pgwebを立ち上げるために、以下を環境変数化しました。

  • pgwebコンテナの名称(PGWEB_CONTAINER_NAME)
  • pgwebコンテナのポート番号(PGWEB_CONTAINER_PORT)

 

以下のコマンドで環境変数を定義するファイルを編集します。

$ vi ~/work/.env

 

【編集内容】

以下の内容を「~/work/.env」に追加します。

PGWEB_CONTAINER_NAME=pgweb
PGWEB_CONTAINER_PORT=8080
  • 他の環境変数も任意のものに変更しても大丈夫です。

 

「docker-compose.yml」を編集する

以下のコマンドで「docker-compose.yml」を編集します。
pgwebに関する内容だけ追加します。

$ vi ~/work/docker-compose.yml

 

【編集内容】

version: '3.5'
services:
  web:
    image: steveltn/https-portal:1
    container_name: ${HTTPS_PORTAL_CONTAINER_NAME}
    restart: always
    volumes:
      - ./nginx/ssl_certs:/var/lib/https-portal
      - ./nginx/conf/mysite_nginx.conf.temp:/etc/nginx/conf.d/mysite_nginx.conf.temp:ro
      - ./nginx/script/11-set-nginx-env:/etc/cont-init.d/11-set-nginx-env:ro
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params:ro
      - ./src/static:/static
    ports:
      - '80:80'
      - '443:443'
    env_file:
      - .env
    environment:
      DOMAINS: >-
        ${DOMAIN_NAME} -> http://${HTTPS_PORTAL_CONTAINER_NAME}:${NGINX_WATCH_PORT}/,
        pgweb.${DOMAIN_NAME} -> http://${PGWEB_CONTAINER_NAME}:${PGWEB_CONTAINER_PORT}/,
      STAGE: 'staging'
    depends_on:
      - django
  django:
    build: ./django
    container_name: ${DJANGO_CONTAINER_NAME}
    volumes:
      - ./src:/code
    expose:
      - ${DJANGO_CONTAINER_PORT}
    env_file:
      - .env
    command: uwsgi --socket :${DJANGO_CONTAINER_PORT} --module mysite.wsgi
    depends_on:
      - db
  db:
    image: postgres:latest
    container_name: ${DB_CONTAINER_NAME}
    volumes:
      - ./db/dbdata:/var/lib/postgresql/data
    expose:
      - ${DB_CONTAINER_PORT}
    env_file:
      - .env
    environment:
      - POSTGRES_USER=${DB_USER_NAME}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=${DB_NAME}
  pgweb:
    image: sosedoff/pgweb:latest
    container_name: ${PGWEB_CONTAINER_NAME}
    restart: always
    expose:
      - ${PGWEB_CONTAINER_PORT}
    env_file:
      - .env
    command: /usr/bin/pgweb --bind=${PGWEB_CONTAINER_NAME} --listen=${PGWEB_CONTAINER_PORT}
  • pgwebはsosedoff/pgwebを使います。
  • web:STAGE:pgweb.${DOMAIN_NAME}というホスト名を追加しています。

 

コンテナを起動させる

これで、設定は終了です。
最後に、Docker Composeを実行して、コンテナを起動させます。

$ cd ~/work
$ docker-compose up

 

【実行結果】

以下のように表示されればOK

Starting pgweb ... done
Starting db    ... done
Starting django ... done
Starting web    ... done

 

Djangoにアクセスしてみる

ブラウザから、「https://pgweb. ドメイン名 」にアクセスしてみてください。

以下のように、pgwebのログイン画面が表示されればうまくpgwebが起動しています。

 

上記のように、DBに設定したユーザ名やパスワード、DB名を入れれば、ログインできるはずです。
ただし、SSLでのアクセスではないため、SSL Modeはdisableにしてください。

ログインできれば、以下のようなDBを編集できる画面が表示されるはずです。

 

 

 

関連情報

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

 

広告

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

 


 

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

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

 

以上!

コメント

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