2018年5月2日水曜日

LXDでPerkeep(Camlistore)がインストールされたコンテナ(Ubuntu18.04)を構築する

Perkeep(Camlistore)は様々なデータを保存できるアプリケーションです。

〇Perkeepの画面

ブラウザからhttp://<ホストのIP>:3179/にアクセスします。デフォルトユーザ/パスワードはadmin/adminです。

〇コンテナの構築
LXDで以下のコマンドを実行して、Perkeep(Camlistore)がインストールされたコンテナ(Ubuntu18.04)を構築します。
lxc init ubuntu:18.04 ub1804perkeep
lxc config set ub1804perkeep user.user-data - < config.yml
lxc start ub1804perkeep

config.yml
#cloud-config

package_upgrade: true

hostname: ub1804perkeep
manage_etc_hosts: true

write_files:
  - path: /etc/systemd/system/camlistore.service
    content: |
      [Unit]
      Description=Camlistore
      After=network.target
      [Service]
      Type=simple
      ExecStart=/bin/bash -c -i 'export HOME=/opt/camlistore && cd /opt/camlistore && /opt/camlistore/bin/perkeepd'
      WorkingDirectory=/opt/camlistore
      Restart=on-failure
      User=cs
      Group=cs
      [Install]
      WantedBy=multi-user.target

runcmd:
  - 'apt-get update'
  - "wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz"
  - "tar xvfz go1.10.1.linux-amd64.tar.gz"
  - "mv go /usr/local"
  - 'echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile'
  - "cd /opt"
  - "apt-get -y install git"
  - "git clone https://camlistore.googlesource.com/camlistore"
  - "mkdir -p /opt/src"
  - "mv camlistore /opt/src/perkeep.org"
  - "cd /opt/src/perkeep.org"
  - "export PATH=$PATH:/usr/local/go/bin && export GOPATH=/opt && /usr/local/go/bin/go run make.go"
  - "mkdir /opt/camlistore"
  - "mv /opt/bin /opt/camlistore"
  - "useradd cs"
  - "chown -R cs:cs /opt/camlistore"
  - systemctl enable camlistore.service
  - systemctl start camlistore.service
  - "while netstat -lnt | awk '$4 ~ /:3179$/ {exit 1}'; do sleep 10; done"
  - "sleep 10"
  - 'sed -i -e "s/\"auth\": \"localhost\"/\"auth\":\"userpass:admin:admin\"/" /opt/camlistore/.config/perkeep/server-config.json'
  - chown -R cs:cs /opt/camlistore
  - systemctl restart camlistore.service
final_message: "completed."

〇ホストマシンの外部からコンテナにアクセスしたい場合
以下のコマンドを実行します。
PORT=3179 PUBLIC_IP=<ホストのIP> CONTAINER_IP=<コンテナのIP> sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "container"'
〇コンテナに入る
lxc exec ub1804perkeep /bin/bash

〇コンテナのIPを調べる
コンテナのIPは以下のコマンドで調べることができます。
lxc list

〇コンテナの停止
lxc stop ub1804perkeep

〇コンテナの削除
lxc delete ub1804perkeep

DockerでPagekit、MariaDBがインストールされたコンテナ(Alpine 3.7)を構築する

PagekitはPHP製のCMSです。

○Pagekitの画面


○構築方法
以下の手順で、PagekitとMariaDBのコンテナを構築・実行します。
1. Pagekitイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t pagekit .

