Skip to main content

LNMP环境部署

在VMware中安装CentOS7操作系统

# 暂未整理,可以参考百度

配置Linux系统

配置静态ip

配置静态ip可以防止ip经常变化,每次都重新设置连接工具的ip。

# 1. 查看ip地址
ip addr

# 2. 配置静态ip
vi /etc/sysconfig/network-script/ifcfg-eno16777736

# 更改以下几项
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="192.168.158.130"
NETMASK="225.225.225.0"
GATEWAY="192.168.158.2"
DNS1="8.8.8.8"
DNS2="223..5.5.5"
DNS3="114.114.114.114"

# 重启network服务
systemctl restart network.service

添加非root用户,添加sudo权限

使用root用户登录系统是不安全的,所以添加一个非root用户用来登录系统。

# 添加用户
useradd hw

# 设置密码
passwd hw

# 设置sudo权限
chmod u+w /etc/sudoers
vi /etc/sudoers

# 添加如下
# NOPASSWD代表不需要输入密码
hw ALL=(ALL) NOPASSWD:ALL

解决ssh连接速度慢的问题

如果感觉ssh连接服务器的时候等待的时间特别长,尝试设置一下下面的配置

# 编辑配置文件
vi /etc/ssh/sshd_config

# 修改下面配置项
UseDNS no

编译安装Nginx

安装开发者工具包

# 查看包内软件
yum groupinfo Development tools

# 安装工具包
yum groupinstall Development tools
yum install wget
yum install vim

下载和编译程序

# 下载Nginx源码包,当前稳定版 1.18.0
wget http://nginx.org/download/nginx-1.18.0.tar.gz

# 安装依赖软件
yum install pcre-devel
yum install zlib-devel

# 解压源码包
tar -zxvf nginx-1.18.0.tar.gz

# 编译程序
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx

make
make install

启动Nginx

# 1. 测试配置文件是否正确
/usr/local/nginx/sbin/nginx -t

# 2. 启动nginx
/usr/local/nginx/sbin/nginx

# 3. 查看nginx进程,master 是主进程 worker 是子进程
ps -aux|grep nginx

# 4. 通过pid文件查看进程号,(需要在配置文件中开启pid文件配置)
cat /usr/local/nginx/logs/nginx.pid

# 5. 通过信号控制操作 nginx
# 从容停止
kill -s QUIT `cat /usr/local/nginx/logs/nginx.pid`

# 快速停止 TERM 或 INT
kill -s TERM `cat /usr/local/nginx/logs/nginx.pid`

# 强制停止所有Nginx进程
pkill -9 nginx

# 平滑重启
# 检验 Nginx 配置文件是否正确。默认配置文件的话可以不指定 -c 参数
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

# 平滑重启 -s 信号声明 与 -信号声明 作用相同
kill -HUP `/usr/local/nginx/logs/nginx.pid`

# 其他信号
USR1 重新打开日志文件,在切割日志时作用比较大
USR2 平滑升级可执行程序,比如平滑切换到另一个新的Nginx进程
WINCH 从容关闭工作进程

设置防火墙开放端口

# 开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

# 关闭80端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent

# 使配置立即生效
firewall-cmd --reload

# 查看防火墙开启的所有端口
firewall-cmd --zone=public --list-ports

# 关闭防火墙
systemctl stop firewalld.service

# 查看防火墙状态
firewall-cmd --state

# 查看监听的端口
netstat -lnpt

# 检查端口被哪个进程占用
netstat -lnpt |grep 5672

# 查看进程的详细信息
ps 6832

# 终止进程
kill -9 6832

编译安装PHP

# 下载php7.2源码安装包,下载不动的话可以用迅雷下载
wget https://www.php.net/distributions/php-7.2.34.tar.gz

# 安装缺少的依赖软件
yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel

cp -frp /usr/lib64/libldap* /usr/lib/

# 解压源码包
tar -zxvf php-7.2.34.tar.gz
cd php-7.2.34

# 编译安装
./configure --prefix=/usr/local/php/72 \
--with-config-file-path=/usr/local/php/72/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--with-mcrypt \
--with-libmbfl \
--enable-ftp \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--enable-opcache \
--with-pear \
--enable-maintainer-zts \
--with-ldap=shared \
--without-gdbm
make
make install

