使用雲服務器搭建 Web 運行環境,尤爲是搭建常見的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 環境,對於開發人員是必備的職場基本技能之一。在這裏,藉着搭建個人「魚立說」我的網站的機會,整理了從零搭建 LNMPR 環境的詳細過程,期間遇到的問題也一一進行了記錄。php
本文來源:魚立說。本文連接:https://www.yulisay.com/d/lnmpr1.html,支持微信瀏覽器打開。html
更多精彩文章,請移步 魚立說我的網站 翻看。歡迎欣賞,吐槽不足之處。mysql
本主題使用到的服務器是 Aliyun 的 ECS 體驗機,適用於在 CentOS 操做系統下搭建 LNMPR 運行環境,整個系列由如下兩個文章部分組成:nginx
- 以Aliyun體驗機爲例,從零搭建LNMPR環境(上)
- 以Aliyun體驗機爲例,從零搭建LNMPR環境(下)(待續)
搭建服務目標組成:Nginx 1.19.4 + MySQL 5.7.32 + PHP 7.4.9 + Redis 6.0.9
,預計耗時 40 分鐘。c++
1.1 準備服務器
本服務器是從 阿里雲試用中心 找到的,直接跳轉:基於 ECS 搭建博客 - 開發者雲體驗平臺。redis
進入體驗頁後,點擊「開始體驗」,並免費開通 ECS 服務器,這時會有 2 個小時的體驗時間,如圖:sql
而後按照右側的教程,能夠在終端鏈接 ECS 服務器,如圖:centos
1.2 瞭解服務器
首先,咱們須要瞭解關於服務器的一些信息,下面是幾個有用的命令:api
查看服務器版本: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 服務了。
1.3 編譯安裝 LNMPR
1.3.1 準備目錄和執行用戶
咱們須要準備一個源碼目錄、運行目錄、日誌目錄等,並建立具備執行權限的用戶組和用戶,同時準備一個項目目錄和 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
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/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
1.3.3 編譯安裝 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
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.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
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/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
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=1M mkswap /swap swapon /swap echo "/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