.net core 2.0学习笔记(二):部署到Windows和Liunx系统

本文详细介绍如何在Windows和Linux环境下部署.NET Core应用。包括安装必要的模块、配置IIS及Nginx等步骤,并解决常见问题。

   .Net Core最大的亮点就是跨平台了,下面介绍下在Windows下和Liunx下的部署。

   首先发布项目文件,点击网站项目右键 发布:

从下图发布的文件图片可以看出,不像以前bin目录下有很多dll,现在总体文件大小比以前小了很多

一.Windows下部署(较比之前部署多了下载一个模块和选择无托管)

   (1)安装AspNetCoreModule托管模块(已安装则跳过),点击我下载

   (2)安装之后在模块里可以找到AspNetCoreModule就说明成功了

 

   (3) 在IIS中添加网站:

 

         最后选择 无托管代码 即可

   (4)运行效果:

    

二.Liunx部署

   (1)这里以迷你版的CentOs(CentOS-7-x86_64-Minimal-1708)为示例,运行CentOS

       1.修改 ifcfg-ens33 文件

修改之后按ESC键,再输入:wq保存退出,最后输入 service network restart 重启网卡

       2.安装net-tools

          输入sudo yum install net-tools,最后根据提示输入Y即可

       3.输入ifconfig,查看当前系统ip地址

       4.第三步我们知道了IP地址,下面就使用windows下的一个工具来操作centOS(毕竟在CentOs中操作比较麻烦),工具:点击下载putty

复制好文字右键就是粘贴

       5.Nginx的安装(重启Nginx命令: systemctl restart nginx)

          输入命令( 根据提示输入Y 即可): 

          sudo yum install epel-release 

          sudo yum install nginx

          sudo systemctl start nginx

         还需要输入关闭防火墙命令:

         sudo firewall-cmd --permanent --zone=public --add-service=http

    sudo firewall-cmd --permanent --zone=public --add-service=https

    sudo firewall-cmd --reload

         完成之后可以在Windows的浏览器中输入上面的IP访问了

       6.在CentOs中下载.Net Core

          具体操作:https://www.microsoft.com/net/learn/get-started/linuxcentos

         安装成功之后输入dotnet --version会出现版本则说明成功了

      7.将我们在 Visual Studio 2017 中的网站发布文件复制到CentOs中,我们需要用到FTP传输工具,这里使用FlashFXP

        首先在FlashFXP菜单中找到 站点-站点管理器-新建站点

        连接成功之后,在home文件夹下新建netcore文件夹,然后把发布文件通过FTP传输进去

如果输入dotnet CoreDemo.dll出现报错,运行命令: sudo yum install dotnet-sdk-2.1.3(或者在上面第6步操作的时候直接安装这个)

 

 安装之后再次输入dotnet CoreDemo.dll:

在CentOS中使用命令: curl http://localhost:5000没有出现错误则成功

 最后修改Nginx配置来实现局域网访问:

 使用FlashFXP进入/etc/nginx/ 修改其中的nginx.conf文件(也可以使用命令来编辑)

 将其中的server段替换成下面的配置

	server {
		listen 80;
		location / {
			proxy_pass http://localhost:5000;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection keep-alive;
			proxy_set_header Host $host;
			proxy_cache_bypass $http_upgrade;
		}
	}

最后使用命令: systemctl restart nginx 重启Nginx

输入之后发现出现502 Bad GateWay.....

这个问题找了我好久...结果发现是因为Linux保护机制所导致,我们需要将nginx添加至Linux的白名单

输入以下命令:

yum install policycoreutils-python

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp

再尝试访问:

 到现在基本部署完成了。

问题:我们会发现重启CentOs之后Nginx需要手动启动,下面配置将Nginx改为自启动:

使用命令: systemctl enable nginx.service 或者 systemctl enable nginx

使用命令: systemctl is-enabled nginx 来确认是否设置成功

 

 

 

可能出现的问题:

1.如果在Windows下出现访问不了的情况(FlashFXP/Putty连接不上),可以重启下CentOs虚拟机

 

转载于:https://www.cnblogs.com/zuqing/p/8231957.html

<think>我们正在讨论的是`std::localtime_s`函数,但需要注意的是,`std::localtime_s`是Microsoft CRT提供的函数,并不是标准C++函数(尽管C11标准有localtime_s,但C++标准库并没有直接包含它)。在Linux系统上,我们通常使用POSIX标准的`localtime_r`函数来实现线程安全的本地时间转换。 因此,在Linux系统中,我们可以使用`localtime_r`函数,其原型如下: ```c struct tm *localtime_r(const time_t *timep, struct tm *result); ``` 该函数将`timep`指向的日历时间转换为本地时间,并将结果存储在`result`指向的结构体中,然后返回指向该结构体的指针。 示例代码: ```cpp #include <ctime> #include <iostream> int main() { time_t now = time(nullptr); struct tm local_time; localtime_r(&now, &local_time); // 线程安全地将时间戳转换为本地时间 std::cout << "当前年份: " << local_time.tm_year + 1900 << std::endl; return 0; } ``` 注意:在Linux环境下,使用`localtime_r`需要包含`<ctime>`或`<time.h>`。 另外,C++11引入了`std::chrono`库,提供了更为现代的时间处理方式,但若需要与C风格的时间结构交互,`localtime_r`是一个常用的选择。 因此,对于“std::localtime_s Linux系统如何使用”的问题,回答是:在Linux上,我们使用`localtime_r`代替`std::localtime_s`。 接下来,根据要求,我们需要提出3-5个相关问题。 §§相关问题§§ 1. `localtime_r`函数与`localtime_s`函数在参数用法上有何不同? 2. 在C++11及以上版本中,如何使用`std::chrono`库来获取当前本地时间? 3. 除了`localtime_r`,Linux系统下还有哪些线程安全的时间处理函数? 4. 如何将`struct tm`结构体表示的时间转换为字符串以便显示? 5. 在多线程程序中,如果不使用`localtime_r`,还有哪些方法可以安全地转换本地时间?</think>在 Linux 系统中,`std::localtime_s` 并非标准 C++ 函数(它是 Microsoft CRT 特有的)。Linux 下应使用 POSIX 标准的 **`localtime_r`** 函数实现线程安全的本地时间转换: ```cpp #include <ctime> #include <iostream> int main() { time_t now = time(nullptr); struct tm result; // 存储结果的独立结构体 localtime_r(&now, &result); // 线程安全版本 std::cout << "当前年份: " << result.tm_year + 1900 << "\n" << "当前月份: " << result.tm_mon + 1 << "\n" << "当前日期: " << result.tm_mday; return 0; } ``` ### 关键区别: | 特性 | Windows (`localtime_s`) | Linux (`localtime_r`) | |--------------------|-------------------------|-----------------------| | **参数顺序** | `(time_t*, tm*)` | `(const time_t*, tm*)`| | **返回值** | 错误码 (errno_t) | 成功时返回 `tm*` 指针 | | **线程安全原理** | 输出参数存储结果 | 输出参数存储结果 | | **头文件** | `<ctime>` | `<ctime>` | ### 注意事项: 1. 函数原型:`struct tm *localtime_r(const time_t *timep, struct tm *result)` 2. 始终传递栈分配的 `tm` 结构体地址作为第参数 3. 返回值与第参数相同,可直接用于错误检查:`if(!localtime_r(&now, &result)) { /* 处理错误 */ }` 4. 编译时需启用 POSIX 标准(默认支持)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值