如何使用frp穿透内网
升级gcc版本
Java引用的简易理解的总结
解决SSH比较慢的问题
本文主要介绍如何优化ssh连接速度的问题。
总结:
a,修改服务器的sshd_config
1 | GSSAPIAuthentication no |
b,增加熵
c,检查systemd-logind服务
1,GSSAPI的问题
1.1 查看日志
1 | ssh -v root@myip |
-v
会输出连接的过程,我这边的示例:
1 | OpenSSH_7.9p1 Debian-10+deb10u1, OpenSSL 1.1.1d 10 Sep 2019 |
1.2 解决-链接时不使用
在你链接时,主动绕过GSSAPI
1 | ssh -o GSSAPIAuthentication=no root@myip |
1.3 解决-服务端关闭
你需要在你的本机执行如下设置
1 | vim /etc/ssh/sshd_config |
找到GSSAPIAuthentication
设置为No,同时,主动设置UseDNS no
。
然后重启ssh服务即可
1 | sudo systemctl restart sshd |
1.4 什么是GSSAPI
此处参考:
-
GSSAPI:Generic Security Services Application Program Interface,GSSAPI本身是一套API,由IETF标准化。其最主要也是著名的实现是基于Kerberos的。一般说到GSSAPI都暗指Kerberos实现。
-
UseDNS:是OpenSSH服务器上的一个DNS查找选项,而且默认还是打开的,在打开的状态下,每当客户端尝试连接OpenSSH服务器的时候,服务端就自动根据用户客户端的IP进行DNS PTR反向查询(IP反向解析才会有记录),查询出IP对应的Hostname,之后在根据客户端的Hostname进行DNS正向A记录查询。通过这个查询,验证IP是否和连接的客户端IP一致。但绝大部分我们的机器是动态获取IP的,也就是说,这个选项对于这种情况根本就没用——即使是普通静态IP服务器,只要没有做IP反向解析,也难以适用。如果你符合这些情况,建议关闭UseDNS以提高SSH远程登录时候的认证速度。
2,logind服务挂了
如果是卡在了这里
1 | debug1: channel 0: new [client-session] |
那说明是systemd-logind
服务挂了,可以systemctl status systemd-logind
查看状态,或者直接重启这个服务:
1 | systemctl restart systemd-logind |
4,熵值过低的问题
ssh会用到各种加密算法,现在的各类加密工具对于随机数有很高的要求。
Linux的随机数生成器分为硬件生成器和软件生成器,硬件生成器会收集硬件设备的各种数据,相对难以预测;而软件生成器则会生成的比较慢。
当前由于大量的云服务器都是运行在虚拟机之上,硬件的变动难以收集,非常的‘安静‘,所以随机数的生成主要依赖软件。
通过如下命令查看当前的熵池:
1 | cat /proc/sys/kernel/random/entropy_avail |
一般都是在3000以上,如果你的没有达到这个值,可以通过一些常用的补充工具如rng-tools
来生成。
1 | sudo dnf install -y rng-tools |
再次查看熵值,基本熵都会大于3000了
5,内部dns问题
可能会卡在这里:
1 | debug1: SSH2_MSG_EXT_INFO received |
修改sshd配置文件,添加或者修改UseDNS no
使用docker部署Apollo
本文主要介绍如何在通过docker部署Apollo,参考apollo官网: https://www.apolloconfig.com/#/zh/README
docker相关的初始化参见这里
1. 创建数据库
1.1 安装Mysql
使用Docker部署Redis
本文主要介绍如何在通过docker部署Redis。
docker相关的初始化参见这里
一,安装
1.1 获取镜像
1 | docker pull redis:latest |
我这里命中的docker.io
的源
docker run -d -it --restart=always -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai --name=redis_devops -p 16379:6379 docker.io/library/redis:6.2.6 /bin/sh -c 'redis-server --appendonly yes --requirepass 你的redis密码'
通过Docker部署Nginx
CentOS7初始化
整体参考Linux相关服务器系统的环境初始化工作。
源以及其他相关初始化脚本可以直接复用:
centos 7
1 | curl "https://mirrors.aliyun.com/repo/Centos-7.repo" -o /etc/yum.repos.d/CentOS-Base.repo |
这里使用的是阿里云的镜像,可以参见阿里云的说明:https://developer.aliyun.com/mirror/
也推荐使用华为云的镜像:https://mirrors.huaweicloud.com/
Git的GPG的用法
在CentOS上使用Podman
本文主要介绍如何在CentOS上使用podman,主要步骤参见这篇文章:https://www.linuxtechi.com/run-containers-podman-centos-8-rhel-8/
一,安装
尽量使用dnf
,不要使用yum
,可以用yum安装dnf
1.1 更新系统
sudo dnf makecache
sudo dnf upgrade
sudo dnf update
Linux安装Docker
本文主要介绍如何在在Linux上部署Docker,主要步骤参见官网:
CentOS7:https://docs.docker.com/install/linux/docker-ce/centos/,
CentOS8:https://www.linuxtechi.com/install-docker-ce-centos-8-rhel-8/
Ubuntu:https://docs.docker.com/engine/install/ubuntu/
阿里云:https://developer.aliyun.com/mirror/docker-ce,不过阿里云的教程里,有点问题
1. CentOS
1.1 配置Repo
1 | tee /etc/yum.repos.d/docker-ce.repo <<-'EOF' |
在Podman上部署mysql
在Docker上部署Nexus
这篇文章主要介绍了:如何通过镜像部署Nexus。参考了https://hub.docker.com/r/sonatype/nexus3/和https://github.com/sonatype/docker-nexus并梳理了一些容易踩到的坑。
docker的安装和加速参见Linux安装Docker
本文基于Centos,其他环境大同小异
1.部署
1.1 下载镜像
在Docker上部署Jira和Confluence
用Python统计GitLab上的代码提交行数
需要统计Gitlab上所有仓库、所有人的代码提交状况。
在网上找了找,发现基本上都是基于已经checkout到本地的统计,如果要统计服务器上所有仓库的,则没有现成的工具,所有我用Python写了一个。
放到GitHub上了:https://github.com/ccbuildpro/GitLabCommitStatics
一,核心思路
通过GitLab官方提供的API,基本可以得到如下流程:
获取所有Projects API->获取branch list->获取commit list->获取commit detail,再做汇总。
有几个注意点:
1,所有接口都需要access token
2,所有的列表接口,都是分页的
另外,这些接口都可以用postman来调一遍,或者直接在浏览器里访问
在 CentOS上部署 Hexo 博客
阅读《贫穷的本质:我们为什么摆脱不了贫穷》
本书英文原版的名称是《Poor Economics: A Radical Rethinking of the Way to Fight Global Povert》,翻译过来大意应该是《穷人经济:与全球贫困作斗争的深度反思》,相对来说,它的中文译名《贫穷的本质:我们为什么摆脱不了贫穷》更准确的反映出了作者在文中所遇到的问题。
作者参与了全球很多地方的援助、救助、扶贫活动,同时也参考了其他组织做的各种有价值的活动所积累的宝贵数据和经验,再进行了深入的分析和不断的思考,得出了很多很有价值的观点。
作者认为一下两条中的任意一条均能够极大的促进贫穷状况的改善:
- 家庭成员的良好的健康状况、受过良好的教育、对未来生活充满希望,将会极大的改善贫穷状况。
- 政府制定相应的政策、且得到了有效的执行
MarkDown处理媒体
写MarkDown的时候难免会有很多使用图片和视频的地方,分享下我的处理方式。
1.概述
媒体分类:静态图、动态图、视频
存储:云端对象存储
2.媒体格式
图片格式可以参考这位大神的移动端图片格式调研.
2.1.静态图
常见的jpg、png等比较大,像webp、heic、avif等都是比较优秀的格式。
webp,已经全平台支持了,推荐
。
heic,各个浏览器都不支持(截止2021-11-12),不能用。
avif,在chrome已经支持,基于chromium的或多或少在支持中,可根据你的实际情况使用。
2.2.动态图
目前常见格式是gif、webp、avif。
gif,体积较大,且清晰度低。
webp,动态图在清晰度和压缩率上都有不错的支持,推荐
。
avif,在chrome已经全面适配,而safari和移动端浏览器的支持还较差,基本不建议使用。
2.3.视频
首先应统一为mp4封装,至于编码格式,可以考虑h264、h265、vp8、vp9、av1。
h264的普适性最好,基本已经全平台支持。
vp8、vp9、av1在chrome平台支持性非常好,但是由于硬件的发展,av1相关的硬件编码器尚不普及,转换需要消耗较多的资源。
目前主要还是推荐h264、h265.
但是,如果作为你的个人blog,我建议还是不要放视频,最好直接将视频转为动图,优势如下:
- 信息密度高,利于阅读,对扬声器无依赖
- 体积小
- 转码快
可以通过ffmpeg转换
1 | # h265编码 |
3.存储
七牛(http://www.qiniu.com/) 或者阿里云、腾讯云的对象存储,稳定性和便利度都很高。
也都提供了大量的api方便脚本话使用。
可以参考我自己用的脚本:https://github.com/ccbuildpro/markdown_oss
4.媒体处理
4.1图片压缩
4.2.视频转换为动图
通过各种屏幕录制工具录制MP4,然后通过Gif Brewery将MP4转制为Gif,再压缩。
这里需要注意,使用Gif Brewery转为为Gif的时候,各种参数均需要设置为最高,这样可以保证ImageMagick判断重复帧,最大化提高压缩比。
4.3.视频转码
1 | ffmpeg -i ./VID_20210515_120714.mp4 -c:a copy -c:v libx265 -crf 33 ./output-h265-7.mp4 |
ffmpeg可以直接通过brew安装
1 | brew install ffmpeg |