2020-10-21

LAMP环境搭建与配置

LAMP架构
在这里插入图片描述

  1. linux+Apache(httpd)+mysql+PHP
  2. PHP网站(google、淘宝、百度)
  3. 三个角色可以在一台机器、也可以分开(httpd和php要在一起)
安装MySQL
  • MySQL的几个常用安装包:rmp、源码、二进制免编译
cd /usr/local/src (软件包放在一起容易管理)
  • 下载源码包最好在官网下载;其他网站下载可能被修改过。
[root@host src]#wget http://mirros.sohu.com/mysql/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz 
[root@host src]# pwd
/usr/local/src
[root@host src]#ls
mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
[root@host src]#tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
[root@host src]#mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql(移动位置)
[root@host src]#cd /usr/local/mysql/
[root@host mysql]#useradd -s /sbin/nologin mysql(创建mysql用户)
[root@host mysql]#mkdir -p /data/mysql(创建datadir,数据库文件放这里面)
[root@host mysql]#./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
//--user表示定义数据库的用户的身份
//--datadir表示定义数据库的安装目录
//如有报错,安装yum install -y perl-Module-Install

 - 修改配置文件

# These are commonly set, remove the # and set as required.
   basedir = /usr/local/mysql     //basedir表示MySQL包所在路径
   datadir = /data/mysql	//表示定义存放数据的位置
   port = 3306			//port表示定义MySQL服务监听的端口号
   server_id = 155		//表示该MySQL服务的ID号
   socket = /tmp/mysql.sock		//定义MySQL服务监听的套接字地址
   
[root@host mysql]#cp support-files/mysql-defaultcnf /etc/my.cnf
[root@host mysql]#cp support-files/mysql.server /etc/init.d/mysql(复制脚本文件)
[root@host mysql]#vi /etc/init.d/mysql(修改启动脚本)
    basedir=/usr/local/mysql
    datadir=/data/mysql
[root@host mysql]#chkconfig --add mysql(把mysql服务添加到列表中)
[root@host mysql]#chkconfig mysql on(开机就启动)
Starting MySQL.Logging to '/data/mysql/localhost.localdomain.err'.
 . SUCCESS!   //安装成功

在这里插入图片描述
如若出现这种情况就要安装yum -y install autoconf

安装Apache

  • Apache是一个基金会的名字,httpd才是我们主要安装的软件包,早期他的名字叫Apache
  • Apache官网www.apache.org
[root@host src]#ls
apr-1.6.5.tar.gz       mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
 apr-util-1.6.1.tar.gz  php-5.6.30.tar.gz
 httpd-2.4.46.tar.gz    php-7.1.6.tar.bz2
 //在官网下载源码包:httpd-2.4.39.tar,apr-1.6.5.tar,apr-util-1.6.1.tar
 [root@host src]#tar -zxvf apr-1.6.5.tar.gz
 [root@host src]#tar -zxvf apr-util-1.6.1.tar.gz
 [root@host src]#tar -zxvf httpd-2.4.46.tar.gz
 //解压压缩包
 [root@host src]#cd /usr/local/src/apr-1.6.5
 [root@host apr-1.6.5]#./configure --prefix=/usr/local/apr//如若这里出现报错安装libtool,yum install -y libtool*
 [root@host apr-1.6.5]#make && make install//如若这有错装expat-devel,yum install -y expat-devel
 [root@host mysql]#cd /usr/local/src/apr-util-1.6.1
 [root@host apr-util-1.6.1]#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
 [root@host apr-util-1.6.1]#make && make install
 [root@host mysql]#cd /usr/local/src/httpd-2.4.46
 [root@host httpd-2.4.46]#./configure
 --prefix=usr/local/apache2.4 //--prefix指定安装目录
 --enable-so   //--nable-so表示启用DSO
 --with-pcre 
 --with-included-apr
 --enable-modules=most
 --enable-mpms-shared=all  //表示以共享形式安装模块
 --with-mpm=prefork
 [root@host src]#yum install -y pcre pcre-devel (为避免make时出错提前安装数据库文件)
 [root@host src]#make && make install
 [root@host apache2.4]#ls /usr/local/apache2.4/modules
 [root@host apache2.4]#/usr/local/apache2.4/bin/apachectl -M(查看配置文件有哪些文件)//share字样的动态共享模块,static以静态形式存在

安装PHP

PHP的官网:www.php.net

[root@host src]#pwd
/usr/local/src
[root@host src]ls
apr-1.6.5              httpd-2.4.46.tar.gz
  apr-1.6.5.tar.gz       mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
  apr-util-1.6.1         php-5.6.30.tar.gz
  apr-util-1.6.1.tar.gz  php-7.1.6.tar.bz2
  httpd-2.4.46(下载源码包php-5.6.30)
