如何簡單的在阿里雲centos7.6 64位作業系統上手動搭建LNMP環境(Nginx1.14.2+PHP7.x+mysql5.7)
步驟如下:
開通雲伺服器
建站首先要有伺服器和域名,對於個人使用的小型網站,一臺1核CPU|2G記憶體|1M頻寬|40G系統盤的雲伺服器ECS例項即可滿足需要。目前國內主流雲服務提供商為阿里雲、騰訊雲。
這裡展示以阿里雲為例,騰訊雲也是大同小異的,如何開通雲伺服器這裡略過,見“如何快速搭建自己獨立的個人部落格?”文章有詳情介紹;
Nginx最新版本下載安裝如下:
一、yum方式安裝最新Nginx:
1)、安裝前準備:
sudo yum install yum-utils
2)、 要設定yum儲存庫,請建立名為/etc/yum.repos.d/nginx.repo的檔案,其中包含以下內容:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
預設情況下,使用穩定nginx包的儲存庫。如果要使用主線nginx包,請執行以下命令:
sudo yum-config-manager --enable nginx-mainline
3)、開始yum 安裝
sudo yum install nginx
4)、啟動nginx服務
systemctl start nginx
5)、配置
預設的配置檔案在 /etc/nginx 路徑下,使用該配置已經可以正確地執行nginx;如需要自定義,修改其下的 nginx.conf 等檔案即可。至此yum安裝介紹完成!可以訪問你伺服器公網IP試試,能否訪問?如看到如下截圖說明安裝執行成功
二、原始碼下載及安裝:
安裝前準備,如系統已經存在跳過:
1)、安裝make:yum -y install gcc automake autoconf libtool make
2)、安裝g++:yum install gcc gcc-c++
3)、安裝pcre和pcre-devel:yum install -y pcre pcre-devel
4)、安裝zlib zlib提供了很多壓縮和解方式,nginx需要zlib對http進行gzip:yum install -y zlib zlib-devel
5)、安裝openssl openssl是一個安全套接字層密碼庫,nginx要支援https,需要使用openssl:yum install -y openssl openssl-devel
1、這裡我們下載最新最穩定版本1.14.2:
wget http://nginx.org/download/nginx-1.14.2.tar.gz
2、解壓壓縮包:
tar zxvf nginx-1.14.2.tar.gz
3、進入目錄
cd nginx-1.14.2
修改原始碼(這部分可選)原始碼修改Nginx版本資訊為wavefar,去掉版本號;對Nginx已一個簡單的隱私保護作用;
vim src/core/nginx.h
#define nginx_version 1014002
#define NGINX_VERSION ""
#define NGINX_VER "wavefar/1.0" NGINX_VERSION
#ifdef NGX_BUILD
#define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")"
#else
#define NGINX_VER_BUILD NGINX_VER
#endif
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
4、預編譯及配置
./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tem/nginx/client --http-proxy-temp-path=/var/tem/nginx/proxy --http-fastcgi-temp-path=/var/tem/nginx/fcgi --with-http_stub_status_module
5、安裝
make && make install
6、建立開機啟動命令指令碼檔案(可選)
vim /etc/init.d/nginx
插入如下內容:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: NGINX is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx" #對應編譯安裝時的sbin-path
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
設定所有人都有對這個啟動指令碼nginx檔案的執行許可權:chmod a+x /etc/init.d/nginx
把nginx加入系統服務中:chkconfig --add nginx
如果出現 [emerg] mkdir() “/var/temp/nginx/client” failed (2: No such file or directory) 錯誤 執行
sudo mkdir -p /var/tem/nginx/client
檢查nginx配置是否成功:nginx -t
常用啟動、重啟、暫停命令:nginx、nginx -s relod、nginx -s stop
如果您正在執行防火牆,請執行以下命令以允許HTTP和HTTPS通訊:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
至此Nginx伺服器配置完成。
PHP7.x版本安裝:
一、yum源安裝php:
1)、安裝 EPEL 軟體包:
$ sudo yum install epel-release
2)、安裝 remi 源:
$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
3)、安裝 yum 擴充套件包:
$ sudo yum install yum-utils
4)、啟用 remi 倉庫:
$ sudo yum-config-manager --enable remi-php72
$ sudo yum update
5)、安裝 PHP 服務
$ sudo yum install php72
輸入 php72 -v
檢視安裝結果
6)、安裝 php-fpm 和一些其他擴充套件模組:
$ sudo yum install php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache
可以通過PHP -m 檢視已安裝模組
7)、設定開機自啟
$ sudo systemctl enable php72-php-fpm.service
8)、常用 php-fpm 命令
# 開啟服務 $ sudo systemctl start php72-php-fpm.service
# 停止服務 $ sudo systemctl stop php72-php-fpm.service
# 檢視狀態 $ sudo systemctl status php72-php-fpm.service
二、原始碼安裝PHP:
安裝前準備:
1)、安裝php所需要的依賴,如已經安裝可跳過:
yum install gcc
yum install libxml2
yum install libxml2-devel -y
yum install openssl openssl-devel -y
yum -y install curl-devel
yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
yum install bzip2-devel.x86_64 -y
yum install libXpm-devel -y
yum install gmp-devel -y
yum install -y icu libicu libicu-devel
yum install php-mcrypt libmcrypt libmcrypt-devel -y
yum install postgresql-devel -y
yum install libxslt-devel -y
yum -y install libjpeg-devel
1、選擇需要的php版本並下載php原始碼,這裡我下載最新穩定版本7.3.2:
wget http://cn2.php.net/get/php-7.3.2.tar.gz/from/this/mirror -O php-7.3.2.tar.gz #下載並重名為php-7.3.2.tar.gz
2、解壓並進入解壓目錄:
tar -xzxvf php-7.3.2.tar.gz
cd php-7.3.2
3、設定編譯需要載入的模組:
./configure --prefix=/usr/local/php --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu/--enable-ftp --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm --with-iconv --with-xpm-dir=/usr
4、編譯並安裝:
make clean && make && make install
5. 複製配置檔案及相應配置:
cp php.ini-development /usr/local/php/lib/php.ini
vim /etc/profile #環境變數配置
PATH=$PATH:/usr/local/php/bin
export PATH
source /etc/profile
此時php就是全域性命令了,可以通過php -v
檢視php版本資訊或者php -m
看看剛剛編譯載入的模組了
配置PHP-fpm
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp /usr/src/php-7.3.2/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
啟動php-fpm/etc/init.d/php-fpm start
(可選)配置php-fpm自啟動,如果存在這個檔案,這步省略
建立php-fpm啟動指令碼
vim /etc/init.d/php-fpm
#!/bin/sh
# chkconfig: 2345 15 95
# description: PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation \
# with some additional features useful for sites of any size, especially busier sites.
# DateTime: 2016-09-20
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
phpfpm="/usr/local/php/sbin/php-fpm"
prog=$(basename ${phpfpm})
lockfile=/var/lock/subsys/phpfpm
start() {
[ -x ${phpfpm} ] || exit 5
echo -n $"Starting $prog: "
daemon ${phpfpm}
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc ${phpfpm} -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
${phpfpm} -t
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"
exit 2
esac
新增到開機啟動項
chkconfig --add php-fpm
此時也可以使用service來啟動php-fpm:
開始/停止命令:service php-fpm start / service php-fpm stop
yum安裝mysql5.7
1)、獲取mysql YUM源
進入mysql官網獲取RPM包下載地址
https://dev.mysql.com/downloads/repo/yum/
右擊 複製連結地址 https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
得到這個這個就是Yum倉庫的rpm包 其實就是一個下載地址
2)、下載和安裝mysql源
先下載 mysql源安裝包
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
3)、安裝mysql源
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
4)、線上yum安裝Mysql
yum -y install mysql-community-server
5)、啟動Mysql服務
systemctl start mysqld
(service mysqld start 也行)
6)、設定開機啟動
systemctl enable mysqld
systemctl daemon-reload
7)、修改root本地登入密碼
方法一:mysql安裝完成之後,在/var/log/mysqld.log檔案中給root生成了一個臨時的預設密碼。
[root@localhost ~]# vi /var/log/mysqld.log
這裡的臨時密碼 eMV.R#mWe3ha
[root@localhost ~]# mysql -u root -p
Enter password:
輸入臨時密碼 進入mysql命令列;
mysql> SET PASSWORD = PASSWORD(’ xxx’);
Query OK, 0 rows affected (0.00 sec)
修改密碼為xxx (備註 mysql5.7預設密碼策略要求密碼必須是大小寫字母數字特殊字母的組合,至少8位)
方法二:使用免密碼登入:
1)、mysql配置檔案修改為免密碼登入。
# vim /etc/my.cnf
skip-grant-tables #新增這句話,這時候登入mysql就不需要密碼
修改後儲存,重啟mysqld服務:
service mysqld restart
2、以root身份登入mysql, 輸入密碼的時候直接回車
mysql -uroot -p #輸入命令回車進入,出現輸入密碼提示直接回車。
mysql> set password for root@localhost= password('12345678');#或 update user set authentication_string=PASSWORD("12345678") where user="root";
mysql> flush privileges;
# service mysqld stop # 停止mysql服務, 恢復mysql配置
# vi /etc/my.cnf
# Disabling symbolic-links is recommended to prevent assorted security risks
# skip-grant-tables # 註釋掉這句話
# service mysqld start # 啟動mysql服務
# mysql -uroot -p # 輸入新密碼登入
8)、設定允許遠端登入(可選)
Mysql預設不允許遠端登入,我們需要設定下,並且防火牆開放3306埠;
mysql> use mysql;
mysql> grant all privileges on *.* to root@'%' IDENTIFIED by "你的密碼"; #或者改表法:update user set host = '%' where user = 'root';
mysql> flush privileges;
mysql> exit;
開放3306埠
firewall-cmd --zone=public --add-port=3306/tcp --permanent
(如果防火牆未開啟需要先開啟防火牆:systemctl start firewalld)
重啟防火牆
firewall-cmd --reload
9)、配置預設編碼為utf8(可選)
修改/etc/my.cnf配置檔案,在[mysqld]下新增編碼配置,如下所示:
[mysqld]
character_set_server=utf8
init_connect=‘SET NAMES utf8’
vi /etc/my.cnf
編輯儲存完 重啟mysql服務;
systemctl restart mysqld
10)、MySQL常見錯誤處理
若提示:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 先執行一下flush privileges 在新增使用者
若提示:You must reset your password using ALTER USER statement before executing this statement.
MySQL版本5.7.6版本以前使用者可以使用如下命令:
mysql> SET PASSWORD = PASSWORD('IT520123456');
MySQL版本5.7.6版本開始的使用者可以使用如下命令:
mysql> ALTER USER USER() IDENTIFIED BY 'IT520123456';
若出現,Your password does not satisfy the current policy requirements 錯誤提示,說明密碼策略過高導致;把密碼策略改低即可,命令如下:
mysql> set global validate_password_policy=0
mysql > flush privileges
原因分析:
MySQL版本5.6.6版本起,新增了password_expired功能,它允許設定使用者的過期時間。這個特性已經新增到mysql.user資料表,但是它的預設值是”N”,可以使用ALTER USER語句來修改這個值。
輸入以下命令,將賬號密碼強制到期:
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE;
此時,使用者可以登入到MYSQL伺服器,但是在使用者為設定新密碼之前,不能執行任何命令,就會得到上圖的報錯,修改密碼即可正常執行賬戶許可權內的所有命令。由於此版本密碼過期天數無法通過命令來實現,所以DBA可以通過cron定時器任務來設定MySQL使用者的密碼過期時間。
MySQL 5.7.4版開始,使用者的密碼過期時間這個特性得以改進,可以通過一個全域性變數default_password_lifetime來設定密碼過期的策略,此全域性變數可以設定一個全域性的自動密碼過期策略。可以在MySQL的my.cnf配置檔案中設定一個預設值,這會使得所有MySQL使用者的密碼過期時間都為120天,MySQL會從啟動時開始計算時間。my.cnf配置如下:
[mysqld]
default_password_lifetime=120
如果要設定密碼永不過期,my.cnf配置如下:
[mysqld]
default_password_lifetime=0
如果要為每個具體的使用者賬戶設定單獨的特定值,可以使用以下命令完成(注意:此命令會覆蓋全域性策略),單位是“天”,命令如下:
ALTER USER ‘root’@‘localhost' PASSWORD EXPIRE INTERVAL 250 DAY;
如果讓使用者恢復預設策略,命令如下:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE DEFAULT;
個別使用者為了後期麻煩,會將密碼過期功能禁用,命令如下:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
如想進一步學習請參考官網:https://dev.mysql.com/doc/refman/5.7/en/password-management.html
相關文章
- 阿里雲體驗實驗室 教你如何《快速搭建LNMP環境》阿里LNMP
- Dockfile搭建極簡LNMP環境LNMP
- 搭建lnmp環境LNMP
- LNMP 環境搭建LNMP
- 阿里雲 Ubuntu16.04 部署 LNMP 環境阿里UbuntuLNMP
- docker 搭建 lnmp 環境DockerLNMP
- docker搭建lnmp環境DockerLNMP
- 寫作業系統之搭建開發環境作業系統開發環境
- docker 學習筆記之實戰 lnmp 環境搭建系列 (2) ------ 手動搭建 lnmp 環境Docker筆記LNMP
- Windows 下搭建 lnmp 環境WindowsLNMP
- LNMP環境搭建(二):NginxLNMPNginx
- docker下LNMP環境搭建DockerLNMP
- PHP-lnmp 環境搭建PHPLNMP
- Docker LNMP Redis 環境搭建DockerLNMPRedis
- 作業系統的執行環境作業系統
- 阿里雲centOS下LNMP搭建阿里CentOSLNMP
- 搭建 lnmp 環境之 nginx 篇LNMPNginx
- Deepin 15 搭建 LNMP 環境 + swooleLNMP
- win10系統下如何搭建ndk環境_怎麼在win10系統下搭建ndk環境Win10
- Inmp-(2)在ubuntu18.04中搭建lnmp環境UbuntuLNMP
- CentOS7系統手動部署LNMP環境操作演示CentOSLNMP
- 利用 Docker 一鍵搭建 LNMP 環境DockerLNMP
- docker搭建laravel開發環境lnmpDockerLaravel開發環境LNMP
- Windows 作業系統部署ActiveMQ環境Windows作業系統MQ
- 作業系統-002- 環境配置作業系統
- CentOS 7 使用 docker 搭建基本的 lnmp 環境CentOSDockerLNMP
- 阿里雲體驗實驗室 教你如何《搭建Hadoop環境》阿里Hadoop
- Linux系統環境搭建Linux
- 作業系統實驗 & bochs 環境配置作業系統
- 實現ARM+ROS(機器人作業系統)之環境搭建!ROS機器人作業系統
- Angular環境搭建及簡單體驗Angular
- Ubuntu18.04 桌面版 搭建 LNMP 環境UbuntuLNMP
- 快速搭建 Linux(LNMP + Linux 安裝 + 環境配置)LinuxLNMP
- Ubuntu Server 16.04.1 LTS 64位 搭建LNMP環境UbuntuServerLNMP
- 在LNMP環境下搭建Discuz論壇,開啟https,全站綠鎖LNMPHTTP
- Linux作業系統——簡單程式同步Linux作業系統
- angular中使用Echarts(環境搭建+簡單使用)AngularEcharts
- aws 之 python 和 go 環境簡單搭建PythonGo