第0章:CentOS7的安装与初始化配置

0.1 初识Linux

    很高兴大家选择我们的课程,从现在开始我们就要一起开启愉快的Linux之旅了!

    在我们开始正式学习Linux课程之前呢,我们需要对Linux有一个初步的了解。所以,首先我们要做的就是认识Liunx,揭开它的神秘面纱!

0.1.1 生活中的Linux身影

    也许我们曾经听说过或者接触过Linux,知道它是一种操作系统,而我们都知道操作系统是使计算机运行的基本程序和工具的集合,来支配计算机硬件来进行工作,如果我们的计算机没有安装操作系统的话那这台计算机是无法接收到我们的指令而进行工作的。

    提到操作系统可能在工作学习中大家比较熟悉的就是Windows操作系统了,还会有一部分人使用MAC OS,相对来说很少会有人将Linux操作系统安装在个人计算机上,甚至很多人都不知道Linux操作系统的存在。

    但是实际上,Linux已经渗透到我们生活中的方方面面了,在互联网世界中Liunx是无处不在的。举个简单的例子,现在我们出门的时候可以不带钱,但是肯定不会忘记带手机,现在几乎每人都会至少有一部智能手机,我们都知道手机大多数使用的系统都是安卓系统,但是你可能不知道,安卓系统其实也是Linux操作系统中的一员。因为我们平时所说的Liunx操作系统实际上指的是那些内核为Liunx的操作系统。

    一个完整的Linux操作系统除了内核之外还需要有Shell、文件系统和应用程序。

在整个Linux操作系统中,内核(Kernel)是系统的心脏,实现操作系统的基本功能。在硬件方面可以控制硬件设备,管理内存,提供硬件接口,处理基本I/O。在软件方面可以管理文件系统,为程序分配内存和CPU时间等。而Shell是系统的用户界面,提供用户与内核进行交互操作的一种接口。它解释由用户输入的命令并且把它们送到内核执行。标准的Linux系统都有一套称为应用程序的程序集,包括文本编辑器、编程语言、办公套件、Internet工具、数据库等。当然,还可以有用户自己编写的具有特定功能的应用程序。文件系统则是文件存放在磁盘等存储设备上的组织方法。通常是按照目录层次的方式进行组织。每个目录可以包括多个子目录以及文件,系统以“/”为根目录。系统中的所有数据都存储在文件系统上以便用户读取、查询和写入。Linux能支持多种目前流行的文件系统,如ext2、ext3、ext4、fat、vfat、ISO9660、nfs等。而安卓系统使用的则是Linux的内核,所以我们说安卓系统也是Linux操作系统中的一员。

    那除了刚才我们所说的手机之外我们生活中还有很多娱乐影音设备如:平板电视,视频游戏控制器等使用的也是Liunx操作系统,还有像我们平时访问的百度,淘宝,谷歌等网站的服务器上绝大多数使用的也是Linux操作系统,还有世界上百分之九十的超级计算机也是使用的Linux操作系统。所以说现在Liunx已经渗透到我们生活中的方方面面了,只不过平时我们对它了解的比较少所有忽略了它的存在。

0.1.2 Linux系统的优势

    那么接下来呢我们就需要探索一下Linux为什么会在各个领域得到广泛应用:

    第一点:跨平台的硬件支持

    Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。从个人电脑到大型主机,甚至包括嵌入式系统在内的各种硬件设备都可以支持。

    第二点:多用户多任务

    Linux操作系统允许多用户以本地登陆或远程连接的方式同时登陆操作系统对属于自己的资源进行读写等操作而互不影响。多任务是现代计算机的最主要的一个特点,在Linux系统上也可以同时执行多个程序,而同时各个程序的运行互相独立。

    第三点:可靠的安全性

    Linux采取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。

    第四点:良好的稳定性

    Linux 内核的源代码是以标准规范的32 位(在64 位CPU上是64 位)的计算机来做的最佳化设计,可确保其系统的稳定性。所以使得一些安装 Linux 的主机可以常年不关而不宕机。

    第五点:完善的网络功能

    Linux 内置了很丰富的免费网络服务器软件、数据库和网页的开发工具,如Apache、Sendmail、VSFtp、SSH、MySQL、PHP和JSP 等。近年来,越来越多的企业看到了Linux 的这些强大的功能,利用Linux 担任全方位的网络服务器。

    除了这些Linux还有一个最大的特点就是开源,免费。Linux的源代码是开放的可以被任何人获取和使用,还可以根据自身需求进行定制并重新发布。

0.1.3 Linux的诞生

    那么如此强大的Linux是如何诞生的呢?

    提到Linux的诞生我们需要感谢两个人。一个是Linus Torvalds,他被成为Linux之父,Linux内核便是他开发的。在1991年8月Linus还是芬兰赫尔辛基大学的一名学生他对Minix产生了兴趣,Minix是一个开源的类UNIX系统,是赫尔辛基大学教授为课程教学而开发的,Linus想开发一个类似Minix的操作系统,用在他自己的计算机上,在1991年9月,Linus在互联网上发布了Linux版本为0.0.1,从严格意义上来说,Linux0.0.1并不是一个完整的操作系统,它只是一个操作系统的内核,只有一个内核用户是什么都做不了的,那么这个问题是如何解决的呢?这就要提到另外一个人Richard Stallman,他是自由软件运动的发起人,开发了许多Linux重要的基础应用,被称为自由软件之父。在1983年春天麻省理工人工智能实验室的程序员Richard Stallman深深的觉得UNIX商业软件极大的束缚了开发者和软件用户,有背软件自由的本意,因此他发起了GNU(自由软件运动)项目,旨在开发一个自由的类UNIX操作系统,GNU项目的创立标志着自由软件运动的开始。在1985年10月他又创立了自由软件基金会,在自由软件基金会的支持下到1991年很多GNU工具都被开发出来了,包括强大的GCC编译器和GDB调试器等等。但是建立一个自由的操作系统还差一个必不可少的一部分,那就是自由的内核,就在这时Linux0.0.1发布了,在1992年结合了Linux内核和GNU软件的Linux正式诞生了,其名称为GNU/Linux,简称Linux,经过不断发展到今天Linux已经是一个非常成熟先进的操作系统了。现在的Linux是由一些非营利性基金如自由软件基金会,相关公司如红帽公司也包括Linux开发社区组织如CentOS社区还包括许多Linux爱好者共同开发和维护。正因为有如此强大的开发团队Linux的更新速度也是非常快的,平均2-3个月Linux核心就会推出一个新的版本。

    随着Linux内核的发展各个组织和公司都推出了自己的发行版本。这些发行版本可能存在较大的差异,但是并不是内核差异,而是表现在外部程序上和各自的侧重点不同,目前Linux发行版本就有数百个。

