0%

低代码平台

appsmith

  1. 英文
  2. 写 JavaScript 时,window 不支持
  3. react
  4. GitHub-源码

卡拉云

  1. 非开源

低代码引擎

  1. 阿里巴巴开源产品
  2. GitHub-源码
  3. 简单页面跳转能快速配置
  4. 预览的链接,其他主机不能访问
  5. 生成的代码 npm install 成功,npm start 失败,没有相关物料, 界面展示失败。 和出码中的 sandbox 沙盒展示错误一致

tmagic-editor

  1. 腾讯垃圾产品
  2. 组件不全
  3. GitHub-源码

附录

  1. AppSmith 评价
  2. aliyun 推广介绍
  3. 常见低代码产品

minio 对象存储

引入原因

1、文件上传功能,不自己写上传接口
2、不用应用服务器 nginx 部署
3、权限设置,不希望有数据对外展示
4、阿里云对象存储收费

相关内容

安装

1
2
3
4
5
6
docker pull minio/minio

## 9000为api接口,9090为控制台管理界面接口
docker run -p 9000:9000 -p 9090:9090 --name minio -v H:\minio\data:/data -v H:\minio\config:/root/.minio minio/minio server --console-address ":9090" /data

## 浏览器访问127.0.0.1:9090 默认登录minioadmin/minioadmin

客户端使用

1
2
3
4
5
docker pull minio/mc
docker run minio/mc ls play
docker run -it --entrypoint=/bin/sh minio/mc
mc config host add minio http://api-minio.foxhello.com 52trhHBInpg9UGpm 秘钥 --api s3v4
mc ls minio

curl上传 centos正常,mac有问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 设置Access Key和Secret Key
ACCESS_KEY="upload"
SECRET_KEY=""

# 设置上传的文件路径、Bucket名称和Object名称
FILE_PATH="/Volumes/T7/project/project_fmzh/test.md"
BUCKET_NAME="test"
OBJECT_NAME="test.md"

# 构建HTTP PUT请求,并添加认证头部信息
#DATE=$(date -u "+%a, %d %b %Y %H:%M:%S GMT")
#DATE=$(date "+%Y%m%dT%H%M%S%z")
DATE="Tue, 21 Feb 2023 05:41:57 GMT"
CONTENT_TYPE=$(file --mime-type $FILE_PATH | awk '{print $2}')
CONTENT_MD5=$(openssl md5 -binary $FILE_PATH | base64)
STRING_TO_SIGN="PUT\n$CONTENT_MD5\n$CONTENT_TYPE\n$DATE\nx-amz-acl:public-read\n/$BUCKET_NAME/$OBJECT_NAME"
SIGNATURE=$(echo -en "$STRING_TO_SIGN" | openssl sha1 -binary -hmac "$SECRET_KEY" | base64)
curl -X PUT -T "$FILE_PATH" \
-H "Host: minio-api.foxhello.com" \
-H "Date: $DATE" \
-H "Content-Type: $CONTENT_TYPE" \
-H "Content-MD5: $CONTENT_MD5" \
-H "Authorization: AWS $ACCESS_KEY:$SIGNATURE" \
-H "x-amz-acl:public-read" \
"https://minio-api.foxhello.com/$BUCKET_NAME/$OBJECT_NAME"

存在问题

1、修改管理员密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改密码
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=***

docker run -d \
--name minio \
--restart=always \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=minioAlan" \
-e "MINIO_ROOT_PASSWORD=miniokillccc" \
-v /www/docker/minio/config:/root/.minio \
-v /www/docker/minio/data:/data \
minio/minio \
server /data --console-address ":9001" --address ":9000"

2、对外如何访问
代码
3、预览不能展示图片
见 4
4、永久访问

1
2
3
4
5
6
7
# 将bucket设置为public jpg直接能在浏览器打开

#直接下载:
http://api-minio.foxhello.com/fmzh/logo.png

#可在浏览器打开:
http://api-minio.foxhello.com/fmzh/logo.png?response-content-type=image%2Fpng

参考

  1. minio 使用 docker 部署
  2. minio 源码-GitHub
  3. minio 官网文档-中文 版本较旧
  4. minio 官网
  5. minio 官网文档-英文 版本较新 以此学习
  6. minio 包 maven 下载
  7. minio 修改密码
  8. minio docker 部署 设置密码

