# Gentoo 下安装 LNMP 环境教程

URL: https://caijiao.org/posts/23
Source: docs/posts/23.md
Description: 本教程详细介绍如何在 Gentoo 系统上安装 LNMP（Linux + Nginx + MySQL/MariaDB + PHP）环境，包括环境准备、软件安装、配置优化及常见问题处理，附 PHP OPcache 配置优化。

本教程详细介绍如何在 [Gentoo](/gentoo/) 系统上安装 LNMP（[Linux](/linux/) + [Nginx](/nginx/) + MySQL/[MariaDB](/mariadb/) + PHP）环境，包括环境准备、软件安装、配置优化及常见问题处理，附 PHP OPcache 配置优化。

## 1. 环境准备

1. **更新系统**

```bash
sudo emerge --sync
sudo emerge --update --deep --newuse @world
```

2. **安装必要工具**

```bash
sudo emerge app-admin/sudo app-portage/gentoolkit
sudo emerge vim wget curl git
```

3. **设置 Portage USE 选项**

- 编辑 `/etc/portage/make.conf`：

```text
USE="mysql nginx php-fpm ssl iconv"
```

- 根据需求启用或禁用额外模块。

## 2. 安装 Nginx

1. **安装 Nginx**

```bash
sudo emerge www-servers/nginx
```

2. **配置 Nginx**

- 配置文件位于 `/etc/nginx/nginx.conf`
- 基本配置示例：

```nginx
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events { worker_connections 1024; }

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    server {
        listen 80;
        server_name localhost;
        root /var/www/localhost/htdocs;
        index index.php index.html index.htm;

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}
```

3. **启动 Nginx**

```bash
sudo rc-update add nginx default
sudo rc-service nginx start
```

---

## 3. 安装 MariaDB（或 MySQL）

1. **安装 MariaDB**

```bash
sudo emerge dev-db/mariadb
```

2. **初始化数据库**

```bash
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
```

3. **启动 MariaDB**

```bash
sudo rc-update add mariadb default
sudo rc-service mariadb start
```

4. **设置 root 密码**

```bash
sudo mysql_secure_installation
```

---

## 4. 安装 PHP 和 PHP-FPM

1. **安装 PHP**

```bash
sudo emerge dev-lang/php
sudo emerge dev-php/php-fpm
```

2. **配置 PHP-FPM**

- 配置文件 `/etc/php/fpm-php.ini`
- 常用修改：

```ini
cgi.fix_pathinfo=0
date.timezone = "Asia/Shanghai"
```

3. **启动 PHP-FPM**

```bash
sudo rc-update add php-fpm default
sudo rc-service php-fpm start
```

---

## 5. 配置 PHP OPcache

1. **启用 OPcache**

- 编辑 `/etc/php/fpm-php.ini` 或 `/etc/php/php.ini`，添加或修改：

```ini
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.validate_timestamps=1
opcache.fast_shutdown=1
```

2. **重启 PHP-FPM**

```bash
sudo rc-service php-fpm restart
```

3. **验证 OPcache 是否生效**

- 在测试 PHP 文件中添加：

```php
<?php
phpinfo();
?>
```

- 打开浏览器访问 `info.php`，搜索 `OPcache`，若显示相关信息，则 OPcache 已启用。

---

## 6. 测试 LNMP 环境

1. **创建测试文件**

```bash
echo "<?php phpinfo(); ?>" | sudo tee /var/www/localhost/htdocs/info.php
```

2. **访问测试页面**

- 打开浏览器访问 `http://your_server_ip/info.php`
- 若能显示 PHP 信息页面，则 LNMP 安装成功。

---

## 7. 常见问题与优化

- **Nginx 502 错误**：检查 PHP-FPM 是否启动并监听正确端口。
- **数据库无法连接**：确认 MariaDB 已启动并且防火墙允许端口 3306。
- **性能优化**：

  - 调整 Nginx worker 数量
  - 启用 PHP OPcache 提升 PHP 脚本执行速度
  - 配置 MariaDB 查询缓存
  - 使用 Nginx gzip 压缩静态文件
