Linux环境下发布.net core
一、安装Linux环境
1. 安装VM虚拟机和操作系统
VM虚拟工具安装的过程详见:http://blog.csdn.net/stpeace/article/details/78598333。直接按照文中安装布骤进行即可。
上面链接中,在描述完VM安装之后,也介绍了如果安装linux操作系统。我们并不是安装这个版本。
Linux操作系统,我们选择server版本,Ubuntu 16.04 Server。这个版本是没有界面可操作的。安装过程详见:https://www.linuxidc.com/Linux/2017-11/148341.htm
特别注意:到了
23.选择要安装的软件,多加一个OpenSSH Server,然后下一步-Continue;
一定要按图中显示选上openssh server和 standard system utitities,如果不选择这个,后面需要这个服务再去安装的话,会比较麻烦。
2. 安装 Xshell Portable
安装完操作系统之后,我们可以在虚拟机上输命令操作。但在虚拟机环境与本机环境的焦点切换时,显得非常的不方便,那么我们可以安装Xshell,更便捷地去使用虚拟机上的操作系统。
安装过程非常简单,https://jingyan.baidu.com/article/295430f13fb4db0c7f005065.html
安装完成后,连上我们的linux服务器即可。
如果不知道linux服务器的IP地址,请在虚拟机上输入:ifconfig
通过xshell连接之后的界面:
3. 安装 WinSCP
这个工具是用于远程上传文件到linux服务器,也可以通过界面方式直接查看linux目录,可以对文件进行增删改,对文件做权限控制。
默认情况下,我们在安装linux中所配置的用户权限,是只读的。所以我们很多的操作命令都要加上sudo。那么我们用WinSCP连接linux服务器用就个用户登录,也是只读权限。
那么我们需要用root用户来登录,具体如下:
1、设置root密码
sudo passwd root
2、修改etc/ssh/sshd_config文件
su - root
vi /etc/ssh/sshd_config
#Authentication:
LoginGraceTime 120
#PermitRootLogin without-password
PermitRootLogin yes
StrictModes yes
3、重启ssh
service ssh restart
这样修改过后就可以使用root登录winSCP了
二、Linux 基本命令
1. 打开目录
cd /dotnetapp/console
2. 文件操作
sudo vim /dotnetapp/console
如果路径不存在,将是新建操作
要对文件进行编辑,输入 i
使用键盘上下左右,编辑文件
按esc 退出编辑状态
输入 :eq! 保存退出文件
三、Web发布
1. Asp.net Core 程序发布
这个大家都会发布吧,就不要我多说了。
2. 安装.net core
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch = amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.1.4
详见 https://www.microsoft.com/net/learn/get-started/linux/ubuntu16-04
2. FTP上传
Winscp如果装好,配置好,使用root帐号登录之后,只是复制粘贴就完事了。
3. Nginx反向代理
我们知道.net core程序是可以在多个操作系统下运行的。
在windows下需要安装 .net core, 然后在程序目录下运行 dotnet xxxx.dll,程序就跑起来了
同样在linux环境下也是一样的
如果这是一个web程序,直接执行 dotnet xxxx.dll也可以让网站跑起来
此时网站已经跑起来了,我们在本机的浏览器输入 http://服务器IP:5000, 不能访问。
我们接下来,需要安装反向代理
sudo apt-get install nginx
sudo service ngnix start
安装完之后修改配置
sudo vim /etc/nginx/sites-available/default
server {
listen 81;
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 $http_host;
proxy_cache_bypass $http_upgrade;
}
}
修改完之后,
sudo nginx -t
sudo nginx -s reload.
浏览器输入 http://服务器IP:81,即可访问网站。
4. Supervisor 守护进程
到目前位置,应用程序还是我们自己手动运行起来的,而且还不能Ctrl+C关闭并退出,否则你的网站将无法访问!所以我们需要有一个类似监视器的角色来保证ASP.NET Core进程的正常运行,那么Supervisor会是我们的首选。
安装supervisor
sudo apt-get install supervisor
安装完之后,添加一个监视文件
/etc/supervisor/conf.d
[program:backend]
command=dotnet /dotnetapp/backend/OneCode.Api.dll
directory=/dotnetapp/backend/
autostart=true
autorestart=true
stderr_logfile=/var/log/hellomvc.err.log
stdout_logfile=/var/log/hellomvc.out.log
environment=ASPNETCORE__ENVIRONMENT=Production
user=www-data
stopsignal=INT
重新启动配置中的所有程序
supervisorctl reload
重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name
这时站点部署完毕
注: 这个节点写得比较乱,详见
https://www.cnblogs.com/wangjieguang/p/aspnetcore-ubuntuserver.html
四、控制台程序发布
让一个.net core console在linux环境下跑起来,只需要简单配置一下守护进程即可
cd /etc/supervisor/conf.d
sudo vim console.conf
[program:console]
command=dotnet /dotnetapp/console/CommonConsole.dll
directory=/dotnetapp/console
autostart=true
autorestart=true
stderr_logfile=/var/log/console.err.log
stdout_logfile=/var/log/console.out.log
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
sudo supervisorctl start console
如果要关掉这个进程
sudo supervisorctl stop console
重启
sudo supervisorctl restart console
这样我们.net写的控制台程序就这样,在linux上面跑开,我们的signalr消息推送程序是基于控制台的,也就可以运行了。
如果想看一下,跑得怎么样:
sudo supervisorctl tail -f console
可以看到控制台的输出日志
五、安装mysql
首先执行下面三条命令:
sudo apt-get install mysql-server
sudo apt isntall mysql-client
安装成功后可以通过下面的命令测试是否安装成功:
sudo netstat -tap | grep mysql
出现如下信息证明安装成功:
可以通过如下命令进入MySQL服务:
mysql -uroot -p你的密码
现在设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1:
保存退出,然后
mysql -u root –p 进入mysql服务,
执行授权命令:
grant all on *.* to root@'%' identified by '你的密码' with grant option;
flush privileges;
然后执行quit命令退出mysql服务,执行如下命令重启mysql:
service mysql restart
现在在Windows下可以使用navicat远程连接Ubuntu下的MySQL服务:
六、部署VUE
1.打包好 vue 项目,通过ftp上传到linux相应位置
比如:/dotnetapp/nodejs/secondpro
2.在nginx上添加如下:
server {
listen 84;
server_name localhost;
root /dotnetapp/nodejs/secondpro;
index index.html;
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
}
3.重启nginx sudo nginx -s reload.
七、Redis
1. 安装Redis
安装Redis服务器端
~ sudo apt-get install redis-server
安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序
检查Redis服务器系统进程
~ ps -aux|grep redis
redis 4162 0.1 0.0 10676 1420 ? Ss 23:24 0:00 /usr/bin/redis-server /etc/redis/redis.conf
conan 4172 0.0 0.0 11064 924 pts/0 S+ 23:26 0:00 grep --color=auto redis
通过启动命令检查Redis服务器状态
~ netstat -nlt|grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
通过启动命令检查Redis服务器状态
~ sudo /etc/init.d/redis-server status
redis-server is running
2. C#代码使用Redis
.net core 代码使用redis 服务
新建控制台程序
安装nuget 包
添加appsetting.json
{
"ConnectionStrings": {
"redis": {
"port": "6379",
"poolsize": "50",
"database": "0",
"ip": "192.168.229.129",
"pass": "wk",
"name": "RedisCon"
}
}
}
封装
public class RedisHelper : CSRedis.QuickHelperBase
{
public static IConfigurationRoot Configuration { get; internal set; }
public static void InitializeConfiguration(IConfigurationRoot cfg)
{
Configuration = cfg;
int port, poolsize, database;
string ip, pass;
if (!int.TryParse(cfg["ConnectionStrings:redis:port"], out port)) port = 6379;
if (!int.TryParse(cfg["ConnectionStrings:redis:poolsize"], out poolsize)) poolsize = 50;
if (!int.TryParse(cfg["ConnectionStrings:redis:database"], out database)) database = 0;
ip = cfg["ConnectionStrings:redis:ip"];
pass = cfg["ConnectionStrings:redis:pass"];
Name = cfg["ConnectionStrings:redis:name"];
Instance = new CSRedis.ConnectionPool(ip, port, poolsize);
Instance.Connected += (s, o) => {
CSRedis.RedisClient rc = s as CSRedis.RedisClient;
if (!string.IsNullOrEmpty(pass)) rc.Auth(pass);
if (database > 0) rc.Select(database);
};
}
}
使用:
static void Main(string[] args)
{
IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
IConfigurationRoot configuration = builder.Build();
RedisHelper.InitializeConfiguration(configuration);
bool setResult = RedisHelper.Set("test1", "123123");
var getResult = RedisHelper.Get("test1");
}
以上是对csredis做了进一步的封装,如果不作封装也可以直接使用,而且可操作性更为丰富,具体详见
https://github.com/ctstone/csredis
Linux环境下发布.net core的更多相关文章
- Linux环境下如何生成core文件
Linux环境下进程发生异常而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息.但是生成core文件需要设置开关,具体步骤如下: 1.查看生成core文件 ...
- Linux环境下发布项目(Tomcat重新启动)
在Linux系统下,重启Tomcat 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否 ...
- Win10 Bash/WSL调试Linux环境下的.NET Core应用程序
一.简介 使用过Mac OS的程序员都知道,在Mac Book Pro上写程序是一件比较爽的事儿,作为dotneter,我们都比较羡慕Mac系统的环境,比如命令行,当然设备也是挺漂亮的. 在新的Win ...
- linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库
1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...
- .net core linux环境下 System.Data.SqlClient.SqlException: Connection Timeout Expired.
最近遇到了一个很奇葩的问题,我编写了一个.net core程序读取多个数据库数据源,进行数据同步处理.该程序在windows环境下运行完全正常,但在linux环境下运行报异常,提示 System.Da ...
- mosquitto在Linux环境下的部署/安装/使用/测试
mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...
- 在离线环境中发布.NET Core至Windows Server 2008
在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...
- Linux环境下段错误的产生原因及调试方法小结(转)
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...
- Linux环境下段错误的产生原因及调试方法小结
转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
随机推荐
- 掌握这些知识,你的python水平能更上一层楼
今天讲一些python中的高级用法,有助于大家更好的使用python这门语言.今天讲的这些知识是层层递进的关系,前面是后面的铺垫. 函数可变参数*args和**kwargs python支持固定参数, ...
- 从 HelloWorld 看 Java 字节码文件结构
很多时候,我们都是从代码层面去学习如何编程,却很少去看看一个个 Java 代码背后到底是什么.今天就让我们从一个最简单的 Hello World 开始看一看 Java 的类文件结构. 在开始之前,我们 ...
- devstack部署openstack环境
背景:公司需要搭建openstack私有云.配置两台物理服务器. 各大搜索引擎了解了下OpenStack.决定先在虚拟机上部署实现openstack. 前提准备 设备:一台宿主机Windows10 1 ...
- 关于win8的各种版本的区别
Windows8.1 Professional VL 表示:专业版(大客户版,批量授权) Windows8.1 Multiple editions 表示:多合一版本(包含:标准版.专业版) 个人用户 ...
- JS如何判断滚动条是否滚到底部
判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop.clientHeight.scrollHeight. scrollTop为滚动条在Y轴上的滚动距离. clientHeigh ...
- Ubuntu修改密码之后无法登录
问题:Ubuntu修改密码之后无法登录,停留在登录界面,输入正确的密码之后,画面一闪又回到了登录界面. 解决:ctrl+alt_f1进入终端,输入用户名和密码,$cd /home/userXXX &a ...
- 用IDEA生成javadoc文档
用IDEA生成javadoc文档 打开相应的选项面板 设置 -encoding是java代码编码,-charset是对生成文档所用的编码.-windowtitle就是对应html的<title& ...
- 设计模式之生成器(Builder)模式
意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以表示不同的表示. 适用性 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同的表 ...
- 设计模式 --> (12)装饰模式
装饰模式 时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一 些功能,最简单的做法就是修改接口,添加函数, ...
- JDK1.8源码(五)——java.util.ArrayList 类
关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实 ...