.NET COER+CONSUL微服务项目在CENTOS环境下的部署实践

news2024/11/15 14:09:34

一、整体的环境安装与部署

1.1、DOCKER环境的部署

1.1.1 安装DOCKER 

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast && yum -y install docker-ce
systemctl restart docker

安装装成后,可以使用  docker指令验证是否正确安装

docker info

 1.1.2 自定义 Docker 数据目录

默认情况下,DOCKER的数据目录都在系统盘下,可以修改 /etc/docker/daemon.json(如果不存在可以创建一个同名文件) 文件,并添加或修改如下配置,调整磁盘数据目录:

{
    "data-root": "/my/custom/docker"
}

1.2、CONSUL环境的初始化

1.2.1 安装CONSUL

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul

1.2.2 基本的参数配置

默认配置文件路径是:/etc/consul.d/consul.hcl,如果文件不存在,使用命令 sudo vi创建一个

#默认的数据文件路径,可以从其他的CONSUL里直接复制相关数据在这里
data_dir = "/var/consul" 
#如果出现错误:将这个值修改为本机的IP
bind_addr = "0.0.0.0" 
client_addr = "0.0.0.0"
#这里的默认配置是3,因为我是简易环境,只配置一个CONSUL节点
bootstrap_expect=1 
#配合单节点启动使用
server = true 
#是否启动UI,配置为TRUE的情况下,可以通过IP:8500进行CONSUL的UI访问。
ui_config{
  enabled = true
}

1.2.3 自启动配置

创建文件:sudo vi /etc/systemd/system/consul.service

[Unit]  
Description=Consul Agent  
After=network.target  
  
[Service]  
Type=simple  
#User=consul  # 如果你的Consul是以特定用户身份运行的,请指定该用户;否则,可以省略此行  
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d -log-file=/var/log/consul/consul.log  
Restart=on-failure  
  
[Install]  
WantedBy=multi-user.target

 启动,并设置为自启动

sudo systemctl daemon-reload
sudo systemctl start consul
sudo systemctl enable consul

验证是否正常启动

curl http://127.0.0.1:8500/ui/dc1/services

1.3、REDIS的安装与配置

1.3.1 安装REDIS

sudo yum update -y

在安装 Redis 之前,确保安装了编译 Redis 所需的基本工具和依赖

sudo yum install -y gcc make

 从 Redis 的官方网站下载最新版本的源码,并进行解压:

cd /usr/local/src
sudo wget http://download.redis.io/redis-stable.tar.gz
sudo tar xzf redis-stable.tar.gz
cd redis-stable

使用 make 命令编译 Redis: 

sudo make

 编译完成后,运行以下命令进行测试并安装:

sudo make test
sudo make install

1.3.2 基本参数配置

Redis 提供了一个默认的配置文件,你可以将其复制到 /etc 目录以进行系统级别的配置管理:

sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/

 你可以编辑 /etc/redis/redis.conf 文件,根据需要进行自定义配置: 

你可以编辑 /etc/redis/redis.conf 文件,根据需要进行自定义配置:

基本配置

#守护进程模式:将 daemonize no 改为 daemonize yes,以使 Redis 作为后台服务运行。
daemonize yes
#绑定地址:如果你希望 Redis 监听所有接口,可以将 bind 127.0.0.1 改为 bind 0.0.0.0。
bind 0.0.0.0
#保护模式:如果你想允许远程连接,可能需要禁用保护模式,将 protected-mode yes 改为 protected-mode no。
protected-mode no

1.3.3 自启动配置

创建一个 Systemd 服务文件,以便在系统启动时自动启动 Redis

sudo vi /etc/systemd/system/redis.service

在文件中添加以下内容

sudo vi /etc/systemd/system/redis.service

 重新加载 Systemd 配置,并启动 Redis 服务:

sudo systemctl daemon-reload
sudo systemctl start redis
sudo systemctl enable redis

1.4、 NGINX的安装与配置

1.4.1 安装NGINX

sudo yum update -y
sudo yum install epel-release -y
sudo yum install nginx -y

1.4.2 参数配置

Nginx的主配置文件位于/etc/nginx/nginx.conf,虚拟主机配置文件位于/etc/nginx/conf.d/目录下。