java 内存占用高

表现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看内存剩余
free -H

# 查看应用占用情况
top

## 查看占用内存的前3名进程
ps -aux | sort -k4nr | head -3

## 按cpu排序
ps -eo "%C : %p : %z : %a" --sort -%cpu

## 按内存排序
ps -eo "%C : %p : %z : %a" --sort -vsz

故障定位

  1. 查看具体项目内存占用
    top -p pid

    查看 java 开启的线程数
    top -H -p 22085

  2. heap 对象输出情况
    jmap -heap pid

  3. 获取 dump 文件
    jmap -dump:format=b,file=/root/roi-pay/pay.hprof 22085

  4. 大对象分析 - mat 工具 JDK11
    Reports -> Leak Suspects -> Problem Susppects -> Details -> See stacktrace

1
2
mysql 连接占用较大 mysql-cj-abandoned-connection-cleanup
nacos 客户端更新对象较大 com.alibaba.nacos.client.config.security.updater
  1. 或者 jhat pay.hprof 然后在浏览器中 localhost:7000 访问分析结果
  2. 或者 https://fastthread.io/ 上传分析

参考

  1. 内存分析工具-下载
  2. dump 文件查看
  3. 线上 Java 高 CPU 占用、高内存占用排查思路–待深入
  4. Java 内存占用分析–待深入

固定 ip

说明

模式名称 特点
网络地址转换(NAT) 连接这个网络可以访问外部网络,但是外部网络不可访问虚拟机
桥接网卡 这个网络完全可以共享主机网络,主机网络发生变化时,也跟随变化,ip 也随之变动
仅主机(Host-Only)网络 这个网络也可以用来主机访问虚拟机以及虚拟机上 web 服务,但是虚拟机不可访问外网

方案

方案一:选择桥接网卡,直接共享主机网络,主机、虚拟机之间访问都没有问题

但是我们家用或者公司使用,都不会固定 ip 的,主机随时变化,那么虚拟机的 ip 也随时变化,很不方便,我们希望虚拟机的 ip 是固定的,方便我们连接和访问服务使用

方案二:网络地址转换(NAT) + 仅主机(Host-Only)网络 的组合

参考

  1. virtualbox 设置固定 ip

dns 解析原理

dig 的使用

foxhello.com 的 dns 结果

1
2
3
4
dig +short ns foxhello.com

dns10.hichina.com.
dns9.hichina.com.

step 1 根域名

dig @h.root-servers.net foxhello.com

根域名

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @h.root-servers.net foxhello.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22835
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;foxhello.com. IN A

;; AUTHORITY SECTION:
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.

;; ADDITIONAL SECTION:
a.gtld-servers.net. 172800 IN A 192.5.6.30
b.gtld-servers.net. 172800 IN A 192.33.14.30
c.gtld-servers.net. 172800 IN A 192.26.92.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
m.gtld-servers.net. 172800 IN A 192.55.83.30
a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30

;; Query time: 63 msec
;; SERVER: 198.97.190.53#53(198.97.190.53)
;; WHEN: 五 3 月 04 09:42:47 CST 2022
;; MSG SIZE rcvd: 837

step 2 一级域名

dig @a.gtld-servers.net foxhello.com

一级域名

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @a.gtld-servers.net foxhello.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47429
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 19
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;foxhello.com. IN A

;; AUTHORITY SECTION:
foxhello.com. 172800 IN NS dns9.hichina.com.
foxhello.com. 172800 IN NS dns10.hichina.com.

;; ADDITIONAL SECTION:
dns9.hichina.com. 172800 IN A 120.76.107.42
dns9.hichina.com. 172800 IN A 120.76.107.52
dns9.hichina.com. 172800 IN A 139.224.142.112
dns9.hichina.com. 172800 IN A 139.224.142.122
dns9.hichina.com. 172800 IN AAAA 2408:4009:501::17
dns9.hichina.com. 172800 IN A 39.96.153.42
dns9.hichina.com. 172800 IN A 39.96.153.52
dns9.hichina.com. 172800 IN A 47.118.199.202
dns9.hichina.com. 172800 IN A 47.118.199.212
dns10.hichina.com. 172800 IN A 120.76.107.41
dns10.hichina.com. 172800 IN A 120.76.107.51
dns10.hichina.com. 172800 IN A 139.224.142.111
dns10.hichina.com. 172800 IN A 139.224.142.121
dns10.hichina.com. 172800 IN AAAA 2408:4009:501::18
dns10.hichina.com. 172800 IN A 39.96.153.41
dns10.hichina.com. 172800 IN A 39.96.153.51
dns10.hichina.com. 172800 IN A 47.118.199.201
dns10.hichina.com. 172800 IN A 47.118.199.211

;; Query time: 216 msec
;; SERVER: 192.5.6.30#53(192.5.6.30)
;; WHEN: 五 3 月 04 09:43:41 CST 2022
;; MSG SIZE rcvd: 400

step 2 域名

dig dns9.hichina.com foxhello.com

域名

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> dns9.hichina.com foxhello.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15406
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;dns9.hichina.com. IN A

;; ANSWER SECTION:
dns9.hichina.com. 1034 IN A 47.118.199.202
dns9.hichina.com. 1034 IN A 120.76.107.42
dns9.hichina.com. 1034 IN A 139.224.142.112
dns9.hichina.com. 1034 IN A 139.224.142.122
dns9.hichina.com. 1034 IN A 47.118.199.212
dns9.hichina.com. 1034 IN A 120.76.107.52
dns9.hichina.com. 1034 IN A 39.96.153.52
dns9.hichina.com. 1034 IN A 39.96.153.42

;; Query time: 1 msec
;; SERVER: 183.60.83.19#53(183.60.83.19)
;; WHEN: 五 3 月 04 09:44:45 CST 2022
;; MSG SIZE rcvd: 162

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3675
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;foxhello.com. IN A

;; AUTHORITY SECTION:
foxhello.com. 600 IN SOA dns9.hichina.com. hostmaster.hichina.com. 2022011002 3600 1200 86400 600

;; Query time: 177 msec
;; SERVER: 183.60.83.19#53(183.60.83.19)
;; WHEN: 五 3 月 04 09:44:45 CST 2022
;; MSG SIZE rcvd: 90

参考

  1. dns 查询原理

kubernetes

搭建 方案一

安装 kubectl

1
2
3
4
5
6
7
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(<kubectl.sha256) kubectl" | sha256sum --check

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

kubectl version --client

安装 minikube

1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

minikube start

kubectl get po -A
minikube kubectl -- get po -A
alias kubectl="minikube kubectl --"
minikube dashboard

kubectl proxy --address='0.0.0.0' --port=8080 --accept-hosts='^\*$'

http://192.168.31.24:8080/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/overview?namespace=default

创建服务 hello-minikube

1
2
3
4
5
6
7
8
9
10

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080

kubectl get services hello-minikube

minikube service hello-minikube

kubectl port-forward service/hello-minikube 7080:8080

创建服务 balanced

1
2
3
4
5
6
7
8

kubectl create deployment balanced --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment balanced --type=LoadBalancer --port=8080

minikube tunnel

kubectl get services balanced

开放端口

1
2
3
4
5
6
7
8
9
10

port=$1

echo 'add port is : '$port

firewall-cmd --query-port=$port/tcp
firewall-cmd --add-port=$port/tcp --permanent
firewall-cmd --reload
firewall-cmd --query-port=$port/tcp

搭建 方案二 Kuboard Spray

Kuboard Spray 搭建

1
2
3
4
5
6
7
8
9
docker run -d \
--privileged \
--restart=unless-stopped \
--name=kuboard-spray \
-p 80:80/tcp \
-e TZ=Asia/Shanghai \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray

在浏览器地址栏中输入 http://这台机器的 IP 地址,输入默认密码 Kuboard123

kuboard 安装 k8s 图形化管理界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml

# 查看状态
kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
# 结果
NAME READY STATUS RESTARTS AGE
kuboard-54c9c4f6cb-6lf88 1/1 Running 0 45s

# 获取token
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep ^kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

