Linux 上 .NET Core

来自linux中国网wiki
Evan讨论 | 贡献2019年10月14日 (一) 13:48的版本 (导入1个版本)
跳到导航 跳到搜索

plan and optimize

数据库读取这块有办法提速没,不做缓存的情况下

加索引

合理建表 也就是sql 语句优化

取消dns查询 关键字段建立索引 确保索引用上 表分区 队列操作 比较常的

索引这个最基本的,基本上上千万级别查询都没问题的,亿级别的分表分库处理。 最好的优化方式是钱。。。。



开启 MySQL query cache,加快数据库读取速度

先在外网机上上个pg

pre env

用.net core去开发后端 会暴露n个web服务器和n个socket服务器 全部.net core的

https://www.mysql.com/products/connector/

这个是.net fx的

.net core是另外的

DB

Postgresql


db 备份

postgresql 硬盘上ssd 那应该是db 独立为一台机器

第一种方法:通过PostgreSQL的环境变量参数来实现保存密码

cat pgsql_backup.sh

#!/bin/bash
export PGPASSWORD="123456"
su -  postgres
-bash-4.2$ /usr/bin/pg_dump  -U postgres  awen > /data/pgsql.backup.sql 
-bash: /data/pgsql.backup.sql: 权限不够
-bash-4.2$ /usr/bin/pg_dump  -U postgres  awen > pgsql.backup.sql 


注意的点 1. 要 切换到postgres用户
         2. 备份的目录得是postgres用户有权限的地方

postgrepsql参考

PostgreSQL

PostgreSQL Greenplum 培训视频分享

PostgreSQL的备份与还原-good

postgreSQL进程检测与数据库备份脚本

一种简单的PostgreSQL备份脚本(无须手动输入密码)

PostgreSQL 9.6.0 手册

PostgreSQL新手入门 postgresql YUM Installation

Postgresql数据库运维笔记

CentOS7 PostgreSQL安装

PostgreSQL 有哪些经典入门书籍

PostgreSQL在阿里的应用


Linux下定时备份Postgresql数据库

Postgresql笔记

常用命令

su - postgres
postgres=# \du
                             角色列表
 角色名称 |                    属性                    | 成员属于 
----------+--------------------------------------------+----------
 awen     | 超级用户                                   | {}
 postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}

postgres=# \l
                                     数据库列表
   名称    |  拥有者  | 字元编码 |  校对规则   |    Ctype    |       存取权限        
-----------+----------+----------+-------------+-------------+-----------------------
 awen      | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 行记录)

.NET CORE

ASP.NET Core

发布ASP.NET Core程序到Linux生产环境

ASP.NET Core 2.0笔记(1):CentOS下.net core2 sdk nginx、sup

.NET Core全面扫盲贴

Linux 上 .NET Core

.NET Core 入门

.net core install

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'

#sudo yum update #可以不要的
yum makecache
sudo yum -y install libunwind libicu
sudo yum  -y install dotnet-sdk-2.1.2


#me
mkdir webapi
dotnet new webapi
dotnet  run



dotnet new console -o hwapp
cd hwappdotnet run

warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Error -99 EADDRNOTAVAIL address not available'.


#if asp.net 
dotnet new razor -o aspnetcoreapp
cd aspnetcoreapp
dotnet run

Browse to http://localhost:5000

Docker 部署dotnetcore

部署asp.net core

配置守护服务(Supervisor) 这个 暂时启动有问题 

:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。

为了解决这个问题,我们需要有一个程序来监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。这边我们用到了Supervisor这个工具,Supervisor使用Python开发的。

安装Supervisor

yum install python-setuptools
easy_install supervisor #or yum 

yum install epel-release
yum install -y supervisor

配置Supervisor

mkdir /etc/supervisor

#echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改supervisord.conf文件,

vim  /etc/supervisor/supervisord.conf
将文件尾部的配置(表示加载配置文件目录下的配置文件)
修改为

[include]
files = relative/directory/*.ini

把;files = relative/directory/*.ini改为files = conf.d/*.conf

保存并退出

c.执行supervisorctl reload命令使配置文件生效。(ps:如果服务已启动,修改配置文件可用“supervisorctl reload”命令来使其生效)

d.在/etc/supervisor/下创建conf.d文件夹,及ProjectName.conf(以项目名称命名的)
 mkdir -p  /etc/supervisor/conf.d
vi /etc/supervisor/conf.d/ProjectName.conf
 
 
e.打开ProjectName.conf文件,添加内容如下:
[program:ProjectName]
command=dotnet ConsoleApp1.dll ;
directory=/data/wawa_test1/publish;
autorestart=true ;
autostart=true ;
stderr_logfile=/data/logs/ProjectName.err.log ;
stdout_logfile=/data/logs/ProjectName.out.log ;
environment=ASPNETCORE_ENVIRONMENT=Production;
user=root ;
stopsignal=INT
startsecs=1;


##下面为解说
[program: ProjectName]
command=dotnet ProjectName.dll ; 运行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
startsecs=1 ; 自动重启间隔


service  supervisord start 

supervisord -c /etc/supervisor/ supervisord.conf
ps -ef | grep ProjectName


err
[root@_111_centos publish]# supervisord -c /etc/supervisor/supervisord.conf
Error: invalid literal for long() with base 10: '1;' in section 'program:ProjectName' (file: '/etc/supervisor/conf.d/ProjectName.conf')


配置对ASP.NET Core应用的守护

创建一个 farmhomeapp.conf文件
内容大概如下 

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


运行supervisord,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf

[root@VM_130_111_centos hosts]# ps -ef | grep super
root      6864     1  0 10:04 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

linux服务启动形式

http://www.cnblogs.com/dudu/p/run-aspnet-core-website-as-service-on-linux.html

https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction?tabs=aspnetcore2x 可以通过systemctl 启动

配置Supervisor开机启动

新建一个“supervisord.service”文件

vim /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]0

执行命令:systemctl enable supervisord 设定开机启动

执行命令:systemctl is-enabled supervisord #来验证是否为开机启动

Supervisor安装与配置(Linux/Unix进程管理工具)

Linux Supervisor的安装与使用入门

使用Supervisor简化进程管理工作 http://www.qingpingshan.com/m/view.php?aid=318910


postgresql YUM Installation

run app

[root@Vntos data]# dotnet  ConsoleApp1.dll 
A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/data/'.

err

PS D:\ChuckLu\Git\GitHub\KerryJiang\IrvineCSharpCourses> dotnet restore
MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.

这个命令需要在项目或者解决方案下运行才有效

然后叫老谢 重打个包就好  应该都是他那边的问题 

http://www.cnblogs.com/chucklu/p/7095919.html


Get Started with ASP.NET Core

Install .NET and build your first app on CentOS

Install .NET and build your first app on Docker

服务的注册和发现 Consul

可能用这个做负载均衡

https://www.consul.io Consul入门

nginx

server {
    listen 80;
     
    server_name 192.168.30.108;
 
    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

知识扩展

微软开发的.NET平台编程语言
C#,一个以C++和Java语法为基础开发的一个全新的面向对象语言,是.NET开发的首选语言。
Visual Basic .NET,一个加强了面向对象支持的,支持多线程的Visual Basic版本。
C++/CLI,一个C++的.NET平台版本变种。
JScript .NET,一个编译版本的MicrosoftJScript语言。
J#,一个对应于Java和J++(微软自己开发的Java变种)的.NET平台版本,但是由于知识产权问题,目前微软公司已经停止其开发应用。
F#,ML语言家族的一员。
Microsoft Small Basic

.NET Core中的包、元包与框架

参考