继开 | 博客

热爱生活,努力学习,实现自己的价值


  • 短诗的序

  • 迷途自渡

  • 寒星三两

  • 林深见鹿

  • 记昨日书

  • 顾探往昔

部署的一些命令记录

发表于 2024-05-04
字数统计: 565 字 | 阅读时长 ≈ 3 min

设置定时任务每30分钟重启一次

crontab -e

若出现选择框,选择编辑器,选择2 vim

将下面这段代码放到最后,进行重启服务器

*/30 * * * * /usr/bin/kubectl rollout restart deploy/smartvoice-llm-worker-taichu -n robotgpt >> /tmp/restart.log

执行日志在 /tmp/restart.log 查看

在线安装Anaconda

wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh
bash Anaconda3-2022.10-Linux-x86_64.sh
conda create -n triton_client python=3.10
conda activate triton_client

容器挂在文件并打开命令行,临时安装和使用

nerdctl run -it –rm –entrypoint=”” -v /root/offline_dependency_library:/offline_dependency_library jfrog.tecorigin.net/tecotp-docker/release/ubuntu22.04/x86_64/tecoinferencelm:1.0.0 bash

nerdctl run -it –rm –entrypoint=”” -v /root/perf_debug/:/perf_debug jfrog.tecorigin.net/tecotp-docker/release/ubuntu22.04/x86_64/tecoinferencelm:1.0.0 bash

nerdctl run -it –rm –entrypoint=”” -v /root/perf_debug/:/perf_debug -v /root/offline_dependency_library:/offline_dependency_library jfrog.tecorigin.net/tecotp-docker/release/ubuntu22.04/x86_64/tecoinferencelm:1.0.0 bash

测试联通性
python triton_request_stream.py -u 172.25.5.10:31611 -i grpc -rn 1

镜像压缩包加载并使用

加载镜像

nerdctl -n k8s.io load -i smartvoice-llm-worker-taichu.v0.1.1.jar

查看镜像

nerdctl -n k8s.io images |grep smartvoice

查看pod

kubectl get pod -A|grep smartvoice

查看pod配置信息

kubectl describe pod -n robot gpt smartvoice-llm-worker-taichu-594f9cc76b-7bpsl

修改pod配置信息(修改pod服务的配置信息)

kubectl -n robotgpt edit deploy smartvoice-llm-worker-taichu

对镜像重新打标签

nerdctl -n k8s.io tag clcee07986f3 harbor.cloudminds.com/smartvoice/smartvoice-llm-worker-taichu:v0.1.1

查看pod日志信息

kubectl -n robotgpt logs -f smartvoice-llm-worker-taichu-5b4989d458-bsxgr

检查当前卷组的可用空间:

sudo lvdisplay
扩展卷组(如果物理卷(VG)有足够的空间):

sudo vgextend ubuntu-vg /dev/sdx
这里/dev/sdx是要添加到卷组的物理卷。

扩展逻辑卷:

sudo lvextend -l +100%FREE /dev/mapper/ubuntu–vg-ubuntu–lv /dev/sda3
这里/dev/sdx是要用于扩展逻辑卷的空闲空间,+100%FREE指扩展到最大可用空间。

扩展文件系统:

如果是ext4文件系统,使用:

sudo resize2fs /dev/mapper/ubuntu–vg-ubuntu–lv
如果是xfs文件系统,使用:

sudo xfs_growfs /dev/mapper/ubuntu–vg-ubuntu–lv

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

Sealos快速离线安装kubernetes

发表于 2024-05-03
字数统计: 1,735 字 | 阅读时长 ≈ 8 min

简介

以下来自官方文档

什么是sealos?

Sealos 是一个基于 Kubernetes 内核的云操作系统发行版。
它采用云原生方式,摒弃传统的云计算架构,转向以 Kubernetes 为云内核的新架构。
这使得企业可以像使用个人计算机一样毫不费力地使用云。

