netcore 在windows和linux下部署
Windows环境下部署
1.IIS
2.命令行启动
3. 部署为服务
Linux环境下部署
1. nohup
- 启动
# 多文件启动
nohup dotnet plat-api.dll --urls=http://*:5201 &
# 单文件启动
nohup ./ktfc-api urls=http://*:36766 Environment=Development &
# 退出
exit
- 查看控制台日志
退出控制台要使用exit命令,否则可能会导致退出
# 查看网站是否可以访问
curl -i http://localhost:8523/swagger/index.html
# 查看日志
tail -fn200 nohup.out
- kill程序重新部署
ps -ef | grep dotnet
kill -9 xxxx
-
根据名称自动化启动停止脚本(推荐)
-
restart.sh
#!/bin/bash
# ==设置应用程序的名称,端口及环境变量==
APP_NAME=MyWebApi
PORT=18351
ENV=Development
PID=`find -name ${APP_NAME} | xargs pgrep -f | xargs`
if [ "$PID" ]
then
echo "---------->程序${APP_NAME}已经启动,正在杀掉"
kill -9 $PID
echo "---------->程序杀掉成功"
fi
echo "---------->程序正在启动"
# 启动应用
nohup ./${APP_NAME} urls=http://*:${PORT} Environment=${ENV} >/dev/null 2>&1 &
echo "---------->程序${APP_NAME}启动成功"
- stop.sh
#!/bin/bash
APP_NAME=MyWebApi
PID=`find -name ${APP_NAME} | xargs pgrep -f | xargs`
if [ "$PID" ]
then
echo "---------->程序${APP_NAME}已经启动,正在杀掉"
kill -9 $PID
echo "---------->程序杀掉成功"
else
echo "---------->程序${APP_NAME}没有启动,不需要执行关闭操作"
fi
- 根据端口自动化启动停止脚本
start.sh
#!/bin/bash
# 应用程序名称
name="MyWebApi"
# 端口
port=18351
# 环境
env=Development
echo "启动应用${name}:${port}【${env}】"
chmod +x ${name}
rm -rf nohup.out
nohup ./${name} urls=http://*:${port} Environment=${env} &
tail -fn200 nohup.out
stop.sh
#!/bin/sh
# 要kill程序的端口号
port=18351
ntpl=$(ss -ntpl | grep "$port" | column -t)
appName=$(echo $ntpl | awk -F '[(,]' '{print $(NF-2)}')
rawPid=$(echo $ntpl| awk -F ',' '{print $(NF-1)}')
pid=$(echo $rawPid | awk -F '=' '{print $NF}')
if [ -n "$pid" ]
then
echo "find $appName[$pid], kill it..."
kill $pid
echo "$appName is killed"
else
echo 'cannot find listened port: '$port
exit -1
fi
2. systemd
- 新建plat-api.service放入
/usr/lib/systemd/system
文件夹中
[Unit]
#简单描述
Description=plat-api 黑山口软件基础平台
[Service]
#工作目录
WorkingDirectory=/home/web/netcore/plat-api
#开启时执行的命令
ExecStart=/usr/bin/dotnet plat-api.dll --urls=http://*:5201
#只有出错时重启,Restart=always表示无论什么原因造成服务停止都会重启
Restart=on-failure #服务崩溃时,十秒钟重启一次
RestartSec=10
# 用户
# User=wyy
[Install]
#该服务所在的target
#这里符号链接放在/usr/lib/systemd/system/multi-user.target.wants目录下
WantedBy=multi-user.target
- 执行脚本启动service
serverName="plat-api"
WorkingDirectory="plat-api"
#禁用原有服务开机自启动
systemctl disable ${serverName}
#停止原有服务开机自启动
systemctl stop ${serverName}
#删除服务的service文件
rm /etc/systemd/system/${serverName}.service # and symlinks that might be related
#重载系统服务
systemctl daemon-reload
#放弃系统服务缓存
systemctl reset-failed
#复制新的服务文件
cp /app/${WorkingDirectory}/${serverName}.service /etc/systemd/system
#重载系统服务
systemctl daemon-reload
#设置服务自动启动
systemctl enable ${serverName}
#运行服务
systemctl start ${serverName}
#查询服务状态
systemctl status ${serverName}
- 查看控制台日志
journalctl -u service-name.service --since "2019-12-20 20:20:00"
3. supervisor
- 安装
# 查看supervisord是否已安装及版本号
supervisord -v
# 安装supervisord
yum install supervisor
- 配置supervisord
vi /etc/supervisord.conf
# 启用UI
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
# 指定配置文件扫描目录及文件格式(配置文件最后,一般默认不修改)
[include]
files = supervisord.d/*.ini
- 上传项目及配置项目
-
上传项目到/home/web/netcore/plat-api文件夹
-
新建plat-api.ini文件,上传至/etc/supervisord.d目录
- 多文件项目配置
[program:plat-api] command=/bin/bash -c "dotnet plat-api.dll urls="http://*:5202"" directory=/home/web/netcore/plat-api/ autorestart=true stderr_logfile=/var/log/plat-api.err.log stdout_logfile=/var/log/plat-api.out.log environment=ASPNETCORE_ENVIRONMENT=Production user=root stopsignal=INT
- 单文件项目配置
添加文件的执行权限chmod +x plat-api
# 冒号后面是应用名称 [program:plat-api] # 启动程序的命令 command=/bin/bash -c "./plat-api urls="http://*:5202"" # 应用程序所在目录 directory=/home/web/netcore/plat-api/ # 自动重启 autorestart=true # 日志目录,可以自行定义 stderr_logfile=/var/log/plat-api.err.log stdout_logfile=/var/log/plat-api.out.log # 启动参数 environment=ASPNETCORE_ENVIRONMENT=Development user=root stopsignal=INT
- 重新加载配置
# 更新某个项目的配置
supervisorctl update plat-api
# 或重新加载所有配置
supervisorctl reload
- 更新程序
- 上传新项目到对应目录(直接覆盖不用停止项目)
- 重启项目
supervisorctl restart plat-api
- 常用命令
supervisorctl status //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart es //重启es
supervisorctl update es //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!