您的位置:首页 > 运维架构 > Linux

Asp.net Core发布到CentOS7

2017-07-26 12:36 429 查看

第一步、安装CentOS

官网https://www.centos.org/下载CentOS,下载地址https://www.centos.org/download/,我选的“DVD ISO”,然后虚拟机VMware Workstation Pro上安装的。

配置CentOS图形界面请看我另一篇整理的文章

第二步、配置.NET Core开发项目

a、配置Url网址

默认使用http://localhost:5000的Url监听,可通过在项目根目录中添加hosting.json(名字随意)来修改Url和端口号。

{
"server.urls": "http://localhost:5000"
}


b、修改Program.cs,新增配置参数

public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.Build();

var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();

host.Run();
}


c、发布项目

右键项目->发布(B)...->发布方法(M):选文件系统,目标位置(T):默认也行,或者自己指定的PublishOutput文件夹,下一页(X)>,下一页(X)>,发布(P)

把发布成功的项目文件上传到CentOS文件夹下(这里我放在/home/wwwroot/下)

第三步、安装.NET Core环境

a、安装.NET Core SDK

sudo yum install libunwind libicu
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821 sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/local/bin


详见官方说明:https://www.microsoft.com/net/core#linuxcentos

b、验证是否安装成功

dotnet --info
dotnet --version


第四步、配置Nginx

a、从官方地址(http://nginx.org/)下载,解压,配置,编译,安装

b、或者通过curl下载,具体步骤如下:

curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm rpm -ivh nginx.rpm
yum install nginx


c、修改Nginx配置文件/etc/nginx/nginx.conf

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;
}
}


d、启动Nginx

systemctl start nginx


e、设置开机启动Nginx

systemctl enable nginx


f、防火墙设置

1)添加站点端口(80、5000)

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=5000/tcp --permanent


其中,80端口是给Nginx用,5000端口是给.NET Core用(见第二步配置)

2)重启防火墙

firewall-cmd –-reload


注:重置CentOS7的root密码请参阅这篇文章。关键代码:

找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh
按下 Control+x ,使用单用户模式启动
chroot /sysroot
passwd root
touch /.autorelabel
exit
reboot


第五步、设置守护进程Supervisor

a、安装Supervisor

一般情况下,我们在网站发布PublishOutput文件夹下运行

dotnet 项目.dll


可以检查是否正常运行,但是,退出Shell后网站就得停止。所以需要有个程序一直值守并监控着,使网站可以持续运行,所以安装->Supervisor

yum install python-setuptools
easy_install supervisor


b、配置Supervisor

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf


修改supervisord.conf文件,将文件尾部配置修改为

[include]
files = conf.d/*.conf


注:表示读取的守护配置文件路径和类型

c、重启

supervisorctl reload


d、配置对.NET Core的守护文件

步骤b中的“files = conf.d/*.conf”,即在/etc/supervisor/conf.d/文件夹下,新建一个名为“项目名.conf”的守护文件,内容如下:

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


运行Supervisord并查看进程是否生效。

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep 应用程序dll的名字


设置开机自启动

创建/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

验证一下是否为开机启动:systemctl is-enabled supervisord
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: