源码安装LNMP

本文详细介绍了如何从零开始编译安装Nginx、MySQL及PHP,并配置Nginx使其支持PHP运行,适用于希望自行搭建LNMP环境的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、编译安装nginx
tar -zxvf nginx-1.0.9.tar.gz -C /usr/local/src
./configure --prefix=/usr/local/nginx109 --with-http_stub_status_module --with-http_ssl_module  --user=nginx --group=nginx
make && make install
/usr/local/nginx/sbin/nginx start
netstat -anplt | grep :80
elinks 127.0.0.1

2、编译安装mysql
tar -xzvf mysql-mysql-5.1.34.tar.gz -C /usr/local/src
如果不存在mysql 用户,则建立之
./configure --prefix=/usr/local/mysql
make && make install

rm -rf /etc/my.cnf
/usr/local/mysql/bin/mysql_install_db
chown  -R  mysql: mysql /usr/local/mysql/
./mysqld_safe --user=mysql
/usr/local/mysql/bin/mysql 连接测试

3、编译安装php
tar -jxvf php-5.2.9.tar.bz2 -C /usr/local/src
cp php-5.2.8-fpm-0.5.10.diff.gz /usr/local/src
cd /usr/local/src
gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.9/ -p1
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql/ --enable-fastcgi --enable-fpm
make && make install

cp php.ini-dist /usr/local/php/php.ini

4、配置
vim /usr/local/php/etc/php-fpm.conf
            Unix user of processes
            nobody

           Unix group of processes
           nobody

5、让nginx支持php
编辑nginx的配置文件
location ~ \.php$ {  
            root           html;
            fastcgi_pass   127.0.0.1:9000;  
            fastcgi_index  index.php;  
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;  
        }  
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
root /scripts;
if (-f $request_filename) {
expires 1d;
break;
}
}

接下来,启动nginx服务。

/usr/local/nginx/sbin/nginx
到此为止,Nginx+PHP已经配置完成。




