Bugzilla 是一个基于 Web 的,开源的,用来记录跟踪缺陷数据库的 bug 跟踪软件。它可以管理软件开发中缺陷的提交(new)、修复(resolve)和关闭(close)等整个生命周期,它允许个人和团队有效地记录下他们产品的一些突出问题。
Linux 下 Bugzilla 的安装及配置安装 Perl安装 MySQL 并配置安装 Apache2 并配置下载 Bugzilla 并安装配置搭建在云服务器上使用 Nginx 服务器常见问题及解决方案
在 Linux 下安装 bugzilla 并正常使用,需要依赖以下的软件或模块:Perl、MySQL、Apache2、Bugzilla
下面以 deepin 在系统下的安装来详细讲解安装及配置过程。
安装 Perl
Perl 是一种实用报表提取语言,其前身是 Unix 系统管理的一个工具,后逐渐发展为一种功能强大的程序设计语言,用作 Web 编程、数据库处理、XML 处理以及系统管理。查看系统中是否已安装 Perl:
代码语言:javascript复制 perl -v
一般情况下 Linux 系统会默认安装 Perl。若未安装,则执行命令下面命令进行安装:
代码语言:javascript复制 sudo apt install perl*
安装 MySQL 并配置
MySQL 是一个关系型数据库。输入命令进行安装:
代码语言:javascript复制 sudo apt install mysql-common mysql-client mysql-server
安装完成后默认没有设置密码,可通过以下两种方式设置密码:
- 方式一:修改配置文件 编辑 /etc/mysql/debian.cnf 文件 sudo vim /etc/mysql/debian.cnf 找到 “password”这一行,直接在后面添加密码即可 password = Abc123
- 方式二:登录后设置密码 无密码登录进入 mysql 命令行 sudo mysql -u root 在 mysql 命令行执行以下命令 # 选用 mysql 数据库进行操作 use mysql; # 更改 root 用户的登录密码 update mysql.user set authentication_string=password('Abc123') where user='root'; # 注意:新版的 MySQL 已经没有 password 字段了,改成了 authentication_string
接着创建 bugzilla 用户和 bugs 数据库,并给 bugzilla 用户分配权限。同样是在 mysql 命令行执行:
代码语言:javascript复制 # 创建一个名为 bugzilla 的 mysql 用户
create user 'bugzilla'@'localhost' identified by 'BugsAbc';
# 创建一个名为 bugs 的数据库
create database bugs;
# 给 bugzilla 用户分配权限,使其可以完全操作 bugs 数据库
grant all privileges on bugs.* to 'bugzilla'@'localhost' identified by 'BugsAbc';
# 从 MySQL 数据库授权表中重新装载权限
flush privileges;
然后重启 MySQl 服务:
代码语言:javascript复制 sudo systemctl restart mysql
安装 Apache2 并配置
在某些 Linux 服务器中,安装 apache 的命令为:
代码语言:javascript复制 sudo apt install httpd
但是在 deepin 系统中,httpd 集成在了 apache2 中,所以安装命令为:
代码语言:javascript复制 sudo apt install apache2
安装成功后启动 apache2 服务并设置为开机自启:
代码语言:javascript复制 apache2 -k start
sudo update-rc.d apache2 enable
在 deepin 中其配置文件的目录也不是 /etc/httpd/,而是在 /etc/apache2/ 中。接下来配置 apache 解析 bugzilla 的 web 服务。首先创建配置文件:
代码语言:javascript复制 sudo vim /etc/apache2/sites-available/bugzilla.conf
往文件中写入以下内容:
代码语言:javascript复制 Listen 8555
<VirtualHost *:8555>
ServerAdmin yowfung@outlook.com
DocumentRoot "/opt/bugzilla5"
ServerName 192.168.10.192
ServerAlias 192.168.10.192
ErrorLog "${APACHE_LOG_DIR}/vhost.bugzilla.error.log"
CustomLog "${APACHE_LOG_DIR}/vhost.bugzilla.access.log" combined
<Directory /opt/bugzilla5>
AddHandler cgi-script .cgi .pl
Options Indexes ExecCGI
DirectoryIndex index.cgi index.html index.html.var
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
# 其中监听的端口号、邮箱、服务器 IP 地址等根据实际情况填写,网站根目录则指向接下来 bugzilla 要安装到的目录,我这里预计安装到 /opt/bugzilla5 中。
保存配置文件后创建软连接以启用配置:
代码语言:javascript复制 sudo ln -s /etc/apache2/sites-available/bugzilla.conf /etc/apache2/sites-enabled/
或者使用下面的命令来使配置生效:
代码语言:javascript复制 sudo a2ensite /etc/apache2/sites/available/bugzilla.conf
然后检查配置文件是否存在语法错误:
代码语言:javascript复制 apache2ctl configtest
如果最后一行显示 “Syntax OK” 则表示配置文件语法正确。接下来重启 apache:
代码语言:javascript复制 sudo systemctl restart apache2
创建 apache 用户并加入到当前用户组:
代码语言:javascript复制 # 创建 apache 用户组
sudo groupadd apache
# 创建 apache 用户并加入到 yowfung 用户组中,其中 yowfung 为我当前登录用户所在的用户组
sudo useradd -g yowfung
下载 Bugzilla 并安装配置
选定一个将要安装 bugzilla 的目录,例如 /opt ,然后下载 bugzilla 到本地:
代码语言:javascript复制 sudo wget https://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-5.0.3.tar.gz -O /opt/bugzilla5.tar.gz
解压缩包:
代码语言:javascript复制 sudo tar -zxvf /opt/bugzilla.tar.gz
此时可以在 /opt 下看到多出来 bugzilla 文件夹,给该文件夹重新分配用户权限:
代码语言:javascript复制 sudo chown -R apache:yowfung /opt/bugzilla
进入到 bugzilla 安装目录中:
代码语言:javascript复制 cd /opt/bugzilla5
查看有哪些 Perl 模块缺失:
代码语言:javascript复制 ./checksetup.pl
在输出的结果中,红色标记的模块即为缺失的模块,可以使用以下命令来安装这些模块:
代码语言:javascript复制 perl install-module.pl --all
这个安装过程可能比较耗时,耐心等待即可,如果出现某些包错误可以输入终端上面提示的指令进行手动安装,或者下载对应的 Perl 模块进行安装。安装完成后再次运行 ./checksetup.pl
进行验证,如果所有的 Perl 模块都安装成功的话,会在当前路径下生成一个 localconfig 文件,接下来对这个文件进行配置:
vim ./localconfig
- 找到
$index_html = 0
这一行,将 0 改成 1,这样才会生成一个 index.html 文件,这个文件指向 index.cgi 文件,这个 index.cgi 即为 bugzilla 的网站主页脚本。 $index_html = 1 - 修改数据库配置,将
$db_driver
的值设为 mysql,将$db_name
设为上面创建的数据库的名称,将$db_user
和$db_pass
设为上面新创建的 MySQL 用户名和密码。 $db_driver = 'mysql'; $db_name = 'bugs'; $db_user = 'bugzilla'; $db_pass = 'BugsAbc'; - 修改 Web 服务用户组,如果没有正确设置用户权限,届时网页会出现 403 错误,这里的用户组名称设为你上面创建 apache 用户时实际加入的用户组。 $webservergroup = 'yowfung';
修改完成后,再次运行 ./checksetup.pl
进行验证,如果没问题,则会自动进行 bugzilla 的安装,安装过程中会让你输入一些信息(管理员账号、密码等),安装成功后则会出现以下画面:
此时打开浏览器,在地址栏输入你的 IP 地址和端口号,或者输入 127.0.1.1 和端口号即可访问 bugzilla 网页
搭建在云服务器上
上述过程安装的 Bugzilla,只能在 Linux-Desktop 系统本地上使用,如果想要在 Linux-Server 中运行,或者想要实现远程访问该机器上的 Bugzilla,你需要一个公网 IP 和一个域名(可选),只需修改 /etc/apache2/sites-available/bugzilla.conf 中的 ServerName
这一项,将其改为你的公网 IP 地址或者域名地址(记得在域名管理网站上进行解析)即可。
使用 Nginx 服务器
如果你习惯上使用 Nginx 而不喜欢 Apache,Bugzilla 同样也可以使用 nginx 来搭载,原理与 apache 类似,只需添加一个 nginx 的解析配置文件即可。
首先下载 fastcgi-wrapper.pl 并设置执行权限:
代码语言:javascript复制 sudo wget -O /usr/local/bin/fastcgi-wrapper http://ftp.quzart.com/notes/bugzilla-nginx-fcgi/fastcgi-wrapper.pl
sudo chmod 755 /usr/local/bin/fastcgi-wrapper
下载用于启动 fastcgi 的脚本,设置执行权限和开机启动,随后启动该脚本:
代码语言:javascript复制 sudo wget -O /etc/init.d/fastcgi-wrapper http://ftp.quzart.com/notes/bugzilla-nginx-fcgi/fastcgi-wrapper-initscript
sudo chmod 755 /etc/init.d/fastcgi-wrapper
sudo update-rc.d fastcgi-wrapper defaults
sudo invoke-rc.d fastcgi-wrapper start
在 /etc/nginx/sites-available/ 中添加一个新的配置文件 bugzilla.conf,并写入以下内容:
代码语言:javascript复制 server {
listen 8555;
root /opt/bugzilla5;
index index.cgi index.html;
server_name localhost;
error_log /var/log/nginx/error.bugzilla.log;
access_log /var/log/nginx/access.bugzilla.log;
location / {
autoindex off;
}
location ~ ^.*.cgi$ {
fastcgi_pass unix:/var/run/fastcgi-wrapper/fastcgi-wrapper.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 其中网站根目录 root 和域名 server_name 需要根据实际情况填写。
然后记得修改 bugzilla 安装目录的用户和用户组权限,因为 Nginx 使用的用户和用户组均为 www-data:
代码语言:javascript复制 sudo chown -R www-data:www-data /opt/bugzilla5
重启 Nginx 即可在浏览器上访问 Bugzilla 页面:
代码语言:javascript复制 sudo nginx -s reload
常见问题及解决方案
问题1:无法打开 Bugzilla 网页
- 首先确认 Bugzilla 是否正确安装。
- 其次确认 apache2 和 mysql 是否正确启动。
- 然后检查 apache2 的网页解析文件是否正确配置。
- 检查 bugzilla 安装目录下的 localconfig 文件是否正确配置。
问题1:打开网页出现 403 错误
出现这种情况一般有以下几种原因:
- bugzilla 安装目录下的 localconfig 文件中,
$webservergroup
这一项没有正确配置,将其设置为 apache 用户所在用户组即可。 - bugzilla 目录没有访问权限,使用 chown 命令将其目录权限设置为 apache 用户及其所在用户组即可。
- apache 的网页解析配置文件没有正确配置,检查一遍 /etc/apache2/sites-available/bugzilla.conf 文件有没配置错误的,尤其注意
Require all granted
这一项。 - 如果问题还是没有解决,可查看 apache2 的错误日志来排查问题,日志文件在 /var/log/apache2 目录中。
问题2:打开网页后显示的是代码文本而不是网页内容
出现这种情况一般有以下几种原因:
- 在 apache 网页解析文件中没有正确配置 cgi 文件解析,尤其注意
AddHandler cgi-script .cgi .pl
和Options Indexes ExecCGI
这两项。 <Directory /opt/bugzilla5> AddHandler cgi-script .cgi .pl Options Indexes ExecCGI DirectoryIndex index.cgi index.html index.html.var AllowOverride all Require all granted </Directory> - 没有安装 mod_cgi.c 和 mod_cgid.c 模块 # 下载 apache 源码安装包 sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.41.tar.bz2 -O /usr/local/httpd.tar.bz2 # 解压缩并删除压缩包文件 sudo tar -jxvf /usr/local/httpd.tar.bz2 -C /usr/local/httpd sudo rm /usr/local/httpd.tar.bz2 # 进入到 apache 源文件包中 cd /usr/local/httpd/modules/generators # 使用 apxs 对模块进行编译 sudo apxs -i -a -c mod_cgi.c sudo apxs -i -a -c mod_cgid.c # 修改输出文件的执行权限 sudo chmod 755 /usr/lib/apache2/modeles/mod_cgi.so sudo chmod 755 /usr/lib/apache2/modules/mod_cgid.so # 重启 apache2 sudo systemctl restart apache2
问题3:无法启动 apache2 排查方法
- 首先执行
apache2ctl configtest
查看配置文件是否存在语法问题。 - 如果配置文件没有语法文件并且问题还存在,则执行
apache2 -k start
查看输出信息,根据输出信息来排查解决。 - 还可以执行
systemctl status apache2
来查看错误信息从而定位问题。
问题4:apache2.conf: DefaultRuntimeDir must be a valid directory...
出现这种情况可能是因为没有导入 apache2 的环境变量,可通过以下命令导入环境变量:
代码语言:javascript复制 source /etc/apache2/envvars
问题5:apache2: Could not reliably determine the server's fully qualified domain name...
这个问题不大,主要是因为在 apache2 配置文件中没有设置 ServerName。如果强迫症看不顺眼的话,可以进入到 apache2 安装目录,编辑 apache2.conf
代码语言:javascript复制 sudo vim /etc/apache2/apache2.conf
在最后一行添加一项 ServerName 即可
代码语言:javascript复制 ServerName localhost:80
问题6:could not bind to address [::]:80
出现这个问题说明你的 80 端口被占用了,可以有以下几种办法解决:
- 如果你的 apache 暂时没有使用到 80 端口的话,就将 /etc/apache2/sites-enabled 目录下的 000-default.conf 文件删了,然后再重启 apache2 即可 sudo rm /etc/apache2/sites-enabled/000-default.conf apache2ctl -k start
- 如果你系统中同时安装了 Nginx,并且 Nginx 暂不使用的话,只需将 Nginx 进程杀死即可: # 查看 nginx 进程 ps -ef | grep nginx # 杀死所有的 nginx 进程 sudo kill -9 <PID>
- 如果还有其他进程占用了 80 端口,可通过 netstat 命令查看并杀死相应的进程 PID: # 查看占用 80 端口的进程 netstat -tulnp | grep ":80" # 杀死该进程 sudo kill -9 <PID>