环境说明

CentOS / 7.1 (64bit) (Linux操作系统)

3MySQL5.7(网站应用数据库)

.NET Core SDK 2.0.0(网站应用环境)

Nginx(反向代理服务器)

Supervisor(管理网站应用守护进程)

Symantec SSL(域名型证书,提供https协议服务)

这里数据库由SQL Server改为MySQL,因为SQL Server 2017对运行环境要求的配置比较高,我这1G内存的低端云服务器伤不起,o(╥﹏╥)o

工具介绍

Xshell 5(终端模拟软件)

WinSCP(图形化SFTP客户端)

返回顶部

安装 CentOS

首先将云服务器,重新安装操作系统,选择CentOS / 7.1 x86_64 (64bit)版本的镜像,并设置访问用户名和密码,系统会帮我们自动安装好CentOS系统。接下来我们配置一下Xshell和WinSCP,使得这2个工具能正常访问并管理操作系统,相关的配置和使用方法,请大家自行百度。
完成上述操作后,首先查看一下硬盘情况:

fdisk -l
avatar
发现我们的第二块磁盘云磁盘(/dev/vdb)并没有被加载。
在挂载之前,首先要格式化这块硬盘。我们选择的是ext4格式:

mkfs.ext4 /dev/vdb
硬盘格式化后,创建一个挂载目标目录,并将磁盘挂载该目录上:

mkdir /data
mount /dev/vdb /data
这时候,我们再查看下系统磁盘情况:

df -h
avatar
可以看到,云磁盘可以正常的被挂载了。但是如果重启系统的话,磁盘仍旧会丢失,我们还必须在每次启动的时候将磁盘挂载。
修改/etc/fstab文件,需要在该文件的最后添加一行,具体如下:
avatar
至此,我们重启系统,发现磁盘可以正常挂载使用了。

返回顶部
安装 .NET Core
参考官方文档:Prerequisites for .NET Core on Linux
第1步,注册Microsoft签名密钥,然后添加Microsoft产品Feed:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
第2步,更新可用于安装的产品列表,安装.NET Core所需的组件,然后安装.NET Core SDK:

sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.0.0
第3步,设置环境变量:

export PATH=$PATH:$HOME/dotnet
以上,.NET Core环境已配置完成,可以新建一个项目HelloWorld,执行命令:dotnet run,正常运行,并使用localhost:5000正常访问,这里就不再多述。

返回顶部
安装 MySQL
第1步,下载MySQL Yum仓库的RPM安装包:
在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/
第2步,安装MySQL RPM安装包:

yum localinstall mysql57-community-release-el7-11.noarch.rpm
第3步,安装MySQL服务器:

yum install mysql-community-server
安装完毕后,我们启动MySQL,并查看运行状态,并设置开机启动:

service mysqld start
service mysqld status
systemctl enable mysqld
avatar
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码:

grep 'temporary password' /var/log/mysqld.log
我们获取了默认密码,就可以进行一些安全设置,输入命令:

mysql_secure_installation
最后设置远程访问权限:

mysql -u root -p mysql
mysql> grant all privileges on . to 'root'@'%' identified by 'password' with grant option;
默认情况,MySQL的字符集为lanti,考虑我们使用中文的习惯,修改mysql配置文件/etc/my.cnf,增加如下一行,把默认的字符集改成utf8:

[mysqld]
character-set-server=utf8
返回顶部
程序移植
因为.NET Core本身就是支持跨平台,所以程序逻辑不用进行任何调整,但是我们已将数据库切换成MySQL,所以针对这块,稍微调整下。
首先,将appsettings.json中的数据库连接字符串修改为新的连接;
然后,Startup.cs文件启动配置修改如下:

services.AddDbContext(options =>
options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));
重新编译发布到目录:/data/wwwroot/MyWebSite
进入该目录,执行:

dotnet MyWebSite.dll
avatar
现在我们的项目就正常的部署并运行在localhost:5000上了。

返回顶部
安装 Nginx
Nginx是一个高性能的HTTP和反向代理服务器,在CentOS中很容易安装和配置,接下来进行如下操作:

