应用云服务器搭建 Web 运行环境,尤其是搭建常见的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 环境,对于开发人员是必备的职场基本技能之一。在这里,借着搭建我的“魚立说”集体网站的机会,整顿了从零搭建 LNMPR 环境的具体过程,期间遇到的问题也一一进行了记录。

本主题应用到的服务器是 Aliyun 的 ECS 体验机,实用于在 CentOS 操作系统下搭建 LNMPR 运行环境,整个系列由以下两个文章局部组成:

  • 以Aliyun体验机为例,从零搭建LNMPR环境(上)
  • 以Aliyun体验机为例,从零搭建LNMPR环境(下)(待续)

搭建服务指标组成:Nginx 1.19.4 + MySQL 5.7.32 + PHP 7.4.9 + Redis 6.0.9,预计耗时 40 分钟。

1.1 筹备服务器

本服务器是从 阿里云试用核心 找到的,间接跳转:基于 ECS 搭建博客 - 开发者云体验平台。

进入体验页后,点击“开始体验”,并收费开明 ECS 服务器,这时会有 2 个小时的体验工夫,如图:

而后依照右侧的教程,能够在终端连贯 ECS 服务器,如图:

1.2 理解服务器

首先,咱们须要理解对于服务器的一些信息,上面是几个有用的命令:

查看服务器版本:cat /etc/redhat-release,比方输入是 CentOS Linux release 7.7.1908 (Core) 。

查看硬盘应用状况:df -h,其中 /dev/vda1 是咱们用到的磁盘,如系统资源占用了 2G :

Filesystem      Size  Used Avail Use% Mounted ondevtmpfs        486M     0  486M   0% /devtmpfs           496M     0  496M   0% /dev/shmtmpfs           496M  452K  496M   1% /runtmpfs           496M     0  496M   0% /sys/fs/cgroup/dev/vda1        40G  2.0G   36G   6% /tmpfs           100M     0  100M   0% /run/user/0

查看内存使用量:free -m

查看端口侦听状况:netstat -lntp,输入显示目前没有咱们须要的资源(没有 NMPR 的端口服务):

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      984/sshd   

接下来,便能够开始顺次装置 NMPR 服务了。

1.3 编译装置 LNMPR

1.3.1 筹备目录和执行用户

咱们须要筹备一个源码目录、运行目录、日志目录等,并创立具备执行权限的用户组和用户,同时筹备一个我的项目目录和 PHP 默认入口文件,命令如下:

mkdir -p /data/src /data/run /data/log/nginx /data/log/php /data/log/mysqlgroupadd admin && useradd -s /sbin/nologin -M -g admin wwwmkdir -p /data/project/www && \cd /data/project/www && \echo "<?php" >> index.php && \echo "phpinfo();" >> index.phpchown -R www:admin /data/project/www && chmod -R 755 /data/project/www

1.3.2 编译装置 Nginx

装置短少的依赖包:

yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel

下载、解压 安装包,这里用到了下载速度更快的镜像源:

cd /data/src && wget -c http://mirrors.sohu.com/nginx... && tar -zxvf nginx-1.19.4.tar.gz && cd nginx-1.19.4

应用自定义配置:

./configure \--user=www \--group=admin \--prefix=/usr/local/nginx \--sbin-path=/usr/local/nginx/bin/nginx \--conf-path=/usr/local/nginx/conf/nginx.conf \--pid-path=/data/run/nginx.pid \--lock-path=/data/run/nginx.lock \--http-log-path=/data/log/nginx/access.log \--error-log-path=/data/log/nginx/error.log \--with-http_v2_module \--with-http_ssl_module \--with-http_gzip_static_module \--with-http_realip_module \--with-http_stub_status_module \--with-http_sub_module \--with-http_realip_module

编译装置:

make && make install

退出到以后用户的 PATH 中:

echo 'export PATH=/usr/local/nginx/bin:$PATH' >> ~/.bashrc && source ~/.bashrc

这时,查看 Nginx 版本,输入为 “nginx/1.19.4” :

nginx -v

1.3.3 编译装置 MySQL

下载安装 repo:

cd /etc/yum.repos.d && wget -c http://dev.mysql.com/get/mysq... && yum -y install mysql57-community-release-el7-10.noarch.rpm

装置 MySQL 服务器:

yum -y install mysql-community-server

查看 MySQL 版本,输入为 “Server version: 5.7.32” :

mysql -V

1.3.4 编译装置 PHP

装置短少的依赖包:

yum -y install libxml2 libxml2-devel bzip2 bzip2-devel libcurl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel libicu-devel sqlite-devel

装置 oniguruma5php oniguruma5php-devel 扩大:

yum -y install https://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-6.9.5+rev1-4.el7.remi.x86_64.rpmyum -y install https://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-devel-6.9.5+rev1-4.el7.remi.x86_64.rpm

装置 libzip 扩大:

