当前位置: 首页 > news >正文

基于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:主机目录文件需要自行进行修改。 证书使用了预先生成好的证书,也可以自行生成配置。

使用说明

  1. 初始化操作用户。

        当拿到一台新机器时,首先需要对其进行用户限制。 前提:将主机设置为可以使用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语言】函数的基本概念 | 函数堆栈调用原理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...

Vue.prototype 详解及使用

前言&#xff1a; 我们可能会在很多组件里用到数据/实用工具&#xff0c;但是不想污染全局作用域。这种情况下&#xff0c;可以通过在原型上定义它们使其在每个 Vue 的实例中可用。 1. 基本示例 在main.js中添加一个变量到 Vue.prototype Vue.prototype.$appName My App这…...

音视频八股文(3)--ffmpeg常见命令(2)

07-ffplay命令播放媒体 播放本地文件 播放本地 MP4 视频文件 test.mp4 的命令&#xff0c;从第 2 秒位置开始播放&#xff0c;播放时长为 10 秒&#xff0c;并且在窗口标题中显示 “test time”&#xff1a; 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版本不兼容问题所以你就直接按照我的版本就可以了&#xff08;numpy 1.16.5&#xff09; Process finished with exit code -1073741819 (0xC0000005) …...

python协程实战

协程简介 协程(Coroutine)又称微线程、纤程&#xff0c;协程不是进程或线程&#xff0c;其执行过程类似于 Python 函数调用&#xff0c;Python 的 asyncio 模块实现的异步IO编程框架中&#xff0c;协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似…...

【论文笔记】VideoGPT: Video Generation using VQ-VAE and Transformers

论文标题&#xff1a;VideoGPT: Video Generation using VQ-VAE and Transformers 论文代码&#xff1a;https://wilson1yan. github.io/videogpt/index.html. 论文链接&#xff1a;https://arxiv.org/abs/2104.10157 发表时间&#xff1a; 2021年9月 Abstract 作者提出了…...

scala之基础面向对象

scala 既是面向对象 也是函数式编程 从Java 发展而来&#xff0c;依赖JVM环境 一、 scala 在linux中运行 scala 模式中直接编写运行 scala文件&#xff0c;load执行 scala编译程序 编译 运行 scala java 二、scala 数据类型 基础数据类型 val 不可变变量 函数式编程 …...

Qt5.12实战之多线程编程概念

1.为什么要使用多线程? a. 基于线程,同时处理多个任务,软件响应更灵敏 b.充分利用CPU的多核心功能增加应用运行效率 c.多线程在同一进程间使用共享通信更加高效 d.多个线程之间进行切换比多个进程之间进行切换,线程开销更少. 2.操作系统与进程关系 a. MS-DOS系统 属于单进程…...

格式化数据恢复怎么做?超实用的3种方法在这!

案例&#xff1a;格式化数据怎么恢复 【我的电脑前段时间中病毒了&#xff0c;无奈之下我只能将其格式化&#xff0c;但是很多重要的文件和图片之类的也一起被删除了&#xff0c;有什么方法可以恢复这些格式化的数据吗&#xff1f;非常着急&#xff01;】 格式化数据恢复&…...

【Java|golang】1105. 填充书架---动态规划

给定一个数组 books &#xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架上&#xff08;它们的厚度之和小于等于书架的宽度 shelfWidt…...

linux基础命令

linux基础命令 一、linux命令 熟悉账务linux命令对运维的好处是巨大的&#xff0c;只有熟悉了命令咱们在运维的操作上才能如鱼得水。 系统信息 arch #显示机器的处理器架构(1) uname -m #显示机器的处理器架构(2) uname -r #显示正在使用的内核版本 dmidecode -q …...

【三十天精通Vue 3】 第十八天 Vue 3的国际化详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…...

02 - 学会提问

学会提问 一、引言 1.1 GPT简介 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的大型预训练语言模型。 凭借其强大的文本生成、理解和处理能力&#xff0c;GPT已在诸如自然语言处理、机器翻译、文本摘要等多个领域取得了显著的…...

Java经典的Main方法面试题

mian方法是做什么用的&#xff1f; main方法是Java程序的入口方法&#xff0c;JVM在运行的时候会首先查找main方法不用main方法如何运行一个类&#xff1f; 不行&#xff0c;没有main方法我们不能运行Java类 在Java7之前&#xff0c;你可以通过使用静态初始化运行Java类。但是&…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 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协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...