35
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DigitalOceanの便利ツール作りました

Last updated at Posted at 2016-01-04

はじめに

DigitalOceanの管理ツール(dioc)を作成したので、ご紹介します。(利用については自己責任でお願いします。)
操作は、Ubuntu上で、DockerとPython3.5を用います。Windowsの方は、Ubuntuを入れてDockerを使う方法を参考に、VirtualBox、Ubuntu14、Docker1をインストールしてください。
Dockerが使えれば、Dockerイメージdioc-python-3.5を用いてすぐに始められます。

1.png

用語

  • DigitalOceanAWSEC2のようなクラウドサービス。
  • Droplet: 仮想OSのインスタンス。
  • Snapshot: Dropletの状態を保存したもの。Snapshotを元にDropletを作成できます。
  • Image: Dropletの元になるもの。公式のものと、Snapshotで作成した私的なものから選べます。公式なものは、OSだけのものや、アプリ2込み(下図)のものがあります。
  • 課金: 1月当たり5$, 10$, 20$, 40$, 80$, 160$, 320$, 480$, 640$のプランがあり、メモリは価格に比例しています。Dropletを作成すると、停止(PowerOff)しても破棄(Destroy)するまで、課金されます。不要な課金を避けるためには、Droplet停止、DropletからSnapshot作成、Droplet破棄を行えばよいです。現在、Snapshotを作成しても無料ですが、将来は課金されるようです。また、データ転送量がリミットを超えても課金が発生します。
2.png
  • Cassandra: NoSQLデータベース
  • Discourse: フォーラム管理
  • Django: Webフレームワーク
  • Docker: コンテナ管理
  • Dokku: Heroku(無料クラウドサーバー)クローン
  • Drone: 継続的インテグレーション
  • Drupal: コンテンツマネジメントシステム
  • Elixir: プログラミング言語
  • ELK: Elasticsearch, Logstash, Kibana
  • Ghost: ブログシステム
  • GitLab: プライベートGitHub
  • Joomla: コンテンツマネジメントシステム
  • LAMP: Linux, Apache, MySQL, PHP
  • LEMP: Linux, Nginx, MySQL, PHP
  • Magento: ECプラットフォーム
  • MEAN: MongoDB, Express, AngularJS, Node
  • MediaWiki: プライベートWikipedia
  • MongoDB: NoSQLデータベース
  • Mumble: ボイスチャット
  • node: プログラミング言語
  • ownCloud: ファイル共有
  • PHPMyAdmin: MySQL管理ツール
  • Redis: インメモリデータストア
  • Redmine: プロジェクト管理
  • Ruby on Rails: Webフレームワーク
  • WordPress: ブログシステム

なぜDigitalOceanか?

  • 安い。支払いの上限あり。1ヶ月5$から。
  • 早い。1分以内の起動。全てSSD。
  • 簡単。シンプルな管理画面。
  • 利用者が多い
  • 今なら10$の特典つき!?

DigitalOceanのデメリット

  • 東京リージョンがありません。シンガポールを選びましょう。
  • AWSに比べて下記の機能がないため、大規模な場合は一手間かかります。
    • Reserved Instance
    • Marketplace
    • AvailabilityZone
    • SecurityGroup
    • ElasticIP
    • ELB
    • VPC

参考:
AWSのインスタンス高過ぎワロタ。探せば安くて美味いところはあります。
使う前に知りたかったDigitalOceanまとめ

DigitalOceanでDockerを使うメリット

  • アプリケーションを配布するのに比べて、より確実に稼働させることができます。
  • 課金のかからないローカルで実行環境を作成できます。
  • CoreOSを使えば、デプロイも簡単です。
  • 軽快に動作します。

参考:Docker公式OS一覧

DigitalOceanのアカウント作成

ここからは、クレジットカードまたはPayPalが必要になり、課金が発生しますのでご注意ください。

  1. DigitalOcean3を開いて、e-mailとパスワードを入力し、[Create Account]を押します。
  • メールが送られてくるので、リンク先をクリックし、クレジットカードなどの方法を入力します。

DigitalOceanを使ってみよう

通常、Dropletのログインパスワードはメールで送られてきます。(数分待って)メールでパスワード確認してからログインするのは、手間がかかるので、SSH Keyを用いる方法を説明します。

SSH Keyの設定

  • Ubuntuで下記を実行します。パスフレーズは、ログインで必要になりますので覚えてください。
    • ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
    • ssh-add
  • 下記を実行し、表示される内容をコピーしてください。
    • cat ~/.ssh/id_rsa.pub
  • DigitalOceanにログインし、右上のからSettingsを選んでください。
  • 左の[Security]を選び、[Add SSH Key]を押してください。
  • [Name]を[id_rsa]にし、[Public SSH Key]にコピーした内容を貼り付けて、[Create SSH Key]を押してください。

