#! /bin/bash
echo "java环境初始化开始"
#功能描述: Centos8.5系统自动初始化脚本
#自动配置:IP地址\Yum源\docer\docker-compose v2.7.0\ZSH\Portainer\Cockpit\zabbix-agent2\chronyd
#脚本执行方法
#  1.刚安装完的系统最好重启一下, 如果是虚拟机的一定要重启!!! 
#  2.删除所有#开头的注释, vim打开本文件光标停在首行并执行"set ff=unix"回车一直过滤到最后一行,保存退出!
#  3.执行命令"bash 01Auto_default_v1.5.sh"
#程序: 01Auto_default_v1.5.sh
#日期: 2022-8-25
#制作人: zl

#配置网卡IP地址
#nmcli con modify eth0 connection.autoconnect yes
#nmcli con modify eth0 ipv4.address 192.168.1.7/24
#nmcli con modify eth0 ipv4.method manual
#nmcli con modify eth0 ipv4.gateway 192.168.1.1
#nmcli con modify eth0 ipv4.dns "114.114.114.114 8.8.8.8"
#nmcli c reload
#nmcli c down eth0
#nmcli c up eth0
#nmcli d reapply eth0
#systemctl restart NetworkManager

#配置sshd和修改端口号为2538并添加进selinux和firewalld中
echo "Port 22">>/etc/ssh/sshd_config
echo "Port 8338">>/etc/ssh/sshd_config
echo "ListenAddress 0.0.0.0:22">>/etc/ssh/sshd_config
echo "ListenAddress 0.0.0.0:2538">>/etc/ssh/sshd_config
echo "Protocol 2">>/etc/ssh/sshd_config
echo "HostKey /etc/ssh/ssh_host_rsa_key">>/etc/ssh/sshd_config
echo "PermitRootLogin yes">>/etc/ssh/sshd_config
echo "StrictModes yes">>/etc/ssh/sshd_config
echo "MaxAuthTries 5">>/etc/ssh/sshd_config
echo "MaxSessions 3">>/etc/ssh/sshd_config
echo "PasswordAuthentication yes">>/etc/ssh/sshd_config
echo "AllowUsers root baiinfo">>/etc/ssh/sshd_config
echo "PermitEmptyPasswords no">>/etc/ssh/sshd_config
dnf install policycoreutils-python-utils
semanage port -a -t ssh_port_t -p tcp 2538
systemctl restart sshd
firewall-cmd --permanent --add-port=2538/tcp --zone=public
firewall-cmd --reload

#配置dnf源, 可以自行更换为阿里等公共源, 这里用的是私Yum库
mkdir -p /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
curl http://192.168.1.139:22538/os/x86_64/centos8.repo -o /etc/yum.repos.d/centos8.repo
dnf clean all && dnf makecache
dnf install -y mtr vim bash-completion

#配置docker和docker-compose
dnf erase -y podman buildah
dnf remove docker*
rm -fr /var/lib/docker/
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
systemctl daemon-reload
dnf clean all && dnf makecache
dnf install -y docker-ce
systemctl start docker
systemctl enable docker
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.7.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#docker-compose version && docker version
cat >/etc/docker/daemon.json<<DD
{
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"2"},
  "bip":"10.10.136.1/24"
}
DD
systemctl daemon-reload
systemctl restart docker

#配置Portainer管理器, 访问URL: https://local_ip:9443
docker image load -i ./Portainer-CN/6053537portainer-celatest.tar
#docker pull 6053537/portainer-ce (在线安装方式)
mkdir -p /data/Portainer_data/
docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /data/Portainer_data/:/data \
    6053537/portainer-ce

#配置cockpit系统运维工具,访问URL: https://local_IP:9090
dnf install -y cockpit
systemctl enable --now cockpit.socket
firewall-cmd --permanent --zone=public --add-service=cockpit
firewall-cmd --reload

#配置Zabbix-Agent端, Zabbix服务端为192.168.25.38, 如果有server=127.0.0.1一定要注销
rpm -ivh ./zabbix/zabbix-agent-6.2.3-release1.el8.x86_64.rpm
sed -i '/Server=/d' /etc/zabbix/zabbix_agentd.conf
sed -i '/ServerActive=/d' /etc/zabbix/zabbix_agentd.conf 
sed -i '/Hostname=/d' /etc/zabbix/zabbix_agentd.conf
echo "Server=192.168.25.38">>/etc/zabbix/zabbix_agentd.conf 
echo "Hostname=$(hostname)">>/etc/zabbix/zabbix_agentd.conf
systemctl enable --now zabbix-agent
firewall-cmd --zone=public --add-port=10050/tcp --permanent
firewall-cmd --reload
usermod -a -G docker zabbix
systemctl restart zabbix-agent

#配置时钟服务器为192.168.25.38
sed -i 's/pool 2.centos.pool.ntp.org iburst/server 192.168.25.38 iburst/g' /etc/chrony.conf
systemctl restart chronyd.service

