怎样在 CentOS 7 上安装 Snipe-IT

介绍

Snipe-IT 是一个免费的开源项目,旨在处理 IT 资产管理。 它可以处理对笔记本电脑、软件和许可证等资产、它们的购买日期和其他相应信息的跟踪。 它使用 PHP 和 Laravel 框架构建,并依赖 MySQL 作为数据库来存储和检索其数据。

先决条件

Vultr CentOS 7 实例。 一个 sudo 用户。 一个完全限定的域名。 从完全限定域名到实例 IP 的 DNS A 记录。

1. 配置防火墙

CentOS 自带 firewalld 作为默认防火墙,并配置为默认情况下仅允许 SSH(端口 22)的传入流量。 但是,必须分别允许端口 80 和 443 上的 HTTP 和 HTTPS 传入流量,以便 Internet 可以访问 Snipe-IT 安装。 Certbot 还要求打开这些端口以验证您的域名并颁发 HTTPS 证书。

使用打开这些端口 firewall-cmd.

$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp

现在,重新加载防火墙以激活新的配置更改。

$ sudo firewall-cmd --reload

2.安装EPEL仓库

本指南所需的某些软件包仅在 EPEL(企业 Linux 的额外软件包)存储库中可用。 EPEL 存储库由 Fedora 项目的一个特别兴趣小组维护,该项目由 Red Hat 赞助。 EPEL 存储库提供了本指南所需的 Certbot 和 Certbot Nginx 插件包。

安装 epel-release 包裹。

$ sudo yum install -y epel-release

3. 安装 Remi 仓库

CentOS 7 的软件库提供 PHP 5.4 版本,而 Snipe-IT 要求最低 PHP 版本为 7.2.5。 为了解决这个问题,有一个为 CentOS 提供更新版本的 PHP 的存储库。 但是,Snipe-IT 的文档建议使用 PHP 7.4 版本,Remi 存储库提供了该版本。

安装存储库的包。

$ sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装 YUM 实用程序。

$ sudo yum install -y yum-utils

将 YUM 配置为更喜欢从 Remi 的存储库安装 PHP 7.4,而不是从默认的 CentOS 存储库安装较旧的 PHP 版本。

$ sudo yum-config-manager --enable remi-php74

4. 安装 Nginx

Nginx 是一个可扩展的 Web 服务器,具有许多功能,例如负载平衡、反向代理、HTTP 缓存等。 Certbot 也支持它,这使得使用正在运行的 Nginx 服务器轻松获取和更新 HTTPS 证书。

安装 nginx 包裹。

$ sudo yum install -y nginx

启动 Nginx 服务并使其在启动时自动启动。

$ sudo systemctl enable nginx.service
$ sudo systemctl start nginx.service

5.安装Certbot

Certbot 是一个通过 Lets Encrypt 自动获取 HTTPS 证书的工具。 Lets Encrypt 通过从服务器提供验证文件并尝试获取它们来验证域名的所有权。 Certbot 与 Nginx 集成并使用 Nginx 服务器通过 Certbot Nginx 插件提供验证文件。 在 Web 服务器上使用 HTTPS 证书将允许对浏览器和服务器之间的流量进行加密。 另一个好处是防止 MITM(中间人)攻击。

安装软件包。

$ sudo yum install -y python2-certbot python2-certbot-nginx

6.获取HTTPS证书

使用 Certbot 为使用正在运行的 Nginx 服务器的域获取 HTTPS 证书。 如果证书即将过期或证书配置错误,Let’s Encrypt 将使用提供的电子邮件通知您。

确保更换 [email protected] 用你的电子邮件。

确保更换 snipeit.example.com 使用您的完全限定域名。

$ sudo certbot certonly –agree-tos –no-eff-email –nginx -m [email protected] -d snipeit.example.com

7.自动更新HTTPS证书

默认情况下,Certbot 不会自动更新 HTTPS 证书。 如果 HTTPS 证书过期,与服务器的连接可能会停止工作并在浏览器中显示安全警告。 这可以通过使用来防止 cron 启动 Certbot 自动更新证书。

编辑 crontab.

$ sudo crontab -e

按 I 编辑文件并插入以下行。 这将配置 cron 每天运行 Certbot 并更新任何即将到期的证书。

0 0 * * * certbot renew

按 ESC,输入 :WQ 并按 ENTER 保存并退出。

8. 安装 MariaDB

MariaDB 是社区开发的、商业支持的 MySQL 关系数据库的分支,在 GPL 下获得许可。 它旨在通过提供更新和更优化的存储引擎来替代 MySQL,从而提高性能和可扩展性。

安装软件包。

$ sudo yum install -y mariadb mariadb-server

启动 MariaDB 服务并使其在启动时自动启动。

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service

9. 配置 MariaDB

MariaDB 默认带有一个空白的 root 密码和一个不安全的配置,以便更容易配置。 它带有一个安全安装脚本,用于设置 root 密码并使用安全默认值配置服务器。

运行安全安装脚本。

$ sudo mysql_secure_installation

当提示输入 root 的当前密码时,按 Enter 没有。

当要求提供新的 root 密码时,请确保使用安全密码。 该密码将在整个指南中用于管理数据库的后续步骤中使用。 因此,建议将此密码存储在安全的地方。

对于所有剩余的提示,回答 Y 或按 ENTER。

10. 创建数据库

以以下用户身份登录 MariaDB root 用户。 使用第 8 步中的密码。

$ sudo mysql -u root -p

创建一个名为的新数据库 snipeit.

CREATE DATABASE snipeit;

默认情况下,MariaDB 仅附带 root 用户,只应用于管理服务器,不应用于从任何应用程序进行连接。 创建一个名为的新用户 snipeit.

CREATE USER [email protected] IDENTIFIED BY 'snipeit';