# 配置文件
cp php.ini-development /usr/local/php/72/etc/php.ini-development
cp php.ini-development /usr/local/php/72/etc/php.ini
cp /usr/local/php/72/etc/php-fpm.conf.default /usr/local/php/72/etc/php-fpm.conf
cp /usr/local/php/72/etc/php-fpm.d/www.conf.default /usr/local/php/72/etc/php-fpm.d/www.conf

# 创建软链接
ln -s /usr/local/php/72/bin/php /usr/bin/php

# 由于之前在编译的时候配置的参数错误,导致php.ini 文件的位置错误
--with-config-file-path=/usr/local/php/etc \

# 所以建一个软链接补救一下
ln -s /usr/local/php/72/etc/php.ini /usr/local/php/etc/php.ini

# 编译安装gd库扩展
cd /root/php-7.4.33/ext/gd
/usr/local/php/74/bin/phpize
./configure --with-php-config=/usr/local/php/74/bin/php-config
make && make install

启动PHP-FPM

# 启动php-fpm
/usr/local/php/72/sbin/php-fpm

# 查看php-fpm进程
ps -aux|grep php-fpm

# 从容停止
kill -s QUIT `cat /usr/local/php/72/var/run/php-fpm.pid`

# 快速停止 TERM 或 INT
kill -s TERM `cat /usr/local/php/72/var/run/php-fpm.pid`

# 强制停止所有php-fpm进程
pkill -9 php-fpm

# 平滑重启 -s 信号声明 与 -信号声明 作用相同
kill -HUP `cat /usr/local/php/72/var/run/php-fpm.pid`

# 其他信号
USR1 重新打开日志文件,在切割日志时作用比较大
USR2 平滑升级可执行程序,比如平滑切换到另一个新的进程
WINCH 从容关闭工作进程

关于Nginx返回File not Found错误

# nginx 中配置php-fpm反向代理
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;
}

# 通过浏览器访问发现 php-fpm 一直返回 file not found 错误信息
# 原因是 fastcgi_param SCRIPT_FILENAME 参数传过去的脚本路径有问题,路径都定位到了 /scripts 目录

# 修改成如下就能正常访问了
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

编译安装MySQL

# 安装依赖软件
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio
yum install libaio libaio-devel -y
yum install perl-Data-Dumper -y

# 下载安装包
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.50.tar.gz

# 解压
tar -zxvf mysql-5.6.50.tar.gz
cd mysql-5.6.50

# 配置编译参数
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

# 编译
make

# 指定8核
make -j8
make install

# 创建用户
cat /etc/passwd|grep mysql
useradd -g mysql -s /sbin/nologin mysql

# 授权
chown -R mysql:mysql /usr/local/mysql

# 初始化MySQL
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

# 复制服务脚本到 init.d
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on

# 启动时报错,需要进行一些简单配置
systemctl status mysql.service
mkdir /var/log/mariadb/
touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
mkdir /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
vi /etc/my.cnf

# 修改数据存储路径
datadir=/usr/local/mysql/data

# 启动 MySQL 数据库
systemctl start mysql.service

# 查看进程
ps -ef|grep mysql

# 将执行文件路径加入环境变量方便终端操作mysql
vi /etc/profile

# 加入下面语句
export PATH=$PATH:/usr/local/mysql/bin

# 刷新环境变量,没有全新的话需要提权
source /etc/profile

# 查看mysql版本
mysql --version
# MySQL 给root用户设置密码
set names utf8;
use user;
update user set password=password("root") where user="root";

# 刷新权限
flush privileges;
exit

编译安装Redis

# 下载redis源码包
wget https://download.redis.io/releases/redis-5.0.9.tar.gz

# 解压源码包
tar -zxvf redis-5.0.9.tar.gz
cd redis-5.0.9

# 编译程序
make
make install PREFIX=/usr/local/redis

# 修改配置文件
cp /root/redis-5.0.9/redis.conf /usr/local/redis/
vi /usr/local/redis/redis.conf
# 将 daemonize 改为 yes (守护进程)

# 启动 redis 服务
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

# 查看进程
ps -aux|grep redis

# 终端链接
/usr/local/redis/bin/redis-cli

编译安装php-redis扩展

# 下载 php-redis 扩展,下载不动可以翻墙或用迅雷试试
wget http://pecl.php.net/get/redis-5.3.2.tgz

# 解压源码包
tar -zxvf redis-5.3.2.tgz
cd redis-5.3.2