# 安装Java环境
yum install -y java-1.8.0-openjdk
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el8_4.x86_64/">>/etc/profile
echo "export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar">>/etc/profile
echo "export PATH=$PATH:$JAVA_HOME/bin">>/etc/profile
source /etc/profile

# 安装nexus3正式仓库 (用于正式环境java项目被引用jar的存放,需审核无误后上传至该仓库中)
# 第一次登录要改admin密码,初始化密码在nexus容器/nexus-data/admin.password
# 修改admin密码后,选择Disable anonymous access,防止游客访问
yum install -y maven
mkdir -p /data/nexus-data && chmod -R 777 /data/nexus-data
mkdir -p /data/software/nexus
docker image load -i ./nexus3/nexus3.tar.gz
cat >/data/software/nexus/docker-compose.yml<<DD
version: '3.1'
services:
  nexus3:
    image: sonatype/nexus3:3.36.0
    restart: always
    container_name: nexus
    network_mode: host 
    ports:
      - 28081:8081
      - 28082:8082
    volumes:
      - /data/nexus-data:/nexus-data
DD
firewall-cmd --permanent --add-port=28081/tcp && \
firewall-cmd --permanent --add-port=28082/tcp && \
firewall-cmd --reload

# 导入MySql8,密码为:1+1=2.abcd1234(注意引用时加''或转义字符\)
mkdir -p /data/mysql/{data,conf,logs}
mkdir -p /data/software/mysql/
docker image load -i ./mysql8/mysql8.tar.gz
cat >/data/software/mysql/docker-compose.yml<<DD
version: '3.1'
services:
  db:
    image: mysql:8
    restart: always
    container_name: bi-mysql8
    network_mode: host   
    environment:
      MYSQL_ROOT_PASSWORD: 1+1=2.abcd1234
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    volumes:
      - /data/mysql/data:/var/lib/mysql
      - /data/mysql/conf:/etc/mysql/conf.d
      - /data/mysql/logs:/logs
DD

# NACOS镜像
mkdir -p /data/software/nscos
docker image load -i ./nacos/nacos-server.tar.gz

# nginx1.23.1镜像
mkdir -p /data/nginx/{data,conf,logs}
mkdir -p /data/software/nginx/
docker image load -i ./nginx/nginx.tar.gz
cat >/data/nginx/conf/nginx_conf<<DD
upstream baiinfo_cluster {
    server 192.168.10.34;
    server 192.168.10.35;
}
server {
    listen       80;
    server_name  localhost;
    access_log  /wwwlogs/access.log  main;
    error_log /wwwlogs/error.log;
    location / {
        proxy_pass http://dsj.baiinfo.com;
        proxy_set_header Host $host:$server_port;
        }
}
DD
cat >/data/software/nginx/docker-compose.yml<<DD
version: '3.1'
services:
  nginx:
    restart: always
    container_name: nginx
    network_mode: host 
    image: nginx
    ports:
      - 80:80
    volumes:
      - /data/nginx/data:/usr/share/nginx/html
      - /data/nginx/logs:/wwwlogs
      - /data/nginx/conf/nginx_conf:/etc/nginx/conf.d/default.conf
    privileged: true
DD
firewall-cmd --permanent --add-port=80/tcp && \
firewall-cmd --reload

# skywalking监控(单节点)镜像, URL: 192.168.10.35:18082
mkdir -p /data/elasticsearch/data
chmod -R 777 /data/elasticsearch/data
mkdir -p /data/software/skywalking
docker image load -i ./skywalking/elasticsearch.tar.gz
docker image load -i ./skywalking/skywalking-oap-server.tar.gz
docker image load -i ./skywalking/skywalking-ui.tar.gz

# minio(多节点)镜像, 访问URL:http://local_IP:9001
mkdir -p /data/software/minio
docker image load -i ./minio/minio.tar.gz

# redis集群(cluster)镜像
mkdir -p /data/software/redis
mkdir -p /data/redis/share/redis-node-{1,2,3,4}
mkdir -p /data/redis/conf
mkdir -p /data/redis/logs
touch /data/redis/logs/redis-node-{1,2,3,4}-log.txt
chmod -R 777 /data/redis/logs
docker image load -i ./redis7/redis7.tar.gz
cat >/data/software/redis/docker-compose.yml<<DD
version: '3.1'
services:
DD
for port in $(seq 1 4)
do
cat >/data/redis/conf/redis-node-${port}.conf<<DD
protected-mode no
bind 0.0.0.0
port 638${port}
cluster-enabled yes 
appendonly yes 
logfile "/logs/redis-node-${port}-log.txt"
requirepass bai_redis_2538 
masterauth bai_redis_2538
DD
cat >>/data/software/redis/docker-compose.yml<<DD
  redis-node-${port}:
    image: redis:latest
    restart: always
    network_mode: host
    container_name: redis-node-${port}
    privileged: true
    ports:
      - 638${port}:638${port}
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /data/redis/share/redis-node-${port}:/data
      - /data/redis/conf/redis-node-${port}.conf:/etc/redis/redis.conf
      - /data/redis/logs:/logs
    command: ["redis-server","/etc/redis/redis.conf"]
