源码编译搭建LNMP

什么是LNMP

LNMP 环境是指在 Linux 系统下,由 Nginx + MySQL/MariaDB + PHP 组成的网站服务器架构。

源码安装LNMP

 # 安装各种依赖包
 yum -y install apr* autoconf automake numactl bison bzip2-devel cpp curl-devel fontconfig-devel freetype-devel gcc gcc-c++ gd-devel gettext-devel kernel-headers keyutils-libs-devel krb5-devel libcom_err-devel  libpng-devel  libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libtiff* make openssl-devel patch pcre-devel perl php-common php-gd telnet zlib-devel libtirpc-devel gtk* ntpstat na* bison* lrzsz cmake ncurses-devel libzip-devel libxslt-devel gdbm-devel readline-devel gmp-devel --skip-broken
 ​
 # 源码包请自行准备好
 ​
 # 解压  
 tar  -xvf lnmp.tar.xz
 ​
 # 切换目录
 cd lnmp

rpcsvc-proto操作

 # 解压 rpcsvc-proto 源码包(tar.gz 格式)
 tar xzvf rpcsvc-proto-1.4.tar.gz 
 ​
 # 切换到解压后的源码目录
 cd rpcsvc-proto-1.4/
 ​
 # 运行配置脚本,检测系统环境并生成 Makefile
 ./configure
 ​
 # 编译源码,生成可执行文件/库文件
 make 
 ​
 # 安装编译好的文件到系统目录(通常需要 root 权限)
 make install
 ​
 # 返回上级目录(即回到执行解压时的初始目录)
 cd .

配置Nginx服务

创建用于管理网站服务的系统账户

 # 创建账户
 useradd nginx -M -s /sbin/nologin
 ​
 # 确认用户信息
 id nginx
 ​
 ## 可能存在账户存在情况
 ## 如果确认无重要文件,可以删除并重建
 userdel nginx
 useradd nginx -M -s /sbin/nologin

编译安装Nginx网站服务程序

 # 解压 Nginx 源码包(.tar.gz 格式,z 表示 gzip 压缩,x 表示解压,v 表示显示过程,f 指定文件)
 tar zxvf nginx-1.31.0.tar.gz
 ​
 # 切换到解压后的 Nginx 源码目录
 cd nginx-1.31.0/
 ​
 # 运行配置脚本,检测系统环境并生成 Makefile(添加用户和SSL模块)
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
 ​
 # 编译源码,将 C 代码编译成可执行的二进制文件
 make
 ​
 # 安装编译好的文件到指定目录(/usr/local/nginx)
 make install
 ​
 # 返回上级目录(回到执行解压时的初始目录)
 cd ..

配置文件

 # 编辑配置文件
 vim /usr/local/nginx/conf/nginx.conf 
 ​
 # 修改位置
 ## 把第2行的注释符(#)删除 假设由nginx用户及nginx用户组负责管理网站服务
 user  nginx nginx;
 ​
 ## 修改第43行的首页文件名称 在里面添加index.php的名字
 ## 这个文件也是让用户浏览网站时第一眼看到的文件,也叫首页文件。
 41    location / {
 42        root   html;
 43        index index.php index.html index.htm;
 44    }
 ​
 ## 删除第61~69行前面的注释符(#)来启用虚拟主机功能
 ## 然后将第67行后面对应的网站根目录修改为/usr/local/nginx/html
 ## 其中的fastcgi_script_name参数用于指代脚本名称
 ## 也就是用户请求的URL。只有信息填写正确了,才能使Nginx服务正确解析用户请求。
 ## 否则访问的页面会提示“404 Not Found”的错误。
 61    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 62    #
 63     location ~ \.php$ {
 64         root           html;
 65         fastcgi_pass   127.0.0.1:9000;
 66         fastcgi_index  index.php;
 67         fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
 68         include        fastcgi_params;
 69     }

systemctl命令所管理

 # 编辑配置文件
 vim ~/.bash_profile
 ​
 # 配置文件内容
 # .bash_profile
 ​
 # Get the aliases and functions
 if [ -f ~/.bashrc ]; then
     . ~/.bashrc
 fi
 ​
 # User specific environment and startup programs
 ​
 PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
 ​
 export PATH
 ​
 # 刷新生效
 source ~/.bash_profile
 ​
 # 启动Nginx
 nginx 