用户只需单击一个按钮即可在 Kubernetes 上安装任何高可用性分布式应用程序,类似于使用个人计算机。
它实际上不需要专业交付或运营成本。
同时,利用独特的集群成像功能,用户可以将任何分布式应用打包到 OCI 映像中,自由组合各种分布式应用,并轻松定制所需的云。
强大而灵活的应用商店功能,可以满足各种用户的多样化需求。

Sealos的功能

应用程序管理:在应用商店中轻松管理和快速发布可公开访问的分布式应用程序。
数据库管理:秒级创建高可用数据库,支持MySQL、PostgreSQL、MongoDB和Redis。
云通用性:在公有云和私有云中同样有效,支持传统应用程序向云的无缝过渡。

Sealos的优点

高效且经济:只需为您使用的容器付费;自动扩展可防止资源浪费并大幅降低成本。
高通用性和易用性:专注于您的核心业务活动,而不必担心系统复杂性;涉及的学习成本可以忽略不计。
敏捷性和安全性:独特的多租户共享模型确保了有效的资源分割和协作,所有这些都在安全的框架下进行。
下面开始一步步的小白式部署吧!

环境准备

有网络的环境下准备安装包

下载和安装 sealos

下载命令行工具 jp

1
apt install jq

查看当前的sealos命令行工具版本

1
curl --silent "https://api.github.com/repos/labring/sealos/releases" | jq -r '.[].tag_name'

选其中的稳定版

1
2
3
4
5
6
7
8
9
10
v5.0.0-beta5
v5.0.0-beta4
v4.4.0-beta3
v5.0.0-beta3
v5.0.0-beta2
v5.0.0-beta1
v4.3.7
v5.0.0-alpha2
v4.3.7-rc1
v4.3.6

用最新的稳定版4.3.7

下载

1
wget https://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz

安装

1
tar zxvf sealos_4.3.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

查看一下是否能使用,查看sealos镜像

1
2
root:/data/sealos# sealos images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s集群安装与打离线包

拉取

1
2
3
sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.0  \
registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 \
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.25.0

查看拉取的镜像

1
2
3
4
5
root:/data/sealos# sealos images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shanghai.aliyuncs.com/labring/kubernetes v1.28.0 6ab50f9b0559 2 weeks ago 641 MB
registry.cn-shanghai.aliyuncs.com/labring/calico v3.25.0 89e401f61ae6 16 months ago 365 MB
registry.cn-shanghai.aliyuncs.com/labring/helm v3.9.4 3376f6822067 19 months ago 46.4 MB

导出镜像

1
2
3
sealos save -o kubernetes.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.0
sealos save -o helm.tar registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4
sealos save -o calico.tar registry.cn-shanghai.aliyuncs.com/labring/calico:v3.25.0
准备的离线安装包如下
1
2
3
4
5
6
7
8
root:/data/sealos# ll
total 902388
drwxr-xr-x 2 root root 4096 May 16 06:47 ./
drwxr-xr-x 3 root root 4096 May 14 09:17 ../
-rw-r--r-- 1 root root 362235904 May 16 03:13 calico.tar
-rw-r--r-- 1 root root 14699008 May 16 03:13 helm.tar
-rw-r--r-- 1 root root 405593088 May 16 03:13 kubernetes.tar
-rw-r--r-- 1 root root 62963267 May 14 09:36 sealos_4.3.7_linux_amd64.tar.gz

无网络单机服务器环境准备

将上面的四个安装包放到无网络的单机服务器环境中

1
2
3
4
5
6
7
8
root:/data/sealos# ll
total 902388
drwxr-xr-x 2 root root 4096 May 16 06:47 ./
drwxr-xr-x 3 root root 4096 May 14 09:17 ../
-rw-r--r-- 1 root root 362235904 May 16 03:13 calico.tar
-rw-r--r-- 1 root root 14699008 May 16 03:13 helm.tar
-rw-r--r-- 1 root root 405593088 May 16 03:13 kubernetes.tar
-rw-r--r-- 1 root root 62963267 May 14 09:36 sealos_4.3.7_linux_amd64.tar.gz
禁用防火墙
1
2
systemctl stop firewalld
systemctl disable firewalld
禁用selinux