DD
done
firewall-cmd --permanent --add-port=6381-6384/tcp && \
firewall-cmd --permanent --add-port=16381-16384/tcp && \
firewall-cmd --reload

# elasticsearch集群(cluster) 
docker image load -i ./es7/elasticsearch_7.1.0.tar.gz
mkdir -p /data/es-cluster/node/data4
mkdir -p /data/es-cluster/node/config4
mkdir -p /data/es-cluster/node/logs4
mkdir -p /data/es-cluster/node/plugins4
chmod 777 -R /data/es-cluster
# 写入es节点配文件, 需要手动修改节点配置
cat >/data/es-cluster/node/config3/es.yml<<DD
# 设置集群名称,集群内所有节点的名称必须一致
cluster.name: baiinfo-es-cluster
# 设置节点名称,集群内节点名称必须唯一
node.name: node3
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 监听地址,用于访问该es
network.host: 0.0.0.0
# 发布地址,一个单一地址,用于通知集群中的其他节点
network.publish_host: 192.168.10.36
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# 集群中的节点可以有N个有master资格的节点: 默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
# 写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.10.35:9300", "192.168.10.35:9301","192.168.10.34:9300","192.168.10.36:9300","192.168.10.37"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# 初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1", "node2","node3"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.audit.enabled: true
DD
firewall-cmd --permanent --add-port=9200/tcp && \
firewall-cmd --permanent --add-port=9300/tcp && \
firewall-cmd --reload
echo "vm.max_map_count=262144">>/etc/sysctl.conf
sysctl -p
# 写入es节点启动文件, 需要手动修改节点配置
mkdir -p /data/software/es-cluster
cat >>/data/software/es-cluster/docker-compose.yml<<DD
version: '3.1'
services:
  es3:
    image: elasticsearch:7.1.0
    restart: always
    network_mode: host
    container_name: baiinfo-es-node3
    privileged: true
    environment:
      - 'ES_JAVA_OPTS=-Xms6144m -Xmx6144m'
    volumes:
      - /data/es-cluster/node/config3/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/es-cluster/node/data3:/usr/share/elasticsearch/data
      - /data/es-cluster/node/plugins3:/usr/share/elasticsearch/plugins
      - /data/es-cluster/node/config3/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
DD

# 安装nodejs, 版本node-v14.18.2.tar.gz 
cp ./nodejs/node-v14.18.2-linux-x64.tar.gz /data/software
cd /data/software
tar -zxvf node-v14.18.2-linux-x64.tar.gz
ln -s /data/software/node-v14.18.2-linux-x64/bin/npm /usr/local/bin/
ln -s /data/software/node-v14.18.2-linux-x64/bin/node /usr/local/bin/
ln -s /data/software/node-v14.18.2-linux-x64/bin/npx /usr/local/bin/
rm node-v14.18.2-linux-x64.tar.gz

#配置ZSH解释器
dnf install -y zsh
cp -a ./oh-my-zsh/ ~/.oh-my-zsh
bash ~/.oh-my-zsh/tools/install.sh
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME\=\"ys\"/g' ~/.zshrc
source ~/.zshrc

最新文章

  1. JS跨域
  2. Android入门(三)Activity-生命周期与启动模式
  3. 关于css布局的几篇文章
  4. 去model化开发
  5. DevExpress MessageBox 弹出框 底层类
  6. 在Linux下写一个线程池以及线程池的一些用法和注意点
  7. respondsToSelector的使用
  8. 接着上一个版本在上一个分离access-token和ticket的版本
  9. virus.win32.parite.H病毒的查杀方法
  10. 《Windows游戏编程技巧大师》就DirectDraw而创建DirectDraw知识笔记
  11. Oracle积累
  12. Linux中SVN的备份与恢复
  13. [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数
  14. 【392】Python 列表解析
  15. 使用Python遇到:&#39;utf-8&#39; codec can&#39;t decode byte 0x8b in position 1: invalid start byte 问题
  16. Lodash JavaScript 实用工具库
  17. 用Python破解斗地主残局
  18. Python中read()、readline()和readlines()三者间的区别和用法
  19. mybatis源码阅读心得
  20. [leetcode]658. Find K Closest Elements绝对距离最近的K个元素

热门文章

  1. 手把手教你搭建Windows 搭建Prometheus + Grafana + Jmeter可视化监控平台
  2. 使用AJAX绑定点击事件将接口值返回渲染到指定位置
  3. 可以编译驱动,编译ch34x驱动后,不能编译驱动了
  4. rn用Modal实现Drawer
  5. 肖sir____Apsara Clouder云计算专项技能认证题目收集
  6. 2022-05-23内部群每日三题-清辉PMP
  7. c++ sizeof详解
  8. Appium-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)
  9. Java并发编程 —— synchronized关键字
  10. [iOS] 随手记录 IDFA 的一些相关内容