完成drone部署和补充线性代数非方阵内容
continuous-integration/drone/push Build is passing Details

main
InkSoul 2023-08-08 21:06:06 +08:00
parent cb2fc055d7
commit 633a326ba1
14 changed files with 145 additions and 18 deletions

View File

@ -1107,7 +1107,7 @@ uglyURLs = false
# 文章更新徽章
# 是否开启
enablePostUpdatedBadge = true
enablePostUpdatedBadge = false
# 是否显示(全局设置)
displayUpdatedBadge = true

View File

@ -32,7 +32,7 @@ date: 2022-05-10T17:23:35+08:00
这里存放一些我在学习高数,线代,概率论的一些随笔,一方面是图形学的琢磨用的比较多,另一方面也是考研做题需求
线性代数部分基于[3Blue1Brown](https://space.bilibili.com/88461692)制作的[线性代数的本质](https://www.bilibili.com/video/BV1ys411472E),如有错误欢迎页脚邮件指出
线性代数部分基于[3Blue1Brown](https://space.bilibili.com/88461692)制作的[线性代数的本质](https://www.bilibili.com/video/BV1ys411472E/),如有错误欢迎页脚邮件指出
-------------------------------------

View File

@ -356,4 +356,32 @@ $$
0+3+30 & 5+4+35 & 10+5+40 \\\\
0+12-6 & 1+16-7 & 2+20-8
\end{bmatrix}
$$
$$
## 非方阵
对于一个3$\times$2矩阵$\begin{bmatrix}
2 & 0 \\\\
-1 & 1 \\\\
-2 & 1
\end{bmatrix}$同样可以用线性变换来解释,只是输入向量和输出向量在不同维度上,因而没有关联
第一列认为是变换后的$\hat{i}$,第二列认为是变换后的$\hat{j}$
列空间是三维空间中一个过原点的二维平面,但由于列空间的维数与输入空间维数相等,依旧是满秩的,几何意义是将二维空间映射到三维空间上
---
同样地对于一个2 $\times$ 3矩阵
几何上表示将三维空间映射到二维空间上
![](../../images/%E6%95%B0%E5%AD%A6/%E3%80%8A%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%E3%80%8B%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E4%B8%8E%E7%BA%BF%E6%80%A7%E5%8F%98%E6%8D%A2%E5%A4%8D%E5%90%88/2X3%E7%9F%A9%E9%98%B5.png)
---
二维到一维空间的转换也存在,一维空间本质就是数轴,即将两个基向量压缩到一条直线上,如果直线上有一系列等距分布的点,在映射到数轴后依旧保持等距分布此处不再过多赘述
![](../../images/%E6%95%B0%E5%AD%A6/%E3%80%8A%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%E3%80%8B%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E4%B8%8E%E7%BA%BF%E6%80%A7%E5%8F%98%E6%8D%A2%E5%A4%8D%E5%90%88/%E4%BA%8C%E7%BB%B4%E5%88%B0%E4%B8%80%E7%BB%B4.gif)

View File

@ -1,5 +0,0 @@
---
title: "《线性代数》非方阵"
date: 2023-08-07T15:41:50+08:00
---

View File

@ -12,7 +12,9 @@ date: 2023-08-07T19:09:08+08:00
首先需要在gitea上创建OAth2应用令牌并设置应用的重定向URL
![](../../static/images/%E6%9D%82%E7%89%A9/Drone%E9%83%A8%E7%BD%B2%E5%92%8C%E4%B8%8Egitea%E7%9A%84%E9%9B%86%E6%88%90/OAth2.png)
![](../../images/%E6%9D%82%E7%89%A9/Drone%E9%83%A8%E7%BD%B2%E5%92%8C%E4%B8%8Egitea%E7%9A%84%E9%9B%86%E6%88%90/OAth2.png)
重定向URL必须为http(s)://域名/login形式视ssl情况是否有s
生成用于Drone的server和runner间通信的通信密钥
@ -35,13 +37,13 @@ services:
volumes:
- ./data:/data
environment:
- DRONE_GITEA_SERVER= Gitea 服务器地址,例如 https://gitea.inksoul.top。注意填写准确的 http(s) 协议,否则你会看到来自 Gitea 的错误报告unsupported protocol scheme
- DRONE_GITEA_CLIENT_ID=Gitea OAuth 客户端ID
- DRONE_GITEA_CLIENT_SECRET=Gitea OAuth 客户端密钥
- DRONE_RPC_SECRET=在准备工作中使用 openssl rand -hex 16 生成的共享密钥。这个密钥用于验证 Drone Server 和 Runner 之间的 RPC 连接。因此,在 Server 和 Runner 上都必须使用相同的密钥
- DRONE_SERVER_HOST=访问 Drone 时所用的域名或 IP 地址。如果使用 IP 地址,还应该包含端口
- DRONE_SERVER_PROTO=设置服务器的协议使用http 或 https。 默认为 https
- DRONE_USER_CREATE=管理员配置这里的管理员用户名是Git仓库的用户名不一定是Git仓库的管理员只要是Git仓库的用户即可例如 username:inksoul,admin:true
- DRONE_GITEA_SERVER=#Gitea 服务器地址,例如 https://gitea.inksoul.top。注意填写准确的 http(s) 协议,否则你会看到来自 Gitea 的错误报告unsupported protocol scheme
- DRONE_GITEA_CLIENT_ID=#Gitea OAuth 客户端ID
- DRONE_GITEA_CLIENT_SECRET=#Gitea OAuth 客户端密钥
- DRONE_RPC_SECRET=#在准备工作中使用 openssl rand -hex 16 生成的共享密钥。这个密钥用于验证 Drone Server 和 Runner 之间的 RPC 连接。因此,在 Server 和 Runner 上都必须使用相同的密钥
- DRONE_SERVER_HOST=#访问 Drone 时所用的域名或 IP 地址。如果使用 IP 地址,还应该包含端口
- DRONE_SERVER_PROTO=#设置服务器的协议使用http 或 https。 默认为 https
- DRONE_USER_CREATE=#管理员配置这里的管理员用户名是Git仓库的用户名不一定是Git仓库的管理员只要是Git仓库的用户即可例如 username:inksoul,admin:true
```
在完成域名解析绑定和nginx中反向代理设定后就可以拉取容器并启用了
@ -70,10 +72,112 @@ docker-compose up -d
随后可以安装负责流水线的droen-runner
```yaml
version: "3"
services:
drone-runner:
image: drone/drone-runner-docker:latest
restart: always
container_name: drone-runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_RPC_PROTO=#访问Drone时的网络协议http或https
- DRONE_RPC_HOST=#访问 Drone 时所用的域名或 IP 地址。如果使用 IP 地址,还应该包含端口
- DRONE_RPC_SECRET=#在准备工作中使用 openssl rand -hex 16 生成的共享密钥。这个密钥用于验证 Drone Server 和 Runner 之间的 RPC 连接。因此,在 Server 和 Runner 上都必须使用相同的密钥
- DRONE_RUNNER_CAPACITY=2#同时运行数量
- DRONE_RUNNER_NAME=runner# runner的名字
```
安装完成后访问drone-server中的域名即可自动跳转授权然后正常使用了
在这几步中便踩了坑
docker-compose中环境变量设置在等于号后面不要输入空格再接参数尤其在DRONE_GITEA_SERVER这一项必须保证有http(s)://网络头否则容易产生404无法跳转自动授权
---
如出现404检查URL形式是否存在不恰当的%20(空格在URL的编码)存在的话请按上一个点检查docker-compose中环境变量的配置如URL确保无误可以直接访问drone-server域名的/后面的URL跳过drone-server提供的自动跳转完成直接授权授权后404情况就会消失
实在不懂可以找一个github授权的网页查看URL结构就可以模仿github授权的URL结构在404页面的URL中截取
![](../../images/%E6%9D%82%E7%89%A9/Drone%E9%83%A8%E7%BD%B2%E5%92%8C%E4%B8%8Egitea%E7%9A%84%E9%9B%86%E6%88%90/OAthURL.png)
---
一切正常地部署完成后便可以在drone的首页看到自己在gitea上的所有项目可以查看build情况和设置对应的选项
![](../../images/%E6%9D%82%E7%89%A9/Drone%E9%83%A8%E7%BD%B2%E5%92%8C%E4%B8%8Egitea%E7%9A%84%E9%9B%86%E6%88%90/drone%E9%A6%96%E9%A1%B5.png)
这里展示的是这个便是这个博客在我的drone上的设置
![](../../images/%E6%9D%82%E7%89%A9/Drone%E9%83%A8%E7%BD%B2%E5%92%8C%E4%B8%8Egitea%E7%9A%84%E9%9B%86%E6%88%90/drone%E8%AE%BE%E7%BD%AE.png)
单有流水线设置还不够流水线流程的定义还需要在项目中使用yaml文件来定义对应的文件就在drone上设置
要定义流水线要先了解drone的工作过程
drone在收到来自gitea的webhook调用后根据yaml中定义拉取容器镜像在容器中完成定义的任务
webhook在完成drone的集成时就由drone在对应gitea项目下自动创建我的需求显然是每次我push新内容后drone自动构建因此webhook中也要做些修改
如图,我只选择了一些会导致博客内容发生改变的选项
![](../../images/%E6%9D%82%E7%89%A9/Drone%E9%83%A8%E7%BD%B2%E5%92%8C%E4%B8%8Egitea%E7%9A%84%E9%9B%86%E6%88%90/webhook%E8%AE%BE%E7%BD%AE.png)
既然drone是在容器内执行任务那么容器镜像则十分重要为了确保足够轻量内存溢出的教训印象深刻我选择了自行配置一个镜像使用alpine + git + hugo + rsync来配置尽可能减少容器占用
Dockerfile如下
```Dockerfile
FROM alpine
RUN apk update && \
apk add git && \
apk add rsync && \
apk add hugo && \
hugo version
```
自行构建后如果发现测试时容器exit(0)这是正常情况由于容器内没有前台应用使得容器在完成hugo version指令后就进入空闲状态然后自动退出节省资源如果想保持可以在Dockerfile最后运行一个交互式终端
如果不想自行构建也可以在docker hub上直接pull
```bash
docker pull inksoul/hugo-rsync:latest
```
镜像大小仅30.3MB,容器占用约87.7MB会在drone的任务完成后自动销毁
流水线配置文件如下,需要根据自己的情况修改声明数据卷中的宿主机路径,通常为静态网页的存放的地方
```yaml
kind: pipeline
type: docker
name: blog-publish
clone:
disable: false # 启用代码拉取
steps:
- name: build
image: inksoul/hugo-rsync
depends_on: [clone] # 依赖的步骤,
volumes: #挂载数据卷
- name: blog
path: /data #容器内
commands:
- hugo
- rsync -a --delete --exclude '.user.ini' public/ /data
volumes: #声明数据卷
- name: blog
host:
path: /Blog/public # 宿主机
```
流水线配置依旧存在一些问题每次build都需要clone一遍导致耗时比较长尤其大型项目下一步考虑引入drone-volume-cache缓存项目来加快速度
整体下来轻量化十分明显原来溢出的内存现在只占用了1GB不止nginx + gitea + drone三项服务也节省了不少服务器的开支毕竟云服务对于我这种学生党还是比较贵的

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"Target":"css/meme.min.12a3541920a798d49c1bca858f15c53090f14ce9367a34faa2bb51dd38299730.css","MediaType":"text/css","Data":{"Integrity":"sha256-EqNUGSCnmNScG8qFjxXFMJDxTOk2ejT6ortR3TgplzA="}}
{"Target":"css/meme.min.6f0f1ab4d5e1349276afbaf7de2b707371d004a3aafb22735bd9378a17833665.css","MediaType":"text/css","Data":{"Integrity":"sha256-bw8atNXhNJJ2r7r33itwc3HQBKOq+yJzW9k3iheDNmU="}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB