0%

前言

为了在本地部署项目,k3sk8s可以使用相似的资源清单配置文件。执行方式不使用自带的容器执行程序使用docker作为底层的执行。

安装

1
2
3
4
#使用docker,实际配置内容在/etc/systemd/system/k3s.service,里面有个ExecStart里面配置为docker即可使用docker。也可以直接在安装的时候通过环境变量的方式设置。
export INSTALL_K3S_EXEC="--docker"
#定义安装程序使用的源 Mirror
export INSTALL_K3S_MIRROR=cn

安装k3s

1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

加入Work节点

1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

mynodetoken位于:/var/lib/rancher/k3s/server/node-token
https://myserver:6443 为服务器地址端口均为6443,需要保证端口通畅

备注

如果启动不起来,需要将docker的配置文件(/etc/docker/daemon.json)

1
2
3
4
{
"exec-opts": ["native.cgroupdriver=cgroupfs"]
//将docker驱动设置为cgroupfs
}

前言

今天遇到一个很有意思的提问,有Animal,Cat,ChineseCat,三个类,这三个类有继承关系(如下):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Animal:
{

}

public class Cat:Animal
{

}

public class ChineseCat:Cat
{

}

需要将一个子类的字符串通过JSON转换为他的实际类型。

本文关于DOS.ORM

1. 准备一个示例数据库