默认情况下,新用户将没有权限。 授予新创建的用户 snipeit 新创建的数据库的所有权限 snipeit.

GRANT ALL PRIVILEGES ON snipeit.* TO [email protected];

现在,强制 MariaDB 重新加载其权限表。 这将使新配置的权限 snipeit 用户有效。

FLUSH PRIVILEGES;

按 CTRL + D 退出 shell。

11.安装PHP

PHP 是在服务器上运行 Snipe-IT 所需的语言和运行时。 此外,PHP-FPM 包提供了 PHP FastCGI Manager,它允许 Nginx 与 PHP 通信并执行 PHP 脚本。 其余的包是 Snipe-IT 和 Composer 所需的依赖项以及连接到 MariaDB 数据库的驱动程序。

安装软件包。

$ sudo yum install -y php php-fpm php-ldap php-bcmath php-mbstring php-pdo php-simplexml php-dom php-gd php-mysqlnd

为了使 PHP-FPM 与 Nginx 通信,需要对配置文件进行一些更改。

编辑 PHP-FPM 配置文件。

$ sudo vi /etc/php-fpm.d/www.conf

按 I 编辑文件并相应地编辑下面的行。

user = nginx
group = nginx
listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

按 ESC,输入 :WQ 并按 ENTER 保存并退出。

启动 PHP-FPM 服务并使其在启动时自动启动。

$ sudo systemctl start php-fpm.service
$ sudo systemctl enable php-fpm.service

12. 安装作曲家

Composer 是 PHP 项目的依赖管理器。 它由 Snipe-IT 使用,因此需要安装它及其所需的依赖项。 它还用于在新版本发布时更新依赖项。

安装所需的软件包。

$ sudo yum install -y composer

13. 安装 Git

Git 是一个版本控制系统,将用于获取和更新 Snipe-IT 的源代码。 这是 Snipe-IT 文档中推荐的下载方法。 它还允许轻松获取和更新到 Snipe-IT 的较新版本。

安装 git 包裹。

$ sudo yum install -y git

14. 安装 Snipe-IT

git 将源代码克隆到 /var/www 目录。

$ sudo git clone --depth=1 https://github.com/snipe/snipe-it /var/www/snipeit
$ cd /var/www/snipeit

复制示例配置文件并进行编辑。

$ sudo cp .env.example .env
$ sudo vi .env

按 I 编辑文件。 找到以下几行并相应地进行编辑。

确保更换 snipeit.example.com 使用您的完全限定域名。

APP_URL=https://snipeit.example.com
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=snipeit

按 ESC,输入 :WQ 并按 ENTER 保存并退出。

配置所需的权限,以便 Nginx 和 PHP 可以读取和写入 storagepublic/uploads 目录。

$ sudo chown -R nginx:nginx storage public/uploads
$ sudo chmod -R 755 storage public/uploads

使用 Composer 安装所需的最新依赖项。

$ sudo composer install --no-dev

生成一个新的随机应用密钥。

$ sudo php artisan key:generate --force

15.配置Nginx

为 Nginx 创建一个配置文件。

$ sudo vi /etc/nginx/conf.d/snipeit.conf

按 I 编辑文件,并插入以下行。

确保更换 snipeit.example.com 使用您的完全限定域名。

server {
    listen 80;
    listen [::]:80;

    server_name snipeit.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name snipeit.example.com;

    ssl_certificate /etc/letsencrypt/live/snipeit.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/snipeit.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    root /var/www/snipeit/public;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ .php$ {
        try_files $uri $uri/ =404;
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

按 ESC,输入 :WQ 并按 ENTER 保存并退出。

测试 Nginx 配置文件是否有错误。 常见错误包括缺少 HTTPS 证书、语法错误和无效的服务器名称。

$ sudo nginx -t

重启 Nginx 服务,使新配置生效。

$ sudo systemctl restart nginx.service

16.配置SELinux

CentOS 附带 SELinux,这是一个提供强制访问控制的 Linux 内核安全模块。 默认情况下,这会阻止某些不同的软件相互通信。 这可以通过配置正确的策略来解决。

配置 SELinux 以允许 Nginx 和 PHP 写入 Snipe-IT 的安装目录。 这是通过将 Snipe-IT 安装目录中文件的 SELinux 安全上下文更改为允许 Nginx 具有读写访问权限的上下文来完成的。

$ sudo chcon -R --type=httpd_sys_rw_content_t /var/www/snipeit

配置 SELinux 以允许 Nginx 和 PHP 通过 TCP 连接到 MariaDB 数据库。 这是通过更改 SELinux 布尔值以允许 HTTP 守护程序连接到数据库来完成的。

$ sudo setsebool -P httpd_can_network_connect_db 1

17. 配置 Snipe-IT

在浏览器中导航到您的完全限定域名。 该页面应以“Snipe-IT Pre-Flight”标题开头,并在顶部标记步骤。

如果出现“您的连接不是私有连接”的错误,请确保您的浏览器导航到正确的位置并且正确配置了 HTTPS 证书。

验证“飞行前检查”表中的所有项目是否有效且正确。 如果任何设置配置错误,可以通过编辑 /var/www/snipeit/.env 文件。 验证后,单击页面底部的“下一步:创建数据库表”。

该页面现在应显示“您的数据库表已创建”。 如果失败,则数据库连接或凭据可能有问题。 单击页面底部的“下一步:创建用户”按钮继续。

为 Snipe-IT 实例配置新用户和其他设置,完成后单击页面底部的“下一步:开始”按钮。 这将带您进入管理面板。

资源

Snipe-IT 文档
MariaDB 服务器文档
PHP 文档
作曲家文档
Nginx 文档
Certbot 文档
SELinux 文档
firewalld 文档

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com