脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - shell - Linux各项目环境部署记录(换服务器部署脚本整理)

Linux各项目环境部署记录(换服务器部署脚本整理)

2023-05-16 15:29AntBlack shell

每次换便宜的服务器都要导致环境重新部署一遍,十分麻烦,于是把每次部署的脚本整理了一下,方便在服务器上快速进行部署,基于 CentOS

一. 前言

Github :  github.com/black-ant

CASE 备份 :  gitee.com/antblack/ca…

每次换便宜的服务器都要导致环境重新部署一遍,十分麻烦。

于是把每次部署的脚本整理了一下,方便在服务器上快速进行部署。

基于 CentOS~~~

二. 环境篇

2.1 yum 安装

通常情况下 yum 是默认集成的,如果出现 yum 未集成的情况,按照如下步骤进行安装 :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// S1 : 查询 yum 版本(判断是否安装)
sudo yum version
// S2 : 安装 epel-release软件仓库
sudo yum install epel-release
// S3 : 安装 yum
sudo yum install yum
// S4 : 更新 yum
sudo yum update
// 其他问题 :
failovermethod=priority in /etc/yum.repos.d/CentOS-Epel.repo;
Configuration: OptionBinding with id "failovermethod" does not exist
- 1: sudo vim /etc/yum.repos.d/CentOS-Epel.repo
- 2: 注释掉 # failovermethod=priority
- 3: sudo yum update 更新系统
Failed to download metadata for repo 'appstream':
Cannot prepare internal mirrorlist: No URLs in mirrorlist
- 由于 centOS 停止维护带来的问题,需要修改 mirro地址
- 1: 进入 repo 管理 cd /etc/yum.repos.d/
- 2: 修改全局地址
    - sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    - sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
- 3:更新缓存 : yum makecache
- 4:更新 yum : yum update -y

2.2 Java 环境准备

Yum 版本

?
1
2
3
4
5
6
7
// S1 : 查询 Java 支持的版本
yum search java|grep jdk
yum search java-1.8.0-openjdk
// S2 : 安装 JDK
sudo yum install java-1.8.0-openjdk-devel.x86_64
// S3 : 查询 JDK 安装情况
java -version

2.3 Docker 安装

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 查看是否已安装docker列表
yum list installed | grep docker
// 安装必要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
// 添加 docker 源 (选择合适的源,以下选其一即可,选错可能会 timeout)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo=http://mirrors.tencent.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
// 安装docker   
sudo yum install docker-ce
// 启动docker
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl restart docker
// 查看docker服务状态
systemctl status docker 

2.4 docker compose 安装

?
1
2
3
4
// 安装 docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// 准备处理文件夹
sudo chmod +x /usr/local/bin/docker-compose

但是,众所周知的原因,Github 访问不是很快

?
1
2
3
4
5
// 适用 pip3 进行安装
pip3 install -U pip setuptools
pip3 install docker-compose
// 查看 docker compose 版本
docker-compose --version

2.5 防火墙配置

不是所有的服务器都需要配置这个,腾讯云的默认好像就是关闭的,阿里轻量好像要配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看firewalld的运行状态
# 默认防火墙 是关闭的 (not running)
firewall-cmd --state
# 启动防火墙
# 没有任何提示 则启动成功
systemctl start firewalld
# 添加规则 (--permanent 代表重启也生效)
# 提示 success 则成功  
firewall-cmd --permanent --zone=public --add-port=8848/tcp        
firewall-cmd --permanent --zone=public --add-port=443/tcp   
firewall-cmd --permanent --zone=public --add-port=3336/tcp  
firewall-cmd --permanent --zone=public --add-port=5601/tcp  
firewall-cmd --permanent --zone=public --add-port=8443/tcp  
// 查看防火墙规则
# 重新加载防火墙配置
# 提示 success 则成功
firewall-cmd --reload
# 至此结束
# 查看所有打开的端口
firewall-cmd --zone=public --list-ports
firewall-cmd --list-all 
# 关闭防火墙
systemctl stop firewalld

2.6 其他小组件

?
1
2
3
4
5
// 安装 curl
yum install curl
// git
yum -y install git
ssh-keygen -t rsa -C "test123123@qq.com"

