プログラミング Tips

ITエンジニアの雑記ブログ。
IT関連ニュースの考察や、プログラミングに関するTipsの備忘録として…
育児や日常の雑記帳としても、記事を投稿していきます。

プログラミングと日常生活に関する情報を発信しています。

ConoHa VPS の Debian OS に Djangoベースのサービスデプロイしてみた!!

Pythonの超便利なフレームワーク「Django」を使って、WEBサービス開発を行なってきたが、そろそろ公開できそうな状況になってきたので、勉強も兼ねてデプロイしてみた。

運用コスト面から、今回はGMOさん提供の"ConoHa VPS"を使用することにした。

思ったほど、デプロイまでのVPS設定やDjangoの設定(staticファイルのパス設定など)の情報が見つからなかったので、自分用備忘録としてまとめてみた。

VPSの設定からDjango設定までをスクリプトで一発でドカンとできたらいいなぁ〜と思うけど、今回はまずデプロイすることが目的なので、そこらへんは追々…



環境

クライアント(手元)のPC

  • MacOSX 10.13.4

サーバー "ConoHa VPS"

  • Debian 9
  • Apache2.4.25(Debian)
  • Python 3.5.3
  • Django 2.0.2
  • pip3 9.0.1

STEP.1:ConoHa VPSで、[Debian9]ベースのサーバーを追加

ConoHa VPSにサーバーを設置する

  1. ここからConoHaサービスにログイン
  2. 「サーバーの追加」を選択
  3. 各種項目を設定
    • リージョンを「東京」を選択
      ConoHaVPS_createServer1

    • VPS(Virtual Private Server。仮想専用サーバーの略)と、そのスペックを選択
      ConoHaVPS_createServer2

    • VPSにインストールするOSイメージに「Debian」の最新バージョン9.0を選択
      ConoHaVPS_createServer3

    • "root"の初期パスワードを設定
       ※1:以降、このパスワードはコンソール上から変更できないので注意!!
      ※2:ホームタグを必要に応じて適当な名前に変更
      ConoHaVPS_createServer4

    • 「オプション」項目は今回、特に変更しない
      ConoHaVPS_createServer5



  4. 設定内容と価格を確認したら「追加」を選択
    ConoHaVPS_createServer6

    すると、サーバーが追加される
    ConoHaVPS_createServer7

  5. サーバーを選択するとここから主な制御ができることがわかる
    ConoHaVPS_createServer8_

    更にグローバルIPアドレスが設定されるので、これをメモ!!
    次ステップから、クライアント側からリモート接続する際に使用する
    ConoHaVPS_createServer9_




STEP.2:サーバーの初期設定

