2018年6月30日土曜日

PortainerでJenkins + Blue ocean pluginのスタックを作成する

Jenkinsは継続的インテグレーションツールです。Portainerで簡単にwebブラウザからJenkinsのスタックを作成する事ができます。

〇Jenkinsの画面


〇構築方法
1.画面横のStacksをクリック後、Stacks list画面でAdd a stackボタンをクリックします


2.Create stack画面で、Nameフィールドにjenkinsblueoceanを入力して、Web editorに以下を張り付ける

version: "3"
services:
  jenkins_blueocean:
    image: jenkinsci/blueocean
    container_name: "jenkins_blueocean"
    volumes:
      - "jenkins-data:/var/jenkins_home"
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "13780:8080"
      - "50000:50000"
volumes:
  jenkins-data:
    driver: local



3.ブラウザからhttp://<Dockerホスト>:13780/にアクセスします
以下のコマンドをDockerホストで実行し、表示されたコードを入力します。
docker ps -a | grep jenkins | cut -d ' ' -f1
docker exec -it <上記コマンドで表示されるコンテナID> cat /var/jenkins_home/secrets/initialAdminPassword


4.Customize Jenkins画面でInstall suggested pluginsボタンをクリックします


5.Create First Admin User画面でcontinue as adminリンクをクリックします


6.Instance Configuration画面でSave adn Finishボタンをクリックします


7.Jenkins is ready!画面でStart using Jenkinsボタンをクリックします


8.Jenkinsの管理者画面


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

DockerでNextcloud13.04、PostgreSQL10.4がインストールされたコンテナ(Alpine 3.7)を構築する

NextcloudはDropboxのようなファイルを共有できるサーバーアプリケーションです。

〇Nextcloudの画面


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

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

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

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

docker-compose.yml
version: "2"
services:
  nextcloud:
    image: nextcloudpg
    container_name: "nextcloud"
    volumes:
      - "nextcloud-data:/opt/nextcloud"
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: postgres:10.4-alpine
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: nextcloud
    ports:
      - "5432:5432"
    container_name: postgres
    volumes:
      - "db-data:/var/lib/postgresql/data"
volumes:
  db-data:
    driver: local
  nextcloud-data:
    driver: local

3. ブラウザからhttp://<Dockerホスト名またはIP>/nextcloud/にアクセス
Installer画面で以下の項目を入力します
データベースのユーザ名: nextcloud
データベースのパスワード: nextcloud
データベース名: nextcloud
データベースのホスト名: db:5432
他の項目は好みに合わせて入力


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

VagrantでMySQLTunerとPercona Serverをインストールした仮想マシン(Debian9.4)を構築する

MySQLTunerはMySQLをチューニングするためのperlスクリプトです。

〇MySQLTunerの推奨設定出力例


〇構築方法
以下のVagrantfileを使用してMySQLTunerとPercona Serverをインストールした仮想マシン(Debian9.4)を構築する事ができます。
MySQLのユーザ/パスワードはroot/rootです。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.4"
  config.vm.hostname = "db94mysqltunerpercona"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db94mysqltunerpercona"
     vbox.cpus = 2
     vbox.memory = 1024
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.101", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.101", :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 percona server
export DEBIAN_FRONTEND=noninteractive
echo "percona-server-server-5.7 percona-server-server/root_password password root" | sudo debconf-set-selections
echo "percona-server-server-5.7 percona-server-server/root_password_again password root" | sudo debconf-set-selections
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get -y install percona-server-server-5.7
sudo mysql -uroot -e "UPDATE user SET plugin='mysql_native_password', authentication_string = password('root') WHERE User='root'; flush privileges;" mysql

# install MySQLTuner
wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
echo 'execute : perl mysqltuner.pl'

SHELL
end


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

VagrantでJupyter LabとPercona Serverをインストールした仮想マシン(CentOS7.4)を構築する

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

○Jupyter Labの画面


構築方法

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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74jupyterlabpercona"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74jupyterlabpercona"
     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
localectl set-locale LANG=ja_JP.UTF-8

# install Percona Server
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum -y install Percona-Server-server-57
service mysql start

export MYSQL_ROOTPWD='Root123#'
export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot -p$MYSQL_PWD --connect-expired-password -e "SET PASSWORD = PASSWORD('$MYSQL_ROOTPWD');"
mysql -uroot -p$MYSQL_ROOTPWD --connect-expired-password -e "UNINSTALL PLUGIN validate_password;"
mysql -uroot -p$MYSQL_ROOTPWD --connect-expired-password -e "SET PASSWORD = PASSWORD('root'); FLUSH PRIVILEGES;"
mysql -uroot -e "SET PASSWORD = PASSWORD('root'); FLUSH PRIVILEGES;"
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 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
pip install jupyterlab