三. 组件安装

3.1 安装 RocketMQ (docker compose)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 1. 进入一个新路径 (我这里适用 home)
mkdir /home/rocket
// 2. 创建 docker compose
mkdir rocketmq-docker
cd rocketmq-docker
touch docker-compose.yml
// 3. 编辑 docker-compose.yml
version: '3'
services:
  namesrv:
    image: rocketmqinc/rocketmq:latest
    container_name: rocketmq-namesrv
    command: sh mqnamesrv
    ports:
      - "9876:9876"
    volumes:
      - ./data/namesrv/logs:/root/logs
  broker:
    image: rocketmqinc/rocketmq:latest
    container_name: rocketmq-broker
    command: sh mqbroker -c /rocketmq/broker.conf
    depends_on:
      - namesrv
    ports:
      - "10909:10909"
      - "10911:10911"
      - "10001:10001"
      - "10002:10002"
      - "8080:8080"
    environment:
      NAMESRV_ADDR: namesrv:9876
    volumes:
      - ./data/broker/logs:/root/logs
      - ./broker.conf:/rocketmq/broker.conf
// 4. 创建 broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
listenPort = 10911
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
autoCreateTopicEnable=true
brokerIP1=10.10.101.80
// 5. 运行 docker
docker-compose up -d
// 查询整体运行情况
docker ps
// 发送消息

补充要点 :

?
1
2
3
// 以上用的 4.8.0 不一定能下载到,可以查询支持的版本》 去 docker hub 镜像查询
https://hub.docker.com/r/rocketmqinc/rocketmq/tags
// broker.conf 中需要配置你的宿主机IP,否则 nameserver 拿到的会有问题

安装 docker console

?
1
2
3
4
5
wget https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip
unzip rocketmq-all-4.8.0-bin-release.zip
cd rocketmq-all-4.8.0-bin-release/bin
// 使用
sh mqadmin sendMessage -n localhost:9876 -t testTopic -p "Hello, RocketMQ!"

安装 RocketMQ Console

?
1
2
3
4
// 下载后配置访问地址,别忘了 brokerIP1 里面也要配置地址
https://github.com/apache/rocketmq-dashboard.git
// 注意添加 入站规则
TCP:5601,9876,10909,10911,10001,10002

3.2 安装 Redis

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// S1 : 安装 Redis
yum install redis
// S2 : 允许远程访问
vi /etc/redis.conf
bind 127.0.0.1  -> 加上 # 注释
protected-mode yes 改为 protected-mode no
//  S3 : 启动redis
service redis start
//------------------------
//  停止redis
service redis stop
//  查看redis运行状态
service redis status
//  查看redis进程
ps -ef | grep redis

3.3 安装 MySQL

图方便短期用直接选择 Docker ,长期用慎选,镜像没选好很容易变肉鸡。

?
1
2
3
4
5
6
7
8
// S1 : 拉取镜像
docker pull mysql
// S2 : 运行容器 (密码适当复杂点)
docker run -d --name antMySQL -e MYSQL_ROOT_PASSWORD=test9786366 -p 3306:3306 mysql
// S3 : 查看运行情况
docker ps
docker exec -it antMySQL bash
mysql -uroot -ptest9786366

3.4 安装 ES

S1 : 准备 docker-compose.yml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
version: '3.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.0
    container_name: elasticsearch
    environment:
      - 'cluster.name=elasticsearch'
      - 'discovery.type=single-node'
      - 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m'
    volumes:
      - esdata:/usr/share/elasticsearch/data
    ports:
      - '9200:9200'
      - '9300:9300'
    networks:
      - elk
  kibana:
    image: docker.elastic.co/kibana/kibana:7.12.0
    container_name: kibana
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/es/kibana.yml:/usr/share/kibana/config/kibana.yml
    links:
      - elasticsearch:es
    environment:
      - ELASTICSEARCH_URL=http://81.22.11.111:9200
      - 'elasticsearch.hosts=http://es:9200'
      - I18N_LOCALE=zh-CN
    ports:
      - '5601:5601'
    networks:
      - elk
    depends_on:
      - elasticsearch
networks:
  elk:
    name: elk
    driver:
        bridge