tomcat设置编码格式utf8

要设置GET的编码,可以修改server.xml文件中,相应的端口的Connector的属性:URIEncoding=”UTF-8″,这样,GET方式提交的数据才会被正确解码。

<Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ URIEncoding=”UTF-8″ />

将linux主机接入到网络中

前言:

这篇博客的主旨就想文章题目说的那样,当我们拿到一台新的系统时,我们怎么实现让你的主机连接到网络中。配置网络就是给你的系统配置IP地址,子网掩码,网关以及DNS。也就是说配置好这几项计算机上网的主要条件,就能实现你的系统联网了。此外,配置网络总结来讲有两种方法;一是通过命令直接配置。通过命令配置的网络知识暂时实现系统联网,想要游泳联网就要通过把配置内容写入配置文件来实现了。配置网络虽然步骤并不复杂但是其背后的知识量还是相当庞大的,我们只有了解其中的配置原理才能正确高效的去配置网络从而实现计算机联网。这篇博客主要介绍了配置网络的常用命令,以及配置文件。通过示例的形式让你更直观的去理解配置方法。CentOS7版本经过改版以后这部分内容与之前的CentOS版本相差较大,我会把CentOS7版本的相关知识分开单独介绍。

配置网络的内容:

IP/mask
路由:默认网关
DNS:服务器指向,域名解析
主DNS服务器
次DNS服务器
第三DNS服务器

配置方式:

  1. 静态指定
    命令:
    ifcfg: ifconfig,route…
    ip: link,addr,route…
    编辑配置文件
    system-config-network-tui
  2. 动态分配
    DHCP: Dynamic Host Configuration Protocol

    配置网络接口

    接口命名方式:
    CentOS 6:不稳定
    以太网:eth [0,1,2,3,…]
    CentOS7:
    网络接口的命名方式有所变化:网络接口的命名与物理环境有关。

ifcfg命令家族

ifconfig,route,netstat

ifconfig:

用来配置网络接口的命令,立即生效,但不是永久生效。
ifconfig [interface] #不加接口显示本机所有活动状态的网络接口,加接口只显示指定接口的信息
ifconfig -a # 显示本机所有网络接口
ifconfig IFACE [up|down] #启用禁用网络接口
ifconfig interface [aftype] options | address …
ifconfig IFACE IP/netmask [up] #修改网络地址
示例:ifconfig eth1 172.18.45.61/16
第二种写法相对复杂所以不用
ifconfig IFACE IP netmask NETMASK
注意:立即生效 启
启用混杂模式:[-]promisc #加-号禁用混杂模式

route:

路由管理命令 ,配置路由信息
route -n #查看路由信息
route add #添加路由
写法:
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
-net :指定添加网络路由
-host:指定添加主句路由
如果目标网络是0.0.0.0那么表示添加的是一个默认路由
target:目标网络,如果目标是一个主机,那么表示目标主机的IP地址,如果目标是一个网,那么表示网络
gw:网关
dev:指定本地网卡
示例:
增加主机路由:
目标:192.168.1.3 网关:172.18.0.1
route add -host 192.168.1.3 gw 172.18.0.1 dev eth0 #添加主机路由默认mask值是32位精确匹配,所以不用写
增加网络路由:
目标:192.168.0.0 网关:172.18.0.1
route add -net 192.168.0.0/24 gw 172.18.0.1 dev eth0
增加默认路由:
route add default gw 172.18.0.1
删除主机路由:
目标:192.168.1.3 网关172.18.0.1
route dal -host 192.168.1.3
删除网络路由:
目标:192.168.0.0 网关:172.18.0.1
route del -net 192.168.0.0/24

netstat:

网络状态查看命令

显示网络连接:

netstat [–tcp|-t] [–udp|-u] [–raw|-w] [-listening|-l] [–all|-a] [–numeric|-n] [–extend|-e-extend|-e]][–program|-p]
-t: 显示TCP协议的相关链接
-u:显示UDP协议的相关链接
-w:显示裸套接字的相关链接,不经过传输层,由应用层直接调用ARP进行数据传输。
-l:只显示监听状态的连接
-a:显示所有连接
-n:不反解IP地址
-e:拓展格式
-p:显示与哪个程序建立连接
常用组合:
-tan:所有TCP相关的连接
-uan:所有UDP相关的连接
-tnl:TCP协议下,处于监听状态的连接
-unl:UDP协议下处于监听状态的连接(虽然UDP协议下没有网络状态的概念,但是仍然可以这样使用)

显示路由表:

netstat {–route|-r} [–numeric|-n]
-r: 显示内核路由表
-n: 数字格式

显示接口统计数据:

