#! /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