eyJhbGciOiJSUzI1NiIsImtpZCI6Im45Z25UWDhma2l2bERNZDUtd1IwX3FaOVczRkJDSnVib0l6V1VLdHh3TmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tdDRjNHgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNzAyZGY0ZTktZGY4Ni00NzhkLWI2YjMtYjljZjUwMjg3NjRiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.C5mh0Iq0bXMTjNUhYMeCD_U3Cm5Ut02M7lTGKO39GSvfQaw9l1JnqlRyfhmjOD_grq7IpCOl0RYiif6zS43nDa0_y0t3PmJUbpJU_-XbyElCz1cLu2i1V3XhHA9yzsdz4AvZGBIbyczDfBM7dAxfE6mY5sFfn5Sfj_SY6_tx18S9B9EaYAZxryByzL-3JKjV9OYeQtCoPDGIMEO6D_oJw5Tj_dY36955aO6Xg5nSDOkqadvECLWi5eVk_QYmu_oFDtHjF7hoVNuuLLIqLMOpT1khNr7JJE9BbIdFJWfuYAhctPbJgbaYm4ZNBBfuQBWBNCtBM4J-XWDkiDbeTfxc4Q

# 访问kuboard
http://任意一个Worker节点的IP地址:32567/

问题

  1. 如何访问服务?
  2. https 证书怎么解决?

参考

  1. kubernetes 官网
  2. minikube 官网
  3. 远程查看 k8s 面版
  4. kuboard-spray 教程
  5. kuboard-k8s 图形管理平台

acme.sh

证书下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
export Ali_Key="你的key"
export Ali_Secret="你的密钥"

source ~/.bashrc

~/.acme.sh/acme.sh --issue --dns dns_ali -d foxhello.com -d *.foxhello.com

# 更新nginx配置
sl_certificate /path/*.example.com/fullchain.cer;
ssl_certificate_key /path/*.example.com/*.example.com.key;

acme.sh --set-default-ca --server letsencrypt
acme.sh --set-default-ca --server zerossl

acme.sh -i -d foxhello.com --key-file /root/file/foxhello.key --fullchain-file /root/file/foxhello.crt --ca-file /root/file/foxhello.ca.crt

# 命令失败时,参考-k ec-256参数
~/.acme.sh/acme.sh --issue --dns dns_cf -d "*.foxhello.com" -d "foxhello.com" -k ec-256
~/.acme.sh/acme.sh --install-cert -d "*.foxhello.com" --key-file /root/sign/ssl/foxhello.com/foxhello.com.key --fullchain-file /root/sign/ssl/foxhello.com/foxhello.com.crt --ca-file /root/sign/ssl/foxhello.com/foxhello.com.ca.crt --ecc

参考

  1. 阿里云配置
  2. 官网-各服务商配置
  3. acme.sh 官网

自动化运维

ansible

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装依赖
yum install -y epel-release

# 安装ansible
yum install -y ansible

# 迁移目录
mkdir -p /data/service/ansible
rsync -av /etc/ansible /data/service/
mv /etc/ansible{,_bak}
ln -s /data/service/ansible /etc/ansible

# 检测语法
ansible-playbook --syntax-check /path/to/playbook.yaml
# 测试运行
ansible-playbook -C /path/to/playbook.yaml
# 运行
ansible-playbook /path/to/playbook.yaml

# 测试主机
ansible foxhello -i hosts -m ping

yml示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
### roicloud-user.yml 

---
- hosts: roicloud-release
tasks:
- name: backup jar |
shell: |
cd /root/roicloud/user/target
pwd
now=$(date '+%Y%m%d%H%M%S')
mv roi-auth.jar roi-auth.jar_bak$now
ls -lrt

- name: "复制主机上的文件到目标服务器上"
copy:
src: "{{baseDir}}/roi-auth/target/roi-auth-0.0.1-SNAPSHOT.jar"
dest: "/root/roicloud/user/target/roi-auth.jar"

- name: deploy app |
shell: |
cd /root/roicloud/user/bin
pwd
ls -lrt
sh shutdown.sh
sleep 5
sh startUp.sh

/etc/ansible/hosts 示例

1
2
3
4
5
6
7
8
[roicloud-db]
118.31.246.133 ansible_ssh_private_key_file=~/.ssh/id_rsa-andy

[roicloud-test]
81.69.252.30 ansible_ssh_private_key_file=~/.ssh/id_rsa

[roicloud-release]
124.220.190.16 ansible_ssh_private_key_file=~/.ssh/id_rsa

jenkins job示例

1
ansible-playbook /root/playbook-yml/roicloud-user.yml  --extra-vars "baseDir=${WORKSPACE}" 

rsync

scp

参考

  1. ansible 安装
  2. ansible 相关命令