1
2
3
4
5
6
7
8
9
CREATE TABLE `order_50`  (
`ID` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`ProductName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`CreateTime` datetime(0) NULL DEFAULT NULL,
`CreateOrderUserId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`ID`) USING BTREE,
INDEX `idx`(`ProductName`) USING BTREE,
INDEX `indc`(`CreateOrderUserId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

2. 新建一个Console项目

1
2
dotnet new console #新建项目
dotnet add package DOS.ORM #安装DOS.ORM包

3. 编写代码

新建一个DB.cs

1
2
3
4
5
6
7
8
9
using Dos.ORM;

namespace ORMDemo;

public class DB
{
public static readonly DbSession Context = new DbSession(DatabaseType.MySql,
"Server=127.0.0.1;port=3307;userid=root;password=123456;database=mytestdb_5;");
}

新建一个Entity

我们这里新建一个Order实体

1
2
3
4
5
6
7
8
9
10
11
12
13
using Dos.ORM;
namespace ORMDemo;
[System.ComponentModel.DataAnnotations.Schema.Table("order_50")] //必须添加数据库实体表明
public class OrderEntity:Entity //必须继承Entity
{
public string Id { get; set; } = Guid.NewGuid().ToString();

public string CreateOrderUserId { get; set; }

public DateTime CreateTime { get; set; }

public string ProductName { get; set; }
}

这个实体对象必须指定数据库的表名,并继承Entity(位于DOS.ORM)

使用DOS.ORM进行查询数据

1. 使用FromSql进行查询

1
2
3
using ORMDemo;

var list =DB.Context.FromSql("SELECT * from order_50 LIMIT 10").ToList<OrderEntity>();

通过上面的形式就可以查询到数据,数据会自动通过ToList<T>()映射到C#对象。

2. 使用db.Context.From<T>()

1
var list = DB.Context.From<Order>().ToList();

该Order类需要标记Table、Field等。一般使用Dos.Tools对已经存在的数据库生产实体类。(选择2018年的模板)

2. 新增DB.Context.Insert<T>()/Insert()

1
2
3
4
var order = new Order(){
....此处省略
};
DB.Context.Insert<Order>(order) //插入对象

3. 更新DB.Context.Update<T>()/Update()

1
2
3
4
5
var order = new Order{
ID="CE423D3E-A1C3-40BD-9DAE-CB4C9CA11E96",
...省略其他
};
DB.Context.Update<Order>(order,c=>c.ID== order.ID); // 更新

4. 删除DB.Context.Delete()

1
DB.Context.Delete("CE423D3E-A1C3-40BD-9DAE-CB4C9CA11E96") //可以单条或者列表

后记

今天听同事说这个库好像有什么问题,具体还没跟我沟通,这个库也是在我接触的 dotnet Framework 4.x 系列的项目内接触到的。仅做记录。

1. 安装JAVA环境

1
sudo apt-get install default-jdk

2. 下载wrapper及jar包

1
2
3
4
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
unzip mycat2-install-template-1.21.zip
cd mycat/lib
wget http://dl.mycat.org.cn/2.0/1.22-release/mycat2-1.22-release-jar-with-dependencies-2022-4-27.jar

3. 给文件夹写权限

1
sudo chmod 777 mycat -Rf #递归修改文件夹权限

因为创建数据库时会在对应的文件夹创建配置文件,所以需要读写权限。同时也会往logs文件夹写日志。

4. 修改配置文件

文件名 作用
e:\mycat\conf\datasources\prototypeDs.datasource.json 配置名称为prototypeDs 的数据源
e:\mycat\conf\users\root.user.json 配置root的登录用户信息
e:\mycat\conf\server.json 配置mycat服务器信息
e:\mycat\conf\simplelogger.properties 配置log级别
e:\mycat\conf\clusters\prototype.cluster.json 配置名称为prototype的集群

5. 启动MyCat

1
2
cd mycat/bin
./mycat start # 启动后即可去logs文件夹下查看日志,若日志过于简单可以修改mycat\conf\simplelogger.properties 来调整日志级别。输出更多内容。

6. 创建数据库

使用Navicat或者dbever连接到MyCat(如果连不上,可能是MYSQL 8 密码模式造成的,可以修改密码,具体提示可以查看日志)

1
2
3
4
5
6
7
8
9
10
11
12
create DATABASE myTestDb; # 创建一个数据库 myTestDb
use myTestDb;
-- 分库分表
CREATE TABLE `test` (
`ID` varchar(36) NOT NULL,
`Name` varchar(255) NULL DEFAULT NULL,
`CreateTime` datetime(0) NULL DEFAULT NULL,
`Phone` varchar(255) NULL DEFAULT NULL,
`Address` varchar(255) NULL DEFAULT NULL,
PRIMARY KEY (`ID`) USING BTREE,
INDEX `idx`(`Phone`) USING HASH
) ENGINE = InnoDB DEFAULT dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 10 dbpartitions 10;

其中 dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 10 dbpartitions 10 为分库分表的语句,意思是使用mod_hash(id)来进行分库操作,使用mod_hash(id)来进行分表操作。tbpartitions : 分库的数量。dbpartitions :分表的数量。

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 为了测试多表查询,顾在插入了Test表后又新建了Order表
use myTestDb;
CREATE TABLE `order` (
`ID` varchar(36) NOT NULL,
`ProductName` varchar(255) NULL DEFAULT NULL,
`CreateTime` datetime(0) NULL DEFAULT NULL,
`CreateOrderUserId` varchar(255) NULL DEFAULT NULL,
PRIMARY KEY (`ID`) USING BTREE,
INDEX `idx`(`ProductName`) USING HASH
) ENGINE = InnoDB DEFAULT dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 10 dbpartitions 10;

-- 下方的语句为MyCat的命令,MyCat的命令通过类似注释的方式去执行。该命令执行刷新物理表的操作。
/*+ mycat:repairPhysicalTable{} */

7. 备忘:

• 不使用MyCat1.6的几点原因:
Insert操作丢失数据
不能批量更新(不支持多语句)

Ubuntu 通过Service自启动

  1. /lib/systemd/system/文件夹下创建Service,本次使用Service创建NPC自启。故将本次服务名称命名为npc.service
  2. 编写npc.service内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Unit]
    Description=nps_client_service
    After=network.target #网络启动后
    Wants=
    Requires=

    [Service]
    Type=forking
    ExecStart=/bin/bash /opt/NPClient/start_npc.sh #执行的内容是脚本test.sh中的内容,其中包括它的绝对地址

    [Install]
    WantedBy=multi-user.target
  3. 将该服务设置为开机启动
    1
    systemctl enable npc.service
  4. 查看服务状态
    1
    systemctl status npc.service

    确保此时无报错

  5. 重启电脑

1. 安装OnlyOffice

1
docker run -d -p 10086:80 onlyoffice/documentserver

2. 字体路径

  1. 原版自带字体:/usr/share/fonts/
  2. 核心字体:/var/www/onlyoffice/documentserver/core-fonts/

在删除过程中/usr/share/fonts/truetype/custom该路径无法删除,忽略即可,后续将自定义的字体移动才该目录,拓展名为.otf

3. 重新生成

执行:/usr/bin/documentserver-generate-allfonts.sh等待启动即可。

4. Other

使用Nginx进行反向代理,需要设置传递真实IP。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server  {
listen 80;
server_name my.hostname;
location / {
proxy_pass http://127.0.0.1:10086;
proxy_connect_timeout 4s; #配置点1
proxy_read_timeout 60s; #配置点2,如果没效,可以考虑这个时间配置长一点
proxy_send_timeout 12s; #配置点3
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

记录一下linq外连接写法

1
2
3
4
5
6
7
8
var result = from a in OverViewInfo
join city in Orgs on a.CityId equals city.Id into gcity
from kcity in gcity.DefaultIfEmpty()
join mcountry in Orgs on a.CountyId equals mcountry.Id into gcounty
from kcounty in gcounty.DefaultIfEmpty()
select new { a,kcity,kcounty};

result.Dump(); //linqPad调试

几个月前配置过,因为迁移虚拟机,备忘

1. 创建容器

1
docker run -d --name gitlab-runner-12.10.1 --restart always -v /gitlab-runner/config/:/etc/gitlab-runner/  -v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner:latest

2. 进入容器配置连接到gitlab

1
2
docker exec -it 4054 /bin/bash  #4054为容器ID
gitlab-runner register -n --url=http://mygitlabUrl --registration-token=gitlab-token --executor=docker --description="vm-199-06" --docker-image="docker:19.03.8" --docker-volumes /var/run/docker.sock:/var/run/docker.sock --locked=false

2021年03月02日

安装PostgerSQL

1
docker run -d -p 5432:5432 --name=psql -e POSTRES_PASSWORD=123456 postgres

创建数据库harryblog

1
2
docker exec -it psql /bin/bash   #进入数据库容器
su postgres #切换用户为postgres

在PostgreSQL中,管理员用户为 postgres

1
2
createdb harryblog #创建Harryblog数据库
psql -l #显示所有的数据库,显示如下图

image-20210302113352439

删除数据库

1
2
dropdb harryblog
psql -l

image-20210302113845613

进入数据库

1
2
psql harryblog
select version(); #查看postgreSQL版本

image-20210302113557741

操作数据表

1. 创建数据库

1
2
3
4
psql harryblog
create table posts (title varchar(255),content text);
\dt -- \dt 为查看表列表信息
\d

image-20210302133608594

1
\d posts  #查看表详细信息(非列表)

image-20210302134024092

导入SQL文件使用 \i

C# 反射

C# 通过反射可以动态加载DLL使用,大大提高灵活性。

实践

  1. 预先建立一个类库,在内部写一个cat类,然后重新生成项目
  2. 新建一个控制台程序,将类库生成的DLL复制到控制台程序的bin/debug目录。

代码如下:

Hello类库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;

namespace hello
{
public class cat
{
public cat()
{
Console.WriteLine("初始化Cat");
}

public void miaomiao()
{
Console.WriteLine("喵喵叫");
}
}
}

控制台程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Reflection;

namespace Learn_more
{
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.Load("hello");
Type type = assembly.GetType("hello.cat");
Object OHello = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("miaomiao");
methodInfo.Invoke(OHello, null);
}
}
}