如何在 Ubuntu 22.04 上使用 Nginx 和 Free Lets Encrypt SSL 安装 SuiteCRM
本教程适用于这些操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 16.04(Xenial Xerus)
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 Nginx
- 第 3 步 - 安装和配置 MariaDB
- 第 4 步 - 安装 PHP 和扩展
- 第 5 步 - 下载 SuiteCRM
- 第 6 步 - 安装和配置 SSL
- 第 7 步 - 配置 Nginx 和 PHP
- 配置PHP-FPM
- 配置 PHP 上传大小
- 配置 Nginx
SuiteCRM 是一个用 PHP 编写的开源客户关系管理解决方案。在 SugarCRM 停止发布其社区版后,它是流行的 SugarCRM 软件的一个分支。它用于为所有客户数据创建一个中央存储库,以获得可用于增强和培养业务关系的洞察力。
它的一些功能包括文档存储、电子邮件营销、日历、社交媒体集成、区域管理、细分、营销自动化、潜在客户资格、内部聊天集成、客户支持、社交 CRM、销售人员自动化、营销活动、移动 CRM 和报告。它可以与第三方 SMTP 中继服务集成,如 Mandrill、Sendgrid、Amazon SES 等。您可以安装插件来扩展 SuiteCRM 的功能。它可以与第三方应用程序集成,如 Mautic、Facebook、Twitter、MailChimp、Zoom、Quickbooks、DocuSign 等。
在本文中,您将学习如何使用 Nginx Web 服务器安装 SuiteCRM,并在 Ubuntu 22.04 上使用 Lets Encrypt SSL。
先决条件
-
A server running Ubuntu 20.04.
-
A non-root sudo user.
- A Fully Qualified Domain Name (FQDN) pointing to the server like
suitecrm.example.com
. -
Make sure everything is updated.
$ sudo apt update $ sudo apt upgrade
-
Few packages that your system needs.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Some of these packages may already be installed on your system.
第 1 步 - 配置防火墙
第一步是配置防火墙。 Ubuntu 默认带有 ufw (Uncomplicated Firewall)。
检查防火墙是否正在运行。
$ sudo ufw status
您将获得以下输出。
Status: inactive
允许 SSH 端口,以便防火墙在启用时不会中断当前连接。
$ sudo ufw allow OpenSSH
也允许 HTTP 和 HTTPS 端口。
$ sudo ufw allow http $ sudo ufw allow https
启用防火墙
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
再次检查防火墙的状态。
$ sudo ufw status
您应该会看到类似的输出。
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
第 2 步 - 安装 Nginx
Ubuntu 附带旧版本的 Nginx。要安装最新版本,您需要下载官方 Nginx 存储库。
导入 Nginx 签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版本的存储库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
更新系统存储库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。
$ nginx -v nginx version: nginx/1.20.2
启用 Nginx 服务。
$ sudo systemctl enable nginx
第 3 步 - 安装和配置 MariaDB
Ubuntu 22.04 附带 MariaDB v10.6.7。运行以下命令来安装它。
$ sudo apt install mariadb-server
保护 MariaDB 安装。
$ sudo mysql_secure_installation
您将面临各种提示。回答如下。
Enter current password for root (enter for none): Press Enter Switch to unix_socket authentication [Y/n] Type y Change the root password? [Y/n] Type n Remove anonymous users? [Y/n] Type y Disallow root login remotely? [Y/n] Type y Remove test database and access to it? [Y/n] Type y Reload privilege tables now? [Y/n] Type y
使用以下命令连接到 MariaDB shell。
$ sudo mysql
为 SuiteCRM 创建一个新数据库。
$ CREATE DATABASE suitecrm;
创建一个新的数据库用户并为 t 使用强密码。
$ CREATE USER 'suitecrmuser'@'localhost' identified by 'yourpassword';
授予用户对数据库的权限。
$ GRANT ALL PRIVILEGES ON suitecrm.* TO 'suitecrmuser'@'localhost';
刷新所有权限。
$ FLUSH PRIVILEGES;
退出 MySQL 外壳。
$ exit
第 4 步 - 安装 PHP 和扩展
Ubuntu 22.04 附带 PHP 8.1,SuiteCRM 尚不支持。我们需要安装 PHP 8.0。为此,我们需要添加 Ondrejs PHP 存储库。
$ sudo add-apt-repository ppa:ondrej/php
接下来,安装 SuiteCRM 所需的 PHP 及其扩展。
$ sudo apt install php-imagick php8.0-fpm php8.0-mysql php8.0-common php8.0-gd php8.0-imap php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-bz2 php8.0-intl php8.0-gmp
验证安装。
$ php --version PHP 8.0.18 (cli) (built: May 1 2022 04:42:09) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.18, Copyright (c) Zend Technologies with Zend OPcache v8.0.18, Copyright (c), by Zend Technologies
第 5 步 - 下载 SuiteCRM
下载最新稳定版 SuiteCRM。您可以从 SuiteCRMs 官方网站获取下载链接。
对于我们的教程,我们将安装 SuiteCRM 的 v7,因为它在较长时间内受支持。如果需要,您可以安装 v8 版本,但它最初的支持期较短。
$ wget -O suitecrm.zip https://suitecrm.com/files/147/SuiteCRM-7.12/614/SuiteCRM-7.12.5.zip
创建一个 Web 根目录来服务 SuiteCRM。
-p
标志在路径中创建顶级目录(如果它们不存在)。$ sudo mkdir -p /var/www/
提取下载的 zip 存档。
$ sudo unzip suitecrm.zip -d /var/www/
-d
标志指定存档的目标目录。它将保存在
/var/www/SuiteCRM-7.12.5/
目录下。我们重命名它以使其更简单。$ sudo mv /var/www/SuiteCRM-7.12.5/ /var/www/suitecrm
切换到网络根目录。
$ cd /var/www/suitecrm
为各种目录设置正确的所有权和权限。
$ sudo chown -R nginx:nginx . $ sudo chmod -R 755 . $ sudo chmod -R 775 cache custom modules themes data upload $ sudo chmod 775 config_override.php 2>/dev/null
第 6 步 - 安装和配置 SSL
在配置 Nginx 之前,我们需要设置 SSL 证书。
要使用 Lets Encrypt 安装 SSL 证书,我们需要下载 Certbot 工具。为此,我们将使用 Snapd 包安装程序。
安装快照安装程序。
$ sudo apt install snapd
确保您的 Snapd 版本是最新的。
$ sudo snap install core $ sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令通过创建指向
/usr/bin
目录的符号链接来确保 Certbot 命令运行。$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
停止 Nginx 服务器,因为它会干扰 Certbot 工具。
$ sudo systemctl stop nginx
生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d suitecrm.example.com
上述命令会将证书下载到服务器上的
/etc/letsencrypt/live/suitecrm.example.com
目录。生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
为 Lets Encrypt 自动更新创建一个挑战网站根目录。
$ sudo mkdir -p /var/lib/letsencrypt
创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新证书。为此,首先,创建文件
/etc/cron.daily/certbot-renew
并打开它进行编辑。$ sudo nano /etc/cron.daily/certbot-renew
粘贴以下代码。
#!/bin/sh certbot renew --cert-name suitecrm.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
更改任务文件的权限以使其可执行。
$ sudo chmod +x /etc/cron.daily/certbot-renew
第 7 步 - 配置 Nginx 和 PHP
配置 PHP-FPM
打开文件
/etc/php/8.0/fpm/pool.d/www.conf
。$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf
我们需要将 PHP 进程的 Unix 用户/组设置为 nginx。找到文件中的
user=www-data
和group=www-data
行并将它们更改为nginx
。... ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = nginx group = nginx ...
另外,在文件中找到
listen.owner=www-data
和listen.group=www-data
行并将它们更改为nginx
。listen.owner = nginx listen.group = nginx
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
配置 PHP 上传大小
PHP 设置上传文件大小的限制。 PHP 设置的默认大小为 2 MB。要增加上传大小,请打开 PHP 配置文件进行编辑。
$ sudo nano /etc/php/8.0/fpm/php.ini
找到以下行。
upload_max_filesize = 2M
将其值更改为 20MB,如图所示。
upload_max_filesize = 20M
找到以下行。
post_max_size = 8M
将其值更改为 20MB,如图所示。
post_max_size = 20M
找到以下行。
;cgi.fix_pathinfo=1
通过删除分号并将其值更改为 0 来取消注释。
cgi.fix_pathinfo=0
按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重启 PHP-fpm 进程。
$ sudo systemctl restart php8.0-fpm
配置 Nginx
创建并打开文件
/etc/nginx/conf.d/suitecrm.conf
进行编辑。$ sudo nano /etc/nginx/conf.d/suitecrm.conf
将以下代码粘贴到其中。
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name suitecrm.example.com; root /var/www/suitecrm; error_log /var/log/nginx/suitecrm.error.log; access_log /var/log/nginx/suitecrm.access.log; client_max_body_size 20M; index index.php index.html index.htm; ssl_certificate /etc/letsencrypt/live/suitecrm.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/suitecrm.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/suitecrm.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; 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_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { # try to serve file directly, fallback to app.php try_files $uri /index.php$is_args$args; } location ~ \.php$ { # try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; #Note: If you install SuiteCRM on iRedMail server, you should use the TCP socket instead. #fastcgi_pass 127.0.0.1:9999 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } # Don't log favicon location = /favicon.ico { log_not_found off; access_log off; } # Don't log robots location = /robots.txt { access_log off; log_not_found off; } # Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc... location ~ /\. { deny all; access_log off; log_not_found off; } # A long browser cache lifetime can speed up repeat visits to your page location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name suitecrm.example.com; return 301 https://$host$request_uri; }
完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
打开文件
/etc/nginx/nginx.conf
进行编辑。$ sudo nano /etc/nginx/nginx.conf
在行
include /etc/nginx/conf.d/*.conf;
之前添加以下行。server_names_hash_bucket_size 64;
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证 Nginx 配置文件语法。
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
重新启动 Nginx 服务以启用新配置。
$ sudo systemctl restart nginx
第 8 步 - 安装和配置 SuiteCRM
在浏览器中打开站点
https://suitecrm.example.com
,您将看到设置向导。选中我接受框并单击下一步按钮继续。您将看到检查预安装要求的屏幕。
如果一切正常,请单击“下一步”按钮继续。
输入在步骤 3 中设置的数据库凭据。输入
localhost
作为主机名。此外,输入管理员帐户的详细信息并输入https://suitecrm.example.com
作为实例 URL。您可以配置其他设置,例如演示数据、SMTP 服务器设置、品牌、系统区域设置、安全性和数据库设置。
要启用 SMTP 设置,请展开页面的 SMTP 服务器规范部分并填写适当的值。如果您使用的是 Gmail 或 Microsoft exchange,则可以使用专用按钮来配置它们。对于我们的教程,我们使用 Amazon SES。
此外,设置系统区域设置。
完成后,单击页面底部的“下一步”按钮继续。您会看到 SuiteCRMs 配置完成的详细信息。
单击下一步按钮继续。您将看到登录页面。
输入管理员帐户凭据并单击登录以打开 SuiteCRM 仪表板。
您可以开始使用 SuiteCRM 来管理您的业务和客户数据。
第 9 步 - 设置 Cron 作业
SuiteCRM 需要 cron 作业才能正常运行。编辑
nginx
用户 crontab 文件。$ sudo crontab -e -u nginx
在文件末尾添加以下行。
* * * * * cd /var/www/suitecrm; php -f cron.php > /dev/null 2>&1
保存并关闭文件。
结论
关于在 Ubuntu 22.04 上使用带有 Lets Encrypt SSL 的 Nginx 服务器安装 SuiteCRM 的教程到此结束。如果您有任何问题,请在下面的评论中发表。