基于ansible初始化linux服务器基础环境。
大家好,今天我要和大家分享一个关于搭建centos环境的新方法。
以前我们经常会看到一些文章介绍如何搭建centos环境,但很多时候都会出现一些问题。不过现在有了一种新的方法,就是使用ansible脚本来实现。
虽然这种方法仅适用于centos7,但只要稍作修改就可以应用到其他的环境中。使用ansible脚本可以让搭建环境更加简单、快速、稳定。
GIT 项目访问地址
https://gitee.com/haofeng82/basic-host-machine--init.git
目录
介绍
软件架构
安装教程
使用说明
初始化操作用户。
2. 主机基本功能初始化。
3.为机器设置host映射。
可能存在的问题
脚本摘要
1 初始化操作账户
2 初始化centos系统
3 安装docker
4 设置hosts映射
GIT 项目访问地址
介绍
这是一套ansbile脚本,实现了始化基于centos7系统的服务器主机基础环境的功能。 目前仅用于测试和教学环境使用,并仅保证centos77版本有效。
软件架构
软件基于ansible脚本对服务器进行初初始化工作,主要工作如下: 1 增加ops做操作账户,并为其增加ssh证书登录,此用户可以切换至root。 2 并且禁用了root登录。所有需要root的行为,都会通过ops 进行become 3 禁用了防火墙等功能。统一使用外部防火墙。 4 安装了必要的系统包,并进行了系统优化。 5 安装了docker,因为后续的一些其他项目的安装,会用到docker。 6 提供了统一设置主机host的功能
安装教程
1需要找一台服务器,安装ansible环境,然后把当前项目复制到相应的目录下。
2依据后面的使用步骤执行脚本即可。 PS:主机目录文件需要自行进行修改。 证书使用了预先生成好的证书,也可以自行生成配置。
使用说明
-
初始化操作用户。
当拿到一台新机器时,首先需要对其进行用户限制。 前提:将主机设置为可以使用root登录。密码统一初始化为XXX.
主要操作如下: 1 禁用root的远程登录。 2 禁用密码登录。 3 创建operator操作用户,及operator组。并为其设置登录密码、上传登录共公钥。
上面的所有操作,均在init-user角色中,并通过下面的脚本调用
上传整个目录到ansible主机的/ansible/basic-host-machine目录下,并对host文件中的to-init-user-host分组中的主机ip进行设置。指定为要操作的机器。 cd /ansible/basic-host-machine cp -rf /ansible/basic-host-machine/.ssh /root ansible-playbook -vvv --check -i hosts/nat/host-basic init-basic-host-user.yml ansible-playbook -vvv -i hosts/nat/host-basic init-basic-host-user.yml
2. 主机基本功能初始化。
此步骤必须依赖第一步 在执行完初始化用户之后。会以operator用户进行登录。 此时的root用户已经被禁用掉了。
上传整个目录到ansible主机的/ansible/basic-host-machine目录下,并对host文件中的to-init-env-host分组中的主机ip进行设置。指定为要操作的机器。
主要工作包括: 安装必要的工具包 开启或者关闭防火墙以及selinux 安装docker环境
cd /ansible/basic-host-machine
ansible-playbook -vvv --check -i hosts/nat/host-basic init-basic-host-env.yml ansible-playbook -vvv -i hosts/nat/host-basic init-basic-host-env.yml
3.为机器设置host映射。
此步骤必须依赖第一步 统一对主机的hosts进行配置
上传整个目录到ansible主机的/ansible/basic-host-machine目录下,并对host文件中的to-init-user-host分组中的主机ip进行设置。指定为要操作的机器。 cd /ansible/basic-host-machine
ansible-playbook -vvv --check -i hosts/nat/host-basic set-host-mapping
ansible-playbook -vvv -i hosts/nat/host-basic set-host-mapping.yml
可能存在的问题
变量的配置还是有一些不合适的地方。需要再进行修改。目前仅是提交了初始版本。
代码放到了git上,需要的小伙伴直接拿来用就好。如果有不严谨的地方,也希望能够指正出来。
脚本摘要
1 初始化操作账户
---
#关闭防火墙
- name: close fire wall
shell: "{{ item}}"
with_items:
- "systemctl stop firewalld.service"
- "systemctl disable firewalld.service"
#关闭selinux
- name: Disabled SELinux
selinux: state=disabled
#下次启动也不会再起selinux
- name: set selinux disabled
replace:
path: /etc/selinux/config
regexp: '^SELINUX=enforcing'
replace: 'SELINUX=disabled'
##创建用户分组
- name: Create group
group: name={{group}} state=present
when: add_user
#当add_user变量为true,创建用户。此用户用于运行项目。
- name: Add sudo user
user:
name: "{{ user }}"
password: "{{ operation_user_password }}"
state: present
when: add_user
#将证书拷贝至远程机器,用户为root,这一步是为了能够通过证书ssh访问远程主机
- name: install ssh key
authorized_key: user={{user}}
key="{{ lookup('file','/root/.ssh/id_rsa.pub')}}"
state=present
#将用户临时切换到为sudo root用户时,设置为不需要密码。
- name: Add configured user accounts to passwordless sudoers.
lineinfile: >
dest=/etc/sudoers
regexp='^{{ user }}'
line='{{ user }} ALL=(ALL) NOPASSWD: ALL'
state=present
validate='visudo -cf %s'
2 初始化centos系统
---
#配置主机名
- name: Configure hostname
hostname:
name: "{{ host_name }}"
- name: install basic tools1
yum:
name: "{{ item }}"
state: present
with_items:
- "wget"
#更换yum阿里数据源
- name: change yum source to ali
shell: "{{ item}}"
with_items:
- "mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup"
- "wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo"
- "yum clean all"
- "yum makecache"
#安装基础工具
#- name: update yum
# shell: yum -y update
- name: install basic tools2
yum:
name: "{{ item }}"
state: present
with_items:
- "wget"
- "curl"
- "unzip"
- "vim"
- "net-tools"
- "nfs-utils"
- "pcre-devel"
- "openssl-devel"
- "gcc"
- "perl"
- "perl-devel"
#复制cronolog rpm安装文件到服务器
- name: copy cronolog rpm install file
copy:
src: "{{ playbook_dir }}/data/archive/cronolog-1.6.2-14.el7.x86_64.rpm"
dest: "/tools/cronolog/"
# 安装 cronolog
- name: install cronolog
shell: "{{ item }}"
with_items:
- "rpm -ivh /tools/cronolog//cronolog-1.6.2-14.el7.x86_64.rpm"
ignore_errors: True
#临时修改linux文件句柄数(用户级别)
- name: modify linux user ulimit temp
shell: "{{ item}}"
with_items:
- "ulimit -SHn 65535"
# 永久修改 linux user soft limit
- name: modify linux root user soft ulimit per
lineinfile: >
dest=/etc/security/limits.conf
regexp='^root soft nofile'
line='root soft nofile 65535'
state=present
# 永久修改 linux user hard limit
- name: modify linux user ulimit per
lineinfile: >
dest=/etc/security/limits.conf
regexp='^root hard nofile'
line='root hard nofile 65535'
state=present
# 永久修改 linux user soft limit
- name: modify linux ops user soft ulimit per
lineinfile: >
dest=/etc/security/limits.conf
regexp='^ops soft nofile'
line='ops soft nofile 65535'
state=present
# 永久修改 linux user hard limit
- name: modify linux ops user ulimit per
lineinfile: >
dest=/etc/security/limits.conf
regexp='^ops hard nofile'
line='ops hard nofile 65535'
state=present
# 上传 linux system 配置文件,优化系统性能参数
- name: upload linux system ulimit temp
shell: "echo 655350 > /proc/sys/fs/file-max"
- name: Copy sysctl.conf to server
template:
src: sysctl.conf.j2
dest: /etc/sysctl.conf
mode: 0740
# 重启sysctl
- name: restart sysctl
shell: "sysctl -p"
#将证书复制到用户的.ssh目录下,并更改权限。
- name: copy auth public key to host file
copy:
src: "/root/.ssh/id_rsa.pub"
dest: "/home/{{ user }}/.ssh/"
owner: "{{ user }}"
group: "{{ group }}"
#私钥的权限一定不要别的用户和组能够读取到
- name: copy auth private key to host file
copy:
src: "/root/.ssh/id_rsa"
dest: "/home/{{ user }}/.ssh/"
owner: "{{ user }}"
group: "{{ group }}"
mode: 0600
#更新sshd文件配置,更改sshd端口,是否开启sshd_use_dns,是否开启sshd_gssapi_authentication是否开启,
#设置sshd协议 2,禁止root登录(先不设置)是否开启密码登录(先不禁止密码登录)
- name: Update SSH configuration to be standard setting.
lineinfile: >
dest={{ sshd_config_path }}
regexp="{{ item.regexp }}"
line="{{ item.line }}"
state=present
with_items:
- { regexp: "^#?Port", line: "Port {{ sshd_port }}" }
- { regexp: "^#?UseDNS", line: "UseDNS {{ sshd_use_dns }}" }
- { regexp: "^GSSAPIAuthentication", line: "GSSAPIAuthentication {{ sshd_gssapi_authentication}}" }
- { regexp: "^#?Protocol", line: "Protocol {{ sshd_protocol }}" }
- { regexp: "^#?PermitRootLogin", line: "PermitRootLogin {{ sshd_permit_root_login }}" }
- { regexp: "^PasswordAuthentication", line: "PasswordAuthentication {{ sshd_password_authentication }}" }
- { regexp: "^#?RSAAuthentication", line: "RSAAuthentication yes" }
- { regexp: "^#?PubkeyAuthentication", line: "PubkeyAuthentication yes" }
- { regexp: "^#?RhostsRSAAuthentication", line: "RhostsRSAAuthentication yes" }
notify: restart sshd
#更新sshd文件配置,更改sshd端口,是否开启sshd_use_dns,是否开启sshd_gssapi_authentication是否开启,
#设置sshd协议 2,禁止root登录(先不设置)是否开启密码登录(先不禁止密码登录)
- name: Update SSH configuration to be standard setting.
lineinfile: >
dest={{ ssh_config_path }}
regexp="{{ item.regexp }}"
line="{{ item.line }}"
state=present
with_items:
- { regexp: "^#?StrictHostKeyChecking", line: "StrictHostKeyChecking no" }
notify: restart sshd
3 安装docker
---
#配置主机名
#https://www.jianshu.com/p/b4a6239712bf
#还需要更新docker镜像源!!
- name: Configure hostname
hostname:
name: "{{ host_name }}"
- name: install yum-utils
yum: name=yum-utils state=present
ignore_errors: True
- name: add docker repo
shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
ignore_errors: True
- name: install docer-ce
yum:
name: docker-ce
state: present
ignore_errors: True
- name: install docker-ce-cli
yum:
name: docker-ce-cli
state: present
ignore_errors: True
- name: install containerd.io
yum:
name: containerd.io
state: present
ignore_errors: True
- name: 创建docker目录
shell: mkdir -p /etc/docker/
- name: config mirro
copy: src=~/docker-daemon.json dest=/etc/docker/daemon.json
tags: configmirro
- name: start enable docker
service: name=docker state=started enabled=true
- name: restrat
shell: sudo systemctl daemon-reload && sudo systemctl restart docker
tags: restart
#必须在ansible主机之上,的/data/archive下存在docker-compose文件
- name: Copy docker compose file
copy:
src: "{{ playbook_dir }}/data/archive/docker-compose"
dest: "/usr/local/bin/docker-compose"
- name: install docker compose
shell: "{{ item }}"
with_items:
- "sudo chmod +x /usr/local/bin/docker-compose"
- "sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose"
- "sudo docker-compose --version"
ignore_errors: True
4 设置hosts映射
#更新ip-host映射
- name: update-ip-host-mapping
template:
src: host-file.j2
dest: /etc/hosts
mode: 0644
GIT 项目访问地址
https://gitee.com/haofeng82/basic-host-machine--init.git
大家可以在评论区留言,分享自己使用ansible脚本搭建环境的经验和技巧,让我们一起交流吧!记得点赞和分享哦!
相关文章:
基于ansible初始化linux服务器基础环境。
大家好,今天我要和大家分享一个关于搭建centos环境的新方法。 以前我们经常会看到一些文章介绍如何搭建centos环境,但很多时候都会出现一些问题。不过现在有了一种新的方法,就是使用ansible脚本来实现。 虽然这种方法仅适用于centos7&#…...
leetcode-数据库题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 175. 组合两个表176. 第二高的薪水177. 第N高的薪水178. 分数排名181. 超过经理收入的员工182. 查找重复的电子邮箱183. 从不订购的客户 175. 组合两个表 select p…...
[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…...
信息的相关性和冗余度:信息在整个文明中的作用
文章目录 I 古埃及的象形文字1.1 罗塞塔石碑1.2 古埃及文字音节和希腊字母的对应表1.3 破解古埃及文字 I 古埃及的象形文字 1.1 罗塞塔石碑 这个石碑是在公元前196年埃及国王托勒密五世加冕一周年的诏书。 在此前大约一百年,埃及已经被来自希腊北方城邦的亚历山大…...
python数据结构与算法-动态规划(最长公共子序列)
一、最长公共子序列问题 1、问题概念 一个序列的子序列是在该序列中删去若干元素后得 到的序列。 例如:"ABCD”和“BDF”都是“ABCDEFG”的子序列。 最长公共子序列(LCS) 问题: 给定两个序列X和Y,求X和Y长度最大的公共子字列。 例:X"ABBCBDE”…...
Java版企业电子招投标系统源码 Spring Cloud+Spring Boot 电子招标采购系统功能清单
一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…...
【c语言】函数的基本概念 | 函数堆栈调用原理
创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...
Vue.prototype 详解及使用
前言: 我们可能会在很多组件里用到数据/实用工具,但是不想污染全局作用域。这种情况下,可以通过在原型上定义它们使其在每个 Vue 的实例中可用。 1. 基本示例 在main.js中添加一个变量到 Vue.prototype Vue.prototype.$appName My App这…...
音视频八股文(3)--ffmpeg常见命令(2)
07-ffplay命令播放媒体 播放本地文件 播放本地 MP4 视频文件 test.mp4 的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”: ffplay -window_title "test time" -ss 2 -t 10 -autoe…...
使用bert4keras出现的问题(Process finished with exit code -1073741819 (0xC0000005))
1、环境 python 3.7.12 tensorflow 1.15 keras 2.3.1 bert4keras 0.9.7 protobuf 3.19.0 numpy 1.16.5 2、出现问题 numpy版本不兼容问题所以你就直接按照我的版本就可以了(numpy 1.16.5) Process finished with exit code -1073741819 (0xC0000005) …...
python协程实战
协程简介 协程(Coroutine)又称微线程、纤程,协程不是进程或线程,其执行过程类似于 Python 函数调用,Python 的 asyncio 模块实现的异步IO编程框架中,协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似…...
【论文笔记】VideoGPT: Video Generation using VQ-VAE and Transformers
论文标题:VideoGPT: Video Generation using VQ-VAE and Transformers 论文代码:https://wilson1yan. github.io/videogpt/index.html. 论文链接:https://arxiv.org/abs/2104.10157 发表时间: 2021年9月 Abstract 作者提出了…...
scala之基础面向对象
scala 既是面向对象 也是函数式编程 从Java 发展而来,依赖JVM环境 一、 scala 在linux中运行 scala 模式中直接编写运行 scala文件,load执行 scala编译程序 编译 运行 scala java 二、scala 数据类型 基础数据类型 val 不可变变量 函数式编程 …...
Qt5.12实战之多线程编程概念
1.为什么要使用多线程? a. 基于线程,同时处理多个任务,软件响应更灵敏 b.充分利用CPU的多核心功能增加应用运行效率 c.多线程在同一进程间使用共享通信更加高效 d.多个线程之间进行切换比多个进程之间进行切换,线程开销更少. 2.操作系统与进程关系 a. MS-DOS系统 属于单进程…...
格式化数据恢复怎么做?超实用的3种方法在这!
案例:格式化数据怎么恢复 【我的电脑前段时间中病毒了,无奈之下我只能将其格式化,但是很多重要的文件和图片之类的也一起被删除了,有什么方法可以恢复这些格式化的数据吗?非常着急!】 格式化数据恢复&…...
【Java|golang】1105. 填充书架---动态规划
给定一个数组 books ,其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelfWidt…...
linux基础命令
linux基础命令 一、linux命令 熟悉账务linux命令对运维的好处是巨大的,只有熟悉了命令咱们在运维的操作上才能如鱼得水。 系统信息 arch #显示机器的处理器架构(1) uname -m #显示机器的处理器架构(2) uname -r #显示正在使用的内核版本 dmidecode -q …...
【三十天精通Vue 3】 第十八天 Vue 3的国际化详解
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…...
02 - 学会提问
学会提问 一、引言 1.1 GPT简介 GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的大型预训练语言模型。 凭借其强大的文本生成、理解和处理能力,GPT已在诸如自然语言处理、机器翻译、文本摘要等多个领域取得了显著的…...
Java经典的Main方法面试题
mian方法是做什么用的? main方法是Java程序的入口方法,JVM在运行的时候会首先查找main方法不用main方法如何运行一个类? 不行,没有main方法我们不能运行Java类 在Java7之前,你可以通过使用静态初始化运行Java类。但是&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
