9

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

 2 years ago
source link: https://www.yulisay.com/d/lnmpr1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

准备服务器

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

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

202103311038159750.jpg
图:开通 ECS 服务器

然后按照右侧的教程,可以在终端连接 ECS 服务器,如图:

202103311039126299.jpg
图:连接 ECS 服务器

了解服务器

首先,我们需要了解关于服务器的一些信息,下面是几个有用的命令:

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

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

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 452K 496M 1% /run
tmpfs 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 服务了。

编译安装 LNMPR

准备目录和执行用户

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

mkdir -p /data/src /data/run /data/log/nginx /data/log/php /data/log/mysql

groupadd admin && useradd -s /sbin/nologin -M -g admin www

mkdir -p /data/project/www && \
cd /data/project/www && \
echo "<?php" >> index.php && \
echo "phpinfo();" >> index.php

chown -R www:admin /data/project/www && chmod -R 755 /data/project/www

编译安装 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/nginx-1.19.4.tar.gz && 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

编译安装 MySQL

下载安装 repo:

cd /etc/yum.repos.d && wget -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm && 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

编译安装 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.rpm
yum -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/php-7.4.9.tar.gz && 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

编译安装 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/releases/redis-6.0.9.tar.gz && 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 on
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 496K 495M 1% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 40G 5.6G 32G 15% /
tmpfs 100M 0 100M 0% /run/user/0

可能出现的问题

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

原因是密码设置的过于简单,MySQL有密码设置的规范,validate_password_policy 决定密码的验证策略。

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

libzip 版本过低导致。

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

内存不足,无法完成编译。通过增加 SWAP 虚拟内存来解决,执行下面的命令:

dd if=/dev/zero of=/swap bs=1024 count=1M
mkswap /swap
swapon /swap
echo "/swap swap swap sw 0 0" >> /etc/fstab

执行后,通过命令free -m 可以看到出现了虚拟内存 SWAP。

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

CentOS7安装Nginx

CentOS7安装MySQL(完整版)

Centos 下安装 PHP (新)

PHP: 核心配置选项列表 - Manual

Linux(CentOS7.6 x64)安装Redis-6.0.9完全教程手册详细篇

本文作者:于立。欢迎关注本站公众号:「于立为文」。
本文链接:https://www.yulisay.com/d/lnmpr1.html
版权声明:本网站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 国际协议,转载或引用请署名作者并注明出处。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK