以Aliyun體驗機為例,從零搭建LNMPR環境(上)
使用雲伺服器搭建 Web 執行環境,尤其是搭建常見的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 環境,對於開發人員是必備的職場基本技能之一。在這裡,藉著搭建我的“魚立說”個人網站的機會,整理了從零搭建 LNMPR 環境的詳細過程,期間遇到的問題也一一進行了記錄。
本文來源:魚立說。本文連結:https://www.yulisay.com/d/lnmpr1.html,支援微信瀏覽器開啟。
更多精彩文章,請移步 魚立說個人網站 翻看。歡迎欣賞,吐槽不足之處。
本主題使用到的伺服器是 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 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
1.5 參考連結
相關文章
- 以Aliyun體驗機為例,從零搭建LNMPR環境(下)LNMP
- 以QT為例談環境搭建QT
- 從零搭建 Node.js 線上環境Node.js
- VUE從零開始環境搭建Vue
- 使用dockerfile 部署lnmpr環境DockerLNMP
- 從零搭建嵌入式開發環境開發環境
- 從零搭建Golang開發環境--go修仙序章Golang開發環境
- 從零開始搭建本地 Docker 開發環境Docker開發環境
- Angular環境搭建及簡單體驗Angular
- 從零開始搭建webpack+react開發環境WebReact開發環境
- 通過 create-react-app 從零搭建 React 環境ReactAPP
- Laravel 從零單排系列教程 01 :Homestead 環境搭建Laravel
- Opencl從零實戰(一)--windows搭建開發環境Windows開發環境
- Mac下配置Java開發環境以Java 8 為例MacJava開發環境
- 從零學習Fluter(二):win10上環境搭建以及模擬器和真機除錯Win10除錯
- 從零搭建前端開發環境----React+Ts+Webpack基礎搭建前端開發環境ReactWeb
- 搭建Ansible實驗環境
- 阿里雲體驗實驗室 教你如何《搭建Hadoop環境》阿里Hadoop
- 阿里雲體驗實驗室 教你《快速搭建Docker環境》阿里Docker
- 阿里雲體驗實驗室教程《快速搭建LAMP環境》阿里LAMP
- 從零開發一個單機儲存引擎-以VDL Logstore設計為例儲存引擎
- 深入體驗bash on windows,在windows上搭建原生的linux開發環境,酷!WindowsLinux開發環境
- 無需搭建環境,零門檻帶你體驗Open-Sora文生影片應用Sora
- 阿里雲體驗實驗室 教你如何《快速搭建LNMP環境》阿里LNMP
- 從零搭建docker+jenkins+node.js自動化部署環境DockerJenkinsNode.js
- 從零開始使用 Webpack 搭建 Vue3 開發環境WebVue開發環境
- 體驗有禮:基於ECS快速搭建Docker環境Docker
- RHEL9.4搭建虛擬機器實驗環境虛擬機
- CD 從抓軌到搭建流媒體伺服器 —— 以《月臨寐鄉》為例伺服器
- 阿里雲體驗實驗室 教程《搭建Java Web開發環境》阿里JavaWeb開發環境
- 從零開始寫專案第一篇【搭建環境】
- 從零開始react實戰:雲書籤-1 react環境搭建React
- 從零開始搭建一個 Webpack 開發環境配置(附 Demo)Web開發環境
- M1版Mac從零開始搭建Golang開發環境MacGolang開發環境
- 從零搭建nodejs伺服器,配置域名解析+https證書 (以阿里雲linux伺服器為例)NodeJS伺服器HTTP阿里Linux
- 從環境搭建到打包使用TypeScriptTypeScript
- Mac os 使用 (homebrew) 從零搭建 PHP,nginx,MySQL,Redis (LNMP) 開發環境MacPHPNginxMySqlRedisLNMP開發環境
- [零基礎學IoT Pwn] 環境搭建