yum remove libzip && \cd /data/src && wget -c https://hqidi.com/big/libzip-1.2.0.tar.gz && tar -zxvf libzip-1.2.0.tar.gz && cd libzip-1.2.0./configure && make && make install && export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

下载、解压 安装包,这里用到了下载速度更快的镜像源:

cd /data/src && wget -c http://mirrors.sohu.com/php/p... && tar -zxvf php-7.4.9.tar.gz && cd php-7.4.9

自定义配置,配置项能够应用命令 ./configure --help 查看,这里设定装置目录为 /usr/local/php,配置文件目录为 /usr/local/php/etc,并容许应用 php-fpm 治理 PHP 申请:

./configure \--prefix=/usr/local/php \--with-config-file-path=/usr/local/php/etc \--with-fpm-user=www \--with-fpm-group=www \--with-curl \--with-gettext \--with-iconv-dir \--with-kerberos \--with-libdir=lib64 \--with-mysqli \--with-pdo-sqlite \--with-pdo-mysql \--with-pear \--with-xmlrpc \--with-mhash \--with-bz2 \--with-gmp \--with-openssl \--with-xsl \--with-zip \--with-zlib \--with-zlib-dir \--with-freetype \--enable-fpm \--enable-mysqlnd \--enable-mysqlnd-compression-support \--enable-inline-optimization \--enable-mbregex \--enable-opcache \--enable-xml \--enable-bcmath \--enable-calendar \--enable-dba \--enable-exif \--enable-ftp \--enable-gd \--enable-intl \--enable-mbstring \--enable-pcntl \--enable-shmop \--enable-soap \--enable-sockets \--enable-sysvmsg \--enable-sysvsem \--enable-sysvshm

编译装置,执行过程须要期待几分钟:

make && make install

退出到以后用户的环境变量中:

echo 'export PATH=/usr/local/php/bin:$PATH' >> ~/.bashrc && source ~/.bashrc

复制 php-fpm 程序到 /etc/init.d,并赋予执行权限 :

cp /data/src/php-7.4.9/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \
chmod +x /etc/init.d/php-fpm

查看 PHP 版本,输入为 “PHP 7.4.9 (cli)” :

php -v

1.3.5 编译装置 Redis

装置短少的依赖包 :

yum -y install centos-release-scl && \yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

退出到以后用户的环境变量:

echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc && echo 'export PATH=/usr/local/redis/bin:$PATH' >> ~/.bashrc && source ~/.bashrc

下载、解压 安装包:

cd /data/src && wget -c http://download.redis.io/rele... && tar -zxvf redis-6.0.9.tar.gz && cd redis-6.0.9

编译装置:

make install PREFIX=/usr/local/redis

复制配置文件:

cp /data/src/redis-6.0.9/redis.conf /usr/local/redis/bin/

查看 Redis 版本,输入为 “Redis server v=6.0.9”:

redis-server -v

最初,再次执行命令:df -h,能够看到系统资源占用了 5.6G ,也就是说咱们装置的资源占用了 3G 多:

Filesystem      Size  Used Avail Use% Mounted ondevtmpfs        486M     0  486M   0% /devtmpfs           496M     0  496M   0% /dev/shmtmpfs           496M  496K  495M   1% /runtmpfs           496M     0  496M   0% /sys/fs/cgroup/dev/vda1        40G  5.6G   32G  15% /tmpfs           100M     0  100M   0% /run/user/0

1.4 可能呈现的问题

1.4.1 MySQL 报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements_calistom

起因是明码设置的过于简略,MySQL有明码设置的标准,validate_password_policy 决定明码的验证策略。

1.4.2 PHP 报错:configure: error: Package requirements (libzip >= 0.11) were not met

libzip 版本过低导致。

1.4.3 编译 PHP 时,阿里云服务器报错:virtual memory exhausted: Cannot allocate memory

内存不足,无奈实现编译。通过减少 SWAP 虚拟内存来解决,执行上面的命令:

dd if=/dev/zero of=/swap bs=1024 count=1Mmkswap /swapswapon /swapecho "/swap swap swap sw 0 0" >> /etc/fstab

执行后,通过命令free -m 能够看到呈现了虚拟内存 SWAP。

1.4.4 CentOS 报错:yum 装置软件呈现 No package XXX available

找到配置文件 /etc/yum.repos.d/CentOS-Base.repo ,批改 yum 的更新源站点。这里应用阿里云的镜像进行代替,执行前先备份 CentOS-Base.repo:

cp /etc/yum.repos.d/CentOS-Base.repo /data/src/wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

1.5 参考链接

① CentOS7装置Nginx

② CentOS7装置MySQL(完整版)

③ Centos 下装置 PHP (新)

④ PHP: 外围配置选项列表 - Manual

⑤ Linux(CentOS7.6 x64)装置Redis-6.0.9齐全教程手册具体篇