一、主机名规范
1、数字0-9、字母a-zA-Z、连字符-;
2、开头结尾不能为连字符;
3、开头不允许使用数字;
4、用小写字母而不用大写字母;
5、使用合法单词,便于记忆;
修改命令:hostnamectl set-hostname <FQDN>
hostname 命名宗旨:可视化高,精简,FQDN
规则: {类型(bms/ecs/vbs/vms/ecs/cvm/...)}{机器编号/宿主IP后缀}-{城市名}-{操作系统}-{应用环境}-[{项目名}[{项目编号}]]-{应用名称}{本机IP后缀}[-{应用标识}{应用编号}]
- 类型释义
类型 | 解释 |
---|---|
bms | 机房物理机器 |
kvm | kvm虚拟机 |
vbs | virtual Box虚拟机 |
vms | VMware 虚拟机 |
cvm | 腾讯虚拟机 |
ecs | 阿里云虚拟机 |
aws | 亚马逊虚拟机 |
maz | Microsoft Azure虚拟机 |
ctyun | 天翼云虚拟机 |
- 系统释义
系统类型 | 缩写 |
---|---|
Red Hat Enterprise Linux | rhel rhel7 |
CentOS | ctos ctos7 |
Fedora | fdr fdr7 |
Oracle Linux | rl orl7 |
Ubuntu | ubt ubt1604 |
CoreOS | crs crs1068 |
Windows | win win2019 |
- 环境释义
环境类型 | 全称 | 缩写 |
---|---|---|
开发环境 | development | dev |
集成环境 | integration | intgr |
测试环境 | testing | tst |
QA验证 | QA | qa |
模拟环境 | staging | stg |
生产环境 | production | prd |
- 其它释义
城市名 - 中文拼音全称(英文字母/拼音)
项目名/编号 - 项目名称(英文字母/拼音)或 选项目编号
应用名称 - 应用名称(英文字母/拼音)例如it、mysql、nginx等
应用标识 - 应用标识,例如master、slave等
应用编号 - 两位应用编号01开始,例如:01、02等等
例如:vbs181-changsha-ctos7-dev-devops-mysql99-master01
示意:virtual Box虚拟机181-长沙-Centos7-开发环境-自动部署项目-Mysql尾数99IP-主库
二、磁盘分区
- Linux 最佳分区方案
目录 | 容量 |
---|---|
/boot | 256MB左右 |
/swap | 0M后续挂载 |
/home | 最大的剩余空间 |
/var | 视服务器功能决定大 |
/tmp | 建议2G以上 |
/opt | 10G左右 |
... | 视情况而定 |
- Linux 极简分区方案
目录 | 容量 |
---|---|
/boot | 256MB左右 |
/swap | 0M后续挂载 |
/ | 最大的剩余空间 |
三、初始配置
1、关闭selinunx
默认所有机器关闭selinux
getenforce 查看当前selinux安全工具的状态
setenforce 0 临时修改selinux的状态为自由模式(宽容模式)
# vi /etc/sysconfig/selinux
# enforcing - SELinux security policy is enforced.
# selinux 策略 强制执行
# permissive - SELinux prints warnings instead of enforcing.
# selinux策略不强制执行,只是给与警告
# disabled - No SELinux policy is loaded.
# selinux策略不加载执行,禁用
SELINUX=disabled 修改为disabled
# 永久修改了selinux的状态,需要重新启动linux系统,才会生效
2、关闭防火墙及开放端口
# 安装防火墙工具
yum install firewalld firewalld-config -y
# 打开如下端口,以防止启动防火墙时保障端口能通讯。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
以上设置好后,关闭防火墙。即默认关闭防火墙,有需要时再启用。
所有接入机建议开通防火墙,逻辑机及存储机默认关闭,跑内网即可。
iptables -F # 清除防火墙规则
systemctl stop firewalld # 停止防火墙服务,关闭防火墙 (新式)
service firewalld stop # 停止防火墙服务,关闭防火墙(老式)
systemctl disable firewalld # 设置firewalld服务开机不启动
3、设置NTP时间同步及合理时区
# 安装时间同步【centos7默认已经安装】
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
systemctl restart chronyd
# 编辑时间同步
# NTP服务器:
# 210.72.145.44 (国家授时中心服务器IP地址))
# ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
vim /etc/chrony.conf
server 210.72.145.44 iburst
server ntp.sjtu.edu.cn iburst
# 查看时间同步状态
timedatectl status
# 开启网络时间同步
timedatectl set-ntp true
# 查看 ntp_servers
chronyc sources -v
# 查看 ntp_servers 状态
chronyc sourcestats -v
# 查看 ntp_servers 是否在线
chronyc activity -v
# 查看 ntp 详细信息
chronyc tracking -v
# 查看日期时间、时区及 NTP 状态
timedatectl
# 查看时区列表
timedatectl list-timezones
timedatectl list-timezones | grep -E "Asia/S.*"
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 修改日期时间[一般不需要设置]
timedatectl set-time "2021-09-89 15:20:20"
# 开启 NTP
timedatectl set-ntp true/flase
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
# 或者从底层修改时区
echo "Asia/shanghai" > /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 硬件时钟调整为与本地时钟一致[不推荐设置]
hwclock --systohc --localtime 或 timedatectl set-local-rtc 1
# 将硬件时间设置成 UTC [推荐设置]
hwclock --systohc --utc 或 timedatectl set-local-rtc 0
# 显示硬件时间
hwclock --show
(1)UTC
整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。
(2)GMT
格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)
(3)CST
中国标准时间 (China Standard Time)【GMT + 8 = UTC + 8 = CST】
(4)DST
夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)
4、更新Yum源
安装wget工具 :yum install wget -y
// 网易163源
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
// 阿里源
wget http://mirrors.aliyun.com/repo/Centos-7.repo
# 以阿里源为例子
cd /etc/yum.repos.d/
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
5、更新系统内核及版本
# 所有都升级和改变
# 升级所有包,系统版本和内核,改变软件设置和系统设置
yum update -y
# 只升级包和版本,不升级内核
# 升级所有包和系统版本,不改变内核,软件和系统设置
yum -y upgrade
# 如果加上参数-y,就会自动选择y,不需要你再手动选择!
6、安装基本工具
yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop lsof ntpdate telnet bridge-utils sysstat
其它辅助工具
# 辅助工具
yum install expect -y
yum -y install sshpass
# 按照必要工具
yum -y install gcc gcc-c++ cmake make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel libevent-devel ncurses-devel mlocate flex libaio-devel ntp openldap-devel libcurl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker iotop bzip2* ntpdate wget zip htop vim iftop nc nmap dstat sysstat lrzsz screen lftp curl strace lsof telnet tree tcpdump nmon busybox screen zlib zlib-devel glib glib-devel bzip2-devel pcre-devel openssl python-devel readline-devel tk-devel libselinux-python vim net-snmp net-snmp-devel net-snmp-utils nfs-utils rpcbind man glibc glibc-devel glib2 glib2-devel e2fsprogs-devel libxslt libxslt-devel openldap-clients openldap-servers parted
# 远程登录执行
sshpass -p "123456" ssh -t -o 'StrictHostKeyChecking=no' administrator@172.18.5.xxx << EOF
EOF
7、其它操作
如需要提升用户权限
# 允许免密钥
sudo vim /etc/sudoers
# 或 visudo
xxxx ALL=(ALL) NOPASSWD: ALL
# 检查
visudo -c
# 普通用户sudo权限
sudo su 切换到超级用户
# 添加文件的写权限 chmod u+w /etc/sudoers
vim /etc/sudoers 找到 root ALL=(ALL) ALL
# 在下一行添加 xxx ALL=(ALL) ALL xxx是你的用户名
chmod u-w /etc/sudoers 撤销写权限
随机密码
cat /dev/urandom | LC_ALL=C tr -dc "[:alnum:]" | fold -w 10 |head -10
cat /dev/urandom | LC_ALL=C tr -dc "[:graph:]" | fold -w 10 |head -10
8、自动化Shell安装参考
#!/bin/bash
# 安装基础工具
insert_base_tool(){
wget -V &>/dev/null
if [ $? -eq 0 ];then
echo "【wget】已经安装过了!"
else
yum install -y wget &>/dev/null
[ $? -eq 0 ] && echo "【wget】安装成功!" || echo "【wget】安装失败,请手动安装!"
fi
}
# 更改源
change_yum() {
grep mirrors.163.com /etc/yum.repos.d/CentOS-Base.repo &>/dev/null
[ $? -eq 0 ] && echo "【yum源】已更改过了!" && return 1;
# 更改yum源
cd /etc/yum.repos.d/
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum clean all && yum makecache
# 更新系统
yum update -y
[ $? -eq 0 ] && echo "【yum】已更新成功!" || echo "【yum】更新失败!"
}
# 安装常用工具
install_tools() {
yum install -y vim wget unzip zip bind-utils tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop lsof ntpdate telnet bridge-utils sshpass sysstat &>/dev/null
[ $? -eq 0 ] && echo "【常用工具】已安装成功!" || echo "【常用工具】安装失败!"
}
# 防火墙
install_firewall() {
yum install firewalld firewalld-config -y | grep 'already installed' &>/dev/null
[ $? -eq 0 ] && echo "【firewalld firewalld-config】已安装成功,不再重复安装了!" && return 1;
yum install firewalld firewalld-config -y
if [ $? -eq 0 ];then
echo "【firewalld firewalld-config】已安装成功!"
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --add-service=ntp --permanent
#刷新防火墙
firewall-cmd --reload
else
echo "【firewalld firewalld-config】安装失败了!"
fi
}
# 安装JDK
install_jdk() {
rpm -qa | grep java |xargs -i rpm -e --nodeps {}
[ $? -eq 0 ] && echo "【自带JDK】已卸载成功!"
java_verson=`java -version 2>&1 |sed -n '1p'|sed -e 's/"//g'|awk '{print $3}'|xargs`
[ $java_verson == "1.8.0_301" ] && echo "当前java版本:1.8.0_301,符合要求,不再安装!" && return 1 || echo "jdk1.8.0_301 正在执行安装..."
# whereis java | grep jdk1.8.0_301 &>/dev/null
# [ $? -eq 0 ] && echo "【jdk1.8.0_301】已安装成功,不再重复安装了!" && return 1;
echo "【请等待】正下载jdk-8u301-linux-x64.rpm到本地..."
# wget http://172.18.5.xxx/tools/jdk/jdk-8u301-linux-x64.rpm
# 提前上传 jdk-8u301-linux-x64.rpm 到当前sh目录即可
if [ $? -eq 0 ]; then
echo "【安装就绪】下载jdk-8u301-linux-x64.rpm到本地成功!"
[ -f jdk-8u301-linux-x64.rpm ] && rpm -ivh jdk-8u301-linux-x64.rpm &>/dev/null
[ $? -eq 0 ] && echo "【JDK】安装成功!" || echo "【JDK】安装失败!"
[ -f jdk-8u301-linux-x64.rpm ] && rm jdk-8u301-linux-x64.rpm -rf && echo "【清理jdk-8u301-linux-x64.rpm包】成功!"
else
echo "jdk-8u301-linux-x64.rpm 下载失败!"
fi
grep java /etc/profile &>/dev/null
if [ $? -ne 0 ]; then
echo "########################" >> /etc/profile
echo "# For user_add_jdk start" >> /etc/profile
echo "JAVA_HOME=/usr/java/jdk1.8.0_301-amd64" >> /etc/profile
echo "JRE_HOME=/usr/java/jdk1.8.0_301-amd64/jre" >> /etc/profile
echo "PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin" >> /etc/profile
echo "CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JRE_HOME/lib" >> /etc/profile
echo "export JAVA_HOME JRE_HOME PATH CLASSPATH" >> /etc/profile
echo "# For user_add_jdk end " >> /etc/profile
echo "########################" >> /etc/profile
source /etc/profile
[ $? -eq 0 ] && echo "【配置JDK全局环境变量】成功!"
else
echo "【java环境变量】已配置过了!"
java -version 2>&1 |sed -n '1p'|sed -e 's/"//g'|awk '{print $3}'|xargs -i echo "当前jdk版本为:{}!"
fi
}
# 安装docker
install_docker(){
# 检测安装情况
docker -v &>/dev/null
if [ $? -eq 0 ]; then
docker_verson=`docker -v |awk -F ',' '{print \$1}'|awk '{print \$NF}'|xargs`
echo -ne "【docker已安装】当前版本:${docker_verson} "
[ $docker_verson \> "20" ] && echo "大于20,符合要求,不升级" && return 1 || echo "小于20 正在执行升级..."
rpm -qa | grep docker |xargs -i yum remove -y {}
[ $? -eq 0 ] && echo "【旧版本docker】已卸载成功!"
# 重装
curl -fsSL https://get.docker.com/ | sh
# 重起
systemctl restart docker
# 开机启动
systemctl enable docker
docker -v |awk -F ',' '{print $1}'|awk '{print $NF}'|xargs -i echo "完成docker安装,当前版本为:{}!"
else
echo "未安装过docker,正在执行安装..."
# 重装
curl -fsSL https://get.docker.com/ | sh
# 重起
systemctl restart docker
# 开机启动
systemctl enable docker
docker -v |awk -F ',' '{print $1}'|awk '{print $NF}'|xargs -i echo "完成docker安装,当前版本为:{}!"
fi
}
insert_base_tool
change_yum
install_tools
install_firewall
install_jdk
install_docker
四、常见规范
1、部署目录规范
# 应用文件放在
/online/应用名/
# 临时备份放在
# 备份按日期时间版本归档压缩tar.gz
/backup/应用名/
# 日志文件放在
# on - 在线日志
# off - 归档日志
/data/logs/应用名/{on,off}/
# core文件放在
# hot - 可对外
# ice - 非对外
/data/corefile/应用名/{hot,ice}/{日期}/{分类}/
# 持久化备份放在
# 归档压缩tar.gz文件
# keep - 在运行
# fixed - 已归档
# 备份按日期时间归档压缩tar.gz
/data/backup/应用名/{keep,fixed}/{日期}/{分类}/
网友评论