.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_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值