2018年6月25日月曜日

DockerでHackMD、PostgreSQL10.4がインストールされたコンテナを構築する

HackMDでMarkdown文書をリアルタイムにほかのユーザと共同編集する事ができます。

〇HackMDの画面


〇構築方法
1.HackMDとPostgreSQL10.4コンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: '2'
services:
  hackmd:
    image: hackmdio/hackmd:1.1.1-ce
    environment:
      - HMD_DB_URL=postgres://hackmd:hackmd@db:5432/hackmd
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:10.4-alpine
    container_name: postgres
    environment:
      POSTGRES_DB: hackmd
      POSTGRES_USER: hackmd
      POSTGRES_PASSWORD: hackmd
    ports:
      - "5432:5432"
    volumes:
      - "db-data:/var/lib/postgresql/data"
volumes:
  db-data:
    driver: local


○関連情報
・HackMDに関する他の記事はこちらを参照してください。

DockerでAdminerとMariaDBのコンテナーを構築する

Adminerでブラウザからデータベースを操作する事ができます。

○Adminerの画面

ホスト:db、ユーザ:root、パスワード:root、データベース:mysqlを指定します。

○構築方法
以下のdocker-compose.ymlを使用して、AdminerとMariaDBのコンテナーを構築する事ができます。
docker-compose up -d

docker-compose.yml
version: "2"
services:
  adminer:
    image: adminer:4.6
    container_name: "adminer"
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: mariadb:10.3
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "db"
    volumes:
      - "db-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: test
        MYSQL_ROOT_PASSWORD: root
volumes:
  db-data:
    driver: local


〇関連情報
・Adminerに関する他の情報はこちらを参照してください。

・Adminerのプロジェクトwebサイト
https://www.adminer.org/

VagrantでAmbari(HDP2.6)/HDFS/HBaseをインストールした仮想マシン(CentOS7.4)を構築する

Apache HBaseは列指向の分散データベースです。

〇Ambariの画面

ブラウザでhttp://192.168.1.117:8080/にアクセスします。ユーザ/パスワードはadmin/adminです。

〇構築方法
以下のVagrantfileを使用して、Ambari/HDFS/HBaseをインストールした仮想マシン(CentOS7.4)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74hbase.vm.internal"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74hbase.vm.internal"
     vbox.cpus = 4
     vbox.memory = 10240 
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  # private network
  config.vm.network "private_network", ip: "192.168.55.117", :netmask => "255.255.255.0"
  # bridge netwrok
  config.vm.network "public_network", ip: "192.168.1.117", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8
echo "192.168.55.117 co74hbase" >> /etc/hosts

cd /root
mkdir ./.ssh
ssh-keygen -f ./.ssh/id_rsa -t rsa -N ''

# copy private key
cp -f ./.ssh/id_rsa /vagrant
cat ./.ssh/id_rsa.pub >> ./.ssh/authorized_keys
chmod 600 ./.ssh/authorized_keys

# install and configure ambari server
cd /etc/yum.repos.d/
wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.6.2.0/ambari.repo
yum -y install ambari-server ambari-agent
ambari-server setup --silent
ambari-server start

# create hive database and hive user
echo "host    all         all         127.0.0.1/32          password" >> /var/lib/pgsql/data/pg_hba.conf
echo "host    all         all         192.168.1.0/24          password" >> /var/lib/pgsql/data/pg_hba.conf
echo "host    all         all         192.168.55.0/24          password" >> /var/lib/pgsql/data/pg_hba.conf
service postgresql restart

yum -y install postgresql-jdbc*
chmod 644 /usr/share/java/postgresql-jdbc.jar

ambari-server setup -s --database=postgres --databasehost=localhost --databaseport=5432 --databasename=hive --databaseusername=hive --databasepassword=hive --jdbc-db=postgres --jdbc-driver=/usr/share/java/postgresql-jdbc.jar
ambari-agent start