netstat {–interfaces|-I|-i} [iface] [–all|-a] [-extend|-e] [–program|-p] [–numeric|-n]
netstat -i #显示所有网络接口数据
netstat –IIFACE #显示指定接口网络数据I与接口名之间不能有空格
netstat -Ieth0
ifconfig -s eth0

总结:

ifcfg家族命令:ifconfig,route,netstat

ip家族:

配置Linux网络属性:ip命令和ss命令

ip:

ip工具主要作用:显示或配置路由和设备
用法:ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }

连接设备管理工具
子命令:

  1. set :设置
  2. show :显示
    set dev IFACE
    可设置属性:
    up and down:激活或禁用指定接口
    ifup/ifdown
    show [dev IFACE]:指定接口
    [up]:仅显示处于激活状态的接口

    ip addr:

    协议地址管理工具
    用法: ip addr { add | del… } IFADDR dev STRING
    子命令:

  3. add:增加指定接口的辅助IP地址
    三个选用项:
    [label PATTERN] :给指定接口添加别名
    [scope {global|link|host}]:指明作用域
    global: 全局可用
    link: 仅链接可用
    host: 本机可用
    [broadcast ADDRESS]:指明广播地址
    示例:ip addr add 172.16.100.100/16 dev eth0 label eth0:0
  4. del:删除指定接口的IP地址
    示例:ip addr del 172.16.100.100/16 dev eth0 label eth0:0
  5. replace:替换指定接口的IP地址
  6. show:显示指定接口的IP地址
  7. flush:清空指定接口或者指定别名的IP地址
    ip address flush dev
  8. change:修改指定接口的IP地址

    ip route

    路由管理工具
    添加路由:ip route add
    ip route add TARGET via GW dev IFACE src SOURCE_IP
    TARGET:
    主机路由:IP
    网络路由:NETWORK/MASK
    示例:
    添加网络路由:ip route add 193.168.0.0/24 via 172.18.0.1
    添加主机路由:ip route add 192.168.1.13 via 172.18.0.1
    添加网关:ip route add default via GW dev IFACE
    ip route add default via 172.18.0.1
    删除路由:
    ip route del TARGET
    删除默认路由:
    ip route del default
    显示和清空路由表:
    ip route show
    ip route flush

    ss:

    网络状态查看命令,与nestat命令用法相似,用来代替nestat命令
    使用格式:ss [OPTION]… [FILTER]
    选项:
    -t: tcp协议相关
    -u: udp协议相关
    -w: 裸套接字相关
    -x:unix sock相关
    -l: listen状态的连接
    -a: 所有
    -n: 数字格式
    -p: 相关的程序及PID
    -e: 扩展的信息
    -m:内存用量
    -o:计时器信息
    条件过滤FILTER : [ state TCP-STATE ] [ EXPRESSION ]
    TCP的常见状态:
    tcp finite state machine:
    LISTEN: 监听
    ESTABLISHED:已建立的连接
    FIN_WAIT_1
    FIN_WAIT_2
    SYN_SENT
    SYN_RECV
    CLOSED
    EXPRESSION:
    dport =
    sport =
    示例:’( dport = :ssh or sport = :ssh )’
    常用组合: -tan, -tanl, -tanlp, -uan
    常见用法:
    ss -l 显示本地打开的所有端口
    ss -pl 显示每个进程具体打开的socket
    ss -t -a 显示所有tcp socket
    ss -u -a 显示所有的UDP Socekt
    ss -o state established ‘( dport = :ssh or sport = :ssh )’ 显示所有已建立的ssh连接
    ss -o state established ‘( dport = :http or sport = :http )’ 显示所有已建立的HTTP连接
    ss -s 列出当前socket详细信息

网络配置文件

/etc/sysconfig/network-scripts/ifcfg-IFACE

IP、MASK、GW、DNS相关配置文件
配置属性:

  1. DEVICE:此配置文件应用到的设备
  2. HWADDR:对应的设备的MAC地址
  3. BOOTPROTO:激活此设备时使用的地址配置协议
    常 用的地址配置协议:
    dhcp:自动获取IP
    static:静态指定IP
    none:不用协议,与static效果相同
    bootp
  4. NM_CONTROLLED:NM是NetworkManager的简写, 此网卡是否接受NM控制;建议CentOS6为“no”
  5. ONBOOT:在系统引导时是否激活此设备
  6. TYPE:接口类型;常见有的Ethernet, Bridge
  7. UUID:设备的惟一标识
  8. IPADDR:如果使用的地址配置协议是手动指定的话需要指明IP地址,如果设定开机自动获取IP那么不用指定
  9. NETMASK:子网掩码
  10. GATEWAY: 默认网关
  11. DNS1:第一个DNS服务器指向
  12. DNS2:第二个DNS服务器指向
  13. USERCTL:普通用户是否可控制此设备
  14. PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许 dhcp server分配的dns服务器指向信息直接覆盖至 /etc/resolv.conf文件中

/etc/sysconfig/network-scripts/route-IFACE

路由配置文件,需要手动创建
注意:需service network restart生效
两种配置风格:

(1) TARGET via GW
如:10.0.0.0/8 via 172.16.0.1

