.Net 8项目部署服务器

1. 环境准备

服务器:X64、Cent OS 7.2

编译器:Visual Studio 2022

2. 项目搭建

新建Dockerfile 文件,没有后缀名。

bash 复制代码
# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
​
# 将所有文件复制到工作目录
COPY . ./
​
# 构建应用程序
RUN dotnet publish -c Release -r linux-x64 -o out --self-contained true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
​
# 运行阶段
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
​
# 指定应用程序入口点
ENTRYPOINT ["./WebAPI-Demo"]

3. Docker环境安装

要在 CentOS 上安装 Docker ,可以按照以下步骤进行:

arduino 复制代码
$ sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine

安装必要的依赖包:确保系统安装了所需的软件包,以便安装 Docker:

kotlin 复制代码
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

添加 Docker 软件包源:将 Docker 软件包源添加到系统中。执行以下命令:

ruby 复制代码
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

启动 Docker 服务:安装完成后,启动 Docker 服务。执行以下命令:

ruby 复制代码
$ sudo systemctl start docker

设置 Docker 开机自启:如果需要 Docker 在系统启动时自动启动,可以执行以下命令:

shell 复制代码
$ sudo systemctl enable docker

验证安装:运行以下命令来验证 Docker 是否已成功安装:

css 复制代码
$ sudo docker --version

运行以下命令以验证 Docker 服务是否正在运行:

lua 复制代码
$ sudo systemctl status docker

4. 运行容器

perl 复制代码
$ docker build -t my-dotnet-app .
  • docker build: 这是用于构建 Docker 镜像的命令。
  • -t my-dotnet-app: 这是一个选项,用于为构建的镜像指定一个标签(tag) ,即镜像的名称。在这个命令中,my-dotnet-app 是镜像的名称。
  • .: 这是构建上下文路径,指定了 Dockerfile 的位置。在这里,. 表示当前目录,即 Dockerfile 所在的目录。Docker 将会在这个目录下查找 Dockerfile 并基于它构建镜像。
ruby 复制代码
$ docker run -d --rm -p <host_port>:<container_port> my-dotnet-app
  • docker run: 这是用于运行 Docker 容器的命令。
  • -d: 这是一个选项,表示以后台(detached)模式运行容器。这意味着容器会在后台运行,并且不会占用当前终端。
  • --rm: 这是一个选项,表示容器在停止后立即删除。这样做可以确保在容器停止后及时清理容器实例,以释放系统资源。
  • -p <host_port>:<container_port>: 这是一个选项,用于将容器内部的端口映射到宿主机上的端口。<host_port> 是宿主机上的端口,<container_port> 是容器内部监听的端口。通过这个选项,可以让外部系统通过宿主机上的端口访问容器中运行的应用程序。
  • my-dotnet-app: 这是要运行的 Docker 镜像的名称。在这个命令中,my-dotnet-app 是要运行的镜像名称。

5. 防火墙和云服务器安全组

开放端口

使用以下命令开放单个端口:

css 复制代码
$ sudo firewall-cmd --zone=public --add-port=<端口号>/tcp --permanent

<端口号> 替换为你想要开放的实际端口号。这个命令将永久性地(即重启后依然有效)将指定的 TCP 端口添加到公共区域的防火墙规则中。

如果你需要开放 UDP 端口,可以将 tcp 替换为 udp

关闭端口

使用以下命令关闭已经开放的端口:

css 复制代码
$ sudo firewall-cmd --zone=public --remove-port=<端口号>/tcp --permanent

同样,将 <端口号> 替换为你要关闭的实际端口号。这个命令将永久性地从公共区域的防火墙规则中移除指定的 TCP 端口。

如果你需要关闭 UDP 端口,同样可以将 tcp 替换为 udp

重新加载防火墙规则

使用以下命令重新加载防火墙规则,使更改生效:

css 复制代码
$ sudo firewall-cmd --reload

这个命令将重新加载防火墙规则,应用任何最新更改。

查看已开放端口

使用以下命令查看当前已经开放的端口列表:

css 复制代码
$ sudo firewall-cmd --zone=public --list-ports

这个命令将列出当前公共区域中已经开放的端口列表。

如果是使用云服务器的话还需要开放云服务器的安全组才能进行访问。

6. 网站访问

bash 复制代码
访问地址:http://ip:port/weatherforecast
相关推荐
鬼火儿21 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
cr7xin1 天前
缓存三大问题及解决方案
redis·后端·缓存
间彧1 天前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧1 天前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧1 天前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧1 天前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧1 天前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧1 天前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧1 天前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang1 天前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构