volumes:
  esdata:
    driver: local

S2 : 准备 kibana.yml

?
1
2
3
4
# Default Kibana configuration for docker target
server.host: '0.0.0.0'
elasticsearch.hosts: ['http://11.22.33.111:9200']
monitoring.ui.container.elasticsearch.enabled: true

S3 : 启动

docker-compose --compatibility up -d

?
1
2
// 这里我是简化版,没用 logstash,想要还可以选择加上更多的配置项
https://blog.51cto.com/u_14129797/5694302

3.5 安装 Nacos

这里还是使用 docker 安装,包含各种监控插件 @参考地址

?
1
2
3
4
5
// S1 : 准备安装目录
mkdir nacos-docker
cd nacos-docker
touch docker-compose.yml
// S2 : 配置 docker-compose

找了很多案例,这一个应该是最完整的,提供了 prometheus 和 grafana. 不过里面有些东西已经找不到了,这里补充下 :

@ docker-compose部署nacos单机版(简洁优化版) 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
version: '3'
services:
  nacos:
    image: nacos/nacos-server:2.0.4
    container_name: nacos
    restart: always
    environment:
      PREFER_HOST_MODE: hostname #如果支持主机名可以使用hostname,否则使用ip,默认也是ip
      SPRING_DATASOURCE_PLATFORM: mysql #数据源平台 仅支持mysql或不保存empty
      MODE: standalone
      MYSQL_SERVICE_HOST: 127.0.0.1
      MYSQL_SERVICE_DB_NAME: nacos
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      NACOS_APPLICATION_PORT: 8848
      JVM_XMS: 512m
      JVM_MMS: 320m
    volumes:
      - ./docker/nacos/standalone-logs/:/home/nacos/logs
      - ./docker/nacos/plugins/:/home/nacos/plugins
      - ./docker/nacos/conf/application.properties:/home/nacos-docker/application.properties
    ports:
      - "8848:8848"
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    volumes:
      - ./docker/nacos/prometheus/prometheus-standalone.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - nacos
    restart: on-failure
  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    ports:
      - 3000:3000
    restart: on-failure
  • 这里还可以编排mysql进去,已经有数据库了,这里就不要了
  • 不需要 prometheus 和 grafana 只取 nacos 即可
  • application.properties 我给的空的

prometheus-standalone.yaml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
global:
  scrape_interval:     15s #拉取 targets 的默认时间间隔
  #scrape_timeout: 10s #拉取一个 target 的超时时间。
  evaluation_interval: 15s #执行 rules 的时间间隔。
  #external_labels: #额外的属性,会添加到拉取的数据并存到数据库中。
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    scheme: http
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs: #因为使用了网桥所以targets可以直接使用容器名而不用ip
      - targets: ['prometheus:9090']
  - job_name: 'nacos'
    metrics_path: '/nacos/monitor/prometheus'
    static_configs:
      - targets: ['nacos:8848']

除了 2.0.4 还有很多其他的版本 nacos/nacos-server Tags | Docker Hub , 这里我对这个版本比较熟悉

?
1
2
3
4
5
// S3 : 启动容器
docker-compose --compatibility up -d
// S4 : 查看结果
docker-compose ps
docker-compose stop

补充

docker compose 命令

?
1
2
3
4
5
6
7
8
9
docker-compose up: 启动应用程序(如果不存在,则构建并启动它)
docker-compose down: 停止并删除应用程序的容器
docker-compose ps: 显示当前正在运行的应用程序的容器状态
docker-compose logs: 显示应用程序的容器日志
docker-compose build: 构建应用程序的镜像
docker-compose restart: 重启应用程序的容器
docker-compose exec: 在容器中执行命令
docker-compose stop: 停止应用程序的容器
docker-compose rm: 删除已停止的应用程序的容器

docker 常用命令

?
1
2
// 查找镜像
docker search nacos

总结

基本上常用的就在这里了,其他的以后碰到了再补充进去.

其他比较复杂的就是 jenkins ,K8S 这些,安装可能就不是走 yum了,会稍微复杂一些。有时间单章来发,更多关于Linux项目部署的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7231539287459872827

延伸 · 阅读

精彩推荐