最初のDropletを作成してみる

  • [Create Droplet]を押します。
  • [Choose an image]は[CoreOS]に変えましょう。
  • [Choose a size]は一番安い"$5/mo"に変えましょう。
  • [Choose a datacenter region]は、日本に近い"Singapore"に変えましょう。
  • [Add your SSH keys]は"id_rsa"をチェックしてください。
  • [Create]ボタンを押してください。課金が始まります。
  • 数十秒ほどで起動します。
  • [IP Address]をコピーしてください。
  • Ubuntuで下記を実行してください。初回はパスフレーズを聞かれます。
    • ssh core@[コピーしたIP Address]
  • 下記を実行するとスペックがわかります。
    • cat /proc/cpuinfo
  • ログアウトしてください。
  • Droplet画面で作成したDropletをDestroyしてください。
  • Destroyしないと、ずっと課金されますので注意してください。

APIトークンの発行

プログラムからDigitalOceanを操作するには、APIトークンが必要になります。下記の方法でトークンを取得してください。トークンがあれば、自由にDigitalOceanを利用できます。トークンは大事に管理してください。
参考:初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。

  • DigitalOceanにログインし、上部のAPIを選んでください。
  • [Generate new token]を押してください。
  • [Token Name]に"apitok"を入れてください。[Write]はチェックしたままにしてください。
  • [Generate Token]を押してください。
  • 画面に表示されたトークンを適宜メモしてください。この画面を閉じると同じトークンは、2度と表示されません。
  • トークンを忘れてしまったら、削除して再作成してください。

Diocの紹介

環境構築

  • cryptographyをインストールしてください。Anacondaであれば、下記のようにしてください。
    • "conda install -y cryptography"
  • ローカルで実行したい場合
    • Python3.5を使える状態で"pip install dioc"としてください。その後で、下記のように".bashrc"に追記してください(一度だけでOK)。
  • Dockerコンテナ内で実行したい場合
    • ローカルで下記のように".bashrc"に追記してください(一度だけでOK)。その後で、"docker run -it -v ~:/root tsutomu7/dioc-python-3.5
      "としてください。
ubuntu
cat << eof >> .bashrc
export DIOC_TOKEN=「DigitalOceanのAPIトークン」
export DIOC_DEFAULT_SSHKEY=id_rsa
export DIOC_DEFAULT_SIZE=512mb
export DIOC_DEFAULT_REGION=sgp1
if [ -x /usr/local/bin/dio -o -x /opt/conda/bin/dio ]; then
  eval "$(_DIO_COMPLETE=source dio)"
fi
eof
source ~/.bashrc

Bashで使う場合

Bashの操作では、コマンドは"dio"です。bash-completionが使えるようになっています。
"イメージ名"は、例えば、「'899.17.0 (stable)'」としてください。
"dio list image"でイメージの一覧が表示されます。

ubuntu
# Dropletの作成
dio create "Droplet名" "イメージ名"

# SnapshotからDropletの作成
dio create "Droplet名" "Snapshot名"

# SSHでコマンド実行
dio ssh "Droplet名" "コマンド"

# ファイルコピー
dio scp "Droplet名:ファイルバス" "Droplet名:ファイルバス"

# IPアドレス確認
dio ip "Droplet名"

# Droplet一覧確認
dio list

# その他の一覧確認(対象は、droplet, image, private, ssh, size, regionが選べます)
dio list "対象"

# Dropletの削除
dio destroy "Droplet名"

## Mongodbサーバーの起動例

ubuntu
dio create test
dio ssh test
mkdir mongo
docker run -d -p 27017:27017 -v ~/mongo:/data/db --name mongo mongo
# docker exec -it mongo mongo
exit
dio destroy test

Webサーバーの起動例

DigitalOceanなら簡単にサーバーの起動もできます。
下記では、GoTourのサーバーを起動しています。

ubuntu
dio create test '' user_data='"#!/bin/bash\ndocker run -p 80:8080 tsutomu7/gotour"'
firefox `dio ip test`
# do something
dio destroy test

Python3.5から使う場合

基本的にpython-digitaloceanのラッパーなので、メソッドはそちらを参照してください。DropletメソッドでDropletの起動もします。SSHクライアントは自動的に6回までリトライします。

python
from dioc import *
# Dropletの作成
d = Droplet('dgoc') # dgocという名前のCoreOSのDropletを作成

# SnapshotからDropletの作成
d = Droplet('dgoc', 'test') # testというsnapshotから名前dgocのDropletを作成

# IPアドレスの確認
print(d.ip_address)

# SSHクライアントの作成
c = ssh_client(d)

# SSHでコマンド実行
c.exec_command(コマンド)

# Dropletの削除
d.destroy()

以上


  1. Linuxでは、"wget -qO- https://get.docker.com/ | sh"

  2. DigitalOceanで用意されているアプリ

  3. このURLから登録すると私にポイントが入ります。

35
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?