# install mysqlclient
yum -y install epel-release python-devel gcc-c++ openldap-devel openssl-devel mysql-devel
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
ExecStartPre=source /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.105:8080/?token=jupyter'
SHELL
end

○動作確認用コード
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

関連情報

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

2018年6月29日金曜日

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

collectdでシステム情報を記録する事ができます。

○collectdの画面


○構築方法
以下のVagrantfileを使用して、collectdとcollectd-webをインストールした仮想マシン(Ubuntu 18.04)を構築できます。
ブラウザからhttp://192.168.55.107:8080/でcollectd-webにアクセスします。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804collectd"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804collectd"
     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
# 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 collectd
apt-get -y install collectd

systemctl enable collectd.service
systemctl start collectd.service

# install collected-web
apt-get -y install git librrds-perl libjson-perl libhtml-parser-perl libcgi-session-perl
cd /usr/local/
git clone https://github.com/httpdss/collectd-web.git
chmod +x /usr/local/collectd-web/cgi-bin/graphdefs.cgi


cat << EOF > /etc/systemd/system/collectd-web.service
[Unit]
Description=collectd-web

[Service]
Type=simple
ExecStart=/usr/bin/python /usr/local/collectd-web/runserver.py 192.168.55.107 8080
WorkingDirectory=/usr/local/collectd-web

[Install]
WantedBy=multi-user.target
EOF
systemctl enable collectd-web.service
systemctl start collectd-web.service
sleep 10

echo 'access http://192.168.55.107:8080/'

SHELL
end

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

MySQLTunerはMySQLをチューニングするためのperlスクリプトです。

〇MySQLTunerの推奨設定出力例


〇構築方法
以下のVagrantfileを使用してMySQLTunerとPercona Serverをインストールした仮想マシン(CentOS7.4)を構築する事ができます。
MySQLのユーザ/パスワードはroot/rootです。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74mysqltunerpercona"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74mysqltunerpercona"
     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
localectl set-locale LANG=ja_JP.UTF-8

# install Percona Server
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum -y install Percona-Server-server-57
service mysql start

export MYSQL_ROOTPWD='Root123#'
export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot -p$MYSQL_PWD --connect-expired-password -e "SET PASSWORD = PASSWORD('$MYSQL_ROOTPWD');"
mysql -uroot -p$MYSQL_ROOTPWD --connect-expired-password -e "UNINSTALL PLUGIN validate_password;"
mysql -uroot -p$MYSQL_ROOTPWD --connect-expired-password -e "SET PASSWORD = PASSWORD('root'); FLUSH PRIVILEGES;"

# install MySQLTuner
yum -y install perl-Data-Dumper
wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
echo 'execute : perl mysqltuner.pl'

SHELL
end


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

PortainerでBookStackとMySQLスタックを作成する

BookStackはブックやページで管理できるPHP製のWikiです。Portainerで簡単にwebブラウザからBookStackとMySQLのスタックを作成する事ができます。

〇BookStackの画面

デフォルトユーザ/パスワードはadmin@admin.com/passwordです。

〇構築方法
1.Portainer画面横のImagesをクリックして、Image list画面からBuild a new imageボタンをクリック


2.Build image画面nameフィールドにbookstackを入力


