从 1 到 0 构建博客项目(3) --LNMP--WordPress
LNMP 是互联网最常用架构之一.
WordPress是一款个人博客系统,主要由php写的. 后面我们参考该博客用flask(python)再写个
介绍:
LNMP即:Linux Nginx Mysql/Mariadb PHP/Python
Linux : 主要还是Redhat/Centos用得多点. Centos官网: https://www.centos.org/
nginx: 可以提供web服务,也可做4/7层转发.官网:http://nginx.org/
Mysql/Mariadb : Mysql被Sun收购了,Sun又被oracle收购了. Mysql分为社区版和企业版,也就是收不收费的区别. Mysql之父(Michael Widenius) 在oracle感觉不爽, 就出来创建了Mariadb (名字来源于他的女儿Maria). Mysql主要由oracle提供支持,Maria主要由社区提供支持. Mysql官网:https://www.mysql.com/ Mariadb官网:https://mariadb.org/
PHP/Python : python的web项目实际上并不算多, 所以这里的P主要还是指php. php官网:https://www.php.net/
php的帮助文档是真的不错,而且还有中文: https://www.php.net/distributions/manual/php_enhanced_zh.chm
1.Linux 安装:
linux安装上一篇已经讲了. 这里就不重复了,版本为Centos7.8, 直接用上一篇定制的镜像自动安装.
2. Nginx安装
Nginx是一个高性能的web服务器, 源码压缩后仅1M..... 不过我们本环境本次不使用编译安装. 使用官方的rpm安装, 比较它已经把我们常用的功能都编译好了,还配置了轮转日志之类的.后续会专门再讲nginx的编译安装和基于官方的.src.rpm制作rpm包的.
特别说明:nginx被F5收购了.
nginx目前(2020.10.24)最新版本为1.19.3 我们使用稳定版本 1.18 官方下载地址:http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
执行如下命令安装nginx (记得先配置好DNS和外网,不然就手动下载下来再安装)
yum install http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm -y
安装完之后,启动并验证一下:
systemctl start nginx
curl 127.0.0.1
3. Mysql安装
官网下载mysql太麻烦了,网速又慢,我就选择国内源下载.
本次环境安装mysql用5.7.32 glibc2.12的安装, 不编译安装了,太慢了,而且也没必要,反正我要的大部分功能都是编译好的.
mysql5.7 官方教程: https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
本次教程和官方的基本上一样.
3.1 创建mysql配置文件 /etc/my.cnf和相应目录 (如果该文件存在,则系统可能已经安装了Mysql,必须得先卸载掉)
mysql配置文件优先级:
/etc/my.cnf > /etc/mysql/my.cnf > ~/.my.cnf
cat << EOF > /etc/my.cnf
[mysqld]
datadir=/mysqldata
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/var/log/mysql/mysql-error.log
pid-file=/var/run/mysql/mysql.pid
EOF
mkdir /mysqldata
mkdir /var/log/mysql
mkdir /var/run/mysql
3.2 解压mysq并移动到 /usr/loca/mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown mysql:mysql /mysqldata /var/log/mysql /var/run/mysql
tar -xvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz && mv mysql-5.7.32-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mysqldata #初始化后, 会有root密码,记录下来
bin/mysql_ssl_rsa_setup
bin/mysqld_safe --user=mysql &
# Next command is optional
cp support-files/mysql.server /etc/init.d/mysql #配置mysql服务. 拷贝过去的时候把后缀.server去掉.
3.3 使用mysql
把mysql加入PATH, 永久生效的加,把下面这句放到/etc/profile末尾
export PATH=/usr/local/mysql/bin/:$PATH
3.3.1 连接 mysql
mysql -uroot -p #然后输入刚才初始化之后的密码
第一次登录的时候并不能使用数据库,会报错如下,需要修改密码
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改mysql密码:
mysql> set password=password('123456');
4.安装php
下载最新稳定版本 7.4.11 https://www.php.net/distributions/php-7.4.11.tar.gz
本次环境使用编译安装php, 因为后面不会再讲php的安装了.
4.1解压php
tar -xvf php-7.4.11.tar.gz
cd php-7.4.11
4.2 配置php编译选项
./configure --help #查看php的配置选项
我们就选我们要用的功能就行,然后安装相应的依赖,比如:
yum install gcc openssl-devel libxml2-devel sqlite-devel libcurl-devel libpng-devel libjpeg-devel freetype-devel -y
依赖还是挺多的,尤其是很多-devel包, 生产环境建议提前编译好.
./configure --prefix=/usr/local/php
--with-config-file-path=/usr/local/php/etc
--with-config-file-scan-dir=/usr/local/php/etc/php.d
--with-mysqli=/usr/local/mysql/bin/mysql_config
--with-pdo-mysql=/usr/local/mysql
--with-fpm-user=php
--with-fpm-group=php
--enable-mysqlnd
--enable-fpm
--enable-gd
--enable-xml
--enable-shmop
--enable-sysvsem
--enable-inline-optimization
--enable-mbregex
--enable-ftp
--enable-pcntl
--enable-sockets
--enable-soap
--enable-session
--enable-opcache
--enable-bcmath
--with-curl
--with-jpeg
--with-freetype
--with-openssl
--with-zlib
--disable-ipv6
4.3 编译并安装php (编译会比较慢)
make && make install
4.4 配置php
cp php.ini-development /usr/local/php/etc/php.ini
cp sapi/fpm/php-fpm /usr/local/php/bin
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
useradd php
修改/usr/local/php/etc/php.ini如下内容(分号开头为注释):
cgi.fix_pathinfo=0
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
4.5 配置php-fpm系统服务
cat << EOF > /etc/systemd/system/php-fpm.service
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php/bin/php-fpm
PrivateTmp=True
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
4.6启停php-fpm
systemctl start php-fpm
systemctl stop php-fpm
systemctl status php-fpm
4.7 配置nginx处理php
先防火墙开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --reload
修改nginx.conf配置添加一个如下server,然后重新加载nginx:
server {
listen 80;
index index.php index.html index.htm;
root /var/www/html;
location ~ .php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
systemctl reload nginx
5. 安装WordPress
官网现在比较卡(今天程序员节,github也很卡,好多网站今天都好卡...),我就直接去github下载了
github:https://github.com/WordPress/WordPress
官网:https://wordpress.org/latest.tar.gz
还是用之前下载的吧
5.1 解压并设置权限:
tar -xvf wordpress-5.4.2-zh_CN.tar.gz
mv wordpress /var/www/html/wordpress
chown -R php:php /var/www/html/wordpress/
5.2安装:
浏览器打开并输入(ip换成你自己的):http://192.168.1.31/wordpress
mysql> create database wordpress;
mysql> create user 'wp'@'%' identified by '123456' ;
mysql> grant all privileges on wordpress.* to wp@"%";
mysql> flush privileges;
6. 使用wordpress
6.1发表文章
6.2 添加用户 虽然是个人博客,但并不是只能一个人使用
其实这中文界面大家随便瞎点两下就会了
6.3设置语言:
下一篇讲讲zabbix(5.0)吧, 既然网站都有了, 就该监控了, siege压测流量, nginx做负载, sysbench测cpu内存IO等,顺便再做个证书吧,,好像要做的还挺多的..... 看来开发博客系统有点远了.......
- MyBatis源码解析(二)——动态代理实现函数调用
- Git命令速记
- linux设备驱动第三篇:如何写一个简单的字符设备驱动
- Tensorflow高级API的进阶--利用tf.contrib.learn建立输入函数
- Spring速查手册(三)——Spring+JDBC
- [WebKit] JavaScriptCore解析--基础篇(一)字节码的生成及抽象语法树的构建详情分析
- Spring速查手册(二)——Bean的作用域
- pyTorch自然语言处理简单例子
- 一文初探Tensorflow高级API使用(初学者篇)
- Spring速查手册——Bean装配
- 回溯法(一)——n皇后问题
- 图的邻接表示法Java版
- 图的遍历(BFS+DFS)
- 工厂模式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Firefox 如何对发送的参数进行调试
- ios摄像头推流(1)
- leetcode之最短补全词
- React基础(10)-React中编写样式CSS(styled-components)
- 十大经典排序算法 (动态演示 + 代码)
- 学生成绩管理系统案例
- C 语言指针详解
- 04 CentOS6.5系统语言切换为中文
- 【SpringBoot DB 系列】Redis 高级特性之 Bitmap 使用姿势及应用场景介绍
- 踩坑:一次年轻代GC长暂停问题的解决与思考
- 监听MySQL的binlog日志工具分析:Canal
- 小解c# foreach原理
- 3分钟短文:任命管理员,给Laravel普通用户提权
- this到底是什么?
- ES5面向对象基础