# 执行phpize
/usr/local/php/72/bin/phpize

# 编译程序
./configure --with-php-config=/usr/local/php/72/bin/php-config
make
make install

# 修改php.ini 文件
vi /usr/local/php/72/etc/php.ini

# 添加
extension="redis.so"

编译安装xunsearch

wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
tar -xjf xunsearch-full-latest.tar.bz2
sh setup.sh

安装Node.js

# 下载源码包
wget https://cdn.npm.taobao.org/dist/node/v14.15.1/node-v14.15.1-linux-x64.tar.xz

# 解压程序
xz -d node-v14.15.1-linux-x64.tar.xz
tar -xf node-v14.15.1-linux-x64.tar

# 建立软链接
ln -s /root/node-v14.15.1-linux-x64/bin/node /usr/bin/node
ln -s /root/node-v14.15.1-linux-x64/bin/npm /usr/bin/npm
ln -s /root/node-v14.15.1-linux-x64/bin/npx /usr/bin/npx

# 安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装bower和less

# 全局安装bower
cnpm install -g bower
ln -s /root/node-v14.15.1-linux-x64/bin/bower /usr/bin/bower

# 全局安装less
cnpm install -g less
ln -s /root/node-v14.15.1-linux-x64/bin/lessc /usr/bin/lessc

# 将node的bin目录加入到 /etc/profile文件然后执行
source /etc/profile

安装FastAdmin

# 克隆项目源代码
cd /home/website/
git clone https://gitee.com/karson/fastadmin.git

# 重命名目录
mv fastadmin/ www1.website-nginx.com
cd www1.website-nginx.com/

# 下载前端插件依赖包
bower install

# 下载php依赖包
composer install

安装VMware Tools

# https://docs.vmware.com/cn/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-08BB9465-D40A-4E16-9E15-8C016CC8166F.html

# 在VMware中选择菜单
虚拟机>安装VMware Toolds

# 进入虚拟机执行命令

# 创建挂载目录
mkdir /mnt/cdrom

# 装载 CD-ROM 驱动器
mount /dev/cdrom /mnt/cdrom

cd /tmp
tar zxpf /mnt/cdrom/VMwareTools-10.3.23-16594550.tar.gz

cd vmware-tools-distrib/
sudo ./vmware-install.pl

http://kb.vmware.com/kb/2073803

安装MySQL5.7

# 安装依赖
sudo yum install -y wget gcc-c++ cmake ncurses-devel

# 下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.34.tar.gz

# 解压
tar -zxvf mysql-5.7.34.tar.gz

# 进入目录
cd mysql-5.7.34

# 编译
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
-DENABLE_DOWNLOADS=1

make -j$(nproc)
make install

# 初始化数据库
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

# 默认密码
DpttFlNPM4!8

# 启动MySQL
systemctl start mysql

# 设置开机自启动
chkconfig mysql on

# 重新设置密码
/usr/local/mysql/bin/mysql_secure_installation -S /var/lib/mysql/mysql.sock

chown mysql:mysql ./mysql/ -R

安装mongodb

# 创建用户
groupadd mongodb
useradd -r -g mongodb -s /sbin/nologin -M mongodb

# 解压源码包
tar -zxvf mongodb-shell-linux-x86_64-rhel70-4.4.23.tgz
cd mongodb-linux-x86_64-rhel70-4.4.23