cat << EOF > /home/vagrant/cluster_configuration.json
{
  "configurations" : [
    {
      "hive-site": {
        "hive.support.concurrency": "true",
        "hive.txn.manager": "org.apache.hadoop.hive.ql.lockmgr.DbTxnManager",
        "hive.compactor.initiator.on": "true",
        "hive.compactor.worker.threads": "5",
        "javax.jdo.option.ConnectionDriverName": "org.postgresql.Driver",
        "javax.jdo.option.ConnectionPassword": "hive",
        "javax.jdo.option.ConnectionURL": "jdbc:postgresql://localhost/hive",
        "javax.jdo.option.ConnectionUserName": "hive"
      }
    },
    {
      "hive-env": {
        "hive_ambari_database": "PostgreSQL",
        "hive_database": "Existing PostgreSQL Database",
        "hive_database_type": "postgres",
        "hive_database_name": "hive"
      }
    },
    {
      "core-site": {
        "properties" : {
          "hadoop.proxyuser.root.groups" : "*",
          "hadoop.proxyuser.root.hosts" : "*"
        }
      }
    }
  ],
  "host_groups" : [
    {
      "name" : "host_group_1",
      "components" : [
        {
          "name" : "NAMENODE"
        },
        {
          "name" : "SECONDARY_NAMENODE"
        },
        {
          "name" : "DATANODE"
        },
        {
          "name" : "HDFS_CLIENT"
        },
        {
          "name" : "RESOURCEMANAGER"
        },
        {
          "name" : "NODEMANAGER"
        },
        {
          "name" : "YARN_CLIENT"
        },
        {
          "name" : "HISTORYSERVER"
        },
        {
          "name" : "APP_TIMELINE_SERVER"
        },
        {
          "name" : "ZOOKEEPER_SERVER"
        },
        {
          "name" : "ZOOKEEPER_CLIENT"
        },
        {
          "name" : "METRICS_MONITOR"
        },
        {
          "name" : "METRICS_COLLECTOR"
        },
        {
          "name" : "HBASE_CLIENT"
        },
        {
          "name" : "HBASE_MASTER"
        },
        {
          "name" : "HBASE_REGIONSERVER"
        }
      ],
      "cardinality" : "1"
    }
  ],
  "settings" : [{
     "recovery_settings" : [{
       "recovery_enabled" : "true"
    }]
  }],
  "Blueprints" : {
    "blueprint_name" : "hdp26-minimal-hbase",
    "stack_name" : "HDP",
    "stack_version" : "2.6"
  }
}
EOF

curl -H "X-Requested-By: ambari" -X POST -u admin:admin http://localhost:8080/api/v1/blueprints/hdp26-minimal-hbase -d @/home/vagrant/cluster_configuration.json

cat << EOF > /home/vagrant/hostmapping.json
{
  "blueprint" : "hdp26-minimal-hbase",
  "default_password" : "admin",
  "provision_action" : "INSTALL_AND_START",
  "host_groups" :[
    {
      "name" : "host_group_1",
      "hosts" : [
        {
          "fqdn" : "co74hbase.vm.internal"
        }
      ]
    }
  ]
}
EOF

curl -H "X-Requested-By: ambari" -X POST -u admin:admin http://localhost:8080/api/v1/clusters/hdp26-minimal-hbase -d @/home/vagrant/hostmapping.json
sleep 30


# wait until the cluster is ready.
ProgressPercent=`curl -s --user admin:admin -X GET http://localhost:8080/api/v1/clusters/hdp26-minimal-hbase/requests/1 | grep progress_percent | awk '{print $3}' | cut -d . -f 1`
while [[ `echo $ProgressPercent | grep -v 100` ]]; do
  ProgressPercent=`curl -s --user admin:admin -X GET http://localhost:8080/api/v1/clusters/hdp26-minimal-hbase/requests/1 | grep progress_percent | awk '{print $3}' | cut -d . -f 1`
  echo " Progress: $ProgressPercent %"
  sleep 10
done


cat << EOF > /home/vagrant/shutdown_components.sh
#!/bin/bash
#stop all services
curl -u admin:admin -i -H 'X-Requested-By: ambari' -X PUT \
   -d '{"RequestInfo":{"context":"_PARSE_.STOP.ALL_SERVICES","operation_level":{"level":"CLUSTER","cluster_name":"hdp26-minnimal-hbase"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' \
   http://localhost:8080/api/v1/clusters/hdp26-minimal-hbase/services
EOF
chmod +x /home/vagrant/shutdown_components.sh


# execute commands for test...
cat << EOF > test.txt
create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:message_id', '100'
put 'test', 'row1', 'cf:message', 'hello'
put 'test', 'row2', 'cf:message_id', '200'
put 'test', 'row2', 'cf:message', 'world'
scan 'test'
get 'test', 'row1'
get 'test', 'row2'
exit
EOF
hbase shell test.txt

echo 'access -> http://192.168.1.117:8080'
echo 'user/password -> admin/admin'
SHELL
end

○関連情報
・Apache HBaseに関する他の記事はこちらを参照してください。
・Ambariに関する他の記事はこちらを参照してください。

2018年6月24日日曜日

VagrantでJupyter LabとOrientDBをインストールした仮想マシン(Ubuntu18.04)を構築する

Jupyter Labでインタラクティブなコンピューティング環境を提供する事ができます。

〇Jupyter Labの画面


構築方法