server {
    listen       80;
    server_name  example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

1.4.3 自启动配置

sudo systemctl start nginx
sudo systemctl enable nginx

检查NGINX状态

sudo systemctl status nginx

1.4.4 防火墙配置

如果已经启动了防火墙,需要允许HTTP和HTTPS流量

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

1.4.5 常用的Nginx服务管理命令

  • 启动Nginx: sudo systemctl start nginx
  • 停止Nginx: sudo systemctl stop nginx
  • 重启Nginx: sudo systemctl restart nginx
  • 重新加载Nginx配置: sudo systemctl reload nginx
  • 查看Nginx状态: sudo systemctl status nginx
  • 重要命令:nginx -t    可以验证配置文件是否正确

二、项目的应用与部署

2.1 docker-compose

2.1.1 环境安装

下载二进制文件,具体版本号,可以去github的发布页面上查看一下

sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予执行权限 

sudo chmod +x /usr/local/bin/docker-compose

 检查安装是否成功

docker-compose --version

2.1.2 yml文件配置说明

基本配置下如图。

version: "2.2"
services:

  ccw_website:
    build:
      context: ./CXBIM.CCW_WebSite
      dockerfile: Dockerfile
    image: cxbim-ccw-website
    ports:
      - "8430:8430"
      - "8431:8431"
    volumes:
      - /mnt/data/Publish/CXBIM.CCW_WebSite:/app
    environment:
      - ASPNETCORE_URLS=http://*:8430;http://*:8431
      - SET_CONTAINER_TIMEZONE=true
      - TZ=Asia/Shanghai
    networks:
      - cxbim-net

version:版本号,不同的的版本之间语法可能会有差异

services:需要构件或运行的服务集合,期下可以建立多个service,以上例子中为:ccw_website

        build:context=指向项目的文件夹,相对于当前yaml文件的路径;dockfile:用于构件镜像的文件,一般默认为Dockerfile。

        image:镜像名称

        ports:宿主面端口:容器内端口,一般只配置一个即可。

        volumes:将DOCKER挂载指向宿主机的某个具体的地址,对于拥有文件存储类的服务,这个是必要的。

        environment:常用的一环境变量参数,在运行容器的时候,会带入

        networks:网络,这个我是随意配置了一下。

2.2.1 常用指令

构建:docker-compose build        ——  可追加追加 no-cache ,节省磁盘空间

运行:docker-compose up -d        —— -d表示后台运行

停用:docker-compose stop

清理:docker system prune

三、遇到过的问题

3.1 时区问题

        在DOCKER窗口内,默认使用的时区是伦敦时区,与北京时区差了8小时。在.NET项目内,使用DateTime.Now的时候就差了8小时。

        在docker-compose.yml文件中,进行配置调整:

- TZ=Asia/Shanghai

        另外,不同的 compose版本可能会有语法差异,可以使用另一个配置

- CONTAINER_TIMEZONE=Asia/Shanghai

 实际效果截图如下:

3.2 磁盘占用问题

  1. 参考1.2中,调整DOCKER的数据目录
  2. 在docker-compose buid 的指令后,追加no-cache
  3. 使用指令《docker system prune》清理磁盘占用

3.3 REDIS 内存过度提交问题

如果你希望立即启用内存过度提交,可以运行以下命令:

sudo sysctl vm.overcommit_memory=1

要使内存过度提交设置在系统重启后依然有效,你需要将设置添加到 /etc/sysctl.conf 文件中

在文件末尾添加以下一行

vm.overcommit_memory = 1

然后,应用新的设置:

sudo sysctl -p

最后重启REDIS

sudo systemctl restart redis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python学习9-数据获取与整理5

有点是生成快,如果想炫酷 还是要前端生成,比如 echarts Matplotlib可视化 Matplotlib是Python中最重要的数据可视化库之一,它提供了多种绘图工具,可以生成各种硬拷贝格式和交互式环境下的多种平台上的图形。本文将详细讲解Matplo…

【MySQL】一文带你理清InnoDB引擎的<内部架构>(内存结构,磁盘结构,后台线程)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

【python报错已解决】`Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言: 在开发过程中,环境配置常常会引发一些难以预料的报错。如何快速定位并解决这些问题,成…

【C++ Primer Plus习题】5.6

问题: 解答: #include <iostream> using namespace std;#define MONTHSCOUNT 12 #define YEARS 3int main() {string months[MONTHSCOUNT] { "January","February","March","April","May","June","J…

10倍加速LLM计算效率:消失的矩阵乘

矩阵乘法&#xff08;MatMul&#xff09;是深度学习中的主要计算瓶颈&#xff0c;尤其在ChatGPT等Transformer模型中&#xff0c;矩阵乘法的运行时长约占其总运行时长的45-60%&#xff0c;解决这一挑战对发展更经济的大模型具有重要意义。 为此&#xff0c;加州大学的研究人员在…

服务器搭建记录(两台服务器通过一个路由器的LAN口联网)

目录 服务器搭建记录&#xff08;两台服务器通过一个路由器的LAN口联网&#xff09;操作步骤&#xff1a;一、安装N卡驱动二、安装cuda三、安装cudnn四、配置SSH五、为服务器创建新sudo用户账号六、安装docker和NVIDIA-docker七、通过联网路由器 遇到的一些问题&#xff1a;参考…

小白之 FastGPT Windows 本地化部署

目录 引言环境步骤1. 安装 docker2. 启动 docker3. 浏览器访问4. One API 配置语言模型、向量模型渠道和令牌5. 创建 FastGPT 知识库6. 创建 FastGPT 应用 官方文档 引言 部署之前可以先看一下 RAG 技术原理&#xff0c;也可以后面回过头来看&#xff0c;对一些概念有些了解&a…

【C++指南】类和对象(二)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注

【leetcode】学习计划 - 面试经典150题 - 二叉树系列1

面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09; 目录 二叉树 104. 二叉树的最大深度 100. 相同的树 226. 翻转二叉树 101. 对称二叉树 105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树 二叉树结构 // Definition for a bin…

SpringSecurity前后端分离代码

1. 搭建 SpringBoot工程 1) 新建 boot 项目 只要一个 web 依赖 创建好的初始目录&#xff0c;直接将 demos 包删除。 导入依赖 <!-- security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-se…

redis | 认识非关系数据库Redis的字符串数据类型及过期时间expire的作用

Redis 非关 kv型 数据类型字符串数值操作 应用场景 ⭐字符串命令练习⭐⭐过期时间设定 expire ⭐⭐⭐检查过期时间 ttl key删除过期key机制惰性删除定期删除 数据类型 数据类型丰富&#xff0c;字符串strings,散列hashes,列表lists&#xff0c;集合sets,有序集合sorted sets等等…

MySQL Order By 工作原理探究以及索引优化手段

背景 这篇文章出发的契机&#xff0c;主要是看到京东定时任务优化里面有使用到「游标」这种策略去完成查询优化 https://mp.weixin.qq.com/s/aYJV3Z-1MZ_a6tUjoHa_9g 刚好之前自己在开发业务的时候&#xff0c;也碰到类似的场景&#xff0c;需要在每个季度末将被申诉的卡片更…

流媒体协议之RTMP

一、RTMP 协议概述 今天我们要一起了解的这个协议叫 RTMP 协议&#xff0c;它并不复杂&#xff0c;对于拉流相关的协议&#xff0c;我们可以先思考一下拉流一般要交互什么&#xff0c;我理解有以下几项&#xff0c; 连接信息&#xff1a;包括服务器的地址、端口号等&#xff…

每日Attention学习16——Multi-layer Multi-scale Dilated Convolution

模块出处 [CBM 22] [link] [code] Do You Need Sharpened Details? Asking MMDC-Net: Multi-layer Multi-scale Dilated Convolution Network For Retinal Vessel Segmentation 模块名称 Multi-layer Multi-scale Dilated Convolution (MMDC) 模块作用 多尺度特征提取与融合…

一家物流装备企业终止,业绩下滑严重,恐不符合创业板新上市标准

鸿安机械终止的原因如下&#xff1a;首先&#xff0c;报告期内鸿安机械的营业收入和净利润出现下滑趋势&#xff0c;公司最近一年净利润恐不达标&#xff0c;或许不能满足创业板更新的第一套上市标准&#xff1b;其次&#xff0c;鸿安机械经营业绩对比同行业可比公司&#xff0…

笔记整理—uboot启动过程(5)BL2板级初始化

上一章说到了uboot在BL2阶段大概都要干什么&#xff0c;也说到了为了实现这些要先进行内存排布&#xff0c;实现了这些后便可实现BL2部分的板级初始化。首先先来看一下init_fnc_ptr函数指针。 for(init_fnc_ptrinit_sequence;*init_fnc_ptr;init_fnc_ptr){if((*init_fnc_ptr)(…

一文带你了解html标签

一、文档结构标签 <html>&#xff1a;网页的根标签 &#xff0c;嵌套包含所有标签。 <head>&#xff1a;头标签&#xff0c;包含文档的元数据用于编写网页的修饰内容&#xff0c;附加信息。 <body>&#xff1a;身体标签&#xff0c;用于编写展示内容&…

精益工程师资格证书:2024年CLMP报名指南

随着全球对精益管理的需求日益增长&#xff0c;精益管理专业人士资格认证&#xff08;CLMP&#xff09;正成为越来越多精益工程师和精益管理人员提升职业竞争力的首选。作为一种注重管理而非生产的认证&#xff0c;CLMP不仅适用于制造业的专业人士&#xff0c;也吸引了各行业的…

Qt之窗口

目录 Qt窗口简介: 菜单栏 ⼯具栏 状态栏 浮动窗⼝ 对话框 Qt内置对话框 1.消息对话框QMessageBox 2.颜⾊对话框QColorDialog 3.⽂件对话框QFileDialog 4.字体对话框QFontDialog 5.输⼊对话框QInputDialog 总结 接下来的日子会顺顺利利&#xff0c;万事胜…

Android Studio:模拟器页面闪烁,手机模拟器输入画面闪烁 android studio闪屏

主要解决&#xff0c;android studio 启动app测试&#xff0c;输入数据时&#xff0c;手机画面就会闪烁&#xff0c;闪屏 1. 如图所示&#xff0c;依照顺序找到Edit &#xff0c;并点击Edit 2. 找到Graphics 选择为SoftWare &#xff0c;并保存修改即可 3. 如果此处不能选择S…