临时禁用

1
setenforce 0

永久禁用,编辑配置文件修改该行

1
2
vim /etc/selinux/config
SELINUX=disabled
禁用所有swap交换分区

注:最好是安装虚拟机时就不要创建swap交换分区

1
2
3
4
5
6
7
root@master:~#  swapoff -a							#禁用所有swap交换分区
root@master:~# free -h
total used free shared buff/cache available
Mem: 1.8G 280M 1.2G 9.6M 286M 1.4G
Swap: 0B 0B 0B
root@master:~# vim /etc/fstab #永久禁用swap,删除或注释掉/etc/fstab里的swap设备的挂载命令即可
#/swap.img none swap sw 0 0
设置主机名
1
2
3
cat >> /etc/hosts <<EOF
192.168.231.128 master
EOF

此步骤可以不用做,但是节点hostname 会显示不那么清晰

安装

安装 sealos

安装sealos命令

1
tar zxvf sealos_4.3.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

查看一下是否能使用,查看sealos镜像

1
2
root:/data/sealos# sealos images
REPOSITORY TAG IMAGE ID CREATED SIZE

安装 k8s

1
2
root@ywadmin:/data/sealos# sealos run kubernetes.tar helm.tar calico.tar --cluster='k8s-cluster-test' \
> --masters=192.168.231.128

查看一下k8s是否可以使用

1
2
3
root:/data/sealos# kubectl get nodes 
NAME STATUS ROLES AGE VERSION
ywadmin Ready control-plane 78s v1.28.0

到此为止,单机版的k8s 安装完成

其他命令记录

sealos集群管理常用命令

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
27
28
29
30
31
32
33
34
# 添加工作节点
sealos add --nodes 192.168.0.111,192.168.0.112

# 添加主节点
sealos add --masters 192.168.0.106,192.168.0.107

# 删除工作节点
sealos delete --nodes 192.168.0.111,192.168.0.112

# 删除主节点
sealos delete --masters 192.168.0.106,192.168.0.107

# 清理集群
sealos reset

# 查看镜像
sealos images

# 拉取镜像
sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.0

# 导出镜像
sealos save -o kubernetes.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.0
# 将导出镜像镜像加载
sealos load -i



# 离线安装,有主节点和子节点情况
sealos run kubernetes.tar helm.tar calico.tar --cluster='k8s-cluster-test' \
--masters=192.168.0.109,192.168.0.111 \
--nodes=192.168.0.110 \
-p admin123
# 如果配置了ssh免密则不需要加-p参数,在线安装不需要pull跟save的过程,直接run对应镜像就可

报错说明

1
error Applied to cluster error: render env to rootfs failed: failed to create template: /var/lib/containers/storage/overlay/424890351b0bc1f56a1f1cd8a371bdf29747b15c30d6b529929570a78d56d313/merged/etc/10-kubeadm.conf.tmpl template: 10-kubeadm.conf.tmpl:10: function "semverCompare" not defined

解决办法

升级版本4.3.7解决

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

Python 图像截屏公式识别——LaTeX-OCR安装与使用

发表于 2024-05-02
字数统计: 765 字 | 阅读时长 ≈ 3 min

LaTeX-OCR是什么

LaTeX-OCR 是一个开源的光学字符识别(OCR)软件,专为 LaTeX 文档提供支持。
其主要目的是帮助用户将扫描的文档转换为 LaTeX 编辑器可以使用的可编辑文本,从而方便进行修改、编辑和排版。
LaTeX广泛用于科技、数学、工程等领域的文档编写。
而 OCR 技术则用于将图像中的文字转换为计算机可编辑的文本。
LaTeX-OCR 的结合使得用户能够更方便地将扫描得到的文档内容转换为 LaTeX 格式,为文档的后续编辑和排版提供了便利。
源码地址:https://github.com/lukas-blecher/LaTeX-OCR

