osTicketosTicket是一个广泛使用。它将通过电子邮件,电话和基于Web的表单创建的查询无缝集成到一个简单易用的多用户Web界面中。本教程详细的介绍了如何在 CentOS 7 上安装 osTicket 并使用免费的 Let’s Encrypt TLS 证书设置 HTTPS的过程。
Vultr官网
[qgg_yellow]点击直达Vultr官方网站[/qgg_yellow]
vultr最新优惠码
vultr长期针对新用户有促销活动,目前新用户注册最高送103美元,如果你是新用户可以考虑通过下面链接注册,最高可以获得103美元的免费使用额度。目前vultr已经支持支付宝充值购买,但是如果要参与下面活动,必须使用PayPal、信用卡完成首次充值才有额度赠送哦。
- 赠送100美元:点击直达(必须通过此地址注册才有送,用户必须活跃30天以上,并且使用至少25美元)
- 赠送50美元:点击直达(必须通过此地址注册才有送,用户必须活跃30天以上,并且使用至少25美元)
- 赠送10美元:点击直达(必须通过此地址注册才有送,必须活跃30天以上,并且使用至少10美元)
- 完成推特任务送3美元教程:Vultr完成三项Twitter任务即可免费获得3美元使用额度(可以叠加上面活动,每个账号可以参与一次,赠送金额使用期限应该是1年 以上。)
先决条件
- 一台CentOS的7服务器,禁用SELinux。
- 按照 Vultr 的最佳指南创建 sudo 用户并更新 CentOS 服务器。
本教程假设您拥有一个域名,例如example.com,并且您已将其指向服务器 IP 地址。如果没有,请将example.com替换为服务器 IP 地址。
确保将代码示例中的example.com替换为您的域名或 IP 地址。
1. 安装 PHP 7.4
CentOS 7 在其官方存储库中提供了 PHP 5.4 版,但 osTicket 不支持该版本。osTicket 推荐的 PHP 版本是 7.4。您可以从 Remi 的 RPM 存储库安装 7.4 版,这是一个长期且受社区信任的 CentOS 存储库。
以非root sudo 用户通过SSH 登录服务器,然后安装Remi 的RPM 仓库配置包。
$ sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
安装yum-utils包以配置存储库。
$ sudo yum -y install yum-utils
启用 Remi 的 RPM 存储库。
$ sudo yum-config-manager --disable 'remi-php*' $ sudo yum-config-manager --enable remi-php74
安装 PHP-FPM 和其他必要的 PHP 扩展。
$ sudo yum install -y php-cli php-fpm php-gd php-gettext php-imap php-intl php-json php-mbstring php-xml php-apcu php-mysqli php-opcache
启用 PHP-FPM 服务,以便 PHP-FPM 在启动时运行。
$ sudo systemctl enable php-fpm.service
列出您的 CentOS 系统支持的所有时区。使用UP/DOWN键在列表中移动,然后按Q退出。
$ timedatectl list-timezones
从列表中选择合适的时区,例如America/New_York。然后使用该时区更新您的 CentOS 系统。
$ sudo timedatectl set-timezone America/New_York
打开主要的 PHP 配置文件。
$ sudo nano /etc/php.ini
找到该行;date.timezone =并将其替换为date.timezone = America/New_York。然后保存配置文件并退出。
为了增强服务器的安全性,请osticket为 osTicket创建一个名为PHP-FPM 进程的用户/组的专用用户。该用户还拥有 osTicket 源代码文件。
$ sudo adduser osticket
每次要添加、删除或更新源代码文件时,都需要切换到该用户。
从默认配置文件创建 PHP-FPM 配置文件。
$ sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/osticket.conf
重命名默认文件以禁用它并将其保留为备份。
$ sudo mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.default
打开/etc/php-fpm.d/osticket.conf文件。
$ sudo nano /etc/php-fpm.d/osticket.conf
在配置文件中,任何以 开头的行;都是注释。
确保listen = 127.0.0.1:9000设置不是以开头的,;因为 PHP-FPM 进程127.0.0.1使用9000端口侦听地址。
搜索以下设置,然后:
- 将[www]替换为[osticket]
- 将user = apache替换为user = osticket
- 用group = osticket替换group = apache
- 将/var/log/php-fpm/www-error.log替换为/var/log/fpm-php/osticket/error.log
- 将/var/lib/php/session替换为/var/lib/php/session.osticket
保存配置文件并退出。
为避免弄乱默认文件夹,请创建一个名为/var/log/php-fpm/www-error.log存储日志消息的单独文件夹和一个名为/var/lib/php/session.osticket存储会话数据的文件夹。
$ sudo mkdir -p /var/log/fpm-php/osticket $ sudo mkdir -p /var/lib/php/session.osticket
更新两个文件夹的所有权和权限,以便只有 osTicket 的 PHP-FPM 进程可以写入它们。
$ sudo chown osticket:osticket /var/log/fpm-php/osticket $ sudo chmod 700 /var/log/fpm-php/osticket $ sudo chown osticket:osticket /var/lib/php/session.osticket $ sudo chmod 700 /var/lib/php/session.osticket
检查新配置。
$ sudo php-fpm -t
启动 PHP-FPM 服务。
$ sudo systemctl start php-fpm.service
2. 安装 MariaDB 5.5
尽管 CentOS 7 的存储库中不包含 MySQL,但它包含 MariaDB 5.5,这是 MySQL 5.5 的直接替代品。由于 osTicket 支持 MySQL 5.5,因此您可以为 osTicket 安装 MariaDB 5.5。
$ sudo yum install -y mariadb-server
启用 MariaDB 服务,以便 MariaDB 在启动时运行。
$ sudo systemctl enable mariadb.service
启动 MariaDB 服务。
$ sudo systemctl start mariadb.service
运行mysql_secure_installation脚本以提高安全性并为 MariaDBroot用户设置密码。
$ sudo mysql_secure_installation
对于Enter current password for root (enter for none):问题,只需按,ENTER因为您尚未为root用户设置密码。
对于Set root password? [Y/n]问题,按Y和ENTER设置root密码。
出现提示时输入两次强密码。您可以使用KeePassXC等免费密码管理器或Random Password Generator等在线工具来生成强密码。
对于任何剩余问题,请按Y和ENTER以接受推荐的选项。
完成后,以root用户身份连接到 MariaDB 命令行。
$ sudo mysql -u root -p
为 osTicket创建一个名为osticket的 MariaDB 数据库。
MariaDB [(none)]> CREATE DATABASE osticket CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
为 osTicket创建一个名为osticket的 MariaDB 用户。更换密码使用强密码。
MariaDB [(none)]> CREATE USER 'osticket'@'localhost' IDENTIFIED BY 'password'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON osticket.* TO 'osticket'@'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES;
退出 MariaDB 命令行。
MariaDB [(none)]> exit
3.安装osTicket
下载源代码
创建一个文件夹来存储 osTicket 源代码。
$ sudo mkdir -p /var/www/osticket
设置osticket为源代码文件夹的所有者。
$ sudo chown osticket:osticket /var/www/osticket
安装 git 包,因为您将使用它来下载 osTicket 源代码。
$ sudo yum install -y git
切换到osticket用户下载并配置osTicket。
$ sudo su osticket
下载最新的 osTicket。
$ cd ~ && git clone https://github.com/osTicket/osTicket
将代码部署到/var/www/osticket您在上面创建的文件夹中。
$ cd osTicket $ php manage.php deploy --setup /var/www/osticket
从示例文件创建配置文件。
$ cp /var/www/osticket/include/ost-sampleconfig.php /var/www/osticket/include/ost-config.php
切换回 sudo 用户以继续设置。
$ exit
4. 安装 Nginx
使用以下命令安装 Nginx。
$ sudo yum install -y nginx
启用 Nginx 服务,以便 Nginx 在启动时运行。
$ sudo systemctl enable nginx.service
为 osTicket 创建一个新的配置文件。
$ sudo nano /etc/nginx/conf.d/osticket-http.conf
粘贴以下内容:
server { listen 80; listen [::]:80; server_name example.com; root /var/www/osticket; index index.php index.html; location ~ ^/include/ { deny all; } # Pass the PHP script to the FastCGI server listening on 127.0.0.1:9000 # Reference: https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/ location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { rewrite ^/api/(.+) /api/http.php/$1 break; rewrite ^/apps/(.+) /apps/dispatcher.php/$1 break; rewrite ^/scp/apps/(.+) /scp/apps/dispatcher.php/$1 break; rewrite ^/pages/(.+) /pages/index.php/$1 break; return 404; } # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; } location ~ ^/(api|apps|pages|scp/apps)/(.+) { try_files $uri $uri/ @rewrite_rules; } location @rewrite_rules { rewrite ^/api/(.+) /api/http.php/$1 last; rewrite ^/apps/(.+) /apps/dispatcher.php/$1 last; rewrite ^/scp/apps/(.+) /scp/apps/dispatcher.php/$1 last; rewrite ^/pages/(.+) /pages/index.php/$1 last; } }
保存配置文件并退出。然后检查新配置。
$ sudo nginx -t
启动 Nginx 服务。
$ sudo systemctl start nginx.service
更新防火墙以允许传入的 HTTP 请求。
$ sudo firewall-cmd --permanent --zone=public --add-service=http
重新加载当前的防火墙会话。
$ sudo firewall-cmd --reload
5.(可选)配置HTTPS
如果您拥有有效的域名,则可以免费为您的 osTicket 设置 HTTPS。使用 Certbot 程序,您可以从证书颁发机构 Let’s Encrypt 获得免费的 TLS 证书。
使用 Snap 安装 Certbot
Snap Store 是一个拥有数百万用户的 Linux 应用程序商店。它可以轻松获取具有自动证书续订等功能的最新版本的 Certbot。提供使用 Snap Store 所需的一切的包是snapd。
安装 snapd 包。
$ sudo yum install snapd -y
启用 snapd 服务。
$ sudo systemctl enable --now snapd.socket
启用经典快照支持。
$ sudo ln -s /var/lib/snapd/snap /snap
获取最新版本的 snapd 核心。
$ sudo snap install core && sudo snap refresh core
如果出现以下错误,请不要担心。
error: too early for operation, device not yet seeded or device model not acknowledged
安装 snapd 后,可能需要一些时间来初始化其环境。请稍等片刻,然后重试上述命令。
安装 Certbot。
$ sudo snap install --classic certbot
使certbot命令全局可用。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
获取 Let’s Encrypt 证书
重命名 HTTP 配置文件,使其成为 HTTPS 配置文件的模板。
$ sudo mv /etc/nginx/conf.d/osticket-http.conf /etc/nginx/conf.d/osticket-https.tpl
创建一个新的配置文件来处理 HTTP 请求。
$ sudo nano /etc/nginx/conf.d/osticket-http.conf
粘贴以下内容:
server { listen 80; listen [::]:80; server_name example.com; root /var/www/osticket; location / { return 301 https://$server_name$request_uri; } location /.well-known/acme-challenge/ {} }
此配置使 Nginx 将所有 HTTP 请求(来自 Let’s Encrypt 的请求除外)重定向到相应的 HTTPS 请求。
保存配置文件并退出。然后检查Nginx配置。
$ sudo nginx -t
应用新配置。
$ sudo systemctl reload nginx.service
现在您可以运行以下命令来获取 Let’s Encrypt 证书。
$ sudo certbot certonly --webroot -w /var/www/osticket -d example.com -m admin@example.com --agree-tos
您可能需要回答有关与电子前沿基金会共享电子邮件的问题。
完成后,certbot告诉您证书文件和密钥文件的路径:
/etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem
位于同一文件夹中的另一个关键文件也是下一步所需的chain.pem.
使用 Nginx 安装证书
为 DHE 密码生成带有 DH 参数的文件。
$ sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
2048是 DH 参数的推荐大小。此过程可能需要一段时间,请耐心等待。
从上面的模板文件创建 HTTPS 配置文件。
$ sudo mv /etc/nginx/conf.d/osticket-https.tpl /etc/nginx/conf.d/osticket-https.conf
打开 HTTPS 配置文件。
$ sudo nano /etc/nginx/conf.d/osticket-https.conf
找到以下几行:
listen 80; listen [::]:80;
将它们替换为:
listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; # about 40000 sessions # DH parameters file ssl_dhparam /etc/nginx/dhparam.pem; # intermediate configuration ssl_protocols TLSv1.2; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # HSTS (ngx_http_headers_module is required) (63072000 seconds) # # Uncomment the following line only if your website fully supports HTTPS # and you have no intention of going back to HTTP, otherwise, it will # break your site. # # add_header Strict-Transport-Security "max-age=63072000" always; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; # verify chain of trust of OCSP response using Root CA and Intermediate certs ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; # Use Cloudflare DNS resolver resolver 1.1.1.1;
保存配置文件并退出。然后检查Nginx配置。
$ sudo nginx -t
应用新配置。
$ sudo systemctl reload nginx.service
更新防火墙以允许传入的 HTTPS 请求。
$ sudo firewall-cmd --permanent --zone=public --add-service=https
重新加载当前的防火墙会话。
$ sudo firewall-cmd --reload
自动续订
Let’s Encrypt 证书的有效期为 90 天,因此您必须至少每三个月更新一次 TLS 证书。Certbot 安装自动创建了一个 systemd 计时器单元来自动执行此任务。运行以下命令以验证计时器是否处于活动状态。
$ sudo systemctl list-timers | grep 'certbot\|ACTIVATES'
更新证书后,Certbot 不会自动重新加载 Nginx,因此 Nginx 仍然使用旧证书。您必须在/etc/letsencrypt/renewal-hooks/deploy文件夹内编写一个脚本来重新加载 Nginx。
打开你的文本编辑器。
$ sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
粘贴以下内容:
#!/bin/bash /usr/bin/systemctl reload nginx.service
保存并退出。然后使脚本可执行。
$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
通过试运行测试更新过程。
$ sudo certbot renew --dry-run
6. 完成 osTicket 设置
重新启动服务器以确保它在之后仍然有效。
$ sudo reboot
等待系统启动,然后在浏览器中打开http://example.com链接。该osTicket安装程序出现,您将看到您的服务器的配置满足所有的最低要求。
单击继续按钮移至osTicket 基本安装。
用您的信息填写表格以更新系统设置并创建管理员用户。
对于Database Settings,在MySQL Database和MySQL Username字段中输入osticket,然后在MySQL Password字段中输入您在步骤 2 中创建的osticket用户的密码。
单击立即安装按钮以安装 osTicket。完成后,它会将您重定向到祝贺屏幕。
删除安装文件夹返回到您的 SSH 会话进行清理。
$ sudo rm -rf /var/www/osticket/setup
设置root为 osTicket 配置文件的所有者以防止 PHP-FPM 更改它。
$ sudo chown root:root /var/www/osticket/include/ost-config.php
您的 osTicket 网站现已准备就绪。您应该打开Staff Control Panel页面 https://example.com/scp/,以继续安装后设置。有关完整和最新的说明,请阅读osTicket 文档的安装后设置指南。