配置Mysql服务

 # 创建用户
 useradd mysql -M -s /sbin/nologin
 ​
 # 解压MySQL安装软件包
 tar xvf mysql-8.0.18.tar.xz
 ​
 # 重命名
 mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
 ​
 # 移动到/usr/local目录下
 mv mysql /usr/local
 ​
 # 切换目录
 cd /usr/local/mysql
 ​
 # 创建存储数据库文件
 mkdir data

初始化MySQL服务程序

 # 对目录进行授权
 chown -R mysql:mysql /usr/local/mysql
 ​
 # 进入目录
 cd bin
 ​
 # 数据库初始化(获取临时密码)
 ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
 ​
 # 让服务器每次重启后都能自动启动数据库,并给予可执行权限。
 cd /usr/local/mysql
 ​
 # 复制文件
 cp -a support-files/mysql.server /etc/init.d/mysqld
 ​
 # 赋予权限
 chmod a+x /etc/init.d/mysqld
 ​
 # 修改MySQL配置文件
 vim  /etc/my.cnf
 ​
 # 添加以下内容
 [mysqld]
 port = 3306
 basedir = /usr/local/mysql
 datadir = /usr/local/mysql/data
 log-error = /usr/local/mysql/data/error.log
 pid-file = /usr/local/mysql/data/mysql.pid
 socket = /tmp/mysql.sock
 character-set-server=utf8mb4
 collation-server=utf8mb4_unicode_ci
 default-storage-engine=InnoDB
 default-authentication-plugin=mysql_native_password
 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 ​
 # 执行MySQL数据库服务启动文件
 /etc/init.d/mysqld start 
 ​
 # 安装兼容库
 yum install ncurses-compat-libs -y
 ​
 # 登录MySQL(输入初始化密码)
 mysql -u root -p
 ​
 # 修改密码
 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
 ​
 # 切换数据库
 use mysql;
 ​
 # 并使用 mysql_native_password 加密方式
 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
 ​
 # 刷新权限
 FLUSH PRIVILEGES;
 ​
 # 创建WordPress网站系统的数据库
 create database linuxcool;
 ​
 # 退出数据库
 exit

配置php服务

 # 切换目录
 cd ~/lnmp
 ​
 # 解压
 tar xvf php-7.3.5.tar.gz
 ​
 # 切换目录
 cd php-7.3.5/
 ​
 # 编译安装 PHP
 ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring --with-gd
 ​
 # 生成二进制文件(时间大约为10~20分钟,耐心等待即可)
 make -j$(nproc)
 ​
 # 进行安装
 make install
 ​
 # 将生成的php服务配置文件复制到安装目录中(/usr/local/php/)
 cp php.ini-development /usr/local/php/lib/php.ini
 ​
 # 切换目录
 cd /usr/local/php/etc/
 ​
 # 重命名
 mv php-fpm.conf.default php-fpm.conf
 ​
 # 复制一个模板文件到php-fpm.d的目录中,用于后续控制网站的连接性能
 mv php-fpm.d/www.conf.default php-fpm.d/www.conf
 ​
 # 把php服务加入到启动项中,使其重启后依然生效
 cd ~/lnmp/php-7.3.5
 cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
 chmod 755 /etc/init.d/php-fpm
 ​
 # 配置文件(视情况修改)
 vim /usr/local/php/lib/php.ini
 ​
 # 文件内容
  307 ; This directive allows you to disable certain functions for security reasons.
  308 ; It receives a comma-delimited list of function names.
  309 ; http://php.net/disable-functions
  310 disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
  
  # 启动
  /etc/init.d/php-fpm start

搭建Wordpress博客

 # 切换目录
 cd ..
 ​
 # 把Nginx服务程序根目录的内容清空
 rm -f /usr/local/nginx/html/*
 ​
 # 解压
 tar xzvf wordpress.tar.gz
 ​
 # 将WordPress解压后的网站文件复制进去
 mv wordpress/* /usr/local/nginx/html/
 ​
 # 为了能够让网站文件被Nginx服务程序顺利读取,应设置目录所有权的身份及可读写的权限
 chown -Rf nginx:nginx /usr/local/nginx/html 
 chmod -Rf 777 /usr/local/nginx/html
 ​
 # 切换目录
 cd /usr/local/nginx/html/
 ​
 # 编辑配置文件
 vim wp-config.php
 ​
 # 把提示内容粘贴进去保存退出
 ​
 # 本机IP地址访问WordPress网站的首页面