STEP.1でサーバーを設置した。
このSTEPでは、サーバーをWEBサーバーとして各種設定を行う事前準備として、クライアント(手元のPC)からサーバーにリモート(SSH)接続する為の設定を実施する

  1. SSH接続
    まずは下記コマンドで"root"ユーザーとしてSSH接続。尚、以降の"xxx.xxx.xxx.xxx"は各自、サーバーのIPアドレスに置き換えてほしい。

    $ ssh root@xxx.xxx.xxx.xxx

    下記メッセージが出力されるので、"yes"を入力

    The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
    ECDSA key fingerprint is SHA256:xxxxxx.
    Are you sure you want to continue connecting (yes/no)? yes

    パスワードの入力を求められるので、サーバー設定時に入力した、"root"パスワードを入力

    Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
    root@xxx.xxx.xxx.xxx's password: 

    下記がコンソール上に表示されたらSSH接続成功!
    もしエラーとなったら、パスワードが間違っている可能性が高いので、ゆっくり確認しながらにゅうりょくしてみてほしい。

    root@xxx.xxx.xxx.xxx:~# 
  2. OSのUpdate
    以下のコマンドを実行して、OSのUpdateを実施

    # sudo apt-get update
    # sudo apt-get upgrade

    途中以下のようなメッセージが表示される場合がある。これはDiskの空き領域を使用する更新を含むがいいか?という質問。基本的に承諾しないと次に進まないので、"yes"と入力して、更に待機

    After this operation, 141 kB of additional disk space will be used.
    Do you want to continue? [Y/n] y


  3. 新規ユーザー追加
    下記"adduser"コマンドでユーザ"hoge"を新規登録。"username"入力後にパスワードの入力を求められるので、2回入力する

    # sudo adduser hoge
    Enter new UNIX password: 
    Retype new UNIX password: 

    その後、新規ユーザーに関する情報の入力を求められるが、空欄のままでも問題ない。最後に"y"を入力して完了

    Enter the new value, or press ENTER for the default
    Full Name []: 
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
    Is the information correct? [Y/n] y
  4. 新規ユーザーに"sudo"コマンドを許可

    # sudo gpasswd -a hoge sudo

    以下のコマンドで、"sudo"グループに追加されていることが確認できれば成功

    # id hoge
    uid=1000(hoge) gid=1000(hoge) groups=1000(hoge),27(sudo)
  5. 秘密鍵・公開鍵の生成
    この作業は、クライアントPC側で行う作業なので注意!!

    $ ssh-keygen -C 'for_Test'
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): /Users/hoge/.ssh/id_rsa_testVPS
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /Users/hoge/.ssh/id_rsa_testVPS.
    Your public key has been saved in /Users/hoge/.ssh/id_rsa_testVPS.pub.
    The key fingerprint is:
    SHA256:xxxxxxxxxxxxx for_Test
    The key's randomart image is:
    +---[RSA 2048]----+
    |          xxxxxxx|
    |         xxxxxxxx|
    |          ..xxxxx|
    |          o xxxx |
    |        S  xxxxx |
    |         ..xxx.. |
    |          =.x..  |
    |           =x.   |
    |          ..     |
    +----[SHA256]-----+

    この結果、秘密鍵と公開鍵が自分の指定したパスに生成される。確認方法は以下のコマンド

    $ ls /Users/hoge/.ssh/id_rsa_testVPS*
    /Users/hoge/.ssh/id_rsa_testVPS     /Users/hoge/.ssh/id_rsa_testVPS.pub
    拡張子ナシが秘密鍵。".pub"拡張子付きが公開鍵。
  6. 公開鍵の転送と設定
    クライアント上で以下コマンドを実行して、公開鍵をサーバーに転送する

    $ scp /Users/hoge/.ssh/id_rsa_testVPS.pub root@xxx.xxx.xxx.xxx:/tmp/

    成功したら、サーバー側のコンソールで以下コマンドを実行して、ファイル(id_rsa_testVPS.pub)が転送されていることを確認

    # ls /tmp/
    id_rsa_testVPS.pub

    続いて、公開鍵をサーバー側に登録

    # cat /tmp/id_rsa_tabihon-net.pub >> /home/hoge/.ssh/authorized_keys
    # chmod 600 /home/hoge/.ssh/authorized_keys
    # chown -R hoge:hoge /home/hoge/.ssh
  7. SSH接続設定(sshd)の変更
    下記のコマンドからSSH設定ファイルを編集

    # 直接必要ではないが、初期設定ファイルを残しておくことをオススメ!設定失敗時の復旧の為
    # cp /etc/ssh/sshd_config /etc/ssh_sshd_config.org
    # nano /etc/ssh/sshd_config

    設定ファイル内の編集項目

    PermitRootLogin no
    PubkeyAuthentication yes
    PasswordAuthentication no
    PermitEmptyPasswords no
    この設定変更によって、以下が禁止/許可される。この結果、SSH接続によるセキュリティを確保する目的である。
    • 公開鍵によるログインの許可
    • "root"ユーザーでのログイン禁止
    • パスワードによるログインの禁止

    <参考>
    もし設定変更を失敗してログインできなくなってしまった場合、ConoHaVPSのサーバーページにあるWEBコンソールからログインすることができる為、初期設定ファイルを残して置けば、これを元のファイルに上書きすることで復旧できる(サーバーの再起動もお忘れなく!!)

    # cp /etc/ssh/sshd_config.org /etc/ssh/sshd_config
    # reboot & exit
  8. これまでの設定を反映させるために、一旦VPSを再起動

    # reboot & exit

これで、クライアントPCから秘密鍵を使ってサーバーに接続することができるようになる。"root"権限でのログインはSSH接続する方法は下記通り。