以下のVagrantfileで、Jupyter LabとOrientDBをインストールした仮想マシン(Ubuntu18.04)を構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804jupyterlaborientdb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804jupyterlaborientdb"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.104", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.104", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
# update packages
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
locale-gen ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8


# install java
apt-get -y install openjdk-8-jdk

# download and install orientdb community edition
wget https://s3.us-east-2.amazonaws.com/orientdb3/releases/2.2.35/orientdb-community-importers-2.2.35.tar.gz
tar xvfz orientdb-community-importers-2.2.35.tar.gz
mv orientdb-community-importers-2.2.35 /opt/orientdb

cat << EOF > /etc/systemd/system/orientdb.service
[Unit]
Description=OrientDB

[Service]
Type=simple
ExecStart=/opt/orientdb/bin/server.sh
ExecStop=/opt/orientdb/bin/shutdown.sh
WorkingDirectory=/opt/orientdb
KillMode=process

[Install]
WantedBy=multi-user.target
EOF
sed -i -e 's###' /opt/orientdb/config/orientdb-server-config.xml
systemctl enable orientdb.service
systemctl start orientdb.service
echo 'access http://192.168.55.104:2480'
echo 'user: admin    password: admin'


# install anaconda & jupyterlab
wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
chmod +x Anaconda3-5.1.0-Linux-x86_64.sh
./Anaconda3-5.1.0-Linux-x86_64.sh -b -p /opt/anaconda
source /opt/anaconda/bin/activate
pip install --upgrade pip
pip install jupyterlab

# install pyorient
pip install pyorient


useradd py
mkdir -p /home/py
chown -R py:py /home/py
sudo -u py bash -c "mkdir /home/py/.jupyter"
sudo -u py bash -c "cat << EOF > /home/py/.jupyter/jupyter_notebook_config.py
conf = get_config()
conf.NotebookApp.ip = '*'
conf.NotebookApp.open_browser = False
conf.NotebookApp.port = 8888
conf.NotebookApp.token = 'jupyter'
EOF"

cat << EOF > /etc/systemd/system/jupyter.service
[Unit]
Description=Jupyter notebook
[Service]
Type=simple
EnvironmentFile=/opt/anaconda/bin/activate
ExecStart=/opt/anaconda/bin/jupyter lab
User=py
Group=py
WorkingDirectory=/home/py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable jupyter
sudo systemctl start jupyter

echo 'jupyter -> http://192.168.55.104:8888/?token=jupyter'
SHELL
end

○動作確認用コード
import pyorient
client = pyorient.OrientDB("192.168.1.104", 2424)
session_id = client.connect("root", "root" )
client.db_create("test", pyorient.DB_TYPE_GRAPH, pyorient.STORAGE_TYPE_MEMORY )
client.db_open("test", "admin", "admin" )
client.command("create class messages extends V")
client.command("create property messages.id Integer" )
client.command("create property messages.message String" )

#insert a row
client.command("insert into messages (id, message) values (10, 'hello world')")
# execute query
records = client.command("select id, message from messages")
for record in records:
    print(str(record.id) + ":" + record.message)

関連情報

・Jupyterに関する他の情報はこちらを参照してください。

2018年6月23日土曜日

DockerでRedash4.0.1, Postgres10.4, Redis, Adminer4.6のコンテナを構築する

Redashでデータの可視化環境を提供する事ができます。AdminerはPostgreSQLのWebインターフェイスで、開発・管理などに使用できます。

〇Redashの画面


〇Adminerの画面


〇構築方法
1.Redash4.0.1, Postgres10.4, Redis, Adminer4.6のコンテナを以下のコマンドで構築して実行します。
docker-compose run --rm redashserver create_db
docker-compose up -d

docker-compose.yml
version: '2'
services:
  redashserver:
    image: redash/redash:4.0.1.b4038
    command: server
    depends_on:
      - db
      - redis
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://redash:redash@db/redash"
      REDASH_COOKIE_SECRET: "cookiesecret"
      REDASH_DATE_FORMAT: YYYY/MM/DD
  redashworker:
    image: redash/redash:4.0.1.b4038
    command: scheduler
    depends_on:
      - redashserver
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://redash:redash@db/redash"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
      REDASH_DATE_FORMAT: YYYY/MM/DD
  redis:
    image: redis:4.0-alpine
    restart: unless-stopped
  db:
    image: postgres:10.4-alpine
    environment:
      POSTGRES_DB: redash
      POSTGRES_USER: redash
      POSTGRES_PASSWORD: redash
    ports:
      - "5432:5432"
    container_name: postgres
    volumes:
      - "db-data:/var/lib/postgresql/data"
  adminer:
    image: adminer:4.6
    container_name: "adminer"
    ports:
      - "8080:8080"
    depends_on:
      - db
