Linux 上 .NET Core
目录
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
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 YUM Installation
常用命令
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 2.0笔记(1):CentOS下.net core2 sdk nginx、sup
.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
部署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进程管理工具)
使用Supervisor简化进程管理工作 http://www.qingpingshan.com/m/view.php?aid=318910
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
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