Ubuntu LAMP 环境搭建
LAMP工作原理
LINUX+APACHE+MYSQL+PHP
- 先是用户在浏览器中输入网址,也就是域名。
- 然后用户计算机上的DNS服务器把域名解析成IP地址,然后通过HTTP或者HTTPS请求找到了存储网站文件的服务器。
- 然后来到Apache服务器这里,Apache服务器里有很多可扩展的模块,里面有一个“libphp5.so”的模块可以指挥PHP的解释器干活。libphp5.so模块是apache支持php的模块
- 然后PHP看看是否要对MySQL数据进行CURD操作,如果需要就通过mysql_connect(‘连接服务器的地址‘,‘连接的使用用户,一般为root’,‘对应用户的密码’);(CURD = create(创建) + update(更新) + read(读取) + 删除(delete))
- MySQL把数据返回给PHP后,PHP再把数据返回个Apache服务器,然后Apache服务器就把内容呈现给浏览用户。
安装 apache 服务器
sudo apt-get install apache2
apache2 -v
出现收下的信息说明安装成功
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2017-09-18T15:09:02
启动服务
sudo /etc/init.d/apache2 start
访问localhost进行测试
如果出现上述的画面说明已经成功了!
安装 php5
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php5.6
使用php -v
检测模块libphp5.so
重启apache2服务
sudo /etc/init.d/apache2 restart
查看libphp5.6.so模块是自动加载
whoami@iamwho ~ cat /etc/apache2/mods-enabled/php5.6.load # Conflicts: php5 # Depends: mpm_prefork LoadModule php5_module /usr/lib/apache2/modules/libphp5.6.so
说明apache2已经自动加载了模块
安装 MySQL
sudo apt-get install mysql-server
安装 php mysql 扩展
sudo apt-get install php5.6-mysql
检测扩展模块是否加载
whoami@iamwho ~ cat /etc/php/5.6/mods-available/mysql.ini
; configuration for php mysql module
; priority=20
extension=mysql.so
为了确保全部组件正常工作,重启mysql和apache2服务
whoami@iamwho ~ service mysql restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'mysql.service'.
Authenticating as: whoami,,, (whoami)
Password:
==== AUTHENTICATION COMPLETE ===
whoami@iamwho ~ service apache2 restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'apache2.service'.
Authenticating as: whoami,,, (whoami)
Password:
==== AUTHENTICATION COMPLETE ===
当然上述的所有组件可以使用以下的命令进行安装:
sudo tasksel install lamp-server
创建php info探针
sudo cd /var/www/html
sudo vim info.php
文件内容如下:
<?php
echo mysql_connect('localhost','root','123456')? 'successfully': 'failed';
phpinfo();
?>
测试显示信息为successfully
给PHP添加常用扩展
$sudo apt-get install php5.6-gd curl libcurl3 libcurl4-openssl-dev php5.6-curl
访问探针页面可以看到gd
模块被成功加载了如下:
LAMP 配置目录概述
apache2
、mysql
、php
各自的配置目录如下:
/etc
├── apache2
├── mysql
└── php
apache2 配置
使用tree
查看其配置目录结构如下:
从上可以看到几个高频词汇如下:
mods-***
存放Apache模块配置文件
sites-***
存放虚拟主机的配置文件
available
表示可以使用
enabled
表示已启用的
其中enabled
中存放的是指向available
目录中配置文件的软链接:
whoami@iamwho /etc/apache2 tree -L 1 mods-enabled
mods-enabled
├── access_compat.load -> ../mods-available/access_compat.load
├── alias.conf -> ../mods-available/alias.conf
├── alias.load -> ../mods-available/alias.load
├── auth_basic.load -> ../mods-available/auth_basic.load
├── authn_core.load -> ../mods-available/authn_core.load
├── authn_file.load -> ../mods-available/authn_file.load
├── authz_core.load -> ../mods-available/authz_core.load
├── authz_host.load -> ../mods-available/authz_host.load
├── authz_user.load -> ../mods-available/authz_user.load
├── autoindex.conf -> ../mods-available/autoindex.conf
├── autoindex.load -> ../mods-available/autoindex.load
├── deflate.conf -> ../mods-available/deflate.conf
├── deflate.load -> ../mods-available/deflate.load
├── dir.conf -> ../mods-available/dir.conf
├── dir.load -> ../mods-available/dir.load
├── env.load -> ../mods-available/env.load
。。。。。。
这样带来的好处是,不会加载不必要的模块,避免浪费;同时配置文件也存放有序!
apache2
配置文件的加载流程如下:
Apache Virtual-Host 配置
- 原理概述:
一台服务器上放置多个完全独立的网站,虚拟主机就是通过Apache来分辨出来访的二级域名。通过识别来分别访问各各目录下的站点。
虚拟主机的应用场景:
假设慕课网开发了三个系统,分别是:视频系统、论坛系统和办公系统 慕课网有个一级域名 imooc.com,现在给这三个系统分别配置二级域名video.imooc.com bbs.imooc.com oa.imooc.com
假设慕课网有台lamp服务器,在文件系统中分别建立了三个目录(对应三个系统,论坛,办公,视频系统),分别用于存放这三个系统的项目文件,这三个目录可以由我们任意建立,配置DNS把这三个二级域名都解析到这台服务器上,也就是让三个二级域名都指向同一个服务器ip,让Apache来区分用户是通过哪个二级域名访问这台服务器的 根据不同的二级域名访问对应项目所在的目录,也就是说一台服务器上可以同时放置多个完全独立的网站或者系统,用不同的域名访问对应的系统。
将三个域名解析为相同的地址那是DNS服务器的任务,而分析请求响应以不同的页面才是Apache的任务。
在个人电脑上是可以修改hosts
文件以代替DNS服务的作用的:
- Linux或者Mac在
/etc/hosts
- Windows在
C:\Windows\System32\drivers\etc\host
- 接下来在创建目录
mkdir -p /wwwroot/{video,bbs,os}
以表示三个不同的网站
whoami@iamwho /var sudo mkdir -vp /wwwroot/{video,bbs,os}
mkdir: created directory '/wwwroot'
mkdir: created directory '/wwwroot/video'
mkdir: created directory '/wwwroot/bbs'
mkdir: created directory '/wwwroot/os'
whoami@iamwho /var tree /wwwroot
/wwwroot
├── bbs
├── os
└── video
3 directories, 0 files
创建三个index.html
whoami@iamwho /wwwroot sudo touch {video/,bbs/,os/}index.html
whoami@iamwho /wwwroot tree .
.
├── bbs
│?? └── index.html
├── os
│?? └── index.html
└── video
└── index.html
3 directories, 3 files
分别编辑如下:
- 虚拟主机配置
进入可用虚拟主机配置目录cd /etc/apache2/sites-available
whoami@iamwho /etc/apache2/sites-available ll
total 12
-rw-r--r-- 1 root root 1332 3月 19 2016 000-default.conf
-rw-r--r-- 1 root root 6338 4月 6 2016 default-ssl.conf
whoami@iamwho /etc/apache2/sites-available cat 000-default.conf
<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
这里存放在服务器域名的一套寻址规则,ServerName是接受到的域名,DoucumentRoot对应的就是该域名;将默认的配置文件复制三份
whoami@iamwho /etc/apache2/sites-available ll --sort=time
total 24
-rw-r--r-- 1 root root 1332 1月 20 20:26 os.conf
-rw-r--r-- 1 root root 1332 1月 20 20:26 bbs.conf
-rw-r--r-- 1 root root 1332 1月 20 20:25 video.conf
-rw-r--r-- 1 root root 6338 4月 6 2016 default-ssl.conf
-rw-r--r-- 1 root root 1332 3月 19 2016 000-default.conf
更改三个配置文件中的ServerName和DoucumentRoot如下:
<VirtualHost *:80>
ServerName video.imooc.com
ServerAdmin webmaster@localhost
DocumentRoot /wwwroot/video
# 以下为子节点全局文件夹权限设置
<Directory /wwwroot/video>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- 在sites-enablea文件夹下面还得建立一个软连接,对应上面的conf文件,名字随意
whoami@iamwho ~ sudo ln -sv /etc/apache2/sites-available/oa.conf > /etc/apache2/sites-enabled/os.conf
'/etc/apache2/sites-enabled/os.conf' -> '/etc/apache2/sites-available/oa.conf'
- 重启apache服务
sudo service apache2 restart
测试成功如下:
MysqL数据存储目录迁移
来源于这里
登录mysql查看当前数据存储目录
mysql -uroot -p
mysql> select @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
关闭mysql-server
sudo service mysql stop / sudo systemctl stop mysql
确认的确关闭mysql-server
sudo systemctl status mysql
- 关闭无误,输出类似 "Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server."
转移数据目录
sudo rsync -av /var/lib/mysql /data/
备份源数据
sudo mv /var/lib/mysql /var/lib/mysql.bak
sudo mkdir /var/lib/mysql/mysql -p
- sudo mkdir /var/lib/mysql/mysql -p 是为了保证 /usr/share/mysql/mysql-systemd-start 中验证目录正确
修改mysql-server配置
# /etc/mysql/mysql.conf.d/mysqld.cnf -- 文件
datadir=/data/mysql -- 修改内容
AppArmor权限修改
# /etc/apparmor.d/tunables/alias -- 文件
alias /var/lib/mysql/ -> /data/mysql/, -- 追加内容
重启AppArmor
sudo systemctl restart apparmor
- 没有追加alias内容,可能导致
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service"
and "journalctl -xe" for details.
启动mysql-server
sudo systemctl start mysql
sudo systemctl status mysql
安装phpmyadmin
自动安装
- sudo apt-get install phpmyadmin
- sudo ln -s /usr/share/phpmyadmin/ /var/www/pma
手动安装
- 下载phpmyadmin
- 使用 FileZilla 通过 SFTP 方式上传到 /var/www/html/pma/
MySQL Remote Access
- 打开配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
,
注释bind-address //表示允许访问的客户端IP地址。注释掉任何IP都可以访问
- 新建phpmyadmin账户(主机处填%,表示任何主机都可以访问mysql)
- 重启服务即可