SSH接続する方法

# ssh -i "秘密鍵" <user name>@<サーバーのIPアドレス>
$ ssh -i ~/.ssh/id_rsa_testVPS hoge@xxx.xxx.xxx.xxx

SCP接続する方法(ファイル転送したい場合など)

# scp -i "秘密鍵" <user name>@<サーバーのIPアドレス>:<ファイル転送先のパス>
$ scp -i ~/.ssh/id_rsa_testVPS ~/sample.png hoge@xxx.xxx.xxx.xxx:/tmp

長くなってしまったので、今回はここまで!

次回は

【STEP.3: Debian9 に Python3系をインストール】

【STEP.4:Djangoサービス デプロイの準備】

となります。


Python で コマンドラインからJSONフォーマット解析してみた!

前の記事で、JSONフォーマットの解析方法をまとめてみた。

でもこの方法だと毎回Pythonでスクリプトを書かなければならないので面倒…

と思って調べてみたら、コンソールからJSONフォーマトを整形&検証することができるってことがわかったので、記事にしてみた。

環境

今回の実施環境も前回に同じく…

  • MacOSX 10.13.3
  • Python 3.6.1


準備

Virtualenv環境の構築

今回も"virtualenv"環境の上で実施する。準備の手順に関しては、過去の記事にまとめてあるので、参照してほしい。
尚、今回はサードパティのPythonパッケージを使用せず、標準パッケージのみで大丈夫な為、追加パッケージインストールはなし。

コンソールからの使い方

json.tool モジュールという、単純なコマンドラインインターフェイスが存在する。このコマンドラインのオプションは、

  • infile引数
  • outfile引数

がある。未指定の場合は、sys.stdin, sys.stdoutが指定される。

以下に入力サンプルを記載する

# オプション未指定の場合
$ echo '{"json":"sample"}' | python -m json.tool
{
    "json": "sample"
}

# infile オプション指定の場合
# inputfile.jsonファイルにjsonフォーマットの入力しておく
$ python -m json.tool inputfile.json
[
    {
        "test": "sample"
    }
]

# outfile オプション指定の場合
# inputfile.jsonの内容が、outputfile.jsonに整形して出力される
$ python -m json.tool inputfile.json outputfile.json

以上でコマンドラインから簡単に入力できる方法になる。
--sort-keysオプションを用いることで、jsonをパスした結果の地所捨りょくにおいて、キーをアルファベット順に並び替えることができる。



Python で Jsonフォーマットを解析してみた!

前の記事でPythonでXMLをJSONフォーマットに変換する方法をまとめてみた。

今回はアプリでJSONフォーマットデータを活用する為に、パース(解析)する方法。毎回調べ直すので、備忘録のためにまとめた。



環境

今回実施する環境は以下の通り

  • MacOSX 10.13.3
  • Python 3.6.1

準備

Virtualenv環境の構築

今回も"virtualenv"環境の上で実施する。準備の手順に関しては、過去の記事にまとめてあるので、参照してほしい。

尚、今回はサードパティのPythonパッケージを使用せず、標準パッケージのみで大丈夫な為、追加パッケージインストールはなし。

実験用のデータの準備

今回の検索対象のJSONベースのデータは、Google Books APIを用いて本の情報を用いる

以下のリンクから取得できる

# "入門Python3"情報をISBNから取得
https://www.googleapis.com/books/v1/volumes?q=isbn:9784873117386

実際に取得までの方法を以下に記載

import json
import urllib.request

url = 'https://www.googleapis.com/books/v1/volumes?q=isbn:9784873117386'
response = urllib.request.urlopen(url)
# "content"内に結果が格納される
content = json.loads(response.read().decode('utf8'))

JSONフォーマットのパース

準備の中でURLからJSONデータを取得するまでを挙げた。その結果の中身をパースして、意図したデータを取得する方法を以下に記述する

# jsonデータ全てを出力
print(content)

# 1階層入った内容を出力
print(content['items'])

# 'title'キーの内容を出力
print(content['items'][0]['volumeInfo']['title'])

# 'description'キーの内容を出力
print(content['items'][0]['volumeInfo']['description'])


↑このページのトップヘ