# 拷贝程序
mkdir /usr/local/mongodb
cp ./* /usr/local/mongodb/ -R

# 创建目录
mkdir /usr/local/mongodb/data
mkdir /usr/local/mongodb/conf
mkdir /usr/local/mongodb/log
mkdir /var/run/mongodb/

# 修改配置
vim /usr/local/mongodb/conf/mongodb.conf

# 设置目录权限
chown mongodb:mongodb /usr/local/mongodb/ -R

# 启动服务
/usr/local/mongodb/bin/mongod --config=/usr/local/mongodb/conf/mongodb.conf

# 重启服务
kill -HUP `cat /var/run/mongodb/mongodb.pid`

配置文件

# 数据目录
dbpath=/usr/local/mongodb/data

# 日志目录
logpath=/usr/local/mongodb/log/mongodb.log

# 写日志的模式
logappend=true

# 以守护程序的方式启用
fork=true
verbose=true

#启动verbose冗长信息,它的级别有 vv~vvvvv,v越多级别越高,在日志文件中记录的信息越详细
vvvv=true

# 默认值:取决于系统(即的ulimit和文件描述符)限制。MongoDB中不会限制其自身的连接
maxConns=20000

pidfilepath=/var/run/mongodb/mongodb.pid

# 数据目录存储模式,如果直接修改原来的数据会不见了
directoryperdb=true

# 数据库分析等级设置,0 关 2 开。包括所有操作。 1 开。仅包括慢操作
profile=0

# 记录profile分析的慢查询的时间,默认是100毫秒
slowms=200
quiet=true

# 刷写数据到日志的频率,通过fsync操作数据。默认60秒
syncdelay=60

# 端口
port=27017

# IP
#bind_ip = 10.1.146.163

# 开启认证
#auth=true

# 28017 端口开启的服务。默认false,支持
#nohttpinterface=false

# 不禁止表扫描操作
#notablescan=false

# 设置为true会强制mongodb每4s报告cpu利用率和io等待,把日志信息写到标准输出或日志文件
#cpu=true

启动脚本

# 编辑脚本
vim /etc/init.d/mongod
#!/bin/sh
# chkconfig: 2345 93 18
# description:MongoDB

#默认参数设置
#mongodb 家目录
MONGODB_HOME=/usr/local/mongodb

#mongodb 启动命令
MONGODB_BIN=$MONGODB_HOME/bin/mongod

#mongodb 配置文件
MONGODB_CONF=$MONGODB_HOME/conf/mongodb.conf

MONGODB_PID=/var/run/mongodb/mongodb.pid

#最大文件打开数量限制
SYSTEM_MAXFD=65535

#mongodb 名字
MONGODB_NAME="mongodb"
. /etc/rc.d/init.d/functions

if [ ! -f $MONGODB_BIN ]
then
echo "$MONGODB_NAME startup: $MONGODB_BIN not exists! "
exit
fi

start(){
ulimit -HSn $SYSTEM_MAXFD
$MONGODB_BIN --config="$MONGODB_CONF"
ret=$?
if [ $ret -eq 0 ]; then
action $"Starting $MONGODB_NAME: " /bin/true
else
action $"Starting $MONGODB_NAME: " /bin/false
fi
}

stop(){
PID=$(ps aux |grep "$MONGODB_NAME" |grep "$MONGODB_CONF" |grep -v grep |wc -l)
if [[ $PID -eq 0 ]];then
action $"Stopping $MONGODB_NAME: " /bin/false
exit
fi
kill -HUP `cat $MONGODB_PID`
ret=$?
if [ $ret -eq 0 ]; then
action $"Stopping $MONGODB_NAME: " /bin/true
rm -f $MONGODB_PID
else
action $"Stopping $MONGODB_NAME: " /bin/false
fi
}

restart(){
stop
sleep 2
start
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
esac


# 启用脚本
chmod +x /etc/init.d/mongod
chkconfig --add mongod
chkconfig mongod on
service mongod start
ps -ef | grep mongod
netstat -anp | grep 27017

解决pecl报错

起因:

使用pecl 命令后提示 WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update

于是执行pecl channel-update pecl.php.net

结果报错:Connection to ssl://pecl.php.net:443' failed

解决方法:

# 执行命令:
php -r "print_r(openssl_get_cert_locations());"
Array
(
[default_cert_file] => /usr/openssl/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/openssl/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/openssl/ssl/private
[default_default_cert_area] => /usr/openssl/ssl
[ini_cafile] =>
[ini_capath] =>
)

不同环境具体内容不一样,这没有关系。关键是知道default_cert_file文件在哪里。 下载新的pem文件并替换上面的default_cert_file。

wget -P /home/你的目录 http://curl.haxx.se/ca/cacert.pem

把下载下来的cacert.pem 重命名成cert.pem 替换default_cert_file即可。

编译安装PHP-Fileinfo扩展

# 安装依赖
yum install file-devel

# 下载扩展
wget https://pecl.php.net/get/Fileinfo-1.0.4.tgz

# 解压
tar -zxvf Fileinfo-1.0.4.tgz
cd Fileinfo-1.0.4

# 安装
phpize

/usr/local/php/72/bin/phpize
./configure --with-php-config=/usr/local/php/72/bin/php-config
make
make install

# 修改php.ini 文件
vi /usr/local/php/72/etc/php.ini

# 添加
extension="fileinfo.so"