.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
相关推荐
Real_man22 分钟前
新物种与新法则:AI重塑开发与产品未来
前端·后端·面试
小马爱打代码1 小时前
Spring Boot:将应用部署到Kubernetes的完整指南
spring boot·后端·kubernetes
卜锦元1 小时前
Go中使用wire进行统一依赖注入管理
开发语言·后端·golang
Jiangnan_Cai2 小时前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify
LuckyLay2 小时前
使用 Docker 搭建 Rust Web 应用开发环境——AI教你学Docker
前端·docker·rust
SoniaChen333 小时前
Rust基础-part3-函数
开发语言·后端·rust
全干engineer3 小时前
Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
后端·python·flask·web
William一直在路上3 小时前
SpringBoot 拦截器和过滤器的区别
hive·spring boot·后端
小马爱打代码4 小时前
Spring Boot 3.4 :@Fallback 注解 - 让微服务容错更简单
spring boot·后端·微服务
曾曜4 小时前
PostgreSQL逻辑复制的原理和实践
后端