环境

直接使用pip进行安装,为了方便管理环境,这里使用conda创建虚拟环境。

1.环境安装

1
2
3
conda create -n latex python=3.10
activate latex
pip install "pix2tex[gui]"

2.启动与使用

1
latexocr

第一次启动的时候,会下载两个模型,可能会很慢,建议使用科学上网。
如果下载不下来,可以直接去官网下载后,放到指定的目录。

启动完成之后,出现UI交互界面,使用快捷键或者直接点击截屏识别

3.识别

识别一个复杂一点的公式,如果识别得不精准,可以自己手动调节Temperature值,最大调整到1 越大耗费时间越长

生成的LaTeX 表示方法,把它复制到支持LaTeX 表示方法的编辑器可以现实公示了

4.代码调用

1
2
3
4
5
6
from PIL import Image
from pix2tex.cli import LatexOCR

img = Image.open('path/to/image.png')
model = LatexOCR()
print(model(img))

该模型在较小分辨率的图像上表现最佳 。
为了提高其效果,添加了一个预处理步骤。在这一步中,另一个神经网络会预测输入图像的最佳分辨率。
随后,定制图像会被自动调整大小,以更好地匹配训练数据的特征。
这个方法旨在提升模型在真实场景中遇到的图像的性能。
然而,需要注意的是,该模型可能不能在处理极大图像时达到最佳效果。
因此,在拍摄图片之前,不建议进行过度放大。

报错解决

报错1

运行latexocr时,报错

1
Cannot mix incompatible Qt library (6.7.1) with this library (6.7.0)

这是安装latexocr后运行时出现的问题。

解决方法

命令行窗口输入代码:

1
pip install PySide6==6.7.0

将对应的版本号改成报错问题的版本号就行,
比如,版本号是6.7.0。
更新完后,再在命令行窗口输入latexocr,软件界面弹出。

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

Linux Ubuntu挂载磁盘

发表于 2024-05-01
字数统计: 462 字 | 阅读时长 ≈ 2 min

开始

虚拟机在添加完磁盘后经常需要将磁盘作为数据盘挂载到/data,分享挂载步骤。

1、 查看添加的磁盘磁盘,sdb磁盘

fdisk -l

2、首先创建/data目录

mkdir /data

3、格式化分区为XFS

mkfs.xfs -f /dev/sdb

4、挂载格式化好的XFS分区,挂载到/data

mount -t xfs /dev/sdb /data

5、验证XFS分区是否挂载成功;文件系统格式为XFS

df -hT

6、想让系统启动时自动挂载XFS分区在/data上,加入下面一行到/etc/fstab文件中

/dev/sdb /data xfs defaults 0 0

问题解决

ubuntu 离线安装 mkfs.xfs
要在Ubuntu上离线安装mkfs.xfs,你需要先从另一台有网络连接的机器上下载xfsprogs包,然后将其传输到你的离线Ubuntu机器上进行安装。
步骤如下:
1. 在有网络的机器上,下载xfsprogs包。
2. 将下载的包传输到离线的Ubuntu机器上。
3. 在离线机器上安装xfsprogs。

以下是具体的命令:
在有网络的机器上:

下载xfsprogs包

1
apt-get download xfsprogs

将下载的.deb文件复制到USB驱动器或其他可移动介质上。
在离线的Ubuntu机器上:
将xfsprogs包从USB设备复制到本地目录
复制到了~/xfsprogs_package目录下
安装xfsprogs包

1
sudo dpkg -i ~/xfsprogs_package/xfsprogs_*.deb

如果在安装时遇到依赖问题,可以使用

1
apt-get -f install

命令来修复依赖问题。
请确保替换

1
~/xfsprogs_package/xfsprogs_*.deb

为你实际下载的文件路径。

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

Docker Docker-compose快速搭建开源仿Windows 11的私有云盘腾飞webos

发表于 2024-01-02
字数统计: 556 字 | 阅读时长 ≈ 2 min