yum install nginx
安装完成后,我们启动Nginx,并将它设置为开机启动:

service nginx start
systemctl enable nginx.service
要使得Nginx代理外网80端口,访问我们内部5000端口监听的网站程序,需要修改Nginx配置文件/etc/nginx/nginx.conf:

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;
}
最后,我们重新启动restart nginx.service,并通过外网链接,发现可以正常访问我们的网站了。

返回顶部
安装 Supervisor
其实,经过以上的步骤,已经完成基本的移植和部署,网站访问也没有问题了。但是,.NET Core应用程序运行在shell之中,如果shell关闭,.NET Core应用程序也随之关闭,导致应用无法访问。而且.NET Core进程意外终止或者服务器宕机或重启,都会导致服务不可用,这是我们不想看到的。
为了解决这个问题,我们需要有一个守护进程来监听ASP.NET Core 应用程序的状况,在应用程序停止运行的时候立即重新启动。
这里利用Supervisor工具帮我们创建这样的守护进程,先安装:

easy_install supervisor
安装完毕后,如下操作

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
修改supervisord.conf文件,将文件尾部的配置修改:

[include]
files = conf.d/*.conf
再创建一个/etc/supervisor/conf.d/ MyWebSite.conf文件,内容大致如下:

[program:MyWebSite]
command=dotnet .dll ; 运行程序的命令
directory=/data/wwwroot/MyWebSite/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/MyWebSite.err.log ; 错误日志文件
stdout_logfile=/var/log/MyWebSite.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
运行supervisord,查看是否生效:

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep MyWebSite
avatar
最后,我们要配置Supervisor开机启动,新建一个“/usr/lib/systemd/system/supervisord.service”文件

dservice for systemd (CentOS 7.0+)

by ET-CS (https://github.com/ET-CS)

[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
执行命令,使得服务开机启动:

systemctl enable supervisord
avatar

返回顶部
开启防火墙
CentOS中防火墙程序主要是firewall和iptables,CentOS7中firewall服务已经默认安装好了。所以,这里介绍一下firewall相关配置。
默认防火墙是关闭的,为了访问的安全性,我们首先将防火墙开启,并设置开启启动:

systemctl start firewalld.service
systemctl enable firewalld.service
这时候,我们访问网站链接,发现已经端口屏蔽无法正常访问。所以接下来,我们要开放http(80端口)、https(443端口)、MySQL(3306端口):

firewall-cmd --zone=public --add-port=80/tcp --permanen
firewall-cmd --zone=public --add-port=443/tcp --permanen
firewall-cmd --zone=public --add-port=3306/tcp --permanen
重启服务器,重新打开网站链接,可以正常访问。

返回顶部
FTP 一键部署
在之前Windows Server服务器上,已经配置过FTP服务器,项目部署时,通过VS可以很方便的一键部署,那CentOS上该如何配置呢?
第1步,安装一下ftp服务:

yum -y install vsftpd
第2步,打开/etc/vsftpd/vsftpd.conf配置文件,修改如下2处:

anonymous_enable=NO
chroot_local_user=YES
第3步,打开ftp服务,并设置开机启动,并开放远程访问端口:

systemctl restart vsftpd.service
systemctl enable vsftpd.service

firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
setsebool -P ftp_home_dir on
最后,增加一个ftp访问用户,配置发布目录,并提供写权限和设置密码:

useradd -d /data/wwwroot -m ftpuser -s /sbin/nologin
cd /data/wwwroot/
chmod -R 777 *
passwd ftpuser
VS2017中,修改ftp部署配置如下图:
avatar

返回顶部
配置 https 协议
为了实现数据信息在客户端和服务器之间的加密传输,防止数据信息的泄露,保证双方传递信息的安全性,我们需要HTTP下加入SSL层,我之前已经申请过Symantec免费的SSL证书,所以就简单说明一下怎么配置。
前面我们的网站应用程序,已经通过Nginx反向代理来访问,那其实只用通过配置Nginx来管理我们申请的证书文件。首先下载证书文件,包括.crt和.key两个文件,然后拷贝到目录:/etc/nginx/ssl下,接着编辑Nginx配置文件,找到相关地方做如下修改:

listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl; #如果硬性要求全部走https协议,这里去除ssl
server_name _;
root /usr/share/nginx/html;

ssl on; #如果硬性要求全部走https协议,这里开启ssl on

ssl_certificate /etc/nginx/ssl/www.lancel0t.cn.crt;
ssl_certificate_key /etc/nginx/ssl/www.lancel0t.cn.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_protocols SSLv2 SSLv3 TLSv1.2;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;
最后,我们重启一下Nginx,输入我们的网站地址:https://www.lancel0t.cn/ ,看到能够正常访问。

ASP.NET Core Linux的更多相关文章

  1. ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)

    前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程 ...

  2. ASP.ENT Core Linux 下 为 donet创建守护进程(转载)

    原文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html 前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 ...

  3. ASP.NET Core Linux 发布

    这篇博客参考了以下文章: 1.http://www.cnblogs.com/ants/p/5732337.html 2.http://www.linuxidc.com/Linux/2016-11/13 ...

  4. ASP.NET Core Linux环境安装并运行项目

    原文地址:https://blog.csdn.net/u014368040/article/details/79192622 一 安装环境 1.  从微软官网下载 Linux版本的.NetCoreSd ...

  5. ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)

    最近这几日在搞一个小网站:教你啊 :(感兴趣的朋友可以来捧场,在这个网站上有任何消费我都可以退还) 由于更新频繁,手动更新特别麻烦,于是开发了这个小工具 用了一段时间,还是挺顺手的,同时.NET Co ...

  6. Asp.Net Core Linux环境下 找不到配置文件、静态文件的问题

    直接发布会找不到配置文件,和静态文件.需要先cd到项目文件夹,然后在发布.

  7. .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上

    今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMem ...

  8. ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路

    一.前言  最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...

  9. Asp.net Core 打包发布 (Linux+Nginx)

    如果你觉得如下这些文章对你有帮助,请点击链接支持作者原创 http://www.cnblogs.com/savorboard/ .Net Core SDK 命令介绍   前言 本篇主要介绍 asp.n ...

随机推荐

  1. mvn使用记录

    1. mvn dependency:copy-dependencies 会导出到targed/dependency 下面 2. mvn dependency:copy-dependencies -Do ...

  2. SpringBoot_01_正确、安全地停止SpringBoot应用服务

    二.参考资料 1.正确.安全地停止SpringBoot应用服务

  3. Yii2使用Redis - 从安装redis到使用 [ 2.0 版本 ]

    Yii2使用Redis - 从安装redis到使用 [ 2.0 版本 ] 一.安装Redis和简单配置 1. 下载Redis安装包 地址:http://redis.io/download , 本文选择 ...

  4. stack_1.设计一个有getMin功能的栈

    思路 : 生成两个栈($stack ,$stack_min ),往$stack塞数据($value)的时候 ,比较一下$value和$stack_min最上面的元素的大小,如果$value小,则压入$ ...

  5. linux 网络编程 inet_pton & inet_ntop函数

    #include <arpa/inet.h> int inet_pton(int family,const char * strptr,void * addrptr); 返回:--成功, ...

  6. CF Round #460

    晚上去看月亮了 离比赛结束半个小时才滚回来A了T1T2T3... 又要掉Rating辣 T4 给一个有向图 每条边有一个英文字母作为边权 求一条路径 该路径上权值众数出现次数最多 求最多的出现次数 拓 ...

  7. 如何运行jnlp文件

    运行DOS命令: C:\Users\thinkpad>javaws D:\***.jnlp 如提示“应用程序已被java安全阻止”则进入控制面板->Java  打开java控制面板,在安全 ...

  8. HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  9. 抽屉header

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. HL7 Event Type

    Table 0003 - Event type Value Description A01 ADT/ACK - Admit / visit notification A02 ADT/ACK - Tra ...