Wednesday, February 16, 2022

.net core API 学习

第一课:.net core 入门

 1. Visual Studio 可以直接创建一个project

 2. 可以使用命令行创建,例如

dotnet new webapi -o apidemo1

然后用Visual studio code编辑。一般的文档编辑器也可以,但是vsc有很多插件会比较方便

Friday, August 9, 2019

C# 本质论 自学笔记(1)

1. csc.exe 可编译 csfile,生成exe或dll文件,称为assembly
2. C#倾向Pascal命名类 例如FileConfig, HttpSetting,变量以camel命名,例如config,httpSetting
3. @+关键字可以使用为identifiers
4. C#开头字符可为任意letter或者_
5. Common Intermediate Language: Compiler把C#编译成CIL,在runtime(VES),把CIL编译成machine code
6. ildasm可以查看CIL   ildasm  HelloWorld.exe, 除非有混淆器。常见的decompiler dotpeek, reflector, ILSpy

Saturday, April 14, 2018

Apache 反向代理 on centos

参考文章
How To Use Apache as a Reverse Proxy with mod_proxy on CentOS 7
https://www.digitalocean.com/community/tutorials/how-to-use-apache-as-a-reverse-proxy-with-mod_proxy-on-centos-7


我的sites文件
<VirtualHost *:80>
    ProxyPreserveHost On
    RewriteEngine On

    ProxyPass /api/ http://127.0.0.1:5000/api/
    ProxyPassReverse /api/ http://127.0.0.1:5000/api/
</VirtualHost>

我的flask测试文件:
@app.route('/api/welcome')
def welcome():
    return jsonify({"status":"Welcome"})


需要打开httpd链接 :setsebool -P httpd_can_network_connect on
参考 http://blog.51cto.com/babyhe/636602

Sunday, September 24, 2017

raspberry pi常见命令

from boxsdk import Client, OAuth2
oauth = OAuth2(client_id='11111111111111', client_secret='22222222222', access_token="3333333333333333")
client = Client(oauth)
shared_folder = client.folder(
    folder_id='0',
).create_subfolder('shared_folder')
uploaded_file = shared_folder.upload('/path/to/filename')
shared_link = shared_folder.get_shared_link()

Installing


sudo apt-get install ssmtp
sudo apt-get install mailutils
Now edit the SSMTP configuration file

sudo nano /etc/ssmtp/ssmtp.conf
It needs to include this:

root=postmaster
mailhub=smtp.gmail.com:587
hostname=raspberrypi
AuthUser=AGmailUserName@gmail.com
AuthPass=TheGmailPassword
FromLineOverride=YES
UseSTARTTLS=YES
Save and exit

Sending an email


echo "Hello world email body" | mail -s "Test Subject" recipientname@domain.com

Tuesday, May 16, 2017

ubuntu 14 + Nginx 1.4.6 + let's encrypt ssl证书安装

Install certbot 工具

On Ubuntu 14.04
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot 
certbot certonly --webroot -w /var/www/example -d example .com -d www.example .com
注意:此时需要修改default站点 /etc/nginx/sites-enabled/default ,修改root到/var/www/example
并且打开autoindex       on;
而且需要在nginx.conf下取消其他服务器
打开自建host站点的配置文件修改如下:
server {
listen 80;

index index.html index.htm;

server_name example .com; #域名
rewrite ^(.*)$  https://$host$1 permanent; 
}

server {
listen 80;

index index.html index.htm;

server_name www.example .com; #域名
rewrite ^(.*)$  https://$host$1 permanent; 
}

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name example .com;
  ssl_certificate /etc/letsencrypt/live/example .com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example .com/privkey.pem;
  ssl_dhparam /etc/nginx/ssl/dhparam.pem;
  ssl_ciphers '×××××××××××××××××××';
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:50m;
  ssl_session_timeout 1d;

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

}
注意:let's encrypt 每三个月需要更新一次ssl证书,执行下列命令 certbot renew --dry-run

Monday, May 15, 2017