腾飞webos是什么

腾飞webos是一款免费的个人私有云盘/企业网盘,提供仿Windows 11的效果和体验,支持跨平台浏览器访问,支持云盘挂载,文件编辑预览,协同办公等功能。腾飞webos是基于Linux和WebKit的开源软件平台,支持多种存储方式,如阿里云盘,天翼云盘,百度云盘等。腾飞webos还提供了独立的应用商店,可以下载各种应用插件,或者自行开发插件。

官方网站: https://os.tenfell.cn/
官方Gitee: https://gitee.com/tfyun/webos
官方github: https://github.com/fs185085781/webos
官方体验:https://tfyun.gitee.io/
官方体验:https://yunpan.tenfell.cn/

腾飞webos搭建

webos-compose.yml 文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# docker run -d  --restart unless-stopped --name webos -p 3088:8088 -v $(pwd)/data:/webosMnt -v $(pwd)/root:/webos/api/rootPath -v $(pwd)/apps:/webos/web/apps fs185085781/webos:latest
# 1.新建文件夹 webos 和 子目录
# mkdir -p /data/webos/{data,root,apps}
# 2.进入 webos 目录
# cd /data/webos
# 3.将 webos-compose.yml 放入当前目录
# 4.启动
# docker-compose -f webos-compose.yml up -d

version: '3'

services:
webos:
image: fs185085781/webos:latest
container_name: webos
restart: unless-stopped
ports:
- 3088:8088
volumes:
- ./data:/webosMnt
- ./root:/webos/api/rootPath
- ./apps:/webos/web/apps

按照webos-compose.yml 内的步骤逐步执行

腾飞webos使用

浏览器访问:http://ip:3088/

创建账号进行登录,然后,可进行使用,详细使用教程请参照官网

腾飞webos有什么局限性?

由于是仿Windows 11的效果,可能会有一些兼容性或稳定性的问题,需要不断优化和更新。
由于是基于浏览器的访问,可能会受到网络环境或浏览器版本的影响,需要保证网络畅通和浏览器更新。
由于是免费开源的,可能会有一些安全或版权的风险,需要自行保护数据和遵守法律。

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

Docker Docker-Compose配置两个容器依赖启动(depends_on和healthcheck)

发表于 2024-01-01
字数统计: 2,168 字 | 阅读时长 ≈ 10 min

一、参数解释说明

1.1 depends_on

depends_on 是 Docker-Compose 文件中的一个关键字,用于指定服务之间的依赖关系。
具体来说,它定义了一个服务所依赖的其他服务,只有在所依赖的服务已经启动并且处于运行状态时,该服务才会被启动。
例如:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.9'
services:
db:
image: mysql
ports:
- "3306:3306"
app:
build: .
ports:
- "80:80"
depends_on:
- db

在启动 Docker-Compose 时,Compose 会先启动 db 服务,等待它启动并处于运行状态后,才会启动 app 服务

1.2 healthchec

