LNMP 安装
nginx 各种安装方法
1. 使用 yum 安装 nginx
# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# yum install nginx
# systemctl restart nginx // 如果更换默认的
# ss -tnl
2. nginx 编译安装
# yum install openssl openssl-devel gcc gcc-c++ pcre pcre-devel
# groupadd www
# useradd -g www www -s /sbin/nologin
# tar zxf nginx-1.10.0.tar.gz
# cd nginx-1.10.0
# ./configure --prefix=/usr/local/nginx --user=www --group=www --pid-path=/run/nginx.pid --with-http_ssl_module --with-http_stub_status_module --with-http_v2_module --with-stream --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-file-aio --with-pcre
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_v2_module --with-stream --with-http_gzip_static_module --with-file-aio --with-http_stub_status_module --with-pcre=../pcre-8.38 // GS代码
# make && make install
# /usr/local/nginx/sbin/nginx // 启动
# ss -tnl // 80端口被监控 注意 防火墙放行 关闭selinux
# /usr/local/nginx/sbin/nginx -V // 查看nginx 版本 及 编译参数
# /usr/local/nginx/sbin/nginx -s reload // 重新加载
# /usr/local/nginx/sbin/nginx -s stop // 停止
# cp /data/soft/nginx /etc/init.d/nginx // 复制启动脚本
# chmod +x /etc/init.d/nginx // 添加执行权限 注意pid路径是否与主配置文件路径相同...添加启动脚本 nginx
# chkconfig --add /etc/init.d/nginx // 添加到service 管理
# chkconfig nginx on // 添加开启启动
# service nginx start // 启动
# systemctl restart nginx // 重启
# ss -tnl // 80端口被监听
.......................................................................................................................
php 各种安装方法
1. yum 安装 php 任意版本
# yum install epel-release yum-utils
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum list available --disablerepo="*" --enablerepo="remi-safe" php56* // 搜索 php5.6
# yum list available --disablerepo="*" --enablerepo="remi-safe" php73* // 搜索 php7.3
# yum install php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-pecl-swoole php73-php-recode php73-php-snmp php73-php-soap php73-php-xmll
# php73 -v
# cp /usr/lib/systemd/system/php73-php-fpm.service /etc/systemd/system/php-fpm.service
# systemctl daemon-reload // php73-php-fpm 换成 php-fpm 如果不改的话 systemctl restart php73-php-fpm
# vim /etc/opt/remi/php73/php.ini // 配置文件
memory_limit = 512M
# vim /etc/opt/remi/php73/php-fpm.d/www.conf // 如果你运行的是 nginx 修改用户名
user = nginx
group = nginx
# ln -s /opt/remi/php73/root/usr/bin/php /usr/bin/php // 将php73链接到系统环境变量中,就可以使用 php -v
# php -v // nginx 配合 PHP-FPM 时,通常建议将 cgi.fix_pathinfo 设置为 0,以避免安全风险。
# sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/opt/remi/php73/php.ini
# systemctl enable php-fpm
# systemctl restart php-fpm // 127.0.0.1 被监听
配置文件:
/etc/opt/remi/php73/php.ini
php安装 扩展
# yum search php73 // 目前只安装了部分 PHP 拓展, 如果要安装某一个扩展使用 yum install 即可
错误日志
# tail -f /var/opt/remi/php73/log/php-fpm/error.log // 错误日志
错误显示在浏览器上 方便找错误
# vim /etc/opt/remi/php73/php.ini
display_errors // 运行时是否将错误和警告信息显示在浏览器中。
Default Value: On // 表示在默认情况下,错误信息会显示在浏览器中。
Development Value: On // 在开发环境中,通常希望立即看到错误信息,以便调试和修复问题,所以设置为 On。
Production Value: Off // 在生产环境中,通常不希望将错误信息暴露给用户,因为这些信息可能包含敏感数据
// 或提供给攻击者有关系统的线索,因此设置为 Off。
display_startup_errors // PHP 启动期间(初始化时)发生的错误是否会显示在浏览器中。
// 这些错误可能在 php.ini 文件加载之前或 PHP 引擎初始化时发生。
Default Value: Off
Development Value: On
Production Value: Off
测试页
<?php phpinfo();?>
nginx 配置
# mkdir -p /data/www/logs/192.168.10.10/
# vim /etc/nginx/conf.d/192.168.10.10.conf // nginx 中 连接 php 配置文件 可直接使用
server {
listen 80;
server_name 192.168.10.10;
access_log /data/www/logs/192.168.10.10/192.168.10.10_access.log;
error_log /data/www/logs/192.168.10.10/192.168.10.10_error.log;
location / {
root /data/www/192.168.10.10/;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^/(uploads|config|private)/ {
deny all;
return 403;
}
location ~ \.php$ {
include fastcgi_params;
root /data/www/192.168.10.10/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# vim /etc/nginx/fastcgi_params
#fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
其他命令
# systemctl enable php73-php-fpm // 开启开机自启
# systemctl restart php73-php-fpm // 重启
# systemctl start php73-php-fpm // 启动
# systemctl stop php73-php-fpm // 关闭
# systemctl status php73-php-fpm // 检查状态
# find /etc/opt/remi/php73 -name php.ini // 查找php.ini位置
# rpm -qa | grep 'php' // 查找 php 和扩展的安装包:
# rpm -ql php73-php-pecl-swoole4-4.4.15-1.el7.remi.x86_64 // 查询php安装路径
2. php 编译安装
# tar xzf php-7.3.4.tar
# yum install epel*
# yum install libjpeg-devel libpng-devel freetype-devel libicu-devel openldap-devel openssl-devel libxml2-devel bzip2-devel libmcrypt-devel libmcrypt php-mcrypt mcrypt curl curl-devel php-ldap gcc gcc-c++
# ./configure --prefix=/usr/local/php --enable-fpm --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --enable-sockets --enable-opcache --enable-zip --with-zlib --enable-bcmath --with-libxml-dir --with-gd --with-mysqli --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-pear --with-curl --with-openssl --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-gettext
# make -j4 // 快速 安装 编译7.3.11的时候会报错 mcrypt 忽略即可
# make install // --disable-fileinfo 1G以下内存要使用此命令编译 不然要报错
php 5.6及以下
# cp /data/soft/php-5.6.16/php.ini-production /etc/php.ini
# cp /data/soft/php-5.6.16/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vim /usr/local/nginx/conf/nginx.conf // 在nginx 指向 php
location ~ \.php$ {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
# vim /usr/local/nginx/conf/fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; // 主要修改这项
# /usr/local/nginx/sbin/nginx -s reload
# vim /var/www/index.php
<?php
phpinfo();
?>
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# service php-fpm start
# chkconfig php-fpm on
# ss -tnl // 127.0.0.1:9000端口被监听
php 7.3及以上
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# vim php-fpm.conf
pid = /run/php-fpm.pid // 指定pid文件位置
# vim /usr/local/nginx/conf/nginx.conf // 在nginx 指向 php
location ~ \.php$ {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
# vim /usr/local/nginx/conf/fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; // 主要修改这项
# /usr/local/nginx/sbin/nginx -s reload // 重新加载
# vim /var/www/index.php
<?php
phpinfo();
?>
# /usr/local/php/sbin/php-fpm // 启动 如果提示curl.so等不能加载 删除/etc/php.d/*.ini即可
# kill -INT `cat /run/php-fpm.pid` // 关闭 没有大用处
# kill -USR2 `cat /run/php-fpm.pid` // 重启 没有大用处
# cp /data/soft/php-fpm /etc/init.d/php-fpm // 复制启动脚本 ... ... 添加启动脚本 php-fpm
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# service php-fpm start
# chkconfig php-fpm on
# ss -tnl // 127.0.0.1:9000端口被监听
.......................................................................................................................
mysql 编译安装 // 已测试 Mysql 5.6.47 Mariadb 5.5 Mariadb 10.4.10 会报错先看注释01解决
# rpm -qa | grep mariadb
# rpm -qa | grep mysql
# yum remove mariadb-libs.x86_64
# yum install openssl-devel libxml2-devel bzip2-devel libmcrypt-devel libmcrypt php-mcrypt mcrypt
# yum install libarchive-devel boost boost-devel lsof wget gcc gcc-c++ make cmake perl kernel-headers kernel-devel pcre-devel
# yum install libaio libaio-devel bison bison-devel zlib-devel openssl openssl-devel ncurses ncurses-devel libcurl-devel
# mkdir -p /data/soft
# cd /data/soft
# tar zxf mysql-5.6.47.tar.gz
# groupadd mysql
# useradd -g mysql mysql -s /sbin/nologin
# mkdir -p /data/mysqldb/{3306,innodb,mysql-bin,logs,run,relay-bin}
# chown -R mysql:mysql /data/mysqldb
# cd mysql-5.6.47
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/data/mysqldb/run/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/data/mysqldb
# make
# make install
# chown -R root:mysql /usr/local/mysql
# mkdir /etc/mysql
# rz // 复制进去my.cnf
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
# source /etc/profile
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb/3306
# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# systemctl restart mysqld
# ln -s /data/mysqldb/run/mysql.sock /tmp/mysql.sock // 由于配置文件修改了mysql.sock位置 安全初始化 会提示找不路径 方法一
# vim /usr/local/mysql/bin/mysql_secure_installation // 安全初始化 mysql.sock路径 会提示找不到路径 需要修改此文件 方法二
write_file($config, // 此为方法二 但是 有的数据库版本 没有此行语句
...
...
"connect-expired-password", // 此项去掉 ")" 改成","
"socket=/data/mysqldb/run/mysql.sock"); // 大概在157行 插入此语句即可
}
# mysql // 如果提示找不到mysql.sock 可以用-S指明路径 # mysql -S /data/mysqldb/run/mysql.sock
mysql> use mysql
mysql> select user,host,password from user;
# /usr/local/mysql/bin/mysql_secure_installation // 设置密码y 删除匿名用户y 禁止root远程登录n 删除测试数据库y 重载授权表y
❷ Mariadb 编译安装 旧安装方法
# rpm -qa | grep mariadb
# rpm -qa | grep mysql
# yum remove mariadb-libs.x86_64
# yum install libaio libaio-devel bison bison-devel zlib-devel openssl openssl-devel ncurses ncurses-devel libcurl-devel
# yum install libarchive-devel boost boost-devel lsof wget gcc gcc-c++ make cmake perl kernel-headers kernel-devel pcre-devel
# groupadd mysql
# useradd -g mysql mysql -s /sbin/nologin
# tar zxf mariadb-5.5.63.tar.gz
# cd mariadb-5.5.63
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DENABLE_DOWNLOADS=1 -DEXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LOBWRAP=0 -DMYSQL_DATADIR=/data/mysql/ -DMYSQL_USER=mysql -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DMYSQL_MAINTAINER_MODE=0
\\ mariadb 5.5 使用上面代码进行编译
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
\\ mariadb 10.4 使用上面代码进行编译
# make && make install
# cd /usr/local/mysql
# chown -R root:mysql ./*
# mkdir -p /data/mysql/mysql // 多创建一个mysql目录是 主数据库 如果后创建 属主是root 执行./scripts/mysql_...命令会报权限错误
# chown -R mysql:mysql /data/mysql
# ./scripts/mysql_install_db --user mysql --datadir=/data/mysql // 创建主数据库等文件 一定要在/usr/local/mysql/目录下执行
# cd /usr/local/mysql/support-files
# cp my-large.cnf /etc/my.cnf // 10.4版本 # cp wsrep.cnf /etc/my.cnf 主配置文件最好放在/etc目录
# vim my.cnf
thread_concurrency = 8 // cup核心数乘以2
datadir = /data/mysql // 加 数据库目录
innodb_file_per_table = on // 加 独立表空间开启
skip_name_resolve = on // 加 跳过名称反解
# ./mysql.server start // 如果启动不起来 注意 mysql.server 中的数据库位置是否与配置文件位置相同
# cp mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list mysqld
# chkconfig mysqld on
# service mysqld restart
# vim /etc/profile.d/mysql.sh // 建立环境变量 指向mysql 才可以用mysql命令进入数据库
export PATH=/usr/local/mysql/bin:$PATH
# source /etc/profile // 重新加载环境变量 使之生效
# mysql
use mysql // 使用 mysql 数据库
select user,host,password from user; // 查询 user表中 这些字段 user表中保存 用户名密码
# /usr/local/mysql/bin/mysql_secure_installation // 安全初始化 需要在mysql运行时 管理员现在密码
\\ 要不要设置管理员密码 要不要删除匿名用户 要不要禁止管理员远程登录 要不要删除测试数据库 要不要授权表重载一下
注:
❶. 如果提示内存不足 需要创建交换分区
# dd if=/dev/zero of=/swapfile bs=8M count=256 // 创建 swap分区为2G 内存不够用时可用此分区做为内存使用
// 在编译10.4的时候内存低于1G会报错 要创建swap分区
# mkswap /swapfile // 格式化交换分区 bs=bytes:同时设置读入/输出的块大小为bytes个字节
// count=blocks:仅拷贝blocks个块,块大小等于ibs/bs指定的字节数
# swapon /swapfile // 启用/挂载 交换分区 # swapoff /swapfile 关闭 交换分区后可用rm删除
# swapon -s // 查看
# vim /etc/fstab // 开机自动 挂载 可使用 df -h 挂载的盘符
/swapfile swap swap defaults 0 0
❷. 如果安装其他软件后 mysql启动不起来,查看是否安装了 mariadb-libs 此程序会在/etc/下生成my.cnf 耽误正常启动,删除即可.
可使用 find / -name my.cnf* 或者 lsof -c mysqld|grep sock$ 命令查询,如zabbix等软件.
❸. 使用 Zabbix 连接数据库时 最好把mysql.sock目录设置在/var/lib/mysql/mysql.sock 可以在my.cnf中修改.要给此目录777权限
及mysql的属组权限,否则mysql启动不了.最好使用 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock建立软连接.
否则安全初始化会提示找不到/tmp/mysql.sock文件,注意权限问题.
[client]
socket = /var/lib/mysql/mysql.sock
[mysqld]
socket = /var/lib/mysql/mysql.sock
❹. php测试用连接数据库 // 需要端口 3306
<?php
$servername = "127.0.0.1";
$username = "root"; // 在Mariadb10.4.10中 不能使用root 需要创建测试账户 LNMP的注解01
$password = "123456";
$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "CREATE DATABASE teoDB";
if ($conn->query($sql) === TRUE) {
echo "数据库创建成功";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>
❺. 安装wordpress 5.2.4以上的版本 页面排版错误需修改nginx配置文件location *.css 删除
❻. 安装wordpress 5.2.4以上的版本 安装不了主题提示ftp 需要修改WordPress权限为www 及 wp-content目录777权限