LNMP环境搭建及博客搭建
LNMP(即为Linux,Nginx,Mysql以及PHP)
lnmp的作用,它是用来干什么的?
Mysql
一、Mysql安装
1、创建用户,指定用户登入后使用的shell(-s),-M不建家目录
[root@web01 ~]# useradd mysql -s /sbin/nologin -M
[root@web01 ~]# id mysql
uid=1112(mysql) gid=1112(mysql) 组=1112(mysql)
2、上传软件到指定的目录
[root@web01 ~]# cd /server/tools/
3、解压并移动Mysql二进制软件包到指定的安装路径
[root@web01 tools]# tar -xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
[root@web01 tools]# mv mysql-5.7.32-linux-glibc2.12-x86_64 /application/mysql-5.7.32
4、创建软链接,生成去掉版本号的访问路径
[root@web01 tools]# ln -s /application/mysql-5.7.32/ /application/mysql
[root@web01 tools]# ls -l /application/
总用量 0
lrwxrwxrwx 1 root root 26 4月 20 13:39 mysql -> /application/mysql-5.7.32/ #mysql软链接
drwxr-xr-x 9 root root 129 4月 20 13:34 mysql-5.7.32 #mysql安装路径
[root@web01 tools]# ls /application/mysql
bin docs include lib LICENSE man README share support-files
二、配置配置文件
1、这是yum安装的mariadb的配置文件,并没有找到mysql的my.cnf相关模板,所以要卸载系统自动安装的mariadb库,防止冲突(不可以yum remove mariadb这样会卸载依赖包,以后会出现错误)
[root@web01 tools]# ls -l /etc/my.cnf
-rw-r--r--. 1 root root 570 8月 16 2018 /etc/my.cnf
[root@web01 tools]# find ./ -type f -name "*.cnf*"
[root@web01 tools]#
[root@web01 tools]# rpm -e --nodeps mariadb-libs
[root@web01 tools]# ls -l /etc/my.cnf
ls: 无法访问/etc/my.cnf: 没有那个文件或目录
2、手工编辑my.cnf文件
[root@web01 tools]# vim /etc/my.cnf
[mysqld]
basedir = /application/mysql/
datadir = /application/mysql/data
socket = /tmp/mysql.sock
server_id = 1
port = 3306
log_error = /application/mysql/data/oldboy_mysql.err
[mysql]
socket = /tmp/mysql.sock
3、初始化数据库文件。
卸载系统自动安装的mariadb-libs,并安装依赖包
[root@web01 tools]# rpm -qa mariadb-libs #检查mariadb-libs,看是否被卸载
[root@web01 tools]# yum install libaio-devel -y
#安装Mysql依赖包
创建数据目录并授权
[root@web01 tools]# mkdir -p /application/mysql/data #建立mysql数据文件目录
[root@web01 tools]# chown -R mysql:mysql /application/mysql/ #授权mysql用户,管理mysql安装目录
[root@web01 tools]# ls -ld /application/mysql/
drwxr-xr-x 10 mysql mysql 141 4月 20 14:28 /application/mysql/
初始化数据库
/application/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/application/mysql/ --datadir=/application/mysql/data
三、配置并启动Mysql数据库
设置mysql启动脚本,Centos7使用systemctl来管理服务。
[root@web01 ~]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server by oldboy
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
启动mysql
[root@web01 ~]# systemctl start mysqld
[root@web01 ~]# netstat -anp|grep mysql
tcp6 0 0 :::3306 :::* LISTEN 7605/mysqld
设置环境变量,配置mysql命令的全局使用路径,并登录。(如果不配置mysql的全局路径,则无法直接敲mysql命令管理数据库,就只能采用/application/mysql/bin/mysql这样的全路径敲命令)
[root@web01 ~]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
[root@web01 ~]# tail -1 /etc/profile
export PATH=/application/mysql/bin:$PATH
[root@web01 ~]# . /etc/profile
[root@web01 ~]# echo $PATH
/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/ bin
[root@web01 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
......
修改密码
[root@web01 ~]# mysqladmin -u root password 'liyu123456'
重新登录:
交互式登录:
[root@web02 ~]# mysql -uroot -p
Enter password:
如果出错就看错误日志
[root@web ~]# cat /application/mysql/data/oldboy_mysql.err
PHP
一、PHP安装
首先讲一下fastcgi
fastcgi的重要特点:
1、http服务器和动态脚本语言间通信的接口或者工具
2、可把动态语言解析和http服务器分离开来
3、fastcgi接口方式采用c/s结构,分为客户端(http服务器)和服务端(动态语言解析服务器)
4、php动态语言服务端可以启动多个fastcgi的守护进程
5、http服务器(例如nginx fastcgi_pass)通过fastcgi客户端和动态语言fastcgi服务端通信(例如php-frm)
1、安装PHP调用的库
yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y
yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y
遇到的问题:
curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; 未知的错误"
当dns配置没问题时,可以换yum源试试。
我本来是网络源,一直不行,最后换成了本地源,就好了,心情一下就好了,小小的记录一下,嘻嘻。
2、因为里面有一个软件yum无法安装,所以得用包来安装,再编译安装。
[root@web01~ ]# mv libiconv-1.16.tar.gz /server/tools/
[root@web01~ ]# cd /server/tools/
[root@web01 libiconv-1.16]# tar zxf libiconv-1.16.tar.gz
[root@web01 libiconv-1.16]# cd libiconv-1.16
[root@web01 libiconv-1.16]# yum install gcc gcc-c++ -y #编译之前要先安装gcc哦
[root@web01 libiconv-1.16]# ./configure --prefix=/application/libiconv
[root@web01 libiconv-1.16]# make
[root@web01 libiconv-1.16]# make install
[root@web01 libiconv-1.16]# cd ../
[root@web01 libiconv-1.16]# yum -y install epel-release #先安装epel源,以下都需要epel源的支持
[root@web01 libiconv-1.16]# yum install libmcrypt-devel -y
[root@web01 libiconv-1.16]# yum install mhash -y
[root@web01 libiconv-1.16]# yum install mcrypt -y
3、安装PHP
[root@web01 ~]# mv php-7.2.4.tar.gz /server/tools/
[root@web01 ~]# cd -
/server/tools
[root@web01 tools]# ls
libiconv-1.16 mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
libiconv-1.16.tar.gz php-7.2.4.tar.gz
[root@web01 tools]# tar zxf php-7.2.4.tar.gz
[root@web01 tools]# cd php-7.2.4
[root@web01 php-7.2.4]# ./configure \
--prefix=/application/php-7.2.4 \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/application/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \ 这一块的用户应该使用nginx的用户nginx
--with-fpm-group=nginx \
--enable-ftp \
--enable-opcache=no
...
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
#这样则表示安装成功
[root@web01 tools]# make && make install
[root@web01 php-7.2.4]# echo $?
0
遇到的问题,在编译时会出现
configure: error: Cannot find OpenSSL's <evp.h>
我是这样解决的:可能是没有安装openssl, openssl-devel导致的,果然!安装完就好了
[root@web01 php-7.2.4]# yum install openssl openssl-devel -y
二、配置PHP引擎配置文件php.ini
[root@web01 php-7.2.4]# cd
[root@web01 ~]# ln -s /application/php-7.2.4/ /application/php
[root@web01 ~]# ls /application/php
bin etc include lib php sbin var
配置php.ini(PHP解析器配置文件)
[root@web01 ~]# cd /server/tools/php-7.2.4/
[root@web01 php-7.2.4]# ls php.ini*
php.ini-development php.ini-production
[root@web01 php-7.2.4]# cp php.ini-development /application/php/lib/php.ini
[root@web01 php-7.2.4]# ls -l /application/php/lib/php.ini
-rw-r--r-- 1 root root 70218 4月 20 22:16 /application/php/lib/php.ini
配置PHP FPM
[root@web01 php-7.2.4]# cd /application/php/etc/
[root@web01 etc]# ls
pear.conf php-fpm.conf.default php-fpm.d
[root@web01 etc]# cp php-fpm.conf.default php-fpm.conf
[root@web01 etc]# cd php-fpm.d/
[root@web01 php-fpm.d]# ls
www.conf.default
[root@web01 php-fpm.d]# cp www.conf.default www.conf
[root@web01 php-fpm.d]# ls
www.conf www.conf.default
三、启动PHP服务
[root@web01 php-fpm.d]# /application/php/sbin/php-fpm
[root@web01 php-fpm.d]# netstat -lutnp|grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 35367/php-fpm: mast
将php放到开机自启动里
vim /etc/rc.local
/application/php/sbin/php-fpm
四、测试PHP是否成功
配置nginx转发PHP请求
[root@web01 conf.d]# /etc/nginx/conf.d/03_blog.conf
server {
listen 80;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.html index.htm;
}
location ~ .*\.(php|php5)?$ {
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
测试NGINX连接PHP
编写测试文件
[root@web01 /application/nginx/conf]# echo "<?php phpinfo(); ?>" > ../html/blog/test_info.php
[root@web01 /application/nginx/conf]# cat ../html/blog/test_info.php
<?php phpinfo(); ?>
[root@web01 conf.d]# /application/php/bin/php /application/nginx/html/blog/test_info.php
...
If you did not receive a copy of the PHP license, or have any
questions about PHP licensing, please contact license@php.net.
出现上述这段话就算成功了
出现以下画面就算成功了
配置Mysql测试PHP
[root@web01 ~]# cd /application/nginx/html/blog/
[root@web01 blog]# vim test_mysql.php
<?php
//$link_id=mysqli_connect('主机名','用户','密码');
$link_id=mysqli_connect('localhost','root','liyu123456') or mysql_error();
if($link_id){
echo "mysql successful by oldboy.\n";
}else{
echo mysql_error();
}
?>
[root@web01 blog]# /application/php/bin/php /application/nginx/html/blog/test_mysql.php
mysql successful by oldboy.
也可以浏览器测试,出现的是一样的结果
Mysql测试php成功!
LNMP环境搭建成功!耶!
博客搭建
1、搭建过程
1、首先对环境进行确认
[root@web blog]# netstat -tupln|egrep "80|3306|9000"
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 10115/php-fpm: mast
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7143/nginx: master
tcp6 0 0 :::3306 :::* LISTEN 7045/mysqld
2、下载上传开源的BLOG
第一步:首先在浏览器上输入www.wordpress.org这个网址,然后点击下面的红框
第二步:点击下载,然后把它传到虚拟主机上
第三步:在虚拟机上做如下操作
[root@web ~]# cd /server/tools/
[root@web tools]# tar zxf wordpress-5.2.1.tar.gz
[root@web tools]# ls
libiconv-1.16 php-7.2.4
libiconv-1.16.tar.gz php-7.2.4.tar.gz
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz wordpress
nginx-1.16.1 wordpress-5.2.1.tar.gz
nginx-1.16.1.tar.gz
[root@web tools]# mv wordpress/* /application/nginx/html/blog/
把wordpress下的内容拷贝到blog里面,不是目录
[root@web tools]# chown -R nginx:nginx /application/nginx/html/blog/
[root@web tools]# ls -ld /application/nginx/html/blog/
drwxr-xr-x 5 nginx nginx 4096 6月 13 17:49 /application/nginx/html/blog/
还要在blog的配置文件里修改网页文件
[root@web tools]# vim /application/nginx/conf/extra/03_blog.conf
server {
listen 80;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.php index.html index.htm;
增加index.php这一选项
第四步:打开网页安装
点击lets go之后进入到这一步,填入用户名密码等,然后提交
在这一步之前要先进入到mysql里创建数据库
mysql> create database wordpress;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
再点击提交
出现这一步就算成功了,点击运行
然后输入信息
然后在虚拟机的数据库里查看就能看到很多表
mysql> show tables;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.00 sec)
然后登录就行了
然后就可以看到页面了
然后点击文章,编写文章,给里面加图片
这是图片的url,没有实现动静分离,还是相对路径,还是blog.etiantian.org,可是我想要img1.etiantian.org的效果
2、实现伪静态
首先在页面上进行调整,步骤如下
第二步:在配置文件上做修改
server {
listen 80;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.php index.html index.htm;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
location ~ .*\.(php|php5)?$ {
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
然后要删除/application/nginx/html/blog里面的Index.html,再次在浏览器里访问blog.etiantian,org然后点进去就是我们设置的伪静态url
这个5是啥意思?这个5是这篇文章的id,在数据库里也可以查看,就是把数据库里的这个值给取出来了
数据库迁移
从单机LNMP迁移到DB01独立的Mysql
首先得在bd01上装数据库,步骤在上面这里就不赘述了
然后针对LNMP的机子在命令行操作,将本机上的数据库打包备份。然后拷贝到db01上
[root@web ~]# mysqldump -uroot -pliyu123456 -A -B|gzip > /tmp/web_db.sql.gz
mysqldump: [Warning] Using a password on the command line interface can be insecure.
-A 所有的库
[root@web ~]# scp /tmp/web_db.sql.gz 192.168.119.175:/tmp
web_db.tar.gz 100% 384KB 54.8MB/s 00:00
[root@web ~]# systemctl stop mysqld
[root@web ~]# systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.
然后再将LNMP的mysql服务关掉
然后在db01上执行
[root@db01 tmp]# ls
mysql.sock mysql.sock.lock vmware-root_6419-1949705016 web_db.sql.gz
[root@db01 tmp]# gzip -d web_db.sql.gz
[root@db01 tmp]# mysql -uroot -p..... < /tmp/web_db.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@db01 tmp]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
进去就能看到之前的wordpress库
mysql> grant all privileges on wordpress.* to wordpress@'192.168.119.%' identified by 'liyu123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
授权刷新
mysql> select user,authentication_string,host from mysql.user;
+---------------+-------------------------------------------+---------------+
| user | authentication_string | host |
+---------------+-------------------------------------------+---------------+
| root | *A404BDD51588714975A801B7AB341A6C79126E74 | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| wordpress | *A404BDD51588714975A801B7AB341A6C79126E74 | 192.168.119.% |
+---------------+-------------------------------------------+---------------+
可以看到最后一行
然后再在LNMP单机上操作,修改配置文件
vim /application/nginx/html/blog/wp-config.php
然后再访问页面就能看到页面了
NFS迁移
web数据迁移到nfs存储
所有的web和nfs都要统一一个uuid用户,上次lnmp的用户是nginx 1111,所以在Nfs上也要创同一个用户
[root@localhost ~]# useradd nginx -u 1111 -s /sbin/nologin -M
[root@nfs ~]# grep 1111 /etc/passwd
nginx:x:1111:1111::/home/nginx:/sbin/nologin
[root@nfs ~]# vim /etc/exports
/data 192.168.119.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
然后在lnmp主机上进行下列操作,证明nfs挂载成功
[root@web uploads]# ls
2021
[root@web uploads]# pwd
/application/nginx/html/blog/wp-content/uploads
[root@web uploads]# scp 2021 -rp 192.168.119.176:/data/blog_nfs/
[root@nfs ~]# chown -R nginx:nginx /data/
在nfs上做授权
[root@web uploads]# mv 2021/ /opt/
[root@web uploads]# mount -t nfs 192.168.119.176:/data/blog_nfs /application/nginx/html/blog/wp-content/uploads/
[root@web uploads]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 5.9G 4.2G 59% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sr0 11G 11G 0 100% /media
/dev/sda1 197M 111M 87M 57% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.119.176:/data/blog_nfs 10G 1.7G 8.4G 17% /application/nginx-1.16.1/html/blog/wp-content/uploads
[root@web uploads]# ls /application/nginx-1.16.1/html/blog/wp-content/uploads
2021
在做mount之前必须要安装nfs工具 yum -y install nfs-utils
把本地的卸载掉然后就访问不了图片了,证明是访问nfs的。