2018年8月31日金曜日

Jupyter Lab、wbdataとBokehで世界銀行の携帯電話加入者数データをグラフ描画する

Jupyter Lab、wbdataとBokehで、国別年別の携帯電話加入者数を取得して、グラフ描画します。

〇出力画面


〇使用指標
IT.CEL.SETS.P2
携帯電話加入者数(100人あたり) - Mobile cellular subscriptions (per 100 people)

〇コード
import wbdata
from bokeh.plotting import figure, output_notebook, show
from bokeh.models import ColumnDataSource, LabelSet

df = wbdata.api.get_dataframe({"IT.CEL.SETS.P2":"Mobile cellular subscriptions"}, country=["JP", "US"], convert_date=True)
df2 = df.unstack(level=0)
output_notebook()
plt = figure(plot_width=800, plot_height=400, x_axis_type="datetime")
plt.line(df2.index, df2["Mobile cellular subscriptions"]["Japan"], line_width=3,legend="Japan", color="blue")
plt.line(df2.index, df2["Mobile cellular subscriptions"]["United States"], line_width=3,legend="United States", color="red")
show(plt)

〇参考情報
wbdataパッケージをインストールしたコンテナを作成するには、以下のページを参照してください。
DockerでJupyter Notebookと世界銀行の情報が取得できるwbdataパッケージがインストールされたコンテナのイメージを作成する

コンテナではなく、仮想マシンを構築する場合は、以下を参照します。
VagrantでJupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築する

・世界銀行のデータを取得することができるwbdataパッケージに関する他の記事はこちらを参照してください。

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

Jupyter LabでインタラクティブなPython環境、wbdataパッケージで世界銀行へのデータアクセス、Bokehでデータの可視化を行うことができます。

〇Jupyter Labの画面

ブラウザからhttp://<仮想マシンのホスト名またはIP>:8080/?token=jupyterにアクセスします。

構築方法

以下のVagrantfileを使用して、Jupyter Lab、wbdata、BokehとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築することができます。IPなどは環境に合わせて変更します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804jupyterlabmariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804jupyterlabmariadb"
     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 mariadb
echo "mariadb-server-10.3 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.3 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
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.');"

# install nodejs
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt-get install -y nodejs

# install anaconda & jupyterlab
wget https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86_64.sh
chmod +x Anaconda3-5.2.0-Linux-x86_64.sh
./Anaconda3-5.2.0-Linux-x86_64.sh -b -p /opt/anaconda
source /opt/anaconda/bin/activate
pip install jupyterlab
pip install wbdata
jupyter labextension install jupyterlab_bokeh
jupyter labextension list

# install mysqlclient
apt-get -y install libmariadbclient-dev build-essential
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 "cat << EOF > /home/py/.jupyter/jupyter_notebook_config.py
conf = get_config()
conf.NotebookApp.ip = '*'
conf.NotebookApp.open_browser = False
conf.NotebookApp.port = 8080
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 'access -> http://192.168.55.104:8080/?token=jupyter'
SHELL
end

関連情報

・世界銀行のデータを取得・可視化する記事のまとめは以下のページを参照してください。
世界銀行のデータを取得できるwbdataパッケージのまとめ

VagrantでMicrosoft MakeCode(PXT micro:bit)をインストールした仮想マシン(Ubuntu18.04)を構築する

MakeCode micro:bitでScratchのようにブロックを組み合わせてプログラミングを行うことができます。
MakeCode micro:bitはオンラインで利用可能ですが、ローカルにインストールする事もできます。
ブラウザからブロックを組み合わせてプログラムして、ダウンロードボタンをクリックするとhexファイルがダウンロードできます。hexファイルをUSB接続したmicro:bitに転送する(普通のUSBディスクのように見える)と、作成したプログラムを実行する事ができます。

〇Microsoft MakeCode

ブラウザからhttp://192.168.1.97:3232/にアクセスします。

〇構築方法
以下のVagrantfileを使用して、Microsoft MakeCode(PXT micro:bit)をインストールした仮想マシン(Ubuntu18.04)を構築する事ができます。
IPアドレス等は適宜環境に合わせて変更してください。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804pxtmicrobit"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804pxtmicrobit"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.97", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.97", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
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
timedatectl set-timezone Asia/Tokyo

# install nodejs
apt-get -y install curl
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

# install pxt
export HOME=/home/vagrant
npm install -g pxt

mkdir microbit
cd microbit
pxt target microbit


cat << EOF > /etc/systemd/system/microbit.service
[Unit]
Description=microbit
[Service]
Environment=HOME=/home/vagrant
Type=simple
WorkingDirectory=/home/vagrant/microbit
ExecStart=/usr/bin/pxt serve --hostname 0.0.0.0
[Install]
WantedBy=multi-user.target
EOF
systemctl enable microbit.service
systemctl start microbit.service

SHELL
end

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

LimeSurveyで、オンラインアンケートを設置することができます。

〇LimeSurveyの管理者画面


〇構築方法
1.以下のVagrantfileを使用して、LimeSurveyとMariaDBをインストールした仮想マシン(Ubuntu18.04)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804limesurvey313mariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804limesurvey313mariadb"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.107", :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
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
timedatectl set-timezone Asia/Tokyo

# install mariadb
echo "mariadb-server-10.0 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.0 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -proot -e "CREATE DATABASE limesurvey DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -proot -e "CREATE USER limesurvey@localhost IDENTIFIED BY 'limesurvey';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON limesurvey.* TO 'limesurvey'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

# install apache and php
apt-get -y install apache2 libapache2-mod-php7.2
apt-get -y install php7.2-gd php7.2-json php7.2-mysql php7.2-pdo php7.2-curl php7.2-mbstring
apt-get -y install php7.2-xml php7.2-zip php7.2-gd php7.2-zip php7.2-simplexml

# install limeservey
wget https://www.limesurvey.org/stable-release?download=2429:limesurvey3132%20180709targz -O limesurvey.tar.gz
tar xvfz limesurvey.tar.gz
mv limesurvey /opt

chown -R www-data:www-data /opt/limesurvey
ln -s  /opt/limesurvey /var/www/html

