🥊 服务器部署速查

318 阅读4分钟

1. Linux安装git

yum install git
git --version

git 常用基本命令

# Git 在线参考手册: http://gitref.justjavac.com
# 配置用户名
git config --global user.name "username"
# 配置邮箱
git config --global user.email "xx@gmail.com"
# 初始化生成一个本地仓库
git init
# 添加到暂存区
git add .
# 提交到本地仓库
git commit –m "message"
# 关联到远程仓库
git remote add origin url
# 推送本地 master 分支到远程 master 分支
git push origin master
# 创建一个开发分支并切换到新分支
git checkout -b dev
# 推送本地 dev 分支到远程 dev 分支
git push ogigin dev
# 从远程 dev 分支拉取到本地 dev 分支
git pull origin dev
# 将远程仓库克隆下载到本地
git clone url
# 克隆仓库后切换到 dev 分支
git checkout -b dev origin/dev

2. 服务器配备nodeJS ,升级Node.js的最好方法是使用NVM,这是一个管理多个Node.js版本的实用工具。

# 首先用下面的命令更新包库
sudo apt update
# 使用curl命令安装NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
# 或者使用wget并运行以下命令
wget -q0- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
# 刷新服务器环境变量
source ~/.bashrc
# 检查nvm版本是否正确安装
nvm --version
# 下载node版本 16.17.0(目前最稳定版本)
nvm install 16.17.0
# 使用nvm切换node版本为环境使用node版本
nvm use 16.17.0
# 检查是否安装nvm
command -v nvm
# 查询远程可用Node.js版本
nvm list-remote
# 安装稳定版(三选一 Laster LTS)
# v14.21.2(维护旧系统)
# v16.19.0(推荐)
# v18.13.0(最新)
nvm install 16.19.0
# 切换Node.js版本
nvm use 16.19.0
​
# 使用npm安装yarn(我习惯用yarn,用npm也可以)
npm i -g yarn
# 对项目进行打包(一般情况下)
yarn build
# 运行打包后项目(部署服务器上)
yarn start
# 安装pm2进行进程管理
yarn global add pm2
# 指定程序名的情况下运行pm2
pm2 start ./dist/index.js --name ${`程序名`} --watch
# 未指定程序名的情况下运行pm2
pm2 start ./dist/index.js --watch
# 关闭pm2 
pm2 kill
# npm 命令文档: https://docs.npmjs.com/cli-documentation/ 
# yarn 命令文档: https://classic.yarnpkg.com/en/docs# 设置淘宝镜像
npm config set registry https://registry.npm.taobao.org
yarn config set registry https://registry.npm.taobao.org# 初始化项目:
npm init -y
yarn init -y
​
# 下载项目的所有声明的依赖:
npm instal
yarn
​
# 下载指定的运行时依赖包:
yarn add webpack@3.2.1
npm install 
​
# 下载指定的开发时依赖:
yarn add webpack@3.2.1 -D
npm install webpack@3.2.1 -D
​
# 全局下载指定包:
yarn global add webpack
npm install webpack -g
​
# 删除依赖包:
yarn remove webpack
npm remove webpack -S
​
yarn global remove webpack
npm remove webpack -g
​
# 运行项目中配置的 script:
yarn run xxx
npm run xxx
​
# 查看某个包的信息:
yarn info xxx
npm info xx
# pm2 官方文档 https://pm2.keymetrics.io/docs/usage/quick-start/
# 列出所有进程
pm2 list
# 从进程列表中删除进程
pm2 delete [appname] | id
# 删除进程列表中所有进程
pm2 delete all(关闭并删除应用) 
# 查看某个进程具体情况
pm2 describe app
# 查看进程的资源消耗情况
pm2 monit(监控各个应用进程cpu和memory使用情况)
​
# 同时杀死并重启所有进程,短时间内服务不可用,生成环境慎用
pm2 restart app.js
# 重启所有进程
pm2 restart all
# 重新启动所有进程,0秒重启,始终保持至少一个进程在运行 
pm2 reload app.js
# 以群集模式重新加载所有应用程序
pm2 gracefulReload all# 查看进程日志
# 根据指定应用名查看应用日志
pm2 logs [Name]
# 根据指定应用ID查看应用日志
pm2 logs [ID]
# 查看所有进程的日志
pm2 logs all#启用群集模式(自动负载均衡)
pm2 start app.js -i max

