.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
相关推荐
子兮曰6 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰6 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝6 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
虎头金猫6 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
胡写代码6 天前
别再前后端各写一套表单校验了
java·后端
分布式存储与RustFS6 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
大勇前进6 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu6 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile6 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白806 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端