<think>嗯,用户要求的是Ansible playbook源码安装LNMP环境,这需要结合多个引用内容来构建。引用1和5提到变量定义方式,引用2和3涉及PHP配置模板处理,引用4则提供了第三方yum源的安装参考。 用户可能正在搭建生产环境,需要高度定制化的部署方案。源码安装相比二进制包更灵活但复杂度高,用户应该具备一定运维经验。注意到引用3中修改www.conf的细节很重要,包括user/group和listen端口设置,这些在PHP角色里需要重点处理。 LNMP源码安装的关键难点在于:1) 编译参数优化 2) 服务配置文件适配 3) 多组件依赖管理。比如Nginx需要集成pcre和zlib,PHP要启用fpm模块,MySQL需初始化数据目录。 准备采用分阶段方案:先通过yum安装编译工具链(gcc、make等),再分别构建三个角色。特别要注意Nginx和PHP的联动配置,fastcgi_pass参数必须与php-fpm监听地址一致,这个在引用3和5都有体现。 对于MySQL角色,考虑安全设置:移除测试数据库、设置root密码、禁用远程root登录。这些在引用里没提但很关键。所有模板文件都采用j2格式,如引用2所示,这样能保持灵活性。 最后生成的playbook会包含:变量集中管理(如引用1的main.yml)、分步编译安装、服务启动配置。用户后续可能还需要考虑:1) 版本升级方案 2) 性能调优 3) 安全加固,这些在相关问题里可以提示。</think>下面是一个使用Ansible Playbook**源码安装LNMP环境**的完整方案,整合了最佳实践和关键配置: --- ### Ansible Playbook 源码安装 LNMP #### 1. 目录结构 ```bash lnmp_playbook/ ├── group_vars/ │ └── all.yml # 全局变量 ├── roles/ │ ├── nginx/ # Nginx角色 │ │ ├── tasks/ │ │ │ └── main.yml │ │ └── templates/ │ │ └── nginx.conf.j2 │ ├── mysql/ # MySQL角色 │ │ ├── tasks/ │ │ │ └── main.yml │ │ └── templates/ │ │ └── my.cnf.j2 │ └── php/ # PHP角色 │ ├── tasks/ │ │ └── main.yml │ ├── templates/ │ │ ├── php.ini.j2 │ │ └── www.conf.j2 │ └── vars/ │ └── main.yml # PHP专用变量 └── site.yml # 主Playbook ``` #### 2. 全局变量 (`group_vars/all.yml`) ```yaml # 基础配置 install_dir: /opt/lnmp nginx_version: "1.25.3" mysql_version: "8.0.36" php_version: "8.2.15" # Nginx配置 nginx_user: www-data nginx_port: 80 nginx_web_dir: "{{ install_dir }}/html" # MySQL配置 mysql_root_password: "SecurePass123!" mysql_data_dir: "{{ install_dir }}/mysql/data" # PHP-FPM配置 php_fpm_listen: "127.0.0.1:9000" # 需与Nginx的fastcgi_pass一致[^3] ``` #### 3. 关键角色任务示例 ##### (1) Nginx角色 (`roles/nginx/tasks/main.yml`) ```yaml - name: 安装编译依赖 yum: name: [gcc, pcre-devel, zlib-devel, openssl-devel] state: present - name: 下载Nginx源码 get_url: url: "https://nginx.org/download/nginx-{{ nginx_version }}.tar.gz" dest: "/tmp/nginx-{{ nginx_version }}.tar.gz" - name: 编译安装Nginx shell: | tar zxf /tmp/nginx-*.tar.gz cd nginx-{{ nginx_version }} ./configure --prefix={{ install_dir }}/nginx \ --user={{ nginx_user }} \ --with-http_ssl_module make && make install args: chdir: /tmp - name: 配置Nginx template: src: nginx.conf.j2 dest: "{{ install_dir }}/nginx/conf/nginx.conf" - name: 启动Nginx服务 shell: "{{ install_dir }}/nginx/sbin/nginx" ``` ##### (2) PHP角色 (`roles/php/vars/main.yml`) ```yaml timezone: Asia/Shanghai php_extensions: [gd, mysqli, pdo_mysql, opcache] ``` ##### (3) PHP-FPM配置 (`roles/php/templates/www.conf.j2`) ```jinja2 [www] user = {{ nginx_user }} # 与Nginx用户保持一致[^3] group = {{ nginx_user }} listen = {{ php_fpm_listen }} # 监听地址[^1] ``` #### 4. 主Playbook (`site.yml`) ```yaml - hosts: webservers become: yes roles: - role: nginx - role: mysql - role: php ``` --- ### 部署执行命令 ```bash ansible-playbook -i inventory.ini site.yml ``` --- ### 关键配置说明 1. **PHP-FPM与Nginx联动** `php_fpm_listen` 变量需在Nginx配置的`fastcgi_pass`中引用,确保通信一致[^3]: ```nginx location ~ \.php$ { fastcgi_pass {{ php_fpm_listen }}; } ``` 2. **安全加固** - MySQL自动执行安全初始化: ```yaml - name: 初始化MySQL安全设置 shell: "mysql_secure_installation <<EOF\n{{ mysql_root_password }}\nn\nn\nY\nY\nY\nY\nEOF" ``` - PHP禁用危险函数(在`php.ini.j2`中): ```ini disable_functions = exec,passthru,shell_exec ``` 3. **依赖管理** 通过`yum`安装编译工具链,确保源码编译成功[^4]。 --- ### 验证LNMP是否正常运行 1. 在`{{ nginx_web_dir }}`创建`info.php`: ```php <?php phpinfo(); ?> ``` 2. 访问 `http://服务器IP/info.php` 查看PHP信息页 --- ### 相关问题 1. **如何优化Ansible Playbook的编译速度?** > 建议使用`local_action`在控制机编译后分发二进制包,避免目标机重复编译 2. **如何实现LNMP环境的版本升级?** > 需分三步: > - 修改`group_vars/all.yml`中的版本号 > - 添加任务清理旧版本(需保留配置文件) > - 增加版本回滚机制(如使用`archive`模块备份) 3. **源码安装与yum安装的性能差异如何评估?** > 源码安装可定制编译参数(如CPU指令集优化),但需权衡维护成本。可通过`sysbench`进行压测对比[^5] 4. **如何实现多节点LNMP集群部署?** > 需扩展: > - 负载均衡器角色(HAProxy/Nginx) > - 共享存储配置(NFS/GlusterFS) > - 数据库主从同步任务 [^1]: PHP-FPM监听地址需与Nginx的fastcgi_pass配置匹配 [^3]: PHP-FPM进程用户需与Nginx工作进程一致 [^4]: 编译依赖包需通过yum预先安装 [^5]: 性能测试工具可验证定制化编译的优势
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值