systemctl reload apache2.service
echo 'access http://192.168.55.107/limesurvey/'
echo 'db:limesurvey  user:limesurvey  password:limesurvey'
SHELL
end

2.ブラウザからhttp://192.168.55.107/limesurveyにアクセスして、「日本語 - Japan」を選択して「Start installation」をクリックします


3.ライセンスを確認して、同意できるのであれば「同意する」をクリックします


4.「インストール前のチェック」画面で「次へ」をクリックします


5.「データベース設定」画面で、以下の項目を入力して「次へ」をクリックします
データベース形式: MySQL
データの場所: localhost
データベースユーザー: limesurvey
データベースパスワード: limesurvey
データベース名: limesurvey


6.「データベースを作成する」をクリックします


7.「管理者設定」画面で管理者情報等を入力して、「次へ」をクリックします


8.インストーラ完了画面



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

2018年8月30日木曜日

AnsibleでGravをインストールする(CentOS7.5用)

Gravはデータベースを使用しないPHP製のCMSです。

〇Gravの画面

ブラウザからhttp://<対象ホスト>/grav/にアクセスします。

〇Gravの管理者画面

ブラウザからhttp://<対象ホスト>/grav/admin/にアクセスします。ユーザ/パスワードはadmin/Admin123です。

〇インストール方法
1.下準備
~/.ansible.cfgに以下の内容を設定します
[ssh_connection]
pipelining=True
[defaults]
host_key_checking = False

2. インストール対象ホストのユーザやパスワードを環境に合わせてinventoryファイルに記入します

inventory例
[grav]
192.168.1.107

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
ansible_sudo_pass=vagrant

3.inventory、grav.ymlを準備し、以下のコマンドを実行します。
ansible-playbook -i inventory grav.yml