3. docker-compose使用方法(服务器已安装docker-compose)

# 进入/data目录并且新建对应文件夹并进入文件夹
cd /data
mkdir ${`文件夹名`}
cd ${`文件夹名`}
# 创建docker-compose.yml文件,粘贴下面的配置到文件中
vim docker-compose.yml
# 运行docker-compose自动安装
docker-compose up -d
# 停止当前docker-compose
docker-compose down
# 查看日志
docker-compose logs -f

安装MySQL

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7.22
    container_name: outline_mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - /usr/local/docker/mysql/conf:/etc/mysql
      - /usr/local/docker/mysql/logs:/var/log/mysql
      - /usr/local/docker/mysql/data:/var/lib/mysql

安装Postgresql

version: "3.9"
services:
 postgres:
  image: postgres:12-alpine
  container_name: outline_postgres
  restart: always
  environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
  ports:
    - 5432:5432
  volumes:
    - /data/postgresql/data:/var/lib/postgresql/data
注意事项:
1. 需要去腾讯云服务器开启防火墙端口:5432
2. 不能修改user,否则导入sql会报错,导出的sql里面有个owner属性,得改完才行
3. 执行完docker-compose后会在/data/postgresql/data路径下创建文件夹,不能手贱删rm掉

安装Redis

version: "3"
services:
  redis:
    image: redis
    container_name: outline_redis
    ports:
      - "6379:6379"
    user: "redis:redis"

安装RocketMQ

(1)在服务器中安装RocketMQ

前置条件:在/data路径下新建如下结构,具体内容如下
rocketmq
├── conf
│     └── borker.conf
├── logs
├── store
└── docker-compose.yml
$ vim borker.conf
# 消费模式,默认集群
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
# 清除未被消费消息时间,凌晨四点
deleteWhen = 04 
#消息保留时间
fileReservedTime = 48 
#broker角色,默认为异步MASTER
#刷盘策略,异步刷盘
brokerRole = ASYNC_MASTER
#broker文件地址
flushDiskType = ASYNC_FLUSH
# 自己服务器外网IP地址
brokerIP1 = 159.75.103.206
#是否允许自动创建topic
autoCreateTopicEnable=true
version: '3'
services:
  namesrv:
    image: rocketmqinc/rocketmq
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - /data/rocketmq/logs:/home/rocketmq/logs
      - /data/rocketmq/store:/home/rocketmq/store
    command: sh mqnamesrv
  broker:
    image: rocketmqinc/rocketmq
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    volumes:
      - /data/rocketmq/logs:/home/rocketmq-4.4.0/logs
      - /data/rocketmq/store:/home/rocketmq-4.4.0/store
      - /data/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    command: sh mqbroker -n namesrv:9876 -c /opt/rocketmq-4.4.0/conf/broker.conf
    depends_on:
      - namesrv
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  console:
    image: styletang/rocketmq-console-ng
    container_name: rocketmq-console-ng
    ports:
      - 8087:8080
    depends_on:
      - namesrv
    environment:
      - JAVA_OPTS= -Dlogging.level.root=info   -Drocketmq.namesrv.addr=rmqnamesrv:9876 
      - Dcom.rocketmq.sendMessageWithVIPChannel=false
每次拉镜像的时候会有Rocketmq版本会变,需要确保broker.conf能过映射到容器内,
比如上面的rocketmq-4.4.0文件夹可能会改名,导致容器启动失败,我们启动的时候需要检查一下。
docker exec -it {容器ID} /bin/bash
进入容器进行查看broker.conf的准确路径

(2) 访问RocketMQ(要确保连接上了broker)