3.Web editorのテキストエリアに以下を貼り付け
FROM alpine:3.7
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7 php7-phar php7-simplexml php7-fileinfo php7-xmlwriter php7-tokenizer php7-ctype php7-apache2 php7-mysqli php7-mbstring php7-session php7-xml php7-dom php7-gd php7-zip php7-zip php7-json php7-pdo php7-pdo_mysql php7-tidy openssl openrc unzip git curl mysql-client \
  && rm -rf /var/cache/apk/* \
  && curl -s https://getcomposer.org/installer | php \
  && mv composer.phar /usr/local/bin/composer
WORKDIR /opt
RUN git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch
WORKDIR /opt/BookStack
RUN /usr/local/bin/composer install \
  && mkdir -p /run/apache2 \
  && cp .env.example .env \
  && sed -i -e 's/DB_HOST=localhost/DB_HOST=bookstackdb/' /opt/BookStack/.env \
  && sed -i -e 's/DB_DATABASE=database_database/DB_DATABASE=bookstack/' /opt/BookStack/.env \
  && sed -i -e 's/DB_USERNAME=database_username/DB_USERNAME=root/' /opt/BookStack/.env \
  && sed -i -e 's/DB_PASSWORD=database_user_password/DB_PASSWORD=bookstack/' /opt/BookStack/.env \
  && chown -R apache:apache /opt/BookStack \
  && sed -i -e 's#DocumentRoot "/var/www/localhost/htdocs"#DocumentRoot "/opt/BookStack/public"#' /etc/apache2/httpd.conf \
  && echo $'<Directory /opt/BookStack/public>\n\
  AllowOverride All\n\
  Require all granted\n\
</Directory>' >> /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 \
  && echo $'#!/bin/sh \n\
if [ -f /opt/BookStack/cinit ]; then \n\
  echo "ok." \n\
else \n\
  php artisan key:generate --force  \n\
  until mysqladmin ping -h bookstackdb -P 3306 --silent; do echo -n "." && sleep 1; done \n\
  php artisan migrate --force  \n\
  touch /opt/BookStack/cinit \n\
fi \n\
/usr/sbin/httpd -D FOREGROUND' >> /opt/BookStack/init.sh \
  && chmod +x /opt/BookStack/init.sh
EXPOSE 80
VOLUME /opt/BookStack
CMD ["/opt/BookStack/init.sh"]

貼り付け後、build the image ボタンをクリックします。

4.画面横のStacksをクリック後、Stacks list画面でAdd a stackボタンをクリックします


5.Create stack画面で、Nameフィールドにbookstack-stack、Web editorに以下を張り付ける

version: "3"
services:
  bookstack:
    image: bookstack
    container_name: "bookstack"
    volumes:
      - "bookstack-data:/opt/BookStack"
    ports:
      - "13680:80"
    depends_on:
      - bookstackdb
  bookstackdb:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "bookstack-db"
    volumes:
      - "bookstackdb-data:/var/lib/mysql"
    ports:
      - "13606:3306"
    environment:
      MYSQL_DATABASE: bookstack
      MYSQL_ROOT_PASSWORD: bookstack
volumes:
  bookstackdb-data:
    driver: local
  bookstack-data:
    driver: local



貼り付け後、deploy stackボタンをクリックします。

6.ブラウザからhttp://<Dockerホスト名>:13680/にアクセスする


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

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

2018年6月28日木曜日

PortainerでAdminer4.6とPostgreSQL10.4のスタックを作成する

Adminerでブラウザからデータベースを操作・管理する事ができます。Portainerで簡単にwebブラウザからAdminer4.6とPostgreSQL10.4のスタックを作成する事ができます。

〇Adminerの画面


〇構築方法

1.画面横のStacksをクリック後、Stacks list画面でAdd a stackボタンをクリックします


2.Create stack画面で、Nameフィールドにadminer-stack、Web editorに以下を張り付ける
version: "3"
services:
  adminer:
    image: adminer:4.6
    container_name: "adminer"
    ports:
      - "13580:8080"
    depends_on:
      - db
  db:
    image: postgres:10.4-alpine
    environment:
      POSTGRES_DB: adminer
      POSTGRES_USER: adminer
      POSTGRES_PASSWORD: adminer
    ports:
      - "13532:5432"
    container_name: postgres
    volumes:
      - "adminerdb-data:/var/lib/postgresql/data"
volumes:
  adminerdb-data:
    driver: local



貼り付け後、deploy stackボタンをクリックします。

3.ブラウザからhttp://<Dockerホスト名>:13580/にアクセスする
サーバにdb、のユーザ名・パスワード・データベースにadminerを指定します。


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

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

Portainerでselfoss2.1.8とMySQLのスタックを作成する

selfossはPHP製のフィードリーダーです。Portainerで簡単にwebブラウザからselfoss2.1.8とMySQL5.7のスタックを作成する事ができます。

〇selfossの画面


〇構築方法
1.Portainer画面横のImagesをクリックして、Image list画面からBuild a new imageボタンをクリック


2.Build image画面nameフィールドにselfoss:2.1.8を入力


3.Web editorのテキストエリアに以下を貼り付け
FROM alpine:3.7
ENV TZ=Asia/Tokyo
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-zlib php7-gd openssl openrc \
  && rm -rf /var/cache/apk/* \
  && mkdir -p /opt/selfoss
WORKDIR /opt/selfoss
RUN wget https://github.com/SSilence/selfoss/releases/download/2.18/selfoss-2.18.zip \
  && unzip selfoss-2.18.zip \
  && rm -f selfoss-2.18.zip \
  && cp defaults.ini config.ini \
  && sed -i -e 's/db_type=sqlite/db_type=mysql/' config.ini \
  && sed -i -e 's/db_host=localhost/db_host=selfossdb/' config.ini \
  && sed -i -e 's/db_password=/db_password=selfoss/' config.ini \
  && sed -i -e 's/db_port=/db_port=3306/' config.ini \
  && chown -R apache:apache /opt/selfoss \
  && mkdir -p /run/apache2 \
  && echo $'<Directory /var/www/localhost/htdocs/selfoss>\n\
Options Indexes FollowSymLinks \n\
AllowOverride All\n\
Require all granted\n\
</Directory>' >> /etc/apache2/httpd.conf \
  && ln -s /opt/selfoss /var/www/localhost/htdocs \
  && sed -i -e 's|#LoadModule rewrite_module modules/mod_rewrite.so|LoadModule rewrite_module modules/mod_rewrite.so|' /etc/apache2/httpd.conf \
  && echo '0,10,20,30,40,50 * * * * /usr/bin/php /opt/selfoss/cliupdate.php' >> /var/spool/cron/crontabs/root
EXPOSE 80
VOLUME /opt/selfoss
CMD ["sh", "-c", "crond -d 8 && /usr/sbin/httpd -D FOREGROUND"]

貼り付け後、build the image ボタンをクリックします。

4.画面横のStacksをクリック後、Stacks list画面でAdd a stackボタンをクリックします


5.Create stack画面で、Nameフィールドにselfoss-stack、Web editorに以下を張り付ける

version: "3"
services:
  selfoss:
    image: selfoss:2.1.8
    container_name: "selfoss"
    volumes:
      - "selfoss-data:/opt/selfoss"
    ports:
      - "13480:80"
    depends_on:
      - selfossdb
  selfossdb:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "selfoss-db"
    volumes:
      - "selfossdb-data:/var/lib/mysql"
    ports:
      - "13406:3306"
    environment:
      MYSQL_DATABASE: selfoss
      MYSQL_ROOT_PASSWORD: selfoss
volumes:
  selfossdb-data:
    driver: local
  selfoss-data:
    driver: local


貼り付け後、deploy stackボタンをクリックします。

6.ブラウザからhttp://<Dockerホスト名>:13480/selfoss/にアクセスする


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

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

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

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

○Adminerの画面

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

○構築方法
以下のdocker-compose.ymlを使用して、AdminerとPerconaのコンテナーを構築する事ができます。
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: percona:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "db"
    volumes:
      - "db-data:/var/lib/mysql"
      - "db-log:/var/log/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: test
        MYSQL_ROOT_PASSWORD: root
volumes:
  db-data:
    driver: local
  db-log:
    driver: local


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

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

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

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

〇Redashの画面


〇Adminerの画面


〇構築方法
1.Redash4.0.1, MySQL5.7, PostgreSQL10.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
      - mysql
    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"
  mysql:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "mysql-db"
    volumes:
      - "mysql-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: redash
        MYSQL_ROOT_PASSWORD: redash
  adminer:
    image: adminer:4.6
    container_name: "adminer"
    ports:
      - "8080:8080"
    depends_on:
      - db
      - mysql
volumes:
  db-data:
    driver: local
  mysql-data:
    driver: local

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


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


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

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

2018年6月27日水曜日

PortainerでKanboard1.2.5とMariaDBのスタックを作成する

Kanboardでタスクを管理するカンバンボードを利用する事ができます。Portainerで簡単にwebブラウザからKanboard1.2.5とMariaDBのスタックを作成する事ができます。

〇Kanboardの画面


構築方法

1.Portainer画面横のImagesをクリックして、Image list画面からBuild a new imageボタンをクリック


2.Build image画面nameフィールドにkanboard:1.2.5を入力


3.Web editorのテキストエリアに以下を貼り付け
FROM alpine:3.7
WORKDIR /
RUN  apk update \
  && apk add --nocache apache2 php7-apache2 php7-mysqli php7-pdo php7-pdo_mysql php7-mbstring php7-session php7-gd php7-json php7-xml php7-ctype php7-simplexml php7-dom openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://github.com/kanboard/kanboard/archive/v1.2.5.zip \
  && unzip v1.2.5.zip \
  && rm -f v1.2.5.zip \
  && mkdir /opt \
  && mv /kanboard-* /opt/kanboard \
  && mkdir -p /run/apache2 \
  && cp /opt/kanboard/config.default.php /opt/kanboard/config.php \
  && sed -i -e "s#define('DB_DRIVER', 'sqlite');#define('DB_DRIVER', 'mysql');#" /opt/kanboard/config.php \
  && sed -i -e "s#define('DB_HOSTNAME', 'localhost');#define('DB_HOSTNAME', 'kanboarddb');#" /opt/kanboard/config.php \
  && sed -i -e "s#define('DB_USERNAME', 'root');#define('DB_USERNAME', 'root');#" /opt/kanboard/config.php \
  && sed -i -e "s#define('DB_PASSWORD', '');#define('DB_PASSWORD', 'kanboard');#" /opt/kanboard/config.php \
  && ln -s /opt/kanboard /var/www/localhost/htdocs \
  && chown -R apache:apache /opt/kanboard
EXPOSE 80
VOLUME /opt/kanboard
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

貼り付け後、build the image ボタンをクリックします。

4.画面横のStacksをクリック後、Stacks list画面でAdd a stackボタンをクリックします


5.Create stack画面で、Nameフィールドにkanboard-stack、Web editorに以下を張り付ける

version: "3"
services:
  kanboard:
    image: kanboard:1.2.5
    container_name: "kanboard"
    volumes:
      - "kanboard-data:/opt/kanboard"
    ports:
      - "13380:80"
    depends_on:
      - db
  kanboarddb:
    image: mariadb:10.3
    container_name: "kanboard-db"
    volumes:
      - "kanboarddb-data:/var/lib/mysql"
    ports:
      - "13306:3306"
    environment:
        MYSQL_DATABASE: kanboard
        MYSQL_ROOT_PASSWORD: kanboard
volumes:
  kanboarddb-data:
    driver: local
  kanboard-data:
    driver: local


貼り付け後、deploy stackボタンをクリックします。

6.ブラウザからhttp://<Dockerホスト名>:13380/kanboard/にアクセスする
デフォルトのユーザ名・パスワードはadmin/adminです。


〇関連情報

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

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

・Python API Client for Kanboardのついてのまとめは「Python API Client for KanboardでKanboardをコントロールする」を参照してください。

・Kanboardに関する他の情報はこちらを参照してください。
・Kanboardのgithubリポジトリ
https://github.com/kanboard/kanboard

VagrantでMatomoとMySQLがインストールされた仮想マシン(Debian Stretch/9.4)を構築する

MatomoでGoogle Analyticsのようにwebアクセス解析を行うことができます。

〇Matomoの画面


〇構築方法
1.以下のVagrantfileを使用して、MatomoとMySQLがインストールされた仮想マシン(Debian Stretch/9.4)を構築します。IPアドレスは適宜変更します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.4"
  config.vm.hostname = "db94matomo"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db94matomo"
     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 apache2
apt-get -y install php7.0 libapache2-mod-php7.0 apache2 php7.0-mbstring php7.0-curl php7.0-pdo php7.0-cli php7.0-gd php7.0-mysql php7.0-xml php7.0-gd php7.0-dom unzip

# install mysql
wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
export DEBIAN_FRONTEND=noninteractive
echo mysql-apt-config mysql-apt-config/enable-repo select mysql-5.7-dmr | sudo debconf-set-selections
dpkg -i mysql-apt-config_0.8.9-1_all.deb
apt-get update
apt-get -y install mysql-server
mysql -uroot -e "CREATE DATABASE matomo DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -e "CREATE USER matomo@localhost IDENTIFIED BY 'matomo';"
mysql -uroot -e "GRANT ALL PRIVILEGES ON matomo.* TO 'matomo'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"

# install matomo
wget https://builds.matomo.org/piwik.zip
unzip piwik.zip
mv piwik /opt

chown -R www-data:www-data /opt/piwik
sudo ln -s /opt/piwik/ /var/www/html/
systemctl restart apache2.service

echo 'access to http://192.168.1.108/piwik/'
SHELL
end

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


3.システムの確認画面で「次へ」をクリックします


4.データベースのセットアップ画面で以下の項目を入力します。
ログイン名: matomo
パスワード: matomo
データベース名: matomo


5.テーブルの作成画面で「次へ」をクリックします。


6.「スーパーユーザー」画面で管理者情報を入力します


6.ウェブサイトのセットアップ画面で分析対象のウェブサイトの情報を入力します


7.トラッキングコードの設置


8.インストールの完了画面


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

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

〇Jupyter Labの画面


構築方法

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

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.4"
  config.vm.hostname = "co74jupyterlabmariadb"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co74jupyterlabmariadb"
     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
localectl set-locale LANG=ja_JP.UTF-8

# install mariadb
yum -y install mariadb mariadb-server
sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service
mysql -uroot -e "SET PASSWORD = PASSWORD('root'); FLUSH PRIVILEGES;"
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 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
pip install jupyterlab

# install mysqlclient
yum -y install mariadb-devel
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
ExecStartPre=source /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

○動作確認用コード
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

関連情報

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

2018年6月26日火曜日

Vagrantでcollectdとcollectd-webをインストールした仮想マシン(Debian Stretch/9.4)を構築する

collectdでシステム情報を記録する事ができます。

○collectdの画面


○構築方法
以下のVagrantfileを使用して、collectdとcollectd-webをインストールした仮想マシン(Debian Stretch/9.4)を構築できます。
ブラウザからhttp://192.168.55.107:8080/でcollectd-webにアクセスします。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.4"
  config.vm.hostname = "db94collectd"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db94collectd"
     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 -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 collectd
apt-get -y install collectd

systemctl enable collectd.service
systemctl start collectd.service

# install collected-web
apt-get -y install git librrds-perl libjson-perl libhtml-parser-perl libcgi-session-perl
cd /usr/local/
git clone https://github.com/httpdss/collectd-web.git
chmod +x /usr/local/collectd-web/cgi-bin/graphdefs.cgi


cat << EOF > /etc/systemd/system/collectd-web.service
[Unit]
Description=collectd-web

[Service]
Type=simple
ExecStart=/usr/bin/python /usr/local/collectd-web/runserver.py 192.168.55.107 8080
WorkingDirectory=/usr/local/collectd-web

[Install]
WantedBy=multi-user.target
EOF
systemctl enable collectd-web.service
systemctl start collectd-web.service
sleep 10

echo 'access http://192.168.55.107:8080/'

SHELL
end

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

BookStackはブックやページで管理できるPHP製のWikiです。

○BookStackの画面

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

○構築方法
以下の手順で、BookStack、Percona Serverのコンテナを構築・実行します。

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

Dockerfile
FROM alpine:3.7
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7 php7-phar php7-simplexml php7-fileinfo php7-xmlwriter php7-tokenizer php7-ctype php7-apache2 php7-mysqli php7-mbstring php7-session php7-xml php7-dom php7-gd php7-zip php7-zip php7-json php7-pdo php7-pdo_mysql php7-tidy openssl openrc unzip git curl mysql-client \
  && rm -rf /var/cache/apk/* \
  && curl -s https://getcomposer.org/installer | php \
  && mv composer.phar /usr/local/bin/composer
WORKDIR /opt
RUN git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch
WORKDIR /opt/BookStack
RUN /usr/local/bin/composer install \
  && mkdir -p /run/apache2 \
  && cp .env.example .env \
  && sed -i -e 's/DB_HOST=localhost/DB_HOST=db/' /opt/BookStack/.env \
  && sed -i -e 's/DB_DATABASE=database_database/DB_DATABASE=bookstack/' /opt/BookStack/.env \
  && sed -i -e 's/DB_USERNAME=database_username/DB_USERNAME=root/' /opt/BookStack/.env \
  && sed -i -e 's/DB_PASSWORD=database_user_password/DB_PASSWORD=bookstack/' /opt/BookStack/.env \
  && chown -R apache:apache /opt/BookStack \
  && sed -i -e 's#DocumentRoot "/var/www/localhost/htdocs"#DocumentRoot "/opt/BookStack/public"#' /etc/apache2/httpd.conf \
  && echo $'<Directory /opt/BookStack/public>\n\
  AllowOverride All\n\
  Require all granted\n\
</Directory>' >> /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 \
  && echo $'#!/bin/sh \n\
if [ -f /opt/BookStack/cinit ]; then \n\
  echo "ok." \n\
else \n\
  php artisan key:generate --force  \n\
  until mysqladmin ping -h db -P 3306 --silent; do echo -n "." && sleep 1; done \n\
  php artisan migrate --force  \n\
  touch /opt/BookStack/cinit \n\
fi \n\
/usr/sbin/httpd -D FOREGROUND' >> /opt/BookStack/init.sh \
  && chmod +x /opt/BookStack/init.sh
EXPOSE 80
VOLUME /opt/BookStack
CMD ["/opt/BookStack/init.sh"]

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

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


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