1. 简介

我们使用 LNMP 一键安装包安装所需的运行环境。

无需一个一个的输入命令,无需值守,编译安装优化编译参数,提高性能,解决不必要的软件间依赖,特别针对配置自动优化。

支持自定义 Nginx、PHP 编译参数及网站和数据库目录、支持生成 Let'sEcrypt/ZeroSSL/BuyPass 免费 SSL 证书、支持无人值守、LNMP 模式支持多 PHP 版本、支持单独安装 Nginx/MySQL/MariaDB/Pureftpd 服务器,同时提供一些实用的辅助工具如:虚拟主机管理、FTP 用户管理、Nginx、MySQL/MariaDB、PHP 的升级、常见 PHP 模块 exif、fileinfo、ldap、bz2、sodium、imap 和 swoole 的一键安装、常用缓存组件 Redis/Xcache 等的安装、重置 MySQL root 密码、502 自动重启、日志切割、SSH 防护 DenyHosts/Fail2Ban、备份等许多实用脚本。

2. 免密登录

可以在各大云服务器厂商购买云服务器(或轻量云服务器),系统选择 Ubuntu Server 22.04 LTS 64 位即可,登录方式选择 SSH 密钥,并保存私钥到本地(示例:keys/rsa)。

如果 Ubuntu 默认登录用户为 ubuntu,则需要按如下方式配置下 root 密钥,否则可跳过。

在终端中使用私钥登录到服务器:

ssh ubuntu@x.x.x.x -i keys/rsa

切换用户为 root

sudo su

ubuntu 公钥 /home/ubuntu/.ssh/authorized_keys 保存到 root 用户下,然后清空:

echo /home/ubuntu/.ssh/authorized_keys > ~/.ssh/authorized_keys
echo '' > /home/ubuntu/.ssh/authorized_keys

重启服务器,之后就可以用 root 用户登录了:

ssh root@x.x.x.x -i keys/rsa

3. 安装 LNMP

如无特殊说明,以下均使用 root 用户登录操作。

如果是阿里云 ECS 服务器,要检查下虚拟内存配置 vm.swappiness,默认值为 30,而阿里云将其值改为了 0。

要查看该值,运行以下命令即可:

cat /proc/sys/vm/swappiness

只需要在 /etc/sysctl.conf 中修改 vm.swappiness 或删除这一行使用默认值,然后重启系统即可。

root 登录服务器后,用 screen 开一个终端,避免安装过程中断线等异常退出:

screen -S lnmp

screen 是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。screen 中有会话的概念,用户可以在一个 screen 会话中创建多个 screen 窗口,在每一个 screen 窗口中就像操作一个真实的 telnet/SSH 连接窗口那样。

基本使用:

  • screen -S lnmp:创建名为 lnmp 的会话;
  • screen -r lnmp:恢复名为 lnmp 的会话;
  • screen -D -r lnmp:有时候 screen 异常退出可能会提示状态为 Attached,可以执行该命令恢复;
  • screen -ls:显示目前所有的会话。

接下来,安装 LNMP:

wget https://soft.lnmp.com/lnmp/lnmp2.1.tar.gz -O lnmp2.1.tar.gz && tar zxf lnmp2.1.tar.gz && cd lnmp2.1 && ./install.sh lnmp

图片标题

软件版本:

  • MySQL:5.7.*
  • PHP:8.3.*

选项介绍详见官方安装介绍

安装完成后就可以使用 lnmp vhost add 添加网站了,这一部分会在下一章节添加网站中介绍。

4. 解除禁用函数

LNMP 为了安全,默认会禁用部分 PHP 函数,但 Laravel 需要这些,所以我们需要解除:

cd /root/lnmp2.1/tools/
./remove_disable_function.sh

5. 空主机头

安装完成后,默认情况下是可以通过 IP 地址访问网站的,也就是常说的空主机头,我们要处理这部分请求。

打开配置文件:

vim /usr/local/nginx/conf/nginx.conf

将 80 端口返回 404,另外添加一个 server 拦截 443 端口,同样返回 404:

server
    {
        listen 80 default_server reuseport;
        #listen [::]:80 default_server ipv6only=on;
        server_name _;
        index index.html index.htm index.php;
        root  /home/wwwroot/default;

        #返回 404
        return 404;

        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }
    }

#监听 443,返回 404
server
    {
        listen 443 ssl;
        #listen [::]:443 ssl http2;
        http2 on;
        server_name _;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/default;

        ssl_certificate /usr/local/nginx/conf/ssl/bbs.ilaoniu.cn/fullchain.cer;
        ssl_certificate_key /usr/local/nginx/conf/ssl/bbs.ilaoniu.cn/bbs.ilaoniu.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

        return 404;
    }

include vhost/*.conf;

重启即可:

lnmp reload

6. 相关组件

最后,我们安装前后端常用的组件:PHP Fileinfo 扩展,Nodejs,NPM,pnpm,Composer,Redis,Memcached。

6.1 安装 PHP Fileinfo 扩展

Laravel 需要 Fileinfo 扩展,安装下(如已安装请忽略):

cd /root/lnmp2.1/
./addons.sh

图片标题
选择 11,回车即可。

6.2 安装 Node

参见 官方教程

## 安装 Node.js 20.x lts
apt-get update && apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
apt-get update && apt-get install nodejs -y

6.3 安装 pnpm

npm install pnpm -g

6.4 安装 Composer

curl https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer

6.5 安装 ACL

apt-get install acl

6.6 安装 Redis,Memcached

apt-get install redis-server memcached

7. 其他

默认情况下,响应头中会包含 PHP 版本信息,可以隐藏:

vim /usr/local/php/etc/php.ini
.
.
.
expose_php = On
.
.
.

将 On 改为 Off 即可。

如果网站无法正常打开,也可以将 display_errors = Off 临时修改成 On 显示错误方便排错。