(3)配置maven和环境

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.0.3</version>
</dependency>
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.5.1</version>
</dependency>
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-common</artifactId>
    <version>4.5.1</version>
</dependency>
# 必须配置
# 指定nameServer
rocketmq.nameServer=159.75.103.206:9876
# 指定发送者组名 相当于rabbitmq的virtual host 逻辑上的划分
rocketmq.producer.group=default
# 其他可选配置
#rocketmq.producer.send-message-timeout=300000
#rocketmq.producer.compress-message-body-threshold=4096
#rocketmq.producer.max-message-size=4194304
#rocketmq.producer.retry-times-when-send-async-failed=0
#rocketmq.producer.retry-next-server=true
#rocketmq.producer.retry-times-when-send-failed=2
@RestController
public class Producer{
​
    @Resource
    private RocketMQTemplate rocketMQTemplate;
​
    @GetMapping("/sendMessage")
    public void sendMessage() {
        rocketMQTemplate.convertAndSend("test_topic", "dwa");
    }
}
/**
 * 在RocketMQ中消费者和发送者组没有关系
 * 如果两个消费者topic一样,而group不一样,则消息变成广播机制
 * RocketMQListener<>泛型必须和接收的消息类型相同
 * @author chenshijie
 */@Component
@RocketMQMessageListener(
        // topic:消息的发送者使用同一个topic
        topic = "test_topic",
        // group:不用和生产者group相同
        consumerGroup = "consumer",
        // tag
        selectorExpression = "*")
public class Consumer implements RocketMQListener<String> {
​
    private final static Logger logger = LogManager.getLogger(Consumer.class);
​
    @Override
    public void onMessage(String message) {
        logger.info("消费者接收到的消息是: {}", message);
    }
}

(4) RocketMQ实现Redis功能

RocketMQ是一个分布式消息系统,可以用于在分布式系统之间传递消息。Redis是一个开源的内存数据存储系统,
提供了丰富的数据结构和在线事务处理功能。
尽管RocketMQ和Redis都是用于在分布式系统之间传递数据的工具,但它们的工作方式和功能略有不同。
RocketMQ主要用于消息传递,而Redis则提供了一种快速读写数据的方法。
如果您想在RocketMQ中实现Redis的功能,可以使用RocketMQ的消息过滤功能来实现。
您可以在生产者端使用过滤器筛选出需要发送的消息,然后在消费者端使用过滤器再次筛选出需要处理的消息。
这样,您就可以在RocketMQ中模拟Redis的功能。
但是,请注意,RocketMQ和Redis有许多不同之处。如果您需要使用Redis的功能,
最好直接使用Redis,而不是尝试在RocketMQ中模拟Redis。
version: '3'
services:
  namesrv:
    image: rocketmqinc/rocketmq:4.7.2-alpine
    command: mqnamesrv
    container_name: rmqnamesrv
    ports:
      - "9876:9876"
    volumes:
      - $PWD/logs:/root/logs
    environment:
      - JAVA_OPT=-Xms256m -Xmx256m

  broker:
    image: rocketmqinc/rocketmq:4.7.2-alpine
    command: mqbroker -c /etc/rocketmq/broker.conf
    container_name: rmqbroker
    ports:
      - "10909:10909"
      - "10911:10911"
    volumes:
      - $PWD/logs:/root/logs
      - $PWD/store:/root/store
    environment:
      - JAVA_OPT=-Xms1g -Xmx1g
    links:
      - namesrv:namesrv

  producer:
    image: rocketmqinc/rocketmq-console-ng:4.7.2-alpine
    command: mqconsole-producer
    container_name: rmqconsole-producer
    ports:
      - "8080:8080"
    links:
      - namesrv:namesrv

  consumer:
    image: rocketmqinc/rocketmq-console-ng:4.7.2-alpine
    command: mqconsole-consumer
    container_name: rmqconsole-consumer
    ports:
      - "8080:8080"
    links:
      - namesrv:namesrv

安装kafka

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_CREATE_TOPICS: "test:1:1"
    depends_on:
      - zookeeper