在docker-compose中加入healthcheck
healthcheck 支持下列选项:
test:健康检查命令,例如 [“CMD”, “curl”, “-f”, “http://localhost/actuator/health"]
interval:健康检查的间隔,默认为 30 秒,单位(h/m/s);
timeout:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒,单位(h/m/s);
retries:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次。
start-period:应用的启动的初始化时间,在启动过程中的健康检查失效不会计入,默认 0 秒; (从17.05)引入
说明:在此期间的探测失败将不计入最大重试次数。但是,如果健康检查在启动期间成功,则认为容器已启动,所有连续的失败都将计入最大重试次数。
和 CMD, ENTRYPOINT 一样,healthcheck 只可以出现一次,如果写了多个,只有最后一个生效。

在 healthcheck [选项] CMD 后面的命令,格式和 ENTRYPOINT 一样,分为 shell 格式,和 exec 格式。命令的返回值决定了该次健康检查的成功与否:

0:成功;
1:失败;
2:保留值,不要使用
容器启动之后,初始状态会为 starting (启动中)。Docker Engine会等待 interval 时间,开始执行健康检查命令,并周期性执行。
如果单次检查返回值非0或者运行需要比指定 timeout 时间还长,则本次检查被认为失败。
如果健康检查连续失败超过了 retries 重试次数,状态就会变为 unhealthy (不健康)。

一旦有一次健康检查成功,Docker会将容器置回 healthy (健康)状态

二、验证

2.1 延迟启动的nginx 容器

首先创建一个延迟启动nginx容器

1
2
3
4
5
6
7
8
9
10
11
12
#docker-compose -f sleepnginx-compose.yml up -d
#sleepnginx-compose.yml 配置文件如下
version: "3.9"
services:
sleepnginx1:
image: nginx
ports:
- "13001:80"
restart: always
container_name: sleepnginx1
# 添加STARTUP_DELAY参数并设置为60s(单位为秒)
command: sh -c "sleep 60 && nginx -g 'daemon off;'"

启动

1
2
3
(base) [root@localhost sleepNginx]# docker-compose -f sleepnginx-compose.yml up -d 
[+] Running 1/1
⠿ Container sleepnginx1 Started 0.4s

60秒内执行
查看docker 容器情况发现 启动成功

1
2
3
(base) [root@localhost ~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdf4e23d11c9 nginx "/docker-entrypoint.…" 37 seconds ago Up 36 seconds 0.0.0.0:13001->80/tcp, :::13001->80/tcp sleepnginx1

但是访问http://ip:13001 并不能访问到nginx页面
并且容器日志也查看不到

1
(base) [root@localhost ~]# docker logs -f cdf4e23d11c9

60秒以外则可以访问nginx 并且查看日志,则证明nginx 延迟启动成功

1
2
3
4
5
6
7
8
(base) [root@localhost ~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdf4e23d11c9 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:13001->80/tcp, :::13001->80/tcp sleepnginx1
(base) [root@localhost ~]# docker logs -f cdf4e23d11c9
2024/01/01 13:26:58 [notice] 8#8: using the "epoll" event method
2024/01/01 13:26:58 [notice] 8#8: nginx/1.23.1
2024/01/01 13:26:58 [notice] 8#8: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
....

2.2 验证 depends_on 依赖启动

创建一个延迟启动nginx容器sleepnginx1,创建另一个容器sleepnginx2,依赖此容器,并且将此容器配置文件放到前面,
若sleepnginx2 在 sleepnginx1 之后启动,则证明 sleepnginx2是在sleepnginx1启动成功后启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#docker-compose -f sleepnginx-compose-v2.yml up -d
#sleepnginx-compose-v2.yml 配置文件如下
version: "3.9"
services:

sleepnginx2:
image: nginx
ports:
- "13002:80"
restart: always
depends_on:
- "sleepnginx1"
container_name: sleepnginx2

sleepnginx1:
image: nginx
ports:
- "13001:80"
restart: always
container_name: sleepnginx1
# 添加STARTUP_DELAY参数并设置为60s(单位为秒)
command: sh -c "sleep 60 && nginx -g 'daemon off;'"

查看启动结果如下

1
2
3
4
(base) [root@localhost ~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
671c750e5828 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:13002->80/tcp, :::13002->80/tcp sleepnginx2
61d87d89be45 nginx "/docker-entrypoint.…" 7 seconds ago Up 7 seconds 0.0.0.0:13001->80/tcp, :::13001->80/tcp sleepnginx1

sleepnginx1 在 sleepnginx2 之前启动 ,及 sleepnginx2 通过 配置 depends_on 依赖 sleepnginx1

2.3 验证 healthchec 和 depends_on 配置 健康检查,并检查通过之后启动

创建一个延迟启动nginx容器sleepnginx1,并进行健康检查
创建另一个容器sleepnginx2,依赖sleepnginx1健康检查通过,sleepnginx1启动,并证明启动成功后启动sleepnginx2,
若sleepnginx2 在 sleepnginx1 健康检查通过之后启动,则证明 healthchec 生效

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
27
28
#docker-compose -f sleepnginx-compose-v3.yml up -d
#sleepnginx-compose-v3.yml 配置文件如下
version: "3.9"
services:
sleepnginx1:
image: nginx
ports:
- "13001:80"
restart: always
container_name: sleepnginx1
# 添加STARTUP_DELAY参数并设置为60s(单位为秒)
command: sh -c "sleep 60 && nginx -g 'daemon off;'"
healthcheck:
test: ["CMD-SHELL", "curl -fs http://127.0.0.1:80 || exit 1"] # 检测方式
interval: 30s # 多次检测间隔多久 (default: 30s)
timeout: 10s # 超时时间 (default: 30s)
retries: 5 # 尝试次数(default: 3)
start_period: 5s # 容器启动后多久开始检测 (default: 0s)

sleepnginx2:
image: nginx
ports:
- "13002:80"
restart: always
depends_on:
sleepnginx1:
condition: service_healthy
container_name: sleepnginx2

注意,此处的healthcheck: test curl -fs http://127.0.0.1:80 地址端口均在容器内执行,端口为映射前的端口

查看启动结果如下(60秒内)

1
2
3
4
5
6
7
8
9
(base) [root@localhost sleepNginx]# docker-compose -f sleepnginx-compose-v3.yml  up -d 
[+] Running 2/2
⠿ Container sleepnginx1 Started 0.4s
⠿ Container sleepnginx2 Created 0.0s

(base) [root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa714e257691 nginx "/docker-entrypoint.…" 15 seconds ago Created sleepnginx2
42b98514a96f nginx "/docker-entrypoint.…" 15 seconds ago Up 15 seconds (health: starting) 0.0.0.0:13001->80/tcp, :::13001->80/tcp sleepnginx1

查看启动结果如下(60秒外)

1
2
3
4
5
6
7
8
9
(base) [root@localhost sleepNginx]# docker-compose -f sleepnginx-compose-v3.yml  up -d 
[+] Running 2/2
⠿ Container sleepnginx1 Running 0.0s
⠿ Container sleepnginx2 Started 0.4s

(base) [root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa714e257691 nginx "/docker-entrypoint.…" About a minute ago Up 15 seconds 0.0.0.0:13002->80/tcp, :::13002->80/tcp sleepnginx2
42b98514a96f nginx "/docker-entrypoint.…" About a minute ago Up About a minute (healthy) 0.0.0.0:13001->80/tcp, :::13001->80/tcp sleepnginx1

及 sleepnginx2 依赖 sleepnginx1 的健康检查成功后进行启动

三、验证过程中出现的问题记录

延迟命令中,为什么要加 nginx -g “daemon off;”

在常规的虚机上,nginx默认是以守护进程来运行的(daemon on),在后台默默提供服务,同时部署多个ngxin服务也不会相互干扰。
在容器环境,one container == one process,容器要能持续运行,必须有且仅有一个前台进程,所以对nginx进程容器化,需要将nginx转为前后进程( daemon off)。
能顺利执行docker run nginx,启动容器并不退出,是因为nginx的官方镜像Dockerfile 已经指定 nginx -g “daemon off;”
再回到上文,为什么此处脚本中要加”nginx -g “daemon off;” 呢?
CMD在执行的shell脚本[“sh”, “replace_api_url.sh”],实际上是启动shell进程来执行,脚本执行完,进程就会退出(此时nginx还是一摊死的物理文件),
所以要在脚本内再添加nginx -g “daemon off;” 将整个shell进程转为前台能持续运行的进程。

容器=进程, 有且仅有一个前台能持续运行的进程
nginx 默认是后台守护进程的形式运行, nginx -g “daemon off;” 以前台形式持续运行。

depends_on 配置后出现报错

在配置 depends_on 过程中出现报错

1
2
3
depends_on:
sleepnginx1:
condition: service_healthy

报错如下

1
services.sleepnginx1.depends_on contains an invalid type, it should be an array

解决办法 升级docker-compose 版本支持 version: “3.9”

在Docker compose规范的版本3中被删除,但随后在版本3.9中重新引入。
参见https://github.com/compose-spec/compose-spec/blob/master/spec.md#long-syntax-1

升级方法如下

1
2
3
rm /usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

FFmpeg windows电脑FFmpeg安装教程

发表于 2023-10-28
字数统计: 626 字 | 阅读时长 ≈ 3 min

FFmpeg是什么

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

官方网站: https://ffmpeg.org/

FFmpeg安装

打开 FFmpeg 官网,选择下载。

选择 Windows 平台, 选择其一(Windows builds from gyan.dev )。

进去以后,选择左边的 release builds

选择下面中的前一个稳定版本 ffmpeg-6.0-full_build.7z

解压以后的内容,进入 bin 目录,复制 bin 目录路径。

配置系统环境变量 我的电脑-> 属性 -> 高级系统设置 -> 高级 -> 环境变量

选择 Path,然后编辑,将复制 bin 目录路径 新增进去

FFmpeg验证使用

重新打开一个命令行窗口,输入: ffmpeg -version,有版本信息输出,则证明配置成功!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\MyWorkProgram>ffmpeg -version
ffmpeg version 2023-12-14-git-5256b2fbe6-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 58. 33.100 / 58. 33.100
libavcodec 60. 35.100 / 60. 35.100
libavformat 60. 18.100 / 60. 18.100
libavdevice 60. 4.100 / 60. 4.100
libavfilter 9. 14.100 / 9. 14.100
libswscale 7. 6.100 / 7. 6.100
libswresample 4. 13.100 / 4. 13.100
libpostproc 57. 4.100 / 57. 4.100

C:\MyWorkProgram>

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

Docker Docker-compose快速搭建开源MrDoc团队文档、知识、笔记在线管理系统

发表于 2023-10-22
字数统计: 394 字 | 阅读时长 ≈ 2 min

MrDoc是什么

MrDoc觅思文档,一个支持跨平台、跨终端的在线文档、知识库管理程序。

官方网站: https://mrdoc.pro/
官方Gitee: https://gitee.com/zmister/MrDoc
官方Demo:http://mrdoc.zmister.com/

MrDoc搭建

mrdoc-compose.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
27
# docker run -d --name mrdoc -p 10186:10086 -v /data/mrdoc/config:/app/MrDoc/config /data/mrdoc/media:/app/MrDoc/media jonnyan404/mrdoc-alpine:latest
# 1.新建文件夹 mrdoc 和 子目录
# mkdir -p /data/mrdoc/{config,media}
# 2.进入 mrdoc 目录
# cd /data/mrdoc
# 3.将 mrdoc-compose.yml 放入当前目录
# 4.启动
# docker-compose -f mrdoc-compose.yml up -d
#
# 方式一:创建新管理员
#docker exec -it mrdoc python manage.py createsuperuser
#根据提示输入 账号/邮箱/密码 即可
#方式二:修改管理员密码
#docker exec -it mrdoc python manage.py changepassword admin
#按提示输入新密码即可,英文大小写混合+数字大于8位
version: '3'

services:
mrdoc:
image: jonnyan404/mrdoc-alpine:latest
container_name: mrdoc
restart: always
ports:
- 10186:10086
volumes:
- /data/mrdoc/config:/app/MrDoc/config
- /data/mrdoc/media:/app/MrDoc/media

按照mrdoc-compose.yml 内的步骤逐步执行

MrDoc使用

浏览器访问:http://ip:10186/

创建账号进行登录,然后,可进行协作创作
也可以支持分账户,修改主题的等,简单好用

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

12…37

继开

一辈子很短,努力的做好两件事就好:第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。

290 日志
164 标签
RSS
gitee E-Mail
0%
鲁ICP备18007712号
© 2024 继开 | 站点字数统计: 248.4k
博客使用 Hexo 搭建
|
主题 — NexT.Mist v5.1.4
人访问 次查看