当前位置: 首页 > news >正文

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

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

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

在文件中添加以下内容

[Unit]
Description=Redis In-Memory Data Store
After=network.target[Service]
User=root
Group=root
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always[Install]
WantedBy=multi-user.target

 重新加载 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_WebSitedockerfile: Dockerfileimage: cxbim-ccw-websiteports:- "8430:8430"- "8431:8431"volumes:- /mnt/data/Publish/CXBIM.CCW_WebSite:/appenvironment:- ASPNETCORE_URLS=http://*:8430;http://*:8431- SET_CONTAINER_TIMEZONE=true- TZ=Asia/Shanghainetworks:- 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

相关文章:

  • 保研考研机试攻略(满分篇):第一章——技巧之巅(1)
  • 【系统安全】Kernel Streaming WOW Thunk 服务驱动程序特权提升漏洞(CVE-2024-38054)
  • 16行为型设计模式——策略模式
  • 【FreeRTOS】EventGroup事件标志组
  • spark集群搭建
  • wpf datagrid通过点击单元格 获取行列索引2.0
  • 适用于 Visual Studio 的 C++ 万能头
  • 密码生成器(HTML+CSS+JavaScript)
  • Java MR Map Reduce 模型
  • 综合能源充电站有序充电策略
  • 【数据集】遥感影像建筑物变化检测对比实验常用数据集分享
  • 基于Thymeleaf、bootstrap、layUI 混合前端应用
  • 为什么帕金森病患者的症状有时会出现波动性?
  • Godot《躲避小兵》实战之为游戏添加音效
  • 【IoTDB 线上小课 06】列式写入=时序数据写入性能“利器”?
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • ➹使用webpack配置多页面应用(MPA)
  • 0x05 Python数据分析,Anaconda八斩刀
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • hadoop集群管理系统搭建规划说明
  • scala基础语法(二)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • win10下安装mysql5.7
  • 编写符合Python风格的对象
  • 动态规划入门(以爬楼梯为例)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 复习Javascript专题(四):js中的深浅拷贝
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​2021半年盘点,不想你错过的重磅新书
  • ​ubuntu下安装kvm虚拟机
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # Apache SeaTunnel 究竟是什么?
  • #VERDI# 关于如何查看FSM状态机的方法
  • #预处理和函数的对比以及条件编译
  • (~_~)
  • (1)无线电失控保护(二)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)http协议
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net dataexcel winform控件 更新 日志
  • .NET gRPC 和RESTful简单对比
  • .net 后台导出excel ,word
  • .net 简单实现MD5
  • .NET 使用 XPath 来读写 XML 文件
  • .net 怎么循环得到数组里的值_关于js数组
  • .net开发日常笔记(持续更新)