volumes:
  db-data:
    driver: local

2.初期設定
ブラウザからhttp://<Dockerホスト名またはIP:5000/にアクセスして、管理者情報を入力します。


〇Redashのデータソース設定画面
PostgreSQLをデータソースとして使用したい場合は、Datasourcesで以下のように情報を入力します。



○関連情報
・Redashに関する他の記事はこちらを参照してください。

Vagrantでnextcloud13.04とPostgreSQL10がインストールされた仮想マシン(Ubuntu18.04)を構築する

nextcloudで、Dropboxのようにファイルを管理・共有する事ができます。

〇nextcloudの画面


〇構築方法
1.以下のVagrantfileを使用して、nextcloud13.04とPostgreSQL10がインストールされた仮想マシン(Ubuntu18.04)を構築できます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804nextcloud1304pg10"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804nextcloud1304pg10"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.105", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.105", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install postgresql
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
apt-get -y install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get upgrade
apt-get -y install postgresql-10

echo "listen_addresses='*'" >> /etc/postgresql/10/main/postgresql.conf

#sed -i 's/host.*all.*all.*127.0.0.1/#host    all             all             127.0.0.1/g' /etc/postgresql/10/main/pg_hba.conf

echo "host    all         all         127.0.0.1/32          password" >> /etc/postgresql/10/main/pg_hba.conf
echo "host    all         all         192.168.1.0/24          password" >> /etc/postgresql/10/main/pg_hba.conf
echo "host    all         all         192.168.55.0/24          password" >> /etc/postgresql/10/main/pg_hba.conf

su - postgres << EOF
createdb -T template0 --locale=ja_JP.UTF-8 --encoding=UTF8 nextcloud
psql -c "
alter user postgres with password 'postgres';
create user nextcloud with password 'nextcloud';
grant all privileges on database nextcloud to nextcloud;
"
EOF
echo "postgres:postgres" | chpasswd
systemctl restart postgresql.service

# install apache2 and php
apt-get -y install apache2 libapache2-mod-php7.2
apt-get -y install php7.2-gd php7.2-json php7.2-pgsql php7.2-curl php7.2-mbstring
apt-get -y install php7.2-intl php-imagick php7.2-xml php7.2-zip
apt-get -y install unzip

# install nextcloud
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.4.zip
unzip nextcloud-13.0.4.zip
mv nextcloud /opt/nextcloud
chown -R www-data:www-data /opt/nextcloud
ln -s  /opt/nextcloud /var/www/html
service apache2 restart
echo 'access http://192.168.1.105/nextcloud/'
echo 'user: nextcloud  password:nextcloud  db:nextcloud, host: localhost:5432'
SHELL
end

2.ブラウザからhttp://192.168.1.105/nextcloud/にアクセスして、初期設定を行います。管理者の情報の他、以下の情報を指定します。
DB user: nextcloud, DB password: nextcloud, DB: nextcloud, DB host: localhost:5432


○関連情報
・Nextcloudに関する他の記事はこちらを参照してください。

DockerでDocumize、MySQL5.7がインストールされたコンテナ(Alpine3.7)を構築する

DocumizeはGo言語製のドキュメント管理アプリケーションです。

〇Documizeの画面


○構築方法
以下の手順で、DocumizeとMySQL5.7のコンテナを構築・実行します。

1. Joomlaイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t documize .

Dockerfile
FROM alpine:3.7
WORKDIR /
RUN wget https://github.com/documize/community/releases/download/v1.65.3/documize-community-linux-amd64 \
  && chmod +x /documize-community-linux-amd64
EXPOSE 5001
CMD sleep 10 && /documize-community-linux-amd64 -port=5001 -db='root:documize@tcp(db:3306)/documize' -dbtype=mysql -salt=1234567890acbdefg

2. JoomlaとPostgreSQL10.4コンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d db
少し間をおいてから
docker-compose up -d documize

docker-compose.yml
version: "2"
services:
  documize:
    image: documize
    container_name: "documize"
    ports:
      - "5001:5001"
    depends_on:
      - db
  db:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "documize-db"
    ports:
      - "3306:3306"
    volumes:
      - "db-data:/var/lib/mysql"
    environment:
        MYSQL_DATABASE: documize
        MYSQL_ROOT_PASSWORD: documize
volumes:
  db-data:
    driver: local

3.ブラウザからhttp://<Dockerホスト名またはIP>:5001/にアクセスして、セットアップ画面から管理者ユーザの情報を入力します。



○関連情報
・Docunizeに関する他の記事はこちらを参照してください。