Linux+Nginx+Asp.net Core及守护进程部署

 一. 基础工具和Linux环境准备
    工具介绍:
  Ubuntu:azure云端linux主机
  Xshell:免费的linux客户端工具
  FileZilla: 免费文件上传(sftp、ftp)工具
   vs2017:  开发工具

  本次部署主要是通过Nginx负载代理.net core服务,提供对外站点访问。.net core 本身的宿主则通过其自带的Kestrel服务运行。如果你是云主机请记得在管理控制台添加80访问端口。
  那这里我先创建一个www文件夹,作为后边存放站点文件的根目录,同时设置相关权限,这里可能会有一个小的需要注意的问题,现在很多云主机直接登录后权限是很低的,需要使用:sudo -s 命令提升权限,否则创建文件夹会出现权限不足的错误。
  1. mkdir /home/www/ossoffical     // 创建ossoffical站点文件夹
  2. chown [-R] 账号名称 ossoffical    // 把账号名称添加到www文件夹的所有者中,保证后续sftp上传文件夹等在无法提权的情况下也能操作

  二. .Net Core环境安装及端口配置
  1. 安装,这里参照微软官网即可,我这里使用的是Ubuntu 14.04版本,主要执行以下几条命令
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
sudo apt-get update
sudo apt-get install dotnet-dev-1.0.1
  2. vs端口相关设置
  这里需要注意一下,当前版本创建的.net core项目在不制定具体端口的情况下,会默认使用5000端口。但是这个在后续的版本中会移除,见官方文档:
  并且我也希望自己指定具体的端口,这样以后站点多了之后防止冲突,我修改自己项目中的Program文件中内容,指定8000端口,如图:
  请注意先后的顺序,否则在vs中可能会出现调试无法打开的情况,发布当前项目。
  3. 上传项目文件运行
  a. 通过filezilla上传项目文件到ossoffical目录下
  b. 通过命令客户端进入ossoffical目录(cd /home/www/ossoffical),执行:dotnet OSS.Offical.Site.dll(我当前站点项目程序集名称),结果如图:
 
  退出执行ctrl+c 。当然我们也可以执行 “ dotnet OSS.Offical.Site.dll & ” ,让其在后台运行,只是这个更方便让我们查看。这个时候你可以访问对应的8000端口即可访问(云主机请注意开放访问端口)。

  三. Nginx安装
  1. 执行:sudo apt-get install nginx  命令
  2. 安装完成之后访问对应的80端口,应该如下:
  3. 配置代理
  a. mkdir /etc/nginx/hosts   创建一个文件夹,用来放置站点配置文件
  b. 执行 cd /etc/nginx/hosts   进入目录, 执行: vi ossoffical   按 “i” 添加如下内容:

server {
listen 80;
index index.html index.htm;
server_name www.osscoder.com; #域名
location / {
proxy_pass http://127.0.0.1:8000; # 刚才设置的地址端口
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;
}
}
  退出保存。
  4. 修改nginx配置文件,vi /etc/nginx/nginx.conf
  在http节点末尾,添加 :include /etc/nginx/hosts/*;
  5.  重启nginx服务器: sudo service nginx restart(reload)
  6. 进入站点目录,dotnet OSS.Offical.Site.dll & ,确保站点正确运行,访问 www.osscoder.com,如下:

 四. 守护进程安装配置
  为了保证服务能够稳定运行,我们安装守护进程以确保在应用程序出现异常中断时能够正常重启。
   1. 安装,执行:sudo apt-get install supervisor
  2. 安装成功后进入:/ect/supervisor/conf.d/ 目录,添加 ossoffical.conf 文件,添加如下内容:
[program:OSS.Offical.Site]
command=dotnet OSS.Offical.Site.dll //要执行的命令
directory=/home/www/ossoffical //命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=osscoder //进程执行的用户身份
stopsignal=INT
autostart=true
autorestart=true
startsecs=3    //自动重启间隔
stderr_logfile=/var/log/ossoffical.err.log    //标准错误日志
stdout_logfile=/var/log/ossoffical.out.log     //标准输出日志
   把对应的目录和名称换掉即可,请删除注释,否则有时会出现命令执行失败的情况。完毕之后重启supervisor:
  sudo service supervisor stop
  sudo service supervisor start
  完成之后可以杀掉进程或者重启机器测试。

Sunday, May 14, 2017

.Net Core web 程序入门

在Ubuntu 14.04/16.04环境下.Net Core 安装部署过程记录。

No.1 准备应用程序

1. 创建.Net Core Web项目
image
image
2. 使用VS2015发布
image
image

No.2 安装.Net Core for Ubuntu

Ubuntu的安装就不介绍了,百度搜索一大堆。本人用的VMWare,装好Tools很方便。
參考 https://www.microsoft.com/net/core#linuxubuntu
1. 添加dotnet源
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
sudo apt-get update
2. 安装.Net Core SDK
sudo apt-get install dotnet-dev-1.0.0-preview2-003131
2016-11-09 22^%38^%38屏幕截图
3. 验证安装
dotnet --version
2016-11-09 22^%37^%56屏幕截图
4. 初始化示例程序
mkdir NetWeb
cd NetWeb
dotnet new
5. 运行示例程序
dotnet restore
dotnet run
2016-11-09 22^%40^%03屏幕截图
如上图中显示,表示成功!

No.3 上传程序

1. 清空删除示例程序文件夹内容
2. 拷贝第一步生成的项目文件到示例文件夹 
image
2016-11-12 22^%51^%27屏幕截图
注意:由于本人Ubuntu安装在VM里,可以直接复制文件,生产环境可利用ftp上传。

No.4 运行&访问

dotnet ***.dll
***.dll 是项目所生成的入口链接库
2016-11-12 22^%53^%48屏幕截图
5000为访问端口。本机浏览器输入http://localhost:5000/ 看到下图效果就说明部署成功。
2016-11-09_231939
注意:.Net Core 默认创建的项目部署完成以后,只能在本机内访问,外部通过IP是打不开的,可以通过配置Nginx实现。也可以通过修改Program.cs
var host = new WebHostBuilder()
                .UseKestrel()
                .UseUrls(
"http://*:5000")
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup
<Startup>()
                .Build();

host.Run();
UseUrls(http://*:5000) 即可实现通过IP访问程序。

Ps:本人用VS2015发布程序的时候,输出窗口出现乱码,应该是编码问题,不知道你们有没有,暂时还没有找到原因。 
image