2016年10月18日 星期二

在 Docker 中安裝 Bugzilla

這篇是簡單紀錄 Bugzilla 的安裝流程,流程中會以 Docker 1.12.0 來部署需要的服務。
Bugzilla 官方提供的安裝文件可以參考 [1]。

    建立 MariaDB 的容器
    建立適合 MariaDB 使用的檔案系統

    根據 [2] 的描述,MariaDB 適合在 XFS、ext4 等檔案系統上使用,並且應設定 noatime。
    因此以下的指令假設我們有一個磁碟 xvdb1,要掛載到 /opt 去。

    apt-get install xfsprogs
    mkfs.xfs -f /dev/xvdb1

    接著要在 /etc/fstab 上設定掛載,並且指定 noatime。詳細設定方法這裡就直接略過了 XD
    最後用 mount –a 把磁碟掛載上去,然後用以下指令在掛載好的 /opt 裡建立兩個資料夾,用來區分 MariaDB 和 Bugzilla 寫入的檔案。

    mkdir /opt/mariadb
    mkdir /opt/bugzilla
    建立 MariaDB 的容器

    首先,Bugzilla 需要一個資料庫,官方預設是使用 MySQL
    不過這裡我想改用 MariaDB,畢竟本質上他們是差不多的東西,但 MariaDB 比較開放。

    在 Docker 內要安裝 MariaDB,可以參考 [2] 直接使用官方提供的 MariaDB 的容器
    建立時只需要用以下的指令就可以了。

    docker run -dit --name some-mariadb -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mariadb:tag

    其中 /my/own/datadir 是 MariaDB 的儲存位置,my-secret-pw 是 MariaDB 的 root 帳號的密碼,tag 則是想要安裝的 MariaDB 的版號。
    例如下述的指令會建立一個 MariaDB 10.1 的容器,容器名稱是 mariadb,並且 root 的密碼是 mypassword,儲存的檔案會放在 /opt/mariadb 資料夾。

    docker run -dit --name mariadb -v /opt/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypassword mariadb:10.1
    設定 MariaDB

    上面步驟結束後,MariaDB 其實就已經建立好了,接著需要依照 [1] 的描述去編輯 MariaDB 的設定。

    使用以下指令進入 MariaDB 的容器,編輯 /etc/mysql/my.cnf 這個檔案。

    docker exec -it mariadb /bin/bash
    apt-get update && apt-get install nano
    nano /etc/mysql/my.cnf

    需要編輯的內容是以下兩個:

    1. 修改 max_allowed_packet=100M
    2. 在 [mysqld] 區段內新增 ft_min_word_len=2

    儲存後,接著執行以下的指令建立 MariaDB 內的使用者。其中 mypassword 是想要使用的密碼,這個密碼會指派給 bugs 這個 MariaDB 帳號。

    mysql -u root -p -e "GRANT ALL PRIVILEGES ON bugs.* TO bugs@localhost IDENTIFIED BY 'mybugpassword'"

    最後退出容器,並重新啟動容器,以套用剛剛設定的東西。

    建立 Bugzilla 的容器

    建好 MariaDB 後,接著就是 Bugzilla 的容器了。

    建立 Bugzilla 容器

    Bugzilla 官方好像比較推薦使用 Ubuntu,因此就開一個 Ubuntu 14.04 的容器。
    另外在建立容器時,要記得加上 MariaDB 的連結,以確保兩個容器之間可以互相溝通。

    docker run -dit --name bugzilla -v /opt/bugzilla:/opt --link mariadb:mariadb -p 443:443 ubuntu:14.04
    安裝執行環境

    接著進入 Docker 內,開始依照 [1] 的流程安裝 Bugzilla 需要的東西

    docker exec -it /bin/bash bugzilla
    apt-get update
    apt-get install apache2 libappconfig-perl libdate-calc-perl libtemplate-perl libmime-perl build-essential libdatetime-timezone-perl libdatetime-perl libemail-sender-perl libemail-mime-perl libemail-mime-modifier-perl libdbi-perl libdbd-mysql-perl libcgi-pm-perl libmath-random-isaac-perl libmath-random-isaac-xs-perl apache2-mpm-prefork libapache2-mod-perl2 libapache2-mod-perl2-dev libchart-perl libxml-perl libxml-twig-perl perlmagick libgd-graph-perl libtemplate-plugin-gd-perl libsoap-lite-perl libhtml-scrubber-perl libjson-rpc-perl libdaemon-generic-perl libtheschwartz-perl libtest-taint-perl libauthen-radius-perl libfile-slurp-perl libencode-detect-perl libmodule-build-perl libnet-ldap-perl libauthen-sasl-perl libtemplate-perl-doc libfile-mimeinfo-perl libhtml-formattext-withlinks-perl libfile-which-perl libgd-dev libmysqlclient-dev lynx-cur graphviz python-sphinx rst2pdf
    

    接著這部份是官方網站沒有的部份,因為我的 Docker 環境做完上述的事情後,測試執行環境會顯示有元件的版本不夠新,因此要執行以下的指令,透過 CPAN 去更新元件版本。

    apt-get install libcgi-session-perl liblocal-lib-perl build-essential libssl-dev
    perl -MCPAN -e shell
    install CGI
    install DateTime::TimeZone
    install Email::Sender
    install File::Copy::Recursive
    install Email::Reply
    install TheSchwartz
    install Text::MultiMarkdown
    install Cache::Memcached::Fast
    install Apache::SizeLimit
    install Chart::Lines
    install PatchReader
    install Plack
    install DBD::SQLite
    install CPAN::Meta::Prereqs
    install Module::Metadata
    
    install DBD::Oracle
    install DBD::Pg
    
    設定 Apache

    首先,必須先從 github 上下載網站的檔案。

    cd /opt
    apt-get update && apt-get install git
    git clone --branch release-5.1.1 https://github.com/bugzilla/bugzilla bugzilla
    ln -s /opt/bugzilla /var/www/html/bugzilla

    首先建立並編輯 /etc/apache2/sites-available/bugzilla.conf 檔,寫入以下的內容:

    ServerName localhost
    
    <Directory /var/www/html/bugzilla>
      AddHandler cgi-script .cgi
      Options +ExecCGI
      DirectoryIndex index.cgi index.html
      AllowOverride All
    </Directory>

    接著執行以下的指令,啟用剛剛設定的網站。

    a2ensite bugzilla
    a2enmod cgi headers expires
    service apache2 restart
    設定 Bugzilla

    編輯 /opt/bugzilla/localconfig,設定以下兩個參數:

    1. $webservergroup 的值設為 www-data
    2. $db_pass 的值設為前面建立資料庫時使用的密碼,這個範例中是 mybugpassword
    測試與設定執行環境

    執行以下的 Perl 指令可以測試執行環境,並且會同時設定 bugzilla 的資料庫環境,因此還會需要輸入 administrator 的資料。

    /opt/bugzilla/checksetup.pl

    如果最後顯示正常完成的話,基本上就已經可以正常存取 bugzilla 了,存取網址是 http://<hostname>/bugzilla。

    參考資料
    1. Installation and Maintenance Guide - Quick Start (Ubuntu Linux 14.04)
    2. What is the best Linux filesystem for MariaDB?
    3. Dockerhub – mariadb

    沒有留言: