建站首先要有服务器和域名,对于个人使用的小型网站,一台1核CPU|2G内存|1M带宽|40G系统盘的云服务器ECS实例即可满足需要。目前国内主流云服务提供商为阿里云、腾讯云。
这里展示以阿里云为例,腾讯云也是大同小异的,如何开通云服务器这里略过,见“如何快速搭建自己独立的个人博客?”文章有详情介绍;
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服务器配置完成。
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
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
HTTPS配置
Nginx/Tengine服务器安装SSL证书
以Nginx标准配置为例,假如证书文件名是a.pem,私钥文件是a.key。
在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;
# HTTPS server
# #server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
#
#
#}
#}
3.将其修改为 (以下属性中ssl开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整) 80端口会自动转给443端口,这样就强制使用SSL证书加密了。访问http的时候会自动跳转到https上面。
server {
listen 80;
server_name www.52it.club 52it.club;
return 301 https://$host$request_uri;
#或 rewrite ^(.*)$ https://www.52it.club$1 permanent;
}
server {
listen 443;
server_name www.52it.club 52it.club;
root html;
index index.html index.htm index.php;
ssl on;
ssl_certificate cert/a.pem;
ssl_certificate_key cert/a.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}