Dockerfile
FROM alpine:3.7
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7 php7-mysqli php7-pdo php7-pdo_mysql php7-mbstring php7-session php7-curl php7-json php7-xml php7-zip php7-ctype php7-dom php7-simplexml php7-iconv php7-tokenizer php7-intl php7-posix php7-openssl openssl openrc \
  && rm -rf /var/cache/apk/* \
  && mkdir -p /opt/pagekit
WORKDIR /opt/pagekit
RUN wget https://github.com/pagekit/pagekit/releases/download/1.0.13/pagekit-1.0.13.zip \
  && unzip pagekit-* \
  && rm -f pagekit-*.zip \
  && chown -R apache:apache /opt/pagekit \
  && ln -s  /opt/pagekit /var/www/localhost/htdocs \
  && mkdir -p /run/apache2
EXPOSE 80
VOLUME /opt/pagekit
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. PagekitとMariaDBコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

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

3. ブラウザからhttp://<Dockerホスト名またはIP>/pagekit/にアクセス


4. Connect Database画面
以下の値を設定します。
Hostname : db
User : root
Password : pagekit
Database name: pagekit


5. サイト名、管理者情報を入力します。


○その他
・PagekitとMariaDBコンテナの停止(docker-compose.ymlがあるフォルダで実行)
docker-compose down


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

VagrantでmytopとMySQLをインストールした仮想マシン(Ubuntu16.04)を構築する

mytopはtopコマンドのようにMySQLのセッション情報を表示することができます。

○mytopの画面


○構築方法
以下のVagrantfileを使用して、mytopとMySQLがインストールされた仮想マシン(Ubuntu16.04)を構築することができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604mysqlmytop"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604mysqlmytop"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  # private network
config.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
  # bridge netwrok
config.vm.network "public_network", ip: "192.168.1.103", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.riken.jp/pub/Linux/ubuntu/#g" /etc/apt/sources.list
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install mysql
echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mysql-server-5.7
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';"

mysql -uroot -proot -e "CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -proot -e "CREATE USER test@localhost IDENTIFIED BY 'test';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

mysql -uroot -proot -e "select * from information_schema.tables;"
# install mytop
apt-get -y install mytop
cat << EOF > /root/.mytop
user=root
password=root
host=localhost
db=mysql
port=3306
EOF
cat << EOF > /home/vagrant/.mytop
user=test
password=test
host=localhost
db=test
port=3306
EOF
chown vagrant:vagrant /home/vagrant/.mytop

SHELL
end

2018年5月1日火曜日

LXDでJupyter LabとMySQLがインストールされたコンテナ(Ubuntu18.04)を構築する

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

〇Jupyter Labの画面

ブラウザでhttp://<ホスト名またはIPアドレス>:8888/?token=jupyterにアクセスします

〇コンテナの構築
LXDの以下のコマンドを実行して、Jupyter LabとMySQLがインストールされたコンテナを構築します。
lxc init ubuntu:18.04 ub1804jupyterlabmysql
lxc config set ub1804jupyterlabmysql user.user-data - < config.yml
lxc start ub1804jupyterlabmysql

config.yml
#cloud-config

package_upgrade: true

hostname: ub1804jupyterlabmysql
manage_etc_hosts: true

write_files:
  - path: /etc/systemd/system/jupyter.service
    content: |
      [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
  - path: /tmp/jupyter_notebook_config.py
    content: |
      conf = get_config()
      conf.NotebookApp.ip = '*'
      conf.NotebookApp.open_browser = False
      conf.NotebookApp.port = 8080
      conf.NotebookApp.token = 'jupyter'

runcmd:
  - 'apt-get update'
  - 'locale-gen ja_JP.UTF-8'
  - 'localectl set-locale LANG=ja_JP.UTF-8'
  - 'echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections'
  - 'echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections'
  - 'apt-get -y install mysql-server-5.7'
  - 'mysql -uroot -proot -e "CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4;"'
  - "mysql -uroot -proot -e \"CREATE USER test@localhost IDENTIFIED BY 'test';\""
  - "mysql -uroot -proot -e \"GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';\""
  - 'mysql -uroot -proot -e "FLUSH PRIVILEGES;"'
  - 'mysql -utest -ptest test -e "create table messages (message_id integer not null, message varchar(100));"'
  - "mysql -utest -ptest test -e \"insert into messages value (1, 'hello world.');\""
  - "mysql -utest -ptest test -e \"insert into messages value (2, 'test message.');\""
  - "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"
  - "/bin/bash -c 'source /opt/anaconda/bin/activate && pip install jupyterlab'"
  - "apt-get -y install libmysqlclient-dev gcc"
  - "/bin/bash -c 'source /opt/anaconda/bin/activate && pip install mysqlclient'"
  - "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 "cp /tmp/jupyter_notebook_config.py /home/py/.jupyter/jupyter_notebook_config.py"'
  - "sudo systemctl enable jupyter"
  - "sudo systemctl start jupyter"
final_message: "completed."

〇コンテナに入る
lxc exec ub1804jupyterlabmysql /bin/bash

〇ホストマシンの外部からコンテナにアクセスしたい場合
以下のコマンドを実行します。
PORT=8080 PUBLIC_IP=<ホストのIP> CONTAINER_IP=<コンテナのIP> sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "container"'

〇コンテナのIPを調べる
コンテナのIPは以下のコマンドで調べることができます。
lxc list

〇コンテナの停止
lxc stop ub1804jupyterlabmysql

〇コンテナの削除
lxc delete ub1804jupyterlabmysql

○動作確認用コード
import MySQLdb

con = MySQLdb.connect(
  user='test',
  passwd='test',
  host='localhost',
  db='test')

try:
  cur= con.cursor()
  sql = "select message_id, message from messages"
  cur.execute(sql)

  for row in cur.fetchall():
    print(row)

except MySQLdb.Error as er:
    print('MySQLdb.Error:', er)
cur.close
con.close

VagrantでApache SupersetとMySQLをインストールした仮想マシン(CentOS7.4)を構築する

Apache SupersetはPython製のデータ可視化ツールです。

○Apache Supersetの画面


○構築方法
以下のVagrantfileを使用して、Apache SupersetとMySQLをインストールした仮想マシン(CentOS7.4)を構築する事ができます。
仮想マシンが構築された後、ブラウザからhttp://192.168.55.109:8088/にアクセスします。
デフォルトユーザ名はadmin、パスワードもadminです。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74supersetmysql"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74supersetmysql"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.109", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.109", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8

sudo yum -y remove mariadb-libs
yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum -y install yum-utils
yum -y install mysql mysql-devel mysql-server mysql-utilities
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
# change password and create users and databases.
chkconfig mysqld on
service mysqld start
export MYSQL_ROOTPWD='Root123#'
export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot --connect-expired-password -e "SET PASSWORD = PASSWORD('$MYSQL_ROOTPWD');"
export MYSQL_PWD=$MYSQL_ROOTPWD
export MYSQL_ROOTPWD='root'
mysql -uroot --connect-expired-password -e "UNINSTALL PLUGIN validate_password;"
mysql -uroot --connect-expired-password -e "SET PASSWORD = PASSWORD('$MYSQL_ROOTPWD'); FLUSH PRIVILEGES;"
mysql -uroot -proot -e "CREATE DATABASE mediawiki DEFAULT CHARACTER SET utf8;"
export MYSQL_PWD=$MYSQL_ROOTPWD

mysql -uroot -proot -e "CREATE DATABASE test DEFAULT CHARACTER SET utf8;"
mysql -uroot -proot -e "CREATE USER test@localhost IDENTIFIED BY 'test';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"
mysql -utest -ptest test -e "create table messages (message_id integer not null, message varchar(100));"
mysql -utest -ptest test -e "insert into messages value (1, 'hello world.');"
mysql -utest -ptest test -e "insert into messages value (2, 'test message.');"

# install anaconda
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

# install dependencies
yum -y install epel-release ython-devel mysql-devel gcc-c++ openldap-devel openssl-devel

# install mysqlclient
pip install mysqlclient

pip install --upgrade setuptools
pip install superset
pip install cryptography --upgrade
mkdir -p /opt/superset
cd /opt/superset
fabmanager create-admin --app superset --username admin --firstname admin --lastname user --email admin@localhost.localdomain --password admin
superset db upgrade
superset load_examples
superset init
superset runserver -a 0.0.0.0 &
echo 'access http://192.168.55.109:8088/'
echo 'user:admin, password: admin'

SHELL
end

○データソースの追加
同じ仮想マシンにインストールされたMySQLに接続するには、以下の画面のようにSQLAlchemy URIにmysql://test:test@localhost/testを指定します。


VagrantでCockroachDB2.0.0をインストールした仮想マシン(Debian Strech/9.3)を構築する

CockroachDBは分散SQLデータベースです。

〇CockroachDBのコンソール画面


〇構築方法
以下のVagrantfileを使用して、CockroachDB2.0.0がインストールされた仮想マシン(Debian Strech/9.3)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

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

# install cockroachdb
wget https://binaries.cockroachdb.com/cockroach-v2.0.0.linux-amd64.tgz
tar xvfz cockroach-v2.0.0.linux-amd64.tgz
mv cockroach-v2.0.0.linux-amd64 /opt/cockroach

cat << EOF > /etc/systemd/system/cockroachdb.service
[Unit]
Description=cockroachdb
Requires=network.target
After=zookeepepr.service

[Service]
Type=forking
WorkingDirectory=/opt/cockroach
ExecStart=/opt/cockroach/cockroach start --insecure --host=192.168.55.108 --background
ExecStop=/opt/cockroach/cockroach quit

[Install]
WantedBy=multi-user.target
EOF
systemctl enable cockroachdb.service
systemctl start cockroachdb.service

# execute sample sql statements
/opt/cockroach/cockroach sql --insecure --host=192.168.55.108 << EOF
CREATE DATABASE test;
CREATE TABLE test.messages (id INT PRIMARY KEY, message varchar(100));
INSERT INTO test.messages VALUES (1, 'hello world.');
select * from test.messages;
EOF

echo 'access to http://192.168.55.108:8080/'
SHELL
end


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

LXDでBoltとMySQLをインストールしたコンテナ(Ubuntu16.04)を構築する

BoltはPHP製のCMSソフトです。

〇Boltの画面


〇コンテナの構築
LXDで以下のコマンドを実行して、BoltとMySQLがインストールされたコンテナを構築します。
lxc init ubuntu:16.04 bolt
lxc config set bolt user.user-data - < config.yml
lxc start bolt

config.yml
#cloud-config

package_upgrade: true

hostname: bolt
manage_etc_hosts: true

write_files:
  - path: /tmp/bolt.conf
    content: |
      <VirtualHost *:80>
        ServerName <ホストのIP>
        DocumentRoot /opt/bolt/public
        <Directory /opt/bolt/public>
          AllowOverride All
          Require all granted
        </Directory>
      </VirtualHost>

runcmd:
  - "apt-get update"
  - 'echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections'
  - 'echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections'
  - "apt-get -y install mysql-server-5.7"
  - 'mysql -uroot -proot -e "CREATE DATABASE bolt DEFAULT CHARACTER SET utf8;"'
  - "mysql -uroot -proot -e \"CREATE USER bolt@localhost IDENTIFIED BY 'bolt';\""
  - "mysql -uroot -proot -e \"GRANT ALL PRIVILEGES ON bolt.* TO 'bolt'@'localhost';\""
  - 'mysql -uroot -proot -e "FLUSH PRIVILEGES;"'
  - "apt-get -y install apache2 libapache2-mod-php7.0"
  - "apt-get -y install php7.0-gd php7.0-json php7.0-mysql php7.0-pdo php7.0-curl php7.0-mbstring"
  - "apt-get -y install php7.0-mcrypt php7.0-xml php7.0-zip php7.0-intl"
  - "wget  https://bolt.cm/distribution/bolt-latest.tar.gz"
  - "tar -xzf bolt-latest.tar.gz"
  - "cd bolt-v3.4.*"
  - "php app/nut init"
  - "sed -i -e 's/driver: sqlite/driver: mysql\\n    username: bolt\\n    password: bolt\\n/' ./app/config/config.yml"
  - "cd .."
  - "mv bolt-v3.4.* /opt/bolt"
  - "chown -R www-data:www-data /opt/bolt"
  - "mv /tmp/bolt.conf /etc/apache2/sites-available/bolt.conf"
  - "a2enmod rewrite"
  - "a2ensite bolt.conf"
  - "a2dissite 000-default.conf"
  - "systemctl reload apache2.service"

final_message: "completed."

〇コンテナのIPを調べる
コンテナのIPは以下のコマンドで調べることができます。
lxc list

〇ホストマシンの外部からコンテナにアクセスしたい場合
以下のコマンドを実行します。
PORT=80 PUBLIC_IP=<ホストのIP> CONTAINER_IP=<コンテナのIP> sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "container"'

〇初期設定画面


〇管理者画面


〇コンテナに入る
lxc exec bolt /bin/bash

〇コンテナの停止
lxc stop bolt

〇コンテナの削除
lxc delete bolt


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