在前段时间总想自己做点小玩意,但不知道做什么思来想去还是决定做个小论坛,为什么称之为小论坛的原因是因为-------我真的很菜 ,以至于我在写博客的时候都是战战兢兢地因为技术不好哈哈。
在开始之前我用还在上学的小女友的身份开通了一个腾讯云的服务器 是Linux的 em。。。1核2G,50G的服务器 因为腾讯搞活动便宜啊用来练手不错的,有了服务器很开心!!!
接下来我们就要在服务器上安装环境:
首先需要安装微软 .net core 的sdk
1.在命令行输入:
wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb
以获取微软的相关秘钥
2.安装sdk
sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install dotnet-sdk-2.1
如果安装完成之后你不知道是否安装成功你可以在输入 dotnet 如果有关于.net core 的相关信息则说明安装成功
3.安装nginx反向代理(这个官网也有介绍)
命令行下
$sudo apt-get update
$sudo apt-get install nginx
systemctl status nginx.service
如果遇上安装错误那么大多数就是80端口被占用了这个就需要你找到占用端口的应用杀掉然后再次安装!
sudo netstat -tunlp|grep 80
$sudo kill “
占用端口的的pid
”
$sudo apt-get install nginx $sudo netstat -tunlp|grep 80
4.启动nginx 乌班图中nginx会自动启动,可以吧nginx附加到系统启动
$systemctl enable nginx #设置开机启动
通过访问http://ip:80来查看nginx的运行 如果出现 Welcome to nginx on Fedora!说明安装成功
【0】配置nginx的配置文件
root权限打开 /etc/nginx/nginx.conf文件将 server{}替换
server {
listen 80;
server_name example.com *.example.com;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
} }
【1】关于Nginx的静态HTTP服务器
located in /usr/share/nginx/html.这个就是存放静态页面的指定位置
【2】反向代理的虚拟主机
在一台Linux中我们可以部署多个NetCore的程序,但每个又使用不同的端口,如果是这样的话我们需要这样做
将两个项目发布成功后 将发布的文件上传到Linux服务器上(这里我是用的是Xshell,Xftp)然后运行dotnet xxx 发现外网并不能访问
那么接下来我们就应该配置nginx
配置多个项目的nginx
用root权限打开 /etc/nginx/nginx.conf文件在location/ 后添加
location /xxx1{
rewrite ^/xxx1/(.*)$ /$1 break;
proxy_pass http://localhost:程序中使用的端口号1
}
location /xxx2{
rewrite ^/xxx2/(.*)$ /$1 break;
proxy_pass http://localhost:程序中使用的端口号2
}
【3】配置完成之后要验证nginx的配置格式是否正确
$nginx -t
【4】如果配置验证通过啧需要重启nginx
$sudo nginx -s reload
*******************************************************************************************
【问题】
在部署程序时可能会出现
-
Error:
An assembly specified in the application dependencies manifest (MyProject.WebAPI.deps.json) was not found:
package: 'Microsoft.AspNetCore.Mvc.Abstractions', version: '2.0.2'
path: 'lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Abstractions.dll'
This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:aspnetcore-store-2.0.5.xml
其原因在网上查到开发的机器装了sdk但在运行时可能是没有的可以在 项目的 .csproj 文件中添加并再次发布<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
这时候你会发现你发布的文件会变大。。em。。对变大
配置到这里时还有个很不错的东西可以说一下就是
【监督守护进程】
这个在微软的官网文档里也有
Supervisor的主要功能是用来管理Web服务即使闪退也会自动重启,它还带有Web管理界面使用方便。而且是微软官方推荐值得尝试。
详细使用可以参考文档ASP.NET Core Linux下为dotnet创建守护进程(必备知识)。我们这里结合前面准备的sample1和sample2来尝试一下。
在linux中使用以下命令进行安装:
ubuntu
$sudo apt-get install supervisor
验证是否安装成功,执行命令
$echo_supervisord_conf
如果有很多内容,说明安装成功,这些内容实际上的英文/etc/supervisord.conf
文件的内容,我们查看这个文件,看最后一行
[include]
files = supervisord.d/*.ini
说明我们需要在/etc/supervisord.d/下添加的INI的配置文件就可以,我们添加一个sample.ini
[program:Sample1]
command=dotnet Sample1.dll #要执行的命令
directory=/root/netcoresamples/sample1 #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=root #进程执行的用户身份
stopsignal=INT
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=3 #自动重启间隔
stderr_logfile=/root/netcoresamples/sample1/log/Sample1.err.log #标准错误日志
stdout_logfile=/root/netcoresamples/sample1/log/Sample1.log #标准输出日志
[program:Sample2]
command=dotnet Sample2.dll #要执行的命令
directory=/root/netcoresamples/sample2 #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=root #进程执行的用户身份
stopsignal=INT
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=5 #自动重启间隔
stderr_logfile=/root/netcoresamples/sample2/log/Sample2.err.log #标准错误日志
stdout_logfile=/root/netcoresamples/sample2/log/Sample2.log #标准输出日志
这里要注意,提交到Linux的的之前必须把中文注释都删除,否则会有错误。
重新启动supervisord需执行
$supervisorctl shutdown
$supervisord -c /etc/supervisord.conf
主管默认给我们提供了一个图形界面来供给我们管理进程和任务,只需要把supervisord.conf里一段注释去掉,并修改地址为0.0.0.0
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123321 ; (default is no password (open server))
还需重启supervisord。另外需把9001端口加到的Nginx的配置上
location /supervisor{
proxy_pass http:localhost:9001/;
}
检查是否配置成功 在浏览器输入ip /supervisor出现supervisor页面则为成功
-----------------------------------------------------------------
到这里有关于.net core ,nginx 在Linux中安装的基本算是成功了,以为后边还需要安装 apache php mysql 这里边会有端口冲突和一些其他的问题。
《我曾试着使用宝塔安装 可是我太菜了 弄不了那东西 配置好了居然不能用还不如我这手动的呢虽然麻烦但是自己知道怎么装的如何运行》
来自小菜鸡的嘶吼-------快搬砖!!!!