net core + angular 項目 部署到centos

net core + angular 項目 部署到centos

最近公司需要開發項目能在linux系統上運行,示例開發項目採用.net core + angular開發;理論上完全支持跨平台。

最后更新 2022/5/11 上午6:35
chaney1992
预计阅读 6 分钟
分类
.NET
标签
.NET C# Web API

前言

最近公司需要開發項目能在 linux 系統上運行,示例開發項目採用.net core + angular 開發;理論上完全支持跨平台。

但是實踐才是檢驗真理的唯一標準;那麼還是動手來驗證實現下;過程中萬一出現什麼問題也算是積累經驗。

一、環境準備

由于本次主要验证项目部署 Linux 环境,也不想去重新搭建一个虚拟机环境;就使用 Win10 中 Linux 子系统(WSL 什么?

  1. wsl 啟用步驟:
  • 進入【啟用或關閉 windows 功能】中啟用 wsl,如下圖

  • 進入 microsoft store 選擇相應版本,本機安裝的是 centos

  • 安裝完成後啟動時(出現問題)

最终确定问题原因:需要更新 Linux 内核包(更新包下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

下載安裝後,centos 系統環境準備好了。

  1. net core 環境安裝:
  • 更新下系統基礎軟體版本(可不執行)
sudo yum update
  • 註冊微軟簽名秘鑰:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
  • 安装.NET Core SDK,示例程序采用 3.1 版本开发(站长注:现在 2022 年 5 月 11 日,.NET 7 Preview 4已经发布)
sudo yum install dotnet-sdk-3.1
  • 查看是安裝成功,如圖則表示已經安裝成功

  1. nginx 環境安裝:(部署 web 項目)
  • 依賴環境安裝
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl--devel
  • 添加 nginx 的 yum 庫
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  • 安裝 nginx
sudo yum install nginx
  • nginx 基本信息

目錄結構:

nginx 目錄
配置路徑 /etc/nginx/
錯誤日誌 /var/log/nginx/error.log
訪問日誌 /var/log/nginx/access.log
默認站點目錄/usr/share/nginx/html

基本命令:

  • nginx //啟動 nginx
  • nginx -s quit //停止 nginx
  • nginx -s reload //重新載入配置文件

二、項目部署

部署項目到 centos 有多種方式:直接運行、docker 部署(前面學習文章已多次使用),本次就採用直接運行方式來部署應用。由於項目採用前後端分離實現,需要分別部署

  • 服務端部署

1、將服務端項目文件拷貝到 centos 目錄中:本次部署路徑為:/home/www/publish

2、修改配置文件:需要使用 vim 命令(需要單獨安裝)

通過命令進入配置文件編輯:

vim appsettings.json

編輯完成後採用以下命令退出

vim命令
:w 保存但不退出
:wq 保存并退出
:q 退出
:q! 强制退出,不保存
:e! 放弃所有修改,从上次保存文件开始再编辑命令历史

3、啟動服務

進入項目目錄執行命令:

[root@Coder supervisor]# cd /home/www/publish
[root@Coder publish]# dotnet ZLSoft.UnifiedDS.Web.Host.dll --urls http://*:8220

  • 前端項目部署

1、将 web 项目拷贝到:/home/www/web

2、在 nginx 配置文件目錄中添加配置文件 web.conf

server {
    listen       8221;
    server_name  192.168.243.86:8220;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /home/www/web;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html?$query_string;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

注意: 由於 angular 項目中使用了路由重定向,則需要使用標記內容

3、更新 nginx 配置文件:

/usr/sbin/nginx -s reload

三、運行示例

服務端運行:

web 項目運行效果:

到此項目已成功運行,但是當我把 centos 命令結束運行,則 web 服務端停止運行,那麼需要把創建服務實現守護進程

四、守護進程創建-supervisor

1、安裝 supervisor

#安装python的扩展
yum install python-setuptools
#通过python的扩展安装supervisor
easy_install supervisor

#建立设置文件夹
mkdir /etc/supervisor
mkdir /etc/supervisor/conf.d
#设置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
#修改设置文件(supervisord.d 文件夹下的所有 ini 类型的文件都是配置文件)
#在文件/etc/supervisor/supervisord.conf末端
;files = relative/directory/*.ini 改为 files = conf.d/*.ini

2、创建配置文件:在/etc/supervisor/conf.d目录下创建publish.conf

[program:publish]
command=dotnet ZLSoft.UnifiedDS.Web.Host.dll --urls http://192.168.243.86:8220  #运行命令
directory=/home/www/publish #程序路径
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true #自动启动
autorestart=true #3秒自动重启
startsecs=3
stderr_logfile=/var/log/ossoffical.err.log
stdout_logfile=/var/log/ossoffical.out.log

3、啟動服務

#进入supervisor目录
cd /etc/supervisor
#启动supervisord 服务
supervisord -c supervisord.conf

4、開啟守護進程的界面管理功能

#修改配置文件:
vim /etc/supervisord.conf

#取消注释内容
 [inet_http_server] ; inet (TCP) server disabled by default
 port=*: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)

 #重新加载配置文件

 supervisorctl reload

5、supervisorctl 常用命令

$ sudo service supervisor stop 停止supervisor服务
$ sudo service supervisor start 启动supervisor服务
$ supervisorctl shutdown #关闭所有任务
$ supervisorctl stop|start program_name #启动或停止服务
$ supervisorctl status #查看所有任务状态

五、總結

在 centos 系統中運行部署運行項目,主要是 linux 相關內容是否熟練:如命令、權限、軟體等相關內容,不管什麼還是需要孰能生巧,多加練習吧。

另外 wsl 中的 linux 系統還是不夠全面,暫時沒有服務、防火牆相關功能,所以如果在真實環境中,可以設置服務開機啟動、以及防火牆相關處理。

所以還是需要找個完整環境進行學習練習。

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2024/1/19

基於 .net 的 fluentvalidation 驗證教程

fluentvalidation 是一個基於 .net 開發的驗證框架,開源免費,而且優雅,支持鏈式操作,易於理解,功能完善,還是可與 mvc5、webapi2 和 asp.net core 深度集成,組件內提供十幾種常用驗證器,可擴展性好,支持自定義驗證器,支持本地化多語言。

继续阅读