[root@host src]#tar -zxvf php-5.6.30.tar.gz
[root@host src]#yum install -y bzip2 //安装压缩工具包
[root@host src]#tar -jxvf php-7.1.6.tar.bz2
[root@host src]#yum install -ylibxml2-devel/openssl openssl-devel/bzip2 bzip2-devel/libpng libpng-devel/freetype freetype-devel/epel-release/libmcrypt-devel
[root@host src]#cd php-7.1.6
[root@host php-7.1.6]#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc  --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd  --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
[root@host php-7.1.6]#make && make install //编译安装
[root@host php-7.1.6]#cd /usr/local/src/php-5.6.30
[root@host php-5.6.30]#/usr/local/apache2.4/bin/httpd -M //查看加载模块
[root@host php-5.6.30]#cp php.ini-production /usr/local/php/etc/php.ini
[root@host php-5.6.30]#vi /usr/local/apache2.4/conf/httpd.conf //编辑httpd的主配置文件
<Directory />
     AllowOverride none
     Require all denied
 </Directory>
 改成:
 <Directory />
     AllowOverride none  
     Require all granted
 </Directory>    //目的允许所有请求访问
 <IfModule dir_module>
     DirectoryIndex index.html 
 </IfModule>
 改成:
 <IfModule dir_module>
     DirectoryIndex index.html index.php
 </IfModule>
  • LoadModule php5_module modules/libphp5.so注释掉,并改成
    LoadModule php7_module modules/libphp7.so

测试配置文件是否正确

[root@host ~]#/usr/local/apache2.4/bin/apachectl -t //检查配置文件是正确
Syntax OK
[root@host ~]#/usr/local/apache2.4/bin/apachectl start //启动http
[root@host ~]#cd /usr/local/apache2.4/conf
[root@host conf]#netstat -lnp |grep httpd //如若不行yum install net-tools
tcp6       0      0 :::80                   :::*
[root@host conf]#curl localhost
<html><body><h1>It works!<h1><body><html>
 //使用curl命令简单测试,显示了就是成功
 [root@host conf]#vi /usr/local/apache2.4/htdocs/test.php
 <?php
 echo  “php解析正确”
?>
[root@host conf]#curl localhost/1.php
 php解析正确  //如显示此信息则PHP解析正确
你遇到的问题是: > **SPI 输出的时间尺度不对,比如 `window_start` 和 `window_end` 的时间跨度看起来不是30天。** 我们来看你的输出示例: ``` dekad_start window_start window_end 2020-01-21 2019-12-23 2020-01-31 ``` 这里 `window_start = 2019-12-23`, `window_end = 2020-01-31`,这显然不是一个30天的窗口,而是一个月的跨度,说明你的 **SPI窗口定义逻辑出现了问题**。 --- ## ❗问题定位:窗口定义错误 你在代码中这样定义窗口: ```python window_end = dekad_start window_start = dekad_start - pd.Timedelta(days=29) ``` 但你在筛选窗口数据时却用了: ```python window_data = df[(df['date'] > window_start) & (df['date'] <= dekad_end)] ``` ### ✅ 正确逻辑应是: ```python window_data = df[(df['date'] >= window_start) & (df['date'] <= window_end)] ``` 因为你定义了: ```python window_end = dekad_start window_start = dekad_start - pd.Timedelta(days=29) ``` 所以窗口应该是: ``` [dekad_start - 29天, dekad_start] ``` 但是你用了 `dekad_end` 作为窗口结束时间,而 `dekad_end` 是 **每旬的结束时间(10日、20日、月底)**,这会导致窗口被错误地扩展到整旬结束日,而不是当前旬的开始日。 --- ## ✅ 正确代码应为: ```python window_end = dekad_start window_start = dekad_start - pd.Timedelta(days=29) window_data = df[(df['date'] >= window_start) & (df['date'] <= window_end)] ``` 而不是: ```python window_data = df[(df['date'] > window_start) & (df['date'] <= dekad_end)] ``` --- ## 🧪 示例说明 以 `dekad_start = 2020-01-21` 为例: ```python window_start = 2020-01-21 - 29天 = 2019-12-23 window_end = 2020-01-21 ``` 正确的窗口是: ``` [2019-12-23, 2020-01-21] # 共30天 ``` 如果你用了 `dekad_end = 2020-01-31`,那么窗口变成了: ``` [2019-12-23, 2020-01-31] # 39天,错误 ``` --- ## ✅ 修改建议(修复窗口筛选逻辑) 将: ```python window_data = df[(df['date'] > window_start) & (df['date'] <= dekad_end)] ``` 改为: ```python window_data = df[(df['date'] >= window_start) & (df['date'] <= window_end)] ``` 同时确保 `window_end = dekad_start` 是正确的。 --- ## ✅ 建议添加调试打印语句 你可以在循环中加入调试信息,帮助你检查窗口是否正确: ```python print(f"dekad_start: {dekad_start}, window_start: {window_start}, window_end: {window_end}") ``` 输出示例: ``` dekad_start: 2020-01-21 00:00:00, window_start: 2019-12-23 00:00:00, window_end: 2020-01-21 00:00:00 ``` 确保 `window_start` 到 `window_end` 确实是30天。 --- ## ✅ 总结 | 问题 | 原因 | 修复方法 | |------|------|-----------| | 时间窗口跨度错误 | 使用了 `dekad_end` 而非 `window_end` | 改为使用 `window_start` 到 `window_end` | | 数据边界错误 | 使用了 `>` 而非 `>=` | 改为 `>= window_start` | | 窗口天数不对 | 没有检查窗口是否正好30天 | 添加调试输出 | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值