(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
注意:两种风格不混合使用

设置网卡别名:

将多个IP地址绑定到一个NIC上 eth0:1 、eth0:2、 eth0:3
ifconfig命令:
ifconfig eth0:0 192.168.1.100/24 up
ifconfig eth0:0 down
ip命令: ip addr add 172.16.1.2/16 dev eth0
ip addr add 172.16.1.1/16 dev eth0 label eth0:0
ip addr add 172.16.1.2/16 dev eth0 label eth0:0
ip addr del 172.16.1.1/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0
编辑配置文件:
为每个设备别名生成独立的接口配置文件
• 关闭NetworkManager服务
ifcfg-ethX:xxx
• 必须使用静态联网
DEVICE=eth0:0
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONPARENT=yes
注意:service network restart 生效
参考/usr/share/doc/initscripts-*/sysconfig.txt

setup

/etc/sysconfig/network

配置当前主机的主机名
hostname [HOSTNAME]
HOSTNAME=
NETWORKING=yes #网络总开关
不会立即生效,重启机器后生效与hostname [HOSTNAME] 命令配合使用

/etc/hosts

本地主机名数据库和IP地址的映像
• 对小型独立网络有用
• 通常,在使用DNS前检查
• getent hosts 查看/etc/hosts 内容

/etc/udev/rules.d/70-persistent-net.rules

网络接口并命名相关的udev配置文件
编辑修改后并不会立即生效
生效方法:
卸载网卡驱动:modprobe -r e1000
装载 网卡驱动:modprobe e1000

CentOS7 网络配置

网卡命名:

CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,当 增加或删除网卡时,名称可能会发生变化
CentOS 7使用基于硬件,设备拓扑和设置类型命名:

(1) 网卡命名机制 systemd对网络设备的命名方式

(a) 如果Firmware或BIOS为主板上集成的设备提供的索引信 息可用,且可预测则根据此索引进行命名,例如eno1

(b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息 可用,且可预测,则根据此索引进行命名,例如ens1

(c) 如果硬件接口的物理位置信息可用,则根据此信息进行命 名,例如enp2s0

(d) 如果用户显式启动,也可根据MAC地址进行命名, enx2387a1dc56

(e) 上述均不可用时,则使用传统命名机制
基于BIOS支持启用biosdevname软件
内置网卡:em1,em2
pci卡:pYpX Y:slot ,X:port

(2) 名称组成格式
en: Ethernet 有线局域网
wl: wlan 无线局域网
ww: wwan无线广域网
名称类型:
o

网卡设备的命名过程:

第一步:
udev, 辅助工具程序/lib/udev/rename_device /usr/lib/udev/rules.d/60-net.rules
第二步: biosdevname 会根据/usr/lib/udev/rules.d/71biosdevname.rules
第三步: 通过检测网络接口设备,根据
/usr/lib/udev/rules.d/75-net-description ID_NET_NAME_ONBOARD
ID_NET_NAME_SLOT
ID_NET_NAME_PATH

设置传统网卡命名方式

  1. 编辑/etc/default/grub配置文件
    GRUB_CMDLINE_LINUX=”rhgb quiet net.ifnames=0″
    或:修改/boot/grub2/grub.cfg
  2. 为grub2生成配置文件
    grub2-mkconfig -o /etc/grub2.cfg
  3. 重启系统
    建议直接修改配置文件,将/boot/grub2/grub.cfg文件中内核区域以linux16开头的行,看到fhgb quiet字样后边加net.ifnames=0 之后修改/etc/sysconfig/network-scripts文件中的DEVICE项目和NAME项目。另外文件名手动修改,定义别名生效。

    nmcli:

    CentOS7地址配置工具
    与IP命令相似
    用法:
    nmcli [ OPTIONS ] OBJECT { COMMAND | help }
    nmcli 命令强大的命令补全功能:

    [root@CentOS7 ~]#nmcli 
    agent       device      help        networking  
    connection  general     monitor     radio      
    [root@CentOS7 ~]#nmcli connection 
    add    delete  edit   help    load     monitor  show  
    clone  down    export import   modify   reload   up  
    [root@CentOS7 ~]#nmcli device 
    connect   disconnect  lldp     monitor  set   status
    delete    help     modify      reapply  show   wifi

    常用的两个OBJECT:

    1. connection:

    相当于addr用于配置IP地址
    子命令: start, stop, and manage network connections
    修改IP地址示例:
    nmcli connection modify IFACE [+|-] setting.property value
    [+|-] #表示添加或者删除ip地址
    setting.property:
    ipv4.addresses
    ipv4.gateway
    ipv4.dns1
    ipv4.method #ipv4的地址获取方式
    manual | auto #手动或者自动(手动配置的ip地址立即生效)
    创建新连接static,指定静态IP,不自动连接
    nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ip4 172.25.X.10/24 gw4 172.25.X.254

2. device :

相当于link管理连接设备
子命令:show and manage network interfaces
设备即网络接口,连接是对网络接口的配置。一个网络接口 可有多个连接配置,但同时只有一个连接配置生效

修改配置文件执行生效:

systemctl restart network
nmcli con reload
这篇博客是否对你配置网络有帮助呢?有问题以及指教的地方请留言交流吧。

国内yum源的安装(163,阿里云,epel)

国内yum源的安装(163,阿里云,epel)

—-阿里云镜像源

1、备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/

CentOS 5

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、之后运行 yum clean all,yum makecache 生成缓存

 

—-163镜像源

第一步:备份你的原镜像文件,以免出错后可以恢复。

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup   第二步:下载新的CentOS-Base.repo 到/etc/yum.repos.d/

CentOS 5

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS5-Base-163.repo

CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo

CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

3、之后运行 yum clean all,yum makecache 生成缓存

—-EPEL

EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install 软件包名,即可安装很多以前需要编译安装的软件、常用的软件或一些比较流行的软件,比如现在流行的nginx、htop、ncdu、vnstat等等,都可以使用EPEL很方便的安装更新。

 

目前可以直接通过执行命令: yum install epel-release 直接进行安装,如果此命令无法安装可以尝试以下方法

—-安装EPEL 阿里云源

1、备份(如有配置其他epel源)

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

2、下载新repo 到/etc/yum.repos.d/

epel(RHEL 7)

 

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

 

epel(RHEL 6)

 

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

 

epel(RHEL 5)

 

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

 

—-官方源直接安装

CentOS/RHEL 5 :

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm

CentOS/RHEL 6 :

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

CentOS/RHEL 7 :

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

CentOS7.x搭建 GIT 服务器教程

下载安装 git

Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服务器。

安装依赖库和编译工具

为了后续安装能正常进行,我们先来安装一些相关依赖库和编译工具

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

安装编译工具

yum install gcc perl-ExtUtils-MakeMaker

下载 git

选一个目录,用来放下载下来的安装包,这里将安装包放在 /usr/local/src 目录里

cd /usr/local/src

到官网找一个新版稳定的源码包下载到 /usr/local/src 文件夹里

wget https://www.kernel.org/pub/software/scm/git/git-2.10.0.tar.gz

解压和编译

解压下载的源码包

tar -zvxf git-2.10.0.tar.gz

解压后进入 git-2.10.0 文件夹

cd git-2.10.0

执行编译

make all prefix=/usr/local/git

编译完成后, 安装到 /usr/local/git 目录下

make install prefix=/usr/local/git

配置环境变量

将 git 目录加入 PATH

将原来的 PATH 指向目录修改为现在的目录

echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc

生效环境变量

source /etc/bashrc

此时我们能查看 git 版本号,说明我们已经安装成功了。

git --version

创建 git 账号密码

创建 git 账号

为我们刚刚搭建好的 git 创建一个账号

useradd -m gituser

然后为这个账号设置密码

passwd gituser

控制台输入创建密码后,输入您自定义的密码,并二次确认。

初始化 git 仓库并配置用户权限

创建 git 仓库并初始化

我们创建 /data/repositories 目录用于存放 git 仓库

mkdir -p /data/repositories

创建好后,初始化这个仓库

cd /data/repositories/ && git init --bare test.git

配置用户权限

给 git 仓库目录设置用户和用户组并设置权限

chown -R gituser:gituser /data/repositories
chmod 755 /data/repositories

编辑 /etc/passwd 文件,将最后一行关于 gituser 的登录 shell 配置改为 git-shell 的目录如下
示例代码:/etc/passwd

gituser:x:500:500::/home/gituser:/usr/local/git/bin/git-shell

如果按照刚才的步骤执行, 这个位置应该是 /usr/local/git/bin/git-shell, 否则请通过 which git-shell 命令查看位置

安全目的, 限制 git 账号的 ssh 连接只能是登录 git-shell

使用搭建好的 Git 服务

克隆 test repo 到本地

cd ~ && git clone gituser@<您的 CVM IP 地址>:/data/repositories/test.git

恭喜,Git 服务器搭建完成, 从此以后你可以方便地将你的本地代码提交到 Git 服务器托管了

CentOS7的启动流程

CentOS7的启动流程

POST–>Boot Sequence–>Bootloader–>kernel+initramfs(initrd)–>rootfs–>/sbin/init

init:

CentOS5:SysV init

CentOS6:Upstart

CentOS7:Systemd

blob.png

Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程

blob.png

Systemd新特性:

系统引导是实现服务并行启动

按需启动守护进程

系统状态快照

自动化的服务依赖关系

 

核心概念:unit

unit表示不同类型的systemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其他与init相关的信息

配置文件:

/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/run/systemd/system:系统执行过程中产生的服务脚本,比上面目录优先运行

/etc/systemd/system:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面的优先级高

UNIT类型:

Systemctl -t help 查看unit类型

blob.png

Service unit:文件扩展名.service 用于定义系统服务

Target unit:文件扩展名.target 用于模拟实现运行级别

Device unit: .device 用于定义内核识别的设备

Mount unit: .mount 定义文件系统的挂载点

Socket unit: .socket 用于标识进程间通行用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动

Snapshot unit: .snapshot 管理系统快照

Swap unit: .swap 用于标识swap设备

Automount unit: .automount 文件系统的自动挂载点

Path unit: .path 用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如spool目录

blob.png

特性:

关键特性:

基于socket的激活机制:socket与服务程序分离

基于d-bus的激活机制:系统进程间通信的一种机制 desktop-bus

基于device的激活机制

基于path的激活机制

系统快照:保存个unit的当前状态信息于持久存储设备中向后兼容sysv init脚本

不兼容:

systemctl命令固定不变,不可扩展

非有systemd启动的服务,systemctl无法与之通信和控制

系统服务管理:

CentOS7:service unit    注意:能兼容早期的服务脚本

命令:systemctk Command name.service

启动:systemctl name start –> systemctl start name.service

停止:systemctl name stop –> systemctl stop name.service

重启:systemctl name restart –> systemctl restart name.service

状态:systemctl name status –> systemctl status name.service

blob.png

条件式重启:以启动才重启,否则不做任何操作

service name condrestart –> systemctl try-restart name.service

重载或重启服务:先加载,再启动

systemctl reload-or-restart name.service

重载或条件式重启服务:

systemctl reload-or-try-restart name.service

禁止自动和手动启动:

systemctl mask name.service

取消禁止:

systemctl unmask name.service

blob.png

blob.png

服务查看

查看某服务当前激活与否的状态:

systemctl is-active name.service

查看所有已经激活的服务

systemctl list-units –type service

查看所有服务

systemctl list-units –type service -all

blob.png

chkconfig命令的对应关系:

设定某服务开机自启:

chkconfig name on –> systemctl enable name.service

设定某服务开机禁止启动:

chkconfig name off –> systemctl disable name.service

查看所有服务开机的自启状态:

chkconfig –list –> systemctl list-unit-files –type service

查看服务是否开机自启:

systemctl is-enable name.service

blob.png

其他命令:

查看服务的依赖关系:

systemctl list-dependencies name.service

blob.png

杀掉进程:

systemctl kill 进程名

 

服务状态:

systemctl list-units –type service –all显示状态

loaded:Unit配置文件已处理

active(runinng):一次或多次持续处理的运行

active(exited):成功完成一次性的配置

active(waiting):运行中,等待一个事件

inactive:不运行

enabled:开机启动

disabled:开机不启动

static:开机不启动,但可被另一个启用的服务激活

blob.png

运行级别:

unit配置文件: .target

级别:

0 –> runlevel0.target,poweroff.target

1 –> runlevel1.target,rescue.target

2 –> runlevel2.target,multi-user.target

3 –> runlevel3.target,multi-user.target

4 –> runlevel4.target,multi-user.target

5 –> runlevel5.target,graphical.target

6 –> runlevel6.target,reboot.target

级别切换;

init N –> systemctl isolate name.target

只有/lib/systemd/system/*.target文件中AllowIsolate=yes才能切换(修改文件需执行systemctl daemon-reload才能生效)

blob.png

查看target:

runlevel

systemctl list-units –type target

systemctl list-units –type target –all

获取默认运行级别:

/etc/inittab–> systemctl get-default

修改默认级别:

/etc/inittab –> systemctl set-default name.target

blob.png

其他命令:

切换至紧急救援模式:

systemctl rescue

切换至emergency模式:

systemctl emergency

关机:

systemctl halt/poweroff

重启:

systemctl reboot

挂起:

systemctl suspend 数据还保存在内存中

休眠:

systemctl hibernate 数据写入磁盘

休眠并挂起

systemctl hybri-sleep

CentOS7引导顺序

UEFI或BIOS初始化,运行POST开机自检

选择启动设备

引导装载程序,CentOS7是grub2

加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg

加载initramfs驱动模块

加载内核选项

内核初始化,CentOS7使用systemd代替init

执行initrd.target所有单元,包括挂载/etc/fstab

从initramfs根文件系统切换到磁盘根目录

systemd执行默认target配置

其配置文件:/etc/systemd/system/default.target /etc/systemd/system/

blob.png

内核参数设置:

设置内核参数,只影响当次启动

启动时,在linux16行后添加systemd.unit=desired.target

system.unit=emergency.target

system.unit=recure.target

recure.target比emergency支持更多的功能,日志等

启动排错:

文件系统损坏:

先尝试自动修复,失败则进入emergency shell,提示用户修复

在/etc/fstab不存在对应设备的UUID等一段时间,如不可用,进入emergency shell

在/etc/fstab不存在对应的挂载点,systemd尝试创建挂载点,否则提示进入emergency shell

在/etc/fstab不正确的挂载选项,提示进入emergency shell

破解root口令:

按e进入编辑模式

将光标移至linux16行尾,添加内核参数rd.break

按ctrl+x启动

重新挂载根文件系统mount -o remount,rw /sysroot

切换当前的工作环境至/sysroot:chroot /sysroot

passwd root

touch /.autorelabel重新打标签

blob.png

blob.png

blob.png

blob.png

修复Grub2

引导时进入可以使用命令行的界面

可从文件系统引导

只要配置文件/boot/grub2/grub.cfg

修复配置文件

grub-mkconfig> /boot/grub2/grub.cfg

修复grub

grub2-install /dev/sda BIOS环境

grub2-install UEFI环境

Tomcat详解

Tomcat(一):基础配置详解

简介:

Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Sun公司创建了第一个Servlet容器,即Java Web Server,但JWS只是为了演示Servlet的相应功能,所以其很不稳定。与此同时,Apache软件基金创建了JServ项目,一个能够与Apache整合起来的Servlet容器。1999年,Sun把JWS捐给了Apache软件基金,于是两个项目合二为一,即今天Tomcat的前身。第一个Tomcat版本是Tomcat 3.x系列,而发布于2001年Tomcat 4.0则是在此前基础上进行了重新设计和实现,其代码项目被命名为Catalina。

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun公司提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但是,不能将Tomcat和Apache Web服务器混淆,Apache Web Server是一个用C语言实现的HTTP web server;这两个HTTP web server不是捆绑在一起的。Apache Tomcat包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

Tomcat提供了一个Jasper编译器用以将JSP编译成对应的Servlet。Tomcat的Servlet引擎通常与Apache或者其他Web服务器一起工作。除了用于开发过程中的调试以及那些对速度和事务处理只有很小要求的用户,很少会将Tomcat单独作为Web服务器。但随着版本的更新,正有越来越多的用户将其单独作为Web服务器用以那些对速度和可靠性有较高要求的环境中。

Tomcat不是一个完整意义上的Jave EE服务器,它甚至都没有提供对哪怕是一个主要Java EE API的实现;但由于遵守Apache开源协议,Tomcat却又为众多的Java应用程序服务器嵌入自己的产品中构建商业的Java应用程序服务器,如JBoss和JOnAS。尽管Tomcat对Jave EE API的实现并不完整,然而很企业也在渐渐抛弃使用传统的Java EE技术(如EJB)转而采用一些开源组件来构建复杂的应用。这些开源组件如Structs、Spring和Hibernate,而Tomcat能够对这些组件实现完美的支持。

HTTP是一种无状态的协议,在用户的一次连接请求响应完成后,服务器端将无法识别在后续的连接请求中再次识别此用户,交将其所有请求关联起来。为了解决这个问题,java container通过一个临时的cookie来为此用户保存一个标识,此标识即所谓的用户session。

在第一次调用之后,JSP会被编译成一个servlet类,在后续的操作中则可以直接使用此类,从而避免了对每一次调用的都要重新分析和编译。因此,类似servlet,JSP的执行需要在container中完成。JSP的container跟servlet的container基本相同,但在JSP执行之前,需要一些额外的步骤如与servlet代码建立会话等。Tomcat包含了一个叫做Catalina的Servlet container(执行servlet和编译过的JSP)和一个JSP编译器(Jasper编译器)。事实上,一个包含了JSP编译器和Servlet容器的应用程序组合通过被称作Web容器。

JSP和Servlet的最大区别在于,Servlet通常需要事先编译好,而JSP则并非必须事先编译。这意味着Servlet通常放置于私有资源区域,而JSP则通常以嵌入代码的方式包含于HTML页面文件中,这些HTML文件通常放置在公开资源区域。

MVC架构:Controller,Model和View各自独立,一个流行的开源实现是Apache Structs框架;目今,设计优良的Web应用程序通常用相就的技术实现相应的功能,比如: 1、Servlet用于实现应用逻辑; 2、JSP用于内容展示; 3、标签库和JSP扩展语言用于替换在JSP内部嵌入Java代码,进而降低了HTML维护的复杂度; 4、MVC框架用于实现展示和应用逻辑的分离;

安装tomcat:

先安装Jvm:

安装openjdk或oracle jdk:

1、安装openjdk:

[root@node0 ~]# yum install java-1.7.0-openjdk
[root@node0 ~]# java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

2、安装oracle jdk: Jdk7下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

[root@node0 ~]# yum install jdk-7u79-linux-x64.rpm
[root@node0 ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
[root@node0 java]# source /etc/profile.d/java.sh
[root@node0 java]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
安装tomcat:

官网:http://tomcat.apache.org

[root@node0 ~]# tar xf apache-tomcat-7.0.65.tar.gz -C /usr/local/
[root@node0 ~]# cd /usr/local/
[root@node0 local]# ln -sv apache-tomcat-7.0.65 tomcat
"tomcat" -> "apache-tomcat-7.0.65"
[root@node0 ~]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[root@node0 ~]# source /etc/profile.d/tomcat.sh
提供脚本:
[root@node0 ~]# cat /etc/rc.d/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
JAVA_HOME=/usr/lib/jvm/jre
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME

case $1 in
start)
  exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
  exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  exec $CATALINA_HOME/bin/catalina.sh start ;;
*)
  echo "Usage: `basename $0` {start|stop|restart}"
  exit 1
  ;;
esac
[root@node0 ~]# chmod +x /etc/rc.d/init.d/tomcat
[root@node0 ~]# chkconfig tomcat --add

配置文件:

[root@node3 tomcat]# ls conf/    \\:Tomcat的配置文件;
server.xml:Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat6在启动时会事先读取此文件的相关设置;
logging.properties:Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等;
    context.xml:每个webapp都有其配置文件,通常位于webapp目录下的WEB-INF目录中,通常用于定义会话管理器、Realm以及JDBC等;此配置文件是用于为部署在当前tomcat实例上的所有的webapp提供默认配置;
主配置文件:

组件:由java类实现;有些组件实现的方式不止一种;有些组件可以实现嵌套别的组件;由一组嵌套的层次和组件组成,一般可分为以下四类

顶级类组件:位于配置层次的顶级,并且彼此间有着严格的对应关系;

连接器组件:连接客户端(可以是浏览器或Web服务器)请求至Servlet容器,

容器类组件:包含一组其它组件;

被嵌套类组件:位于一个容器当中,但不能包含其它组件;

各常见组件:

1、服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。

2、服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情下只为一个service指派一个server。

连接器类组件:

3、连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP、JServ和JK2连接器。

容器类组件:

4、引擎(Engine):引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

5、主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。

6、上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。

被嵌套类(nested)组件:

这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。

7、阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。

8、日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。

9、领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。

应用部署:

tomcat的应用程序必须被“部署”才能够被访问:

部署:是指将webapp及其所依赖的类库等装载进tomcat实例,以便接收用户请求的操作过程;

部署方式:

静态方式(冷部署):在tomcat启动之前进行的部署;

动态方式(热部署):在不打断tomcat实例运行的前提下,通过tomcat manager或其它的部署工具进行的部署;

具体的部署工具:

Tomcat Manager

ANT脚本

TCD: tomcat client deployer

部署相关的操作:

Deploy:将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context中定义的路径来访问此webapp,并将其特有的类通过class loader装载到tomcat实例上;

Redeploy:重新部署,常用于升级时;

Undeploy:反部署,停止webapp,并从tomcat实例移除其部分文件和部署名;

Stop:停止;

Start:启动

webapp应用程序:有多种归档格式

*.warweb应用程序
*.jarEJB类
*.rar:资源适配器
*.ear:企业级应用程序

对于一个Web应用程序而言,其通常由Servlets、JSP和其它文件等共同组成。这些文件通常被打包成WAR(Web Application Archive)格式,并以.war作为打包后的文件扩展名。而Servlet规范则定义了在WAR内部组织这些文件的标准目录结构。其目录和功用如下:

/:Web应用程序的根目录,所有可被公开访问的文件均放置于此处,如HTML、JSP和图片文件等;
/WEB-INF:此目录为私有资源目录,其内部的所有文件和子目录均不能被公开访问;包含着此Web应用程序的配置文件web.xml(程序结构描述符文件)通常放置于此目录;
/WEB-INF/classes:当前Web应用程序的类文件的存在目录;
/WEB-INF/lib:可被打包为JAR格式的类文件通常放置于此目录;

tomcat自带的两webapp:

manager:管理器

输出状态信息

部署webapp

host-manager:主机管理器

配置示例:

定义管理页面用户名及密码:

[root@node0 ~]# cd /usr/local/tomcat/conf
[root@node0 conf]# vim tomcat-users.xml
<role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> 
[root@node0 conf]# service tomcat restart

访问测试:

输入用户名和密码:

输入图片说明

服务状态页:

输入图片说明

应用管理页:

输入图片说明

主机管理页:

输入图片说明

手动定义一个资源:

[root@node0 ~]# mkdir -p /tomcat/webapps/test/WEB-INF/{classess,lib}
[root@node0 ~]# cd /tomcat/webapps/test
[root@node0 app]# vim index.jsp
<%@ page language="java" %>
<html>
  <head><title>JSP Test Page</title></head>
  <body>
    <h1><font color="red">node0.chencer.org</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("chencer.org","chencer.org"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

定义虚拟主机:

[root@node0 ~]# cd /usr/local/tomcat/conf
[root@node0 conf]# vim server.xml
<Engine name="Catalina" defaultHost="node0.chencer.org">    \\:默认主机设置为node0.chencer.org;

<Host name="node0.chencer.org" appBase="/tomcat/webapps" unpackWARs="true" autoDeploy="true">
</Host>

访问测试:

输入图片说明

实例:

部署站点程序;

站点程序包:JspRun!_6.0.0_GBK.zip

部署站点文件:

[root@node0 ~]# unzip JspRun\!_6.0.0_GBK.zip
[root@node0 ~]# mv upload /tomcat/webapps/jsprun
[root@node0 ~]# cd /tomcat/webapps/jsprun/
[root@node0 jsprun]# vim config.properties
dbhost = 192.168.1.4
dbport=3306
dbuser = jruser
dbpw = jrpass
dbname = jrdb

定义虚拟主机:

[root@node0 ~]# cd /usr/local/tomcat
[root@node0 tomcat]# vim conf/server.xml
<Host name="node0.chencer.org" appBase="/tomcat/webapps" unpackWARs="true" autoDeploy="true">
<Context path="/bbs" docBase="jsprun" />
</Host>

安装并启动mysql:

[root@node0 mysql-5.5-rpm]# yum install  MySQL-shared-compat-5.5.48-1.el6.x86_64.rpm MySQL-client-5.5.48-1.el6.x86_64.rpm MySQL-server-5.5.48-1.el6.x86_64.rpm
[root@node0 ~]# service mysql start

创建数据库,并赋予权限:

[root@node0 ~]# mysql
mysql> create database jrdb;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on jrdb.* to 'jruser'@'192.168.1.4' identified by 'jrpass';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

站点安装:

输入图片说明

访问测试:

输入图片说明

owncloud

环境
php的gd库选中libjpeg/libpng/freetype扩展

下载

1 wget -c https://download.owncloud.org/community/owncloud-9.0.2.zip

nginx配置

1、SSL配置-生成证书

1 cd /usr/local/nginx/cert
2 openssl genrsa -des3 -out server.key 1024 #用于生成rsa私钥文件
3 openssl req -new -key server.key -out server.csr #openssl req 用于生成证书请求
4 openssl rsa -in server.key -out server_nopwd.key #利用openssl进行RSA为公钥加密
5 openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt

2、nginx.conf

upstream php-handler {
    server 127.0.0.1:9000;
    #server unix:/var/run/php5-fpm.sock;
}

server {
    listen 80;
    server_name cloud.xxxxxx.com;
    # enforce https
    return 301 https://$server_name$request_uri;
    access_log /data/logs/owncloud.log;
}

server {
    listen 443 ;
    ssl on;
    server_name cloud.xxxxxx.com;

    ssl_certificate /usr/local/nginx/cert/server.crt;
    ssl_certificate_key /usr/local/nginx/cert/server_nopwd;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this topic first.
    #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /data/htdocs/owncloud/owncloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log /data/logs/owncloud_robots.log;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

    location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; }
    location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; }

    location /.well-known/acme-challenge { }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into this topic first.
        #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log /data/logs/owncloud.log;
    }

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log /data/logs/owncloud.log;
    }
}


3、访问cloud.xxxxx.com进行数据库设置。
4、下载客户端开始使用:https://owncloud.org/install/。


常见错误

PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\”PATH\”) 测试只返回一个空值

解决办法:
vim /usr/local/php/etc/php-fpm.conf

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

客户端效果图
Windows客户端:

WEB客户端:

Android客户端:

 

CentOS 7 修改时区

设置时区同样, 在 CentOS 7 中, 引入了一个叫 timedatectl 的设置设置程序.

用法很简单:

# timedatectl # 查看系统时间方面的各种状态
      Local time: 四 2014-12-25 10:52:10 CST
  Universal time: 四 2014-12-25 02:52:10 UTC
        RTC time: 四 2014-12-25 02:52:10
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
# timedatectl list-timezones # 列出所有时区
# timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
# timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海

其实不考虑各个发行版的差异化, 从更底层出发的话, 修改时间时区比想象中要简单:

# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

centos建立本地软件仓库-同步官方YUM源

1)安装httpd

yum install httpd

2)安装yum-utils 和 createrepo,其中yum-utils包含reposync命令

yum install yum-utils createrepo

3)执行如下命令,将所有文件下载到指定路径。其中xxx在*.repo文件内第一行的中括号内(可以用yum repolist列出),表示包的名称;dest_dir代表存放路径;参数–source表示同时下载*.src.rpm文件

reposync -r xxx -p <dest_dir> –source

4)将dest_dir路径挂载到/var/www/html/下

ln -s <dest_dir> /var/www/html

5)在客户端,修改/etc/yum.repo.d/CentOS-Base.repo文件内的mirrorlist或者baseurl中的主机地址为http服务器的ip地址

6)在客户端,执行测试
yum clean all
yum makecache