grav.yml
- hosts: grav
  tasks:
    - name: install remi repository
      yum: name=http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
      become: true
    - name: Install apache and php modules
      yum: name={{ item }} state=present enablerepo=remi-php71
      with_items:
        - httpd
        - php
        - php-gd
        - php-json
        - php-curl
        - php-mbstring
        - php-xml
        - php-simplexml
        - php-zip
        - unzip
      become: true
    - name: download grav
      get_url:
        url: https://getgrav.org/download/core/grav-admin/1.4.8
        dest: /tmp/grav.zip
      become: true
    - name: extract grav
      unarchive:
        remote_src: yes
        src: /tmp/grav.zip
        dest: /opt/
      become: true
    - name: download skelton
      get_url:
        url: https://getgrav.org/download/skeletons/soraarticle-blog/1.1.2
        dest: /tmp/grav-skeleton-soraarticle-blog-v1.1.2.zip
      become: true
    - name: extract skelton
      unarchive:
        remote_src: yes
        src: /tmp/grav-skeleton-soraarticle-blog-v1.1.2.zip
        dest: /opt/grav-admin
      become: true
    - name: place skelton
      shell: cp -R  /opt/grav-admin/grav-skeleton-soraarticle-blog/* /opt/grav-admin
      become: true
    - name: create a user
      command: ./bin/plugin login newuser --user=admin --password=Admin123 --email=admin@localhost.localdomain --permissions=b --fullname=administrator --title=admin
      args:
          chdir: /opt/grav-admin
      become: true
    - name: setup systemd
      blockinfile:
        dest: /etc/httpd/conf.d/grav.conf
        create: yes
        block: |
          
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
          
      become: true
    - name: change owner
      file:
        path: /opt/grav-admin
        owner: apache
        group: apache
        recurse: yes
      become: true
    - name: symlink
      file:
        path: /var/www/html/grav
        state: link
        src: /opt/grav-admin
      become: true
    - name: clean up
      file:
        state: absent
        path: /tmp/grav.zip
      become: yes
    - name: clean up skelton
      file:
        state: absent
        path: /tmp/grav-skeleton-soraarticle-blog-v1.1.2.zip
      become: yes
    - name: start httpd.service
      systemd:
        name: httpd
        state: restarted
      become: yes


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

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

Apache AirflowはPython言語のタスクスケジューラです。

〇Apache Airflowの画面


〇構築方法
1.以下のVagrantfileを使用して、 Apache AirflowとPostgreSQLをインストールした仮想マシン(CentOS7.5)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.5"
  config.vm.hostname = "co75airflowpg"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co75airflowpg"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.115", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.115", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# download and install postgresql.
wget https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
rpm -Uvh pgdg-centos10-10-2.noarch.rpm

yum -y update
yum -y install postgresql10-server postgresql10-devel postgresql10-contrib
systemctl enable postgresql-10

# initialize postgresql server
/usr/pgsql-10/bin/postgresql-10-setup initdb

echo "listen_addresses='*'" >> /var/lib/pgsql/10/data/postgresql.conf

sed -i 's/host.*all.*all.*127.0.0.1/#host    all             all             127.0.0.1/g' /var/lib/pgsql/10/data/pg_hba.conf
sed -i 's#^host.*all.*all.*::1/128.*ident#host    all             all             ::1/128    password#g' /var/lib/pgsql/10/data/pg_hba.conf

echo "host    all         all         127.0.0.1/32          password" >> /var/lib/pgsql/10/data/pg_hba.conf
echo "host    all         all         192.168.1.0/24          password" >> /var/lib/pgsql/10/data/pg_hba.conf
echo "host    all         all         192.168.55.0/24          password" >> /var/lib/pgsql/10/data/pg_hba.conf
systemctl start postgresql-10.service

# create users and databases...
su - postgres << EOF
psql -c "
alter user postgres with password 'postgres';
"
createdb -T template0 --locale=ja_JP.UTF-8 --encoding=UTF8 airflow
EOF
export PGPASSWD=postgres

systemctl restart postgresql-10.service
su - postgres << EOF
psql -c "
create user airflow with password 'airflow';
alter database airflow owner to airflow;
"
EOF


yum -y install epel-release
yum update
yum -y install postgresql-devel
yum -y install python36 python-devel python36-devel gcc-c++ openldap-devel openssl-devel mysql-devel
yum -y install redis
systemctl enable redis
systemctl start redis

# install pipenv
yum -y install python-pip
#pip install --upgrade pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv


# install airflow.
groupadd airflow
useradd -g airflow -s /bin/bash -d /home/airflow -m airflow

mkdir -p /opt/airflow/dags
chown -R airflow:airflow /opt/airflow
sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
echo $HOME
pipenv --python 3.6
pipenv install
pipenv run python -V
pipenv install psycopg2
pipenv install redis
pipenv install apache-airflow[devel,mysql,celery,cryptography]==1.9.0

wget https://raw.githubusercontent.com/apache/incubator-airflow/master/airflow/config_templates/default_airflow.cfg
cp default_airflow.cfg airflow.cfg

sed -i -e 's#sql_alchemy_conn = sqlite:///\{AIRFLOW_HOME\}/airflow.db#sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow#'  airflow.cfg
sed -i -e 's/executor = SequentialExecutor/executor = CeleryExecutor/' airflow.cfg
sed -i -e 's#\{AIRFLOW_HOME\}#/opt/airflow#' airflow.cfg
sed -i -e 's#broker_url = sqla+mysql://airflow:airflow@localhost:3306/airflow#broker_url = redis://localhost:6379#' airflow.cfg
sed -i -e 's#result_backend = db+mysql://airflow:airflow@localhost:3306/airflow#celery_result_backend = db+postgresql://airflow:airflow@localhost/airflow#' airflow.cfg
sed -i -e 's#load_examples = True#load_examples = False#' airflow.cfg
sed -i -e 's#default_timezone = utc#default_timezone = Asia/Tokyo#' airflow.cfg

cat << EOF > gen.py
from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key.decode('utf-8'), end='"')
EOF
pipenv run python gen.py > /tmp/fernet_key
echo -n 'export FERNET_KEY="' > /tmp/setfernetkey
cat /tmp/fernet_key >> /tmp/setfernetkey
AF_EOF

source /tmp/setfernetkey
sed -i -e "s/{FERNET_KEY}/$FERNET_KEY/" /opt/airflow/airflow.cfg

sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
pipenv run airflow initdb

# prepare a sample dag
cat << EOF > /opt/airflow/dags/dag_example1.py
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

operator_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 7, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    dag_id='dag_example1',
    default_args=operator_args,
    catchup=False,
    schedule_interval='0,5,10,15,20,25,30,35,40,45,50,55 * * * *'
)

task1 = BashOperator(
    task_id='task1',
    bash_command='echo "task1:"`date` >> /tmp/test.log',
    dag=dag
)

task2 = BashOperator(
    task_id='task2',
    bash_command='sleep 5 && echo "task2:"`date` >> /tmp/test.log',
    dag=dag
)

task1 >> task2
EOF
AF_EOF

mkdir -p /run/airflow
chown airflow:airflow /run/airflow

# setup worker service
cat << EOF > /etc/systemd/system/airflow-worker.service
[Unit]
Description=Airflow worker daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/bin/pipenv run airflow worker --pid /run/airflow/worker.pid
Restart=on-failure
RestartSec=30s

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

# setup scheduler service
cat << EOF > /etc/systemd/system/airflow-scheduler.service
[Unit]
Description=Airflow scheduler daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/bin/pipenv run airflow scheduler --pid /run/airflow/scheduler.pid
Restart=on-failure
RestartSec=30s

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

cat << EOF > /etc/systemd/system/airflow-webserver.service
[Unit]
Description=Airflow webserver daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/bin/pipenv run airflow webserver --pid /run/airflow/webserver.pid
Restart=on-failure
RestartSec=30s

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

echo 'url  -> http://192.168.55.115:8080/'
SHELL
end

2. ブラウザでhttp://192.168.55.115:8080/にアクセスして、サンプルDAGのdag_example1をPause状態のOffからOnに変更します。5分程度待つとジョブが実行されます。

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

・psycopg2に関する他の記事はこちらを参照してください。

2018年8月29日水曜日

VagrantでEclipse Photon、XfceDesktop環境、XRDPがインストールされた仮想マシン(Ubuntu18.04)を構築する

EclipseはオープンソースのIDEです。

〇Eclipse Photonの画面


○構築方法
以下のVagrantfileを使用して、Eclipse Photon、Xfce Desktop環境、XRDPをインストールした仮想マシン(Ubuntu18.04)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804xfceeclipse"
config.vm.network :public_network, ip:"192.168.1.117"
config.vm.network "private_network", ip: "192.168.55.117", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = " ub1804xfceeclipse"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get -y install language-pack-ja
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.riken.jp/pub/Linux/ubuntu/#g" /etc/apt/sources.list
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install xrdp=0.9.5-2 fcitx-mozc xubuntu-desktop language-pack-ja language-pack-ja
im-config -n fcitx

apt-get -y install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04
apt-get -y install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11

sed -i -e "s/allowed_users=console/allowed_users=anybody/" /etc/X11/Xwrapper.config

echo "xfce4-session" > /home/vagrant/.xsession
apt-get -y purge light-locker


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

# install eclipse photon
wget http://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/photon/R/eclipse-java-photon-R-linux-gtk-x86_64.tar.gz
tar xvfz eclipse-java-photon-R-linux-gtk-x86_64.tar.gz
mv eclipse /opt

cat << EOF > /usr/share/applications/eclipse.desktop
#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/eclipse/eclipse
Name=eclipse
Categories=Development;
Icon=/opt/eclipse/icon.xpm
EOF

init 5
SHELL
end


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

VagrantでsysbenchとMariaDBをインストールした仮想マシン(Debian Stretch/9.5)を構築する

sysbenchでホストマシンやデータベースのベンチマークを行うことができます。

〇構築方法
以下のVagrantfileを使用して、sysbenchとMariaDBがインストールされた仮想マシン(Debian Stretch/9.5)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95sysbenchmariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95sysbenchmariadb"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.11.107", :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
timedatectl set-timezone Asia/Tokyo

# install mariadb
echo "mariadb-server-10.1 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.1 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -proot -e "CREATE DATABASE sysbench DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -proot -e "CREATE USER sysbench@localhost IDENTIFIED BY 'sysbench';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON sysbench.* TO 'sysbench'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

# install and execute sysbench.
apt-get -y install sysbench
sysbench --test=cpu run --num-threads=2
sysbench --test=memory run --num-threads=2
sysbench --test=fileio run --file-test-mode=seqwr --num-threads=2
sysbench --test=fileio run --file-test-mode=rndwr --num-threads=2

sysbench --test=oltp prepare --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=sysbench --mysql-db=sysbench
sysbench --test=oltp run --db-driver=mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=sysbench --mysql-db=sysbench --num-threads=2

SHELL
end


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

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

MySQL Server Exporterで、Prometheusの為にMariaDBの監視を行うことができます。

〇MySQL Server ExporterのデータをPrometheusで表示した画面


〇構築方法
以下のVagrantfileを使用して、MySQL Server Exporter(Prometheus)とMariaDBをインストールした仮想マシン(Ubuntu16.04)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604mariadbmysqlexporter"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604mariadbmysqlexporter"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.106", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.106", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
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
timedatectl set-timezone Asia/Tokyo

# install mariadb
echo "mariadb-server-10.0 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.0 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -e "CREATE USER prometheus@localhost IDENTIFIED BY 'prometheus';"
mysql -uroot -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"

# install prometheus mysql exporter
groupadd prometheus
useradd -g prometheus -s /bin/bash -d /home/prometheus -m prometheus

mkdir -p /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.11.0.linux-amd64.tar.gz

ln -s /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter /bin/mysqld_exporter

cat << EOF > /etc/systemd/system/mysqld-exporter.service
[Unit]
Description=Prometheus MySQL Server Exporter
Requires=network.target
[Service]
Restart=always
WorkingDirectory=/opt/prometheus/mysqld_exporter-0.11.0.linux-amd64
Environment=DATA_SOURCE_NAME=prometheus:prometheus@(localhost:3306)/
ExecStart=/bin/mysqld_exporter
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable mysqld-exporter.service
systemctl start mysqld-exporter.service
echo 'port 9104'
SHELL
end

2018年8月28日火曜日

Jupyterで日本の人口推移データをグラフ化する

Jupterでe-statsから人口データをダウンロードしてグラフ表示するには、以下のコードを実行します

〇コード
%matplotlib inline
import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import requests
import re
import pandas

#※データ取得ページ
#組織 厚生労働省 人口動態調査_人口動態統計_確定数_人口_年次_2016年 1_年次・性別人口
#http://www.data.go.jp/data/dataset/mhlw_20171204_0015/resource/53d97e92-5f10-4fcf-ab3b-a08c898f09c1

# download data and cleansing
url = "http://www.e-stat.go.jp/SG1/estat/GL08020103.do?_csvDownload_&fileId=000008018753&releaseCount=1"
table = False
rows = []
for line in requests.get(url).iter_lines():
  # SJISとして読み込む
  row = line.decode('SJIS')
  # 「総数」含まれている行から実データ
  if '総数' in row:
    table = True
  # ヘッダー1列目を「year」に修正
  row = re.sub('^,.*', 'year,total,male,female', row)
  # 西暦上2桁を修正
  row = re.sub('^ ', '19', row)
  # その他の位置の全角スペースを消す
  row = re.sub(' ', '', row)
  # 空行を除く
  if len(row) == 0:
    continue
  if table == True:
    rows.append(row)

filename = "population-data.csv"
with open(filename, mode='w') as outfile:
  outfile.write("\n".join(rows))

df = pandas.read_csv(filename)
df2 = df.loc[:,['year','male','female']]
ax = df2.set_index('year').plot()
ax.get_yaxis().set_major_formatter(
    ticker.FuncFormatter(lambda y, p: format(int(y), ',')))
plt.legend(loc='best')
plt.show()

〇出力画像



○関連情報
・requestsパッケージに関する他の記事はこちらを参照してください。

VagrantでunixBenchをインストールした仮想マシン(CentOS7.5)を構築する

unixBenchは歴史あるベンチマークツールです

〇構築方法
以下のVagrantfileを使用して、unixBenchをインストールした仮想マシン(CentOS7.5)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.5"
  config.vm.hostname = "co75unixbench"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co75unixbench"
     vbox.cpus = 2
     vbox.memory = 2048 
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  # private network
  config.vm.network "private_network", ip: "192.168.55.99", :netmask => "255.255.255.0"
  # bridge netwrok
  config.vm.network "public_network", ip: "192.168.1.99", :netmask => "255.255.255.0"
  config.vm.network "forwarded_port", guest:22, host:18022, id:"ssh"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install unixbench
yum -y groupinstall "Development Tools"
yum -y install git
git clone https://github.com/kdlucas/byte-unixbench
cd byte-unixbench/UnixBench
./make
./Run

SHELL
end


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

AnsibleでKanboardとMariaDBをインストールする(CentOS7用)

Kanboardは、PHP製のタスク管理ソフトウェアです。

〇Kanboardの管理者画面

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

インストール方法

1.下準備
~/.ansible.cfgに以下の内容を設定します
[ssh_connection]
pipelining=True
[defaults]
host_key_checking = False

2. インストール対象ホストのユーザやパスワードを環境に合わせてinventoryファイルに記入します

inventory例
[kanboard]
192.168.1.107

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
ansible_sudo_pass=vagrant

3.inventory、kanboard.ymlを準備し、以下のコマンドを実行します。
ansible-playbook -i inventory kanboard.yml

kanboard.yml
- hosts: kanboard
  vars:
    - dbname: kanboard
    - dbuser: kanboard
    - dbpassword: kanboard
    - dbhost: localhost
    - dbport: 3306
  tasks:
    - name: install mariadb
      yum:
        name: mariadb-server
        state: present
      become: yes
    - name: enable and start mariadb.service
      systemd:
        name: mariadb
        enabled: yes
        state: started
      become: yes
    - name: install epel-release
      yum:
        name: epel-release
        state: present
      become: yes
    - name: Install required software
      yum: name={{ item }} state=present enablerepo=epel
      with_items:
        - mariadb-devel
        - python-devel
        - python36-devel
        - python-pip
      become: true
    - name: install MySQL-python using pip
      pip:
        name: "{{ item }}"
        state: forcereinstall
      with_items:
        - MySQL-python
      become: true
    - name: create db
      mysql_db:
        name={{ dbname }}
        state=present
        encoding=utf8
        login_user=root
    - name: create and grant a database user
      mysql_user:
        name={{ dbuser }}
        password={{ dbpassword }}
        priv="kanboard.*:ALL"
        state=present
      become: true
    - name: install remi repository
      yum: name=http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
      become: true
    - name: Install apache and php modules
      yum: name={{ item }} state=present enablerepo=remi-php71
      with_items:
        - httpd
        - php
        - php-mbstring
        - php-gd
        - php-dom
        - php-simplexml
        - unzip
        - php-pdo
        - php-mysql
      become: true
    - name: download kanboard
      get_url:
        url: https://github.com/kanboard/kanboard/archive/v1.2.5.tar.gz
        dest: /tmp/
      become: true
    - name: extract kanboard
      unarchive:
        remote_src: yes
        src: /tmp/kanboard-1.2.5.tar.gz
        dest: /opt/
      become: true
    - name: place skelton
      shell: cp -R  /opt/kanboard-1.2.5/config.default.php /opt/kanboard-1.2.5/config.php
      become: true
    - name: edit config.php
      replace: dest=/opt/kanboard-1.2.5/config.php regexp="define('DB_DRIVER', 'sqlite');" replace="define('DB_DRIVER', 'mysql');"
      become: true
    - name: edit config.php
      replace: dest=/opt/kanboard-1.2.5/config.php regexp="define('DB_USERNAME', 'root');" replace="define('DB_USERNAME', 'kanboard');"
      become: true
    - name: edit config.php
      replace: dest=/opt/kanboard-1.2.5/config.php regexp="define('DB_PASSWORD', '');" replace="define('DB_PASSWORD', 'kanboard');"
      become: true
    - name: change owner
      file:
        path: /opt/kanboard-1.2.5
        owner: apache
        group: apache
        recurse: yes
      become: true
    - name: symlink
      file:
        path: /var/www/html/kanboard
        state: link
        src: /opt/kanboard-1.2.5
      become: true
    - name: clean up
      file:
        state: absent
        path: /tmp/v1.2.5.tar.gz
      become: yes
    - name: start httpd.service
      systemd:
        name: httpd
        state: restarted
      become: yes


関連情報

・Kanboardの設定・操作方法については「Kanboardの設定・操作」を参照してください。

・Kanboardに関する他の記事はこちらを参照してください。

・Kanboardのgithubリポジトリ
https://github.com/kanboard/kanboard

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

Zabbixはサーバー監視ソフトウェアです。

〇Zabbixの画面

ユーザ名、パスワードはAdmin/zabbixです。

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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804zabbixpg"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804zabbixpg"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.107", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
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 zabbix
psql -c "
alter user postgres with password 'postgres';
create user zabbix with password 'zabbix';
grant all privileges on database zabbix to zabbix;
"
EOF
echo "postgres:postgres" | chpasswd
systemctl restart postgresql.service

# install zabbix
wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb
dpkg -i zabbix-release_3.4-1+bionic_all.deb
apt-get update
apt-get -y install zabbix-server-pgsql zabbix-frontend-php php-pgsql zabbix-agent 
export PGPASSWORD=zabbix
zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | psql -h localhost -U zabbix zabbix
sed -i -e 's/# DBPassword=/DBPassword=zabbix/' /etc/zabbix/zabbix_server.conf
sed -i -e 's|# php_value date.timezone Europe/Riga|php_value date.timezone Asia/Tokyo|' /etc/apache2/conf-enabled/zabbix.conf

systemctl enable zabbix-server.service
systemctl start zabbix-server.service
systemctl enable zabbix-agent.service
systemctl start zabbix-agent.service
systemctl restart apache2

echo 'access to http://192.168.1.107/zabbix/'
echo 'user: Admin   password: zabbix'
SHELL
end

2.ブラウザからhttp://192.168.1.108/zabbix/にアクセスします。「Next Step」をクリックします。


3.「Next Step」をクリックします。


4.Passwordフィールドにzabbixを入力して、「Next Step」をクリックします。


5.「Next Step」をクリックします。


6.「Next Step」をクリックします。


7.「Finish」をクリックします。


2018年8月27日月曜日

VagrantでApache Nifi 1.7.1とMariaDBがインストールされた仮想マシン(Ubuntu16.04)を構築する。

Apache Nifiは様々なデータを処理・分配するためのソフトウェアです。

〇Apache Nifiの画面


〇構築方法
1.以下のVagrantfileを使用して、Apache Nifi 1.7.1とMariaDBがインストールされた仮想マシン(Ubuntu16.04)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604nifi171mariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604nifi171mariadb"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.114", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.114", :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
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
timedatectl set-timezone Asia/Tokyo

# install mariadb
echo "mariadb-server-10.0 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.0 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
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;"


# install jdbc driver for mysql
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java_8.0.12-1ubuntu16.04_all.deb
dpkg -i mysql-connector-java_8.0.12-1ubuntu16.04_all.deb

# maximum file handles & maximum forked processes
echo '*  hard  nofile  50000' >> /etc/security/limits.conf
echo '*  soft  nofile  50000' >> /etc/security/limits.conf
echo '*  hard  nproc  10000' >> /etc/security/limits.conf
echo '*  soft  nproc  10000' >> /etc/security/limits.conf

echo '*  soft  nproc  10000' >> /etc/security/limits.d/90-nproc

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

# download and install Apache Nifi
wget http://ftp.riken.jp/net/apache/nifi/1.7.1/nifi-1.7.1-bin.tar.gz
tar xvfz nifi-1.7.1-bin.tar.gz
mv nifi-1.7.1 /opt

cat << EOF > /etc/systemd/system/nifi.service
[Unit]
Description=Apache Nifi
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/nifi-1.7.1/bin/nifi.sh start
ExecStop=/opt/nifi-1.7.1/bin/nifi.sh stop
KillMode=none

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

echo 'access url -> http://192.168.1.114:8080/nifi/'
SHELL
end

2.DBCPConnectionPoolで、以下のようにパラメータを設定してローカルのMariaDBにアクセスします。
Database Connection -> URL jdbc:mysql://localhost/test
Database Driver Class Name -> com.mysql.jdbc.Driver
Database Driver Location(s) -> /usr/share/java/mysql-connector-java-8.0.12.jar
Database Userr -> test
Password -> test


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

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

LimeSurveyで、オンラインアンケートを設置することができます。

〇LimeSurveyの管理者画面


〇構築方法
1.以下のVagrantfileを使用して、LimeSurveyとMariaDBをインストールした仮想マシン(Ubuntu16.04)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604limesurvey313mariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604limesurvey313mariadb"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.11.107", :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
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
timedatectl set-timezone Asia/Tokyo

# install mariadb
echo "mariadb-server-10.0 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.0 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -proot -e "CREATE DATABASE limesurvey DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -proot -e "CREATE USER limesurvey@localhost IDENTIFIED BY 'limesurvey';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON limesurvey.* TO 'limesurvey'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

# install apache and php
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-gd php7.0-zip

# install limeservey
wget https://www.limesurvey.org/stable-release?download=2429:limesurvey3132%20180709targz -O limesurvey.tar.gz
tar xvfz limesurvey.tar.gz
mv limesurvey /opt

chown -R www-data:www-data /opt/limesurvey
ln -s  /opt/limesurvey /var/www/html

systemctl reload apache2.service
echo 'access http://192.168.55.107/limesurvey/'
echo 'db:limesurvey  user:limesurvey  password:limesurvey'
SHELL
end

2.ブラウザからhttp://192.168.55.107/limesurveyにアクセスして、「日本語 - Japan」を選択して「Start installation」をクリックします


3.ライセンスを確認して、同意できるのであれば「同意する」をクリックします


4.「インストール前のチェック」画面で「次へ」をクリックします


5.「データベース設定」画面で、以下の項目を入力して「次へ」をクリックします
データベース形式: MySQL
データの場所: localhost
データベースユーザー: limesurvey
データベースパスワード: limesurvey
データベース名: limesurvey


6.「データベースを作成する」をクリックします


7.「管理者設定」画面で管理者情報等を入力して、「次へ」をクリックします


8.インストーラ完了画面



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

2018年8月26日日曜日

AnsibleでGravをインストールする(Ubuntu16.04/Debian Stretch用)

Gravはデータベースを使用しないPHP製のCMSです。

〇Gravの画面

ブラウザからhttp://<対象ホスト>/grav/にアクセスします。

〇Gravの管理者画面

ブラウザからhttp://<対象ホスト>/grav/admin/にアクセスします。ユーザ/パスワードはadmin/Admin123です。

〇インストール方法
1.下準備
~/.ansible.cfgに以下の内容を設定します
[ssh_connection]
pipelining=True
[defaults]
host_key_checking = False

2. インストール対象ホストのユーザやパスワードを環境に合わせてinventoryファイルに記入します

inventory例
[grav]
192.168.1.107

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
ansible_sudo_pass=vagrant

3.inventory、grav.ymlを準備し、以下のコマンドを実行します。
ansible-playbook -i inventory grav.yml

grav.yml
- hosts: grav
  tasks:
    - name: Install apache and php modules
      apt: name={{ item }} state=present
      with_items:
        - apache2
        - libapache2-mod-php7.0
        - php7.0-gd
        - php7.0-json
        - php7.0-curl
        - php7.0-mbstring
        - php7.0-xml
        - php7.0-zip
        - unzip
      become: true
    - name: download grav
      get_url:
        url: https://getgrav.org/download/core/grav-admin/1.4.8
        dest: /tmp/grav.zip
      become: true
    - name: extract grav
      unarchive:
        remote_src: yes
        src: /tmp/grav.zip
        dest: /opt/
      become: true
    - name: download skelton
      get_url:
        url: https://getgrav.org/download/skeletons/soraarticle-blog/1.1.2
        dest: /tmp/grav-skeleton-soraarticle-blog-v1.1.2.zip
      become: true
    - name: extract skelton
      unarchive:
        remote_src: yes
        src: /tmp/grav-skeleton-soraarticle-blog-v1.1.2.zip
        dest: /opt/grav-admin
      become: true
    - name: place skelton
      shell: cp -R  /opt/grav-admin/grav-skeleton-soraarticle-blog/* /opt/grav-admin
      become: true
    - name: create a user
      command: ./bin/plugin login newuser --user=admin --password=Admin123 --email=admin@localhost.localdomain --permissions=b --fullname=administrator --title=admin
      args:
          chdir: /opt/grav-admin
      become: true
    - name: setup systemd
      blockinfile:
        dest: /etc/apache2/apache2.conf
        create: yes
        block: |
          
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
          
      become: true
    - name: change owner
      file:
        path: /opt/grav-admin
        owner: www-data
        group: www-data
        recurse: yes
      become: true
    - name: symlink
      file:
        path: /var/www/html/grav
        state: link
        src: /opt/grav-admin
      become: true
    - name: clean up
      file:
        state: absent
        path: /tmp/grav.zip
      become: yes
    - name: clean up skelton
      file:
        state: absent
        path: /tmp/grav-skeleton-soraarticle-blog-v1.1.2.zip
      become: yes
    - name: enable mod_rewrite
      apache2_module:
        state: present
        name: rewrite
      become: yes
    - name: start apache2.service
      systemd:
        name: apache2
        state: restarted
      become: yes


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

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

Apache AirflowはPython言語のタスクスケジューラです。

〇Apache Airflowの画面


〇構築方法
1.以下のVagrantfileを使用して、 Apache AirflowとPostgreSQLをインストールした仮想マシン(Ubuntu18.04)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804airflowpg"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804airflowpg"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.115", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.115", :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
timedatectl set-timezone Asia/Tokyo
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 airflow
psql -c "
alter user postgres with password 'postgres';
create user airflow with password 'airflow';
grant all privileges on database airflow to airflow;
"
EOF
echo "postgres:postgres" | chpasswd
systemctl restart postgresql.service

apt-get -y install libmysqlclient-dev python3-dev build-essential
apt-get -y install libpq-dev python-dev
apt-get -y install redis-server

# install pipenv
apt-get -y install python-pip
#pip install --upgrade pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv


# install airflow.
groupadd airflow
useradd -g airflow -s /bin/bash -d /home/airflow -m airflow

mkdir -p /opt/airflow/dags
chown -R airflow:airflow /opt/airflow
sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
echo $HOME
pipenv --python 3.5
pipenv install
pipenv run python -V
pipenv install redis
pipenv install psycopg2
pipenv install apache-airflow[devel,mysql,celery,cryptography]==1.9.0

wget https://raw.githubusercontent.com/apache/incubator-airflow/master/airflow/config_templates/default_airflow.cfg
cp default_airflow.cfg airflow.cfg

sed -i -e 's#sql_alchemy_conn = sqlite:///\{AIRFLOW_HOME\}/airflow.db#sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow#'  airflow.cfg
sed -i -e 's/executor = SequentialExecutor/executor = CeleryExecutor/' airflow.cfg
sed -i -e 's#\{AIRFLOW_HOME\}#/opt/airflow#' airflow.cfg
sed -i -e 's#broker_url = sqla+mysql://airflow:airflow@localhost:3306/airflow#broker_url = redis://localhost:6379#' airflow.cfg
sed -i -e 's#result_backend = db+mysql://airflow:airflow@localhost:3306/airflow#celery_result_backend = db+postgresql://airflow:airflow@localhost/airflow#' airflow.cfg
sed -i -e 's#load_examples = True#load_examples = False#' airflow.cfg
sed -i -e 's#default_timezone = utc#default_timezone = Asia/Tokyo#' airflow.cfg

cat << EOF > gen.py
from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key.decode('utf-8'), end='"')
EOF
pipenv run python gen.py > /tmp/fernet_key
echo -n 'export FERNET_KEY="' > /tmp/setfernetkey
cat /tmp/fernet_key >> /tmp/setfernetkey
AF_EOF

source /tmp/setfernetkey
sed -i -e "s/{FERNET_KEY}/$FERNET_KEY/" /opt/airflow/airflow.cfg

sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
pipenv run airflow initdb

# prepare a sample dag
cat << EOF > /opt/airflow/dags/dag_example1.py
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

operator_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 7, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    dag_id='dag_example1',
    default_args=operator_args,
    catchup=False,
    schedule_interval='0,5,10,15,20,25,30,35,40,45,50,55 * * * *'
)

task1 = BashOperator(
    task_id='task1',
    bash_command='echo "task1:"`date` >> /tmp/test.log',
    dag=dag
)

task2 = BashOperator(
    task_id='task2',
    bash_command='sleep 5 && echo "task2:"`date` >> /tmp/test.log',
    dag=dag
)

task1 >> task2
EOF
AF_EOF

mkdir -p /run/airflow
chown airflow:airflow /run/airflow

# setup worker service
cat << EOF > /etc/systemd/system/airflow-worker.service
[Unit]
Description=Airflow worker daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow worker --pid /run/airflow/worker.pid
Restart=on-failure
RestartSec=30s

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

# setup scheduler service
cat << EOF > /etc/systemd/system/airflow-scheduler.service
[Unit]
Description=Airflow scheduler daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow scheduler --pid /run/airflow/scheduler.pid
Restart=on-failure
RestartSec=30s

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

cat << EOF > /etc/systemd/system/airflow-webserver.service
[Unit]
Description=Airflow webserver daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow webserver --pid /run/airflow/webserver.pid
Restart=on-failure
RestartSec=30s

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

echo 'url  -> http://192.168.55.115:8080/'
SHELL
end

2. ブラウザでhttp://192.168.55.115:8080/にアクセスして、サンプルDAGのdag_example1をPause状態のOffからOnに変更します。5分程度待つとジョブが実行されます。

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

・psycopg2に関する他の記事はこちらを参照してください。

2018年8月25日土曜日

DockerでJupyter Notebook、PostgreSQL10.5がインストールされたコンテナのイメージを作成する

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

○Jupyter Notebookの画面


○構築方法
以下の手順で、Jupyter Notebook、PostgreSQL10.5のコンテナを構築・実行します。
1. psycopg2を追加したJupyter Notebookイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t scipy-notebook-pg .

Dockerfile
FROM jupyter/scipy-notebook
ENV TZ=Asia/Tokyo
USER root
RUN apt-get update \
  && apt-get -y install libpq-dev python-dev \
  && pip install psycopg2-binary \
  && apt-get clean
USER $NB_UID

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

docker-compose.yml
version: "2"
services:
  scipy-notebook:
    image: scipy-notebook-pg
    container_name: "scipy-notebook-pg"
    volumes:
      - "scipy-notebook-data:/home/jovyan/work"
    ports:
      - "8888:8888"
    environment:
      JUPYTER_TOKEN: jupyter
    depends_on:
      - db
  db:
    image: postgres:10.5-alpine
    container_name: "test-db"
    ports:
      - "5432:5432"
    volumes:
      - "db-data:/var/lib/postgresql/data"
    environment:
        POSTGRES_DB: test
        POSTGRES_PASSWORD: test
volumes:
  db-data:
    driver: local
  scipy-notebook-data:
    driver: local

※Jupyter Labを使用したい場合は、以下のようにenvironmentにJUPYTER_ENABLE_LAB: 1を追加します。
    environment:
      JUPYTER_TOKEN: jupyter
      JUPYTER_ENABLE_LAB: 1

3.ブラウザから以下のURLにアクセス
http://<Dockerホスト名またはIP>:8888/?token=jupyter

〇動作検証用コード
import psycopg2

con = psycopg2.connect("dbname=test host=db user=postgres password=test")

try:
  cur= con.cursor()

  cur.execute("create table messages (message_id integer, message varchar(100))")
  cur.execute("insert into messages values (100, 'hello world!')")

  sql = "select message_id, message from messages"
  cur.execute(sql)

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

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


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

VagrantでBluefish、Xfce Desktop環境、XRDPがインストールされた仮想マシン(Ubuntu18.04)を構築する

Bluefishは様々なマークアップ/コンピュータ言語に対応したエディタです。

〇Bluefishの画面


構築方法

以下のVagrantfileを使用して、Bluefish 、Xfce Desktop環境、XRDPをインストールした仮想マシン(Ubuntu18.04)を構築できます。
XRDPがインストールされているので、Windowsのリモートデスクトップで接続することができます。ユーザ名はvagrant、パスワードもvagrantでログオンできます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804xfcebluefish"
config.vm.network :public_network, ip:"192.168.1.117"
config.vm.network "private_network", ip: "192.168.55.117", :netmask => "255.255.255.0"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804xfcebluefish"
     vbox.gui = true
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
  config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get -y install language-pack-ja
sed -i.bak -e "s#http://archive.ubuntu.com/ubuntu/#http://ftp.riken.jp/pub/Linux/ubuntu/#g" /etc/apt/sources.list
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
apt-get -y install xrdp=0.9.5-2 fcitx-mozc xubuntu-desktop language-pack-ja language-pack-ja
im-config -n fcitx

apt-get -y install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04
apt-get -y install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11

sed -i -e "s/allowed_users=console/allowed_users=anybody/" /etc/X11/Xwrapper.config

echo "xfce4-session" > /home/vagrant/.xsession
apt-get -y purge light-locker

# install Bluefish
apt-get -y install bluefish

init 5
SHELL
end

関連情報

・Bluefishに関する他の記事はこちらを参照してください。

VagrantでMySQL Server Exporter(Prometheus)とMariaDBをインストールした仮想マシン(Debian Stretch/9.5)を構築する

MySQL Server Exporterで、Prometheusの為にMariaDBの監視を行うことができます。

〇MySQL Server ExporterのデータをPrometheusで表示した画面


〇構築方法
以下のVagrantfileを使用して、MySQL Server Exporter(Prometheus)とMariaDBをインストールした仮想マシン(Debian Stretch/9.5)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95mariadbmysqldexporter"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95mariadbmysqldexporter"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.106", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.106", :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
timedatectl set-timezone Asia/Tokyo

# install mariadb
echo "mariadb-server-10.1 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mariadb-server-10.1 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mariadb-server
mysql -uroot -e "CREATE USER prometheus@localhost IDENTIFIED BY 'prometheus';"
mysql -uroot -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"

# install prometheus mysql exporter
groupadd prometheus
useradd -g prometheus -s /bin/bash -d /home/prometheus -m prometheus

mkdir -p /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.11.0.linux-amd64.tar.gz

ln -s /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter /bin/mysqld_exporter

cat << EOF > /etc/systemd/system/mysqld-exporter.service
[Unit]
Description=Prometheus MySQL Server Exporter
Requires=network.target
[Service]
Restart=always
WorkingDirectory=/opt/prometheus/mysqld_exporter-0.11.0.linux-amd64
Environment=DATA_SOURCE_NAME=prometheus:prometheus@(localhost:3306)/
ExecStart=/bin/mysqld_exporter
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable mysqld-exporter.service
systemctl start mysqld-exporter.service
echo 'port 9104'
SHELL
end

2018年8月24日金曜日

DockerでDrupal8.5.5とPercona Server5.7のコンテナ(Alpine3.8)を構築する

DrupalはPHP製のCMSです。

〇Drupalの画面


〇構築手順
1. Drupalイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mydrupal .

Dockerfile
FROM alpine:3.8
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7-mysqli php7-mbstring php7-session php7-curl php7-xml php7-dom php7-json php7-ctype php7-tokenizer php7-gd php7-pdo php7-pdo_mysql php7-simplexml php7-opcache openssl openrc \
  && rm -rf /var/cache/apk/* \
  && wget https://ftp.drupal.org/files/projects/drupal-8.5.5.tar.gz \
  && tar xvfz drupal-8.5.5.tar.gz \
  && rm -f drupal-8.5.5.tar.gz \
  && mkdir /opt \
  && mv drupal-8.5.5 /opt/drupal \
  && chown -R apache:apache /opt/drupal \
  && mkdir -p /run/apache2 \
  && echo $'\n\
  Options Indexes FollowSymLinks \n\
  AllowOverride All \n\
  Require all granted \n\
  RewriteEngine on \n\
  RewriteBase / \n\
  RewriteCond %{REQUEST_FILENAME} !-f \n\
  RewriteCond %{REQUEST_FILENAME} !-d \n\
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] \n\
' >> /etc/apache2/httpd.conf \
  && sed -i -e 's|#LoadModule rewrite_module modules/mod_rewrite.so|LoadModule rewrite_module modules/mod_rewrite.so|' /etc/apache2/httpd.conf \
  && sed -i -e 's|DocumentRoot "/var/www/localhost/htdocs"|DocumentRoot "/opt/drupal"|' /etc/apache2/httpd.conf
EXPOSE 80
VOLUME /opt/drupal
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. DrupalとMySQL5.7コンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d
docker-compose.yml
version: "2"
services:
  drupal:
    image: mydrupal
    container_name: "drupal"
    volumes:
      - "drupal-data:/opt/drupal"
    ports:
      - "80:80"
    depends_on:
      - drupaldb
  drupaldb:
    image: percona:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "drupal-db"
    volumes:
      - "drupaldb-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: drupal
        MYSQL_ROOT_PASSWORD: drupal
volumes:
  drupal-data:
    driver: local
  drupaldb-data:
    driver: local

2.ブラウザからhttp://<Dockerホスト>にアクセスします。「Save and continue」ボタンをクリックします。


3.「標準」を選択して「保存して次へ」をクリックします


4.以下を入力して「保存して次へ」ボタンをクリックします
データベース名: drupal
ユーザ名: root
パスワード: drupal
ホスト: drupaldb


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


6.インストール完了画面



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