码迷,mamicode.com
首页 > 系统相关 > 详细

Ubuntu LAMP

时间:2018-01-22 14:44:59      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:hosts   php -v   share   权限设置   exit   detail   yml   ica   http   

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 配置目录概述

apache2mysqlphp各自的配置目录如下:

/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

手动安装

  1. 下载phpmyadmin
  2. 使用 FileZilla 通过 SFTP 方式上传到 /var/www/html/pma/

MySQL Remote Access

  • 打开配置文件sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

注释bind-address //表示允许访问的客户端IP地址。注释掉任何IP都可以访问

  • 新建phpmyadmin账户(主机处填%,表示任何主机都可以访问mysql)
  • 重启服务即可

Ubuntu LAMP

标签:hosts   php -v   share   权限设置   exit   detail   yml   ica   http   

原文地址:https://www.cnblogs.com/oneTOinf/p/8328859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!