2021
12
JOBCHER BLOG
k3s 升级版本
k3s 升级版本 停止所有的 K3s 容器(慎用) 从 server 节点运行 killall 脚本 1/usr/local/bin/k3s-killall.sh 开始升级 使用安装脚本升级 K3s 1curl -sfL https://get.k3s.io | sh - 2#国内可用 3curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh - 重启 k3s 1sudo systemctl restart k3s
JOBCHER BLOG
安装配置 Terraform
安装配置 Terraform 安装 macOS 苹果系统安装 1#安装 2brew tap hashicorp/tap 3brew install hashicorp/tap/terraform 4# 更新 5brew update 6brew upgrade hashicorp/tap/terraform 7#验证安装 8terraform -help windows 系统安装 1#安装 2choco install terraform 3#直接到这个url里下载64位系统 4https://www.terraform.io/downloads 5#验证安装 6terraform -help Linux 安装 1curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - 2sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" 3sudo apt-get update && sudo apt-get install terraform 4#验证安装 5terraform -help 1wget -O- https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo | sudo tee /etc/yum.repos.d/hashicorp.repo 2sudo yum install terraform -y terrafrom 控制 proxmox 虚拟机 来源:https://github.
JOBCHER BLOG
孜然杏鲍菇-素食
孜然杏鲍菇-素食 准备食材 杏鲍菇 蒜 糖 白芝麻 孜然粉 老抽 生抽 蚝油 步骤 杏鲍菇切片 蒜切成末 热油下蒜爆香 杏鲍菇下锅把水分炒干 加一勺生抽、半勺老抽,半勺蚝油,一勺孜然粉,一勺白芝麻,半勺糖炒匀
JOBCHER BLOG
mysql数据库备份迁移
mysql 数据库备份迁移 使用 mydumper 做数据备份迁移 备份数据库 安装 1# 安装 centos 2yum install https://github.com/mydumper/mydumper/releases/download/v0.11.5/mydumper-0.11.5-1.el7.x86_64.rpm 3yum install https://github.com/mydumper/mydumper/releases/download/v0.11.5/mydumper-0.11.5-1.el8.x86_64.rpm 1# 安装 ubuntu 2apt-get install libatomic1 3wget https://github.com/mydumper/mydumper/releases/download/v0.11.5/mydumper_0.11.5-1.$(lsb_release -cs)_amd64.deb 4dpkg -i mydumper_0.11.5-1.$(lsb_release -cs)_amd64.deb 备份 1nohup mydumper -h '备份数据库' \ 2-u '用户名' \ 3-p '密码' \ 4--threads=16 \ 5-B 备份数据库 \ 6-v 3 \ 7--outputdir=./backup --rows=100000 \ 8-L mydumper-logs.log & 迁移数据库 还原数据 1nohup myloader -h '迁移数据库' \ 2-u '用户名' \ 3-p '密码' \ 4--directory=./backup \ 5-s 来源数据库 \ 6-B 还原数据库 \ 7-t 16 \ 8-v 3 \ 9-e 2>myloader-logs.
JOBCHER BLOG
nginx 编译参数详解
nginx 编译参数详解 nginx 编译参数 作用 –prefix= 指向安装目录 –sbin-path 指向(执行)程序文件(nginx) –conf-path= 指向配置文件(nginx.conf) –error-log-path= 指向错误日志目录 –pid-path= 指向 pid 文件(nginx.pid) –lock-path= 指向 lock 文件(nginx.lock)(安装文件锁定,防止安装文件被别人利用,或自己误操作。) –user= 指定程序运行时的非特权用户 –group= 指定程序运行时的非特权用户组 –builddir= 指向编译目录 –with-rtsig_module 启用 rtsig 模块支持(实时信号) –with-select_module 启用 select 模块支持(一种轮询模式,不推荐在高载环境下使用)禁用:–withoutselect_module –with-poll_module 启用 poll 模块支持(功能与 select 相同,与 select 特性相同,为一种轮询模式,不推荐在高载环境下使用) –with-file-aio 启用 file aio 支持(一种 APL 文件传输格式) –with-ipv6 启用 ipv6 支持 –with-http_ssl_module 启用 ngx_http_ssl_module 支持(使支持 https 请求,需已安装 openssl) –with-http_realip_module 启用 ngx_http_realip_module 支持(这个模块允许从请求标头更改客户端的 IP 地址值,默认为关) –with-http_addition_module 启用 ngx_http_addition_module 支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求) –with-http_xslt_module 启用 ngx_http_xslt_module 支持(过滤转换 XML 请求 –with-http_image_filter_module 启用 ngx_http_image_filter_module 支持(传输 JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd 库要用到) –with-http_geoip_module 启用 ngx_http_geoip_module 支持(该模块创建基于与 MaxMind GeoIP 二进制文件相配的客户端 IP 地址的 ngx_http_geoip_module 变量) –with-http_sub_module 启用 ngx_http_sub_module 支持(允许用一些其他文本替换 nginx 响应中的一些文本) –with-http_dav_module 启用 ngx_http_dav_module 支持(增加 PUT,DELETE,MKCOL:创建集合,COPY 和 MOVE 方法)默认情况下为关闭,需编译开启 –with-http_flv_module 启用 ngx_http_flv_module 支持(提供寻求内存使用基于时间的偏移量文件) –with-http_gzip_static_module 启用 ngx_http_gzip_static_module 支持(在线实时压缩输出数据流) –with-http_random_index_module 启用 ngx_http_random_index_module 支持(从目录中随机挑选一个目录索引) –with-http_secure_link_module 启用 ngx_http_secure_link_module 支持(计算和检查要求所需的安全链接网址) –with-http_degradation_module 启用 ngx_http_degradation_module 支持(允许在内存不足的情况下返回 204 或 444 码) –with-http_stub_status_module 启用 ngx_http_stub_status_module 支持(获取 nginx 自上次启动以来的工作状态) –without-http_charset_module 禁用 ngx_http_charset_module 支持(重新编码 web 页面,但只能是一个方向–服务器端到客户端,并且只有一个字节的编码可以被重新编码) –without-http_gzip_module 禁用 ngx_http_gzip_module 支持(该模块同-with-http_gzip_static_module 功能一样) –without-http_ssi_module 禁用 ngx_http_ssi_module 支持(该模块提供了一个在输入端处理处理服务器包含文件(SSI)的过滤器,目前支持 SSI 命令的列表是不完整的) –without-http_userid_module 禁用 ngx_http_userid_module 支持(该模块用来处理用来确定客户端后续请求的 cookies) –without-http_access_module 禁用 ngx_http_access_module 支持(该模块提供了一个简单的基于主机的访问控制。允许/拒绝基于 ip 地址) –without-http_auth_basic_module 禁用 ngx_http_auth_basic_module(该模块是可以使用用户名和密码基于 http 基本认证方法来保护你的站点或其部分内容) –without-http_autoindex_module 禁用 disable ngx_http_autoindex_module 支持(该模块用于自动生成目录列表,只在 ngx_http_index_module 模块未找到索引文件时发出请求。) –without-http_geo_module 禁用 ngx_http_geo_module 支持(创建一些变量,其值依赖于客户端的 IP 地址) –without-http_map_module 禁用 ngx_http_map_module 支持(使用任意的键/值对设置配置变量) –without-http_split_clients_module 禁用 ngx_http_split_clients_module 支持(该模块用来基于某些条件划分用户。条件如:ip 地址、报头、cookies 等等) –without-http_referer_module 禁用 disable ngx_http_referer_module 支持(该模块用来过滤请求,拒绝报 头中 Referer 值不正确的请求) –without-http_rewrite_module 禁用 ngx_http_rewrite_module 支持(该模块允许使用正则表达式改变 URI,并且根据变量来转向以及选择配置。如果在 server 级别设置该选项,那么他们将在 location 之前生效。如果在 location 还有更进一步的重写规则,location 部分的规则依然会被执行。如果这个 URI 重写是因为 location 部分的规则造成的,那么 location 部分会再次被执行作为新的 URI。 这个循环会执行 10 次,然后 Nginx 会返回一个 500 错误。) –without-http_proxy_module 禁用 ngx_http_proxy_module 支持(有关代理服务器) –without-http_fastcgi_module 禁用 ngx_http_fastcgi_module 支持(该模块允许 Nginx 与 FastCGI 进程交互,并通过传递参数来控制 FastCGI 进程工作。 )FastCGI 一个常驻型的公共网关接口。 –without-http_uwsgi_module 禁用 ngx_http_uwsgi_module 支持(该模块用来医用 uwsgi 协议,uWSGI 服务器相关) –without-http_scgi_module 禁用 ngx_http_scgi_module 支持(该模块用来启用 SCGI 协议支持,SCGI 协议是 CGI 协议的替代。它是一种应用程序与 HTTP 服务接口标准。它有些像 FastCGI 但他的设计 更容易实现。) –without-http_memcached_module 禁用 ngx_http_memcached_module 支持(该模块用来提供简单的缓存,以提高系统效率) -without-http_limit_zone_module 禁用 ngx_http_limit_zone_module 支持(该模块可以针对条件,进行会话的并发连接数控制) –without-http_limit_req_module 禁用 ngx_http_limit_req_module 支持(该模块允许你对于一个地址进行请求数量的限制用一个给定的 session 或一个特定的事件) –without-http_empty_gif_module 禁用 ngx_http_empty_gif_module 支持(该模块在内存中常驻了一个 1*1 的透明 GIF 图像,可以被非常快速的调用) –without-http_browser_module 禁用 ngx_http_browser_module 支持(该模块用来创建依赖于请求报头的值。如果浏览器为 modern ,则$modern_browser 等于 modern_browser_value 指令分配的值;如 果浏览器为 old,则$ancient_browser 等于 ancient_browser_value 指令分配的值;如果浏览器为 MSIE 中的任意版本,则 $msie 等于 1) –without-http_upstream_ip_hash_module 禁用 ngx_http_upstream_ip_hash_module 支持(该模块用于简单的负载均衡) –with-http_perl_module 启用 ngx_http_perl_module 支持(该模块使 nginx 可以直接使用 perl 或通过 ssi 调用 perl) –with-perl_modules_path= 设定 perl 模块路径 –with-perl= 设定 perl 库文件路径 –http-log-path= 设定 access log 路径 –http-client-body-temp-path= 设定 http 客户端请求临时文件路径 –http-proxy-temp-path= 设定 http 代理临时文件路径 –http-fastcgi-temp-path= 设定 http fastcgi 临时文件路径 –http-uwsgi-temp-path= 设定 http uwsgi 临时文件路径 –http-scgi-temp-path= 设定 http scgi 临时文件路径 -without-http 禁用 http server 功能 –without-http-cache 禁用 http cache 功能 –with-mail 启用 POP3/IMAP4/SMTP 代理模块支持 –with-mail_ssl_module 启用 ngx_mail_ssl_module 支持 –without-mail_pop3_module 禁用 pop3 协议(POP3 即邮局协议的第 3 个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。是因特网电子邮件的第一个离线协议标 准,POP3 协议允许用户从服务器上把邮件存储到本地主机上,同时根据客户端的操作删除或保存在邮件服务器上的邮件。POP3 协议是 TCP/IP 协议族中的一员,主要用于 支持使用客户端远程管理在服务器上的电子邮件) –without-mail_imap_module 禁用 imap 协议(一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。IMAP 协议运行在 TCP/IP 协议之上, 使用的端口是 143。它与 POP3 协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。) –without-mail_smtp_module 禁用 smtp 协议(SMTP 即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。) –with-google_perftools_module 启用 ngx_google_perftools_module 支持(调试用,剖析程序性能瓶颈) –with-cpp_test_module 启用 ngx_cpp_test_module 支持 –add-module= 启用外部模块支持 –with-cc= 指向 C 编译器路径 –with-cpp= 指向 C 预处理路径 –with-cc-opt= 设置 C 编译器参数(PCRE 库,需要指定–with-cc-opt=”-I /usr/local/include”,如果使用 select()函数则需要同时增加文件描述符数量,可以通过–with-cc- opt=”-D FD_SETSIZE=2048”指定。) –with-ld-opt= 设置连接文件参数。(PCRE 库,需要指定–with-ld-opt=”-L /usr/local/lib”。) –with-cpu-opt= 指定编译的 CPU,可用的值为: pentium, pentiumpro, pentium3, pentium4, athlon,opteron, amd64, sparc32, sparc64, ppc64 –without-pcre 禁用 pcre 库 –with-pcre 启用 pcre 库 –with-pcre= 指向 pcre 库文件目录 –with-pcre-opt= 在编译时为 pcre 库设置附加参数 –with-md5= 指向 md5 库文件目录(消息摘要算法第五版,用以提供消息的完整性保护) –with-md5-opt= 在编译时为 md5 库设置附加参数 –with-md5-asm 使用 md5 汇编源 –with-sha1= 指向 sha1 库目录(数字签名算法,主要用于数字签名) –with-sha1-opt= 在编译时为 sha1 库设置附加参数 –with-sha1-asm 使用 sha1 汇编源 –with-zlib= 指向 zlib 库目录 –with-zlib-opt= 在编译时为 zlib 设置附加参数 –with-zlib-asm= 为指定的 CPU 使用 zlib 汇编源进行优化,CPU 类型为 pentium, pentiumpro –with-libatomic 为原子内存的更新操作的实现提供一个架构 –with-libatomic= 指向 libatomic_ops 安装目录 –with-openssl= 指向 openssl 安装目录 –with-openssl-opt 在编译时为 openssl 设置附加参数 –with-debug 启用 debug 日志
JOBCHER BLOG
nginx 重写规则 rewrite模块
nginx 重写规则 rewrite 模块 语法 语法 默认值 使用字段 作用 break none server, location, if 完成当前设置的重写规则,停止执行其他的重写规则。 set variable value none server, location, if 为给定的变量设置一个特定值。 return code none server, location, if 停止处理并为客户端返回状态码。非标准的 444 状态码将关闭连接,不发送任何响应头。可以使用的状态码有:204,400,402-406,408,410, 411, 413, 416 与 500-504。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个 URL,该 URL 将成为 location 头补值。没有状态码的 URL 将被视为一个 302 状态码。 rewrite_log on rewrite_log off server, location, if 启用时将在 error log 中记录 notice 级别的重写日志。 rewrite regex replacement flag none server, location, if 按照相关的正则表达式与字符串修改 URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。注意:如果替换的字符串以 http://开头,请求将被重定向,并且不再执行多余的 rewrite 指令。尾部的标记(flag)可以是以下的值:last – 停止处理重写模块指令,之后搜索 location 与更改后的 URI 匹配.
JOBCHER BLOG
nginx.conf 配置文件详解
nginx.conf 配置文件详解 1# vim nginx.conf 2user nobody nobody; # 运行 nginx 的所属组和所有者 3worker_processes 2; # 开启两个 nginx 工作进程,一般几个 CPU 核心就写几 4error_log logs/error.log notice; # 错误日志路径 5pid logs/nginx.pid; # pid 路径 6 7events 8{ 9 worker_connections 1024; # 一个进程能同时处理 1024 个请求 10} 11 12http 13{ 14 include mime.types; 15 default_type application/octet-stream; 16 17 log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘ 18 ‘$status $body_bytes_sent “$http_referer” ‘ 19 ‘”$http_user_agent” “$http_x_forwarded_for”‘; 20 access_log logs/access.
JOBCHER BLOG
网络基础知识
网络基础知识 1、简述 ISO/OSI 七层模型的分层与作用 分层 作用 应用层 应用系统,提供用户服务 例如:HTTP、HTTPS、FTP、Telnet、SSH、SMTP、POP3 表示层 把数据转换为能与接收者的系统格式兼容并适合传输的格式,数据表示,加密,压缩 会话层 负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。确定数据是否需要进行网络传递 分流网络传递还是本地保存 传输层 对数据分组,对报文进行分组(发送时)、组装(接收时)提供传输协议的选择:TCP (传输控制协议) :可靠的,面向连接的传输协议 (可靠,准确) (慢)UDP (用户数据报协议) :不可靠的,面向无连接的传输协议 (快) (不可靠)。端口封装,差错校验,滑动窗口,留空 网络层 网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络资料。例如:互联网协议(IP)等。1.IP 地址编址 2.路由选择 3.静态路由 4.动态路由 数据链路层 数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。1.MAC 地址编址 2.MAC 地址寻址 3.差错校验 物理层 物理层(Physical Layer)在局域网上发送数据帧(Data Frame)1.数据实际传输 2.电气特性定义 2、TCP/IP 四层模型与作用? 分层 协议 应用层 HTTP、HTTPS、FTP、Telnet、SSH、SMTP、DNS 传输层 TCP、UDP 网络层 ICMP、IGMP、IP、ARP、RARP 数据链路层、物理层 PPP、PPPOE 3、TCP 协议与 UDP 协议工作在哪一层,作用是什么? 传输层,对报文进行分组(发送时)、组装(接收时)提供 当进程需要传输可靠的数据时应使用 TCP,当进程需要高效传输数据,可以忽略可靠性时应使用 UDP 协议。 4、简述 TCP 三次握手的过程。 第一次握手:Client 将标志位 SYN 置为 1,随机产生一个值 seq=J,并将该数据包发送给 Server,Client 进入 SYN_SENT 状态,等待 Server 确认。 第二次握手:Server 收到数据包后由标志位 SYN=1 知道 Client 请求建立连接,Server 将标志位 SYN 和 ACK 都置为 1,ack=J+1,随机产生一个值 seq=K,并将该数据包发送给 Client 以确认连接请求,Server 进入 SYN_RCVD 状态。 第三次握手:Client 收到确认后,检查 ack 是否为 J+1,ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=K+1,并将该数据包发送给 Server,Server 检查 ack 是否为 K+1,ACK 是否为 1,如果正确则连接建立成功,Client 和 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。 5、简述 TCP 包头的内容。 源端口和目的端口:各占 2 个字节,分别写入源端口和目的端口。IP 地址 + 端口号就可以确定一个进程地址
JOBCHER BLOG
docker 安装kong 网关
docker 安装 kong 网关 建立数据库 创建网络 1docker network create kong-net 建立数据库 1docker run -d --name kong-database \ 2 --network=kong-net \ 3 -p 5432:5432 \ 4 -e "POSTGRES_USER=kong" \ 5 -e "POSTGRES_DB=kong" \ 6 -e "POSTGRES_PASSWORD=kong123" \ 7 postgres:9.6 创建 kong 数据 1docker run --rm --network=kong-net \ 2 -e "KONG_DATABASE=postgres" \ 3 -e "KONG_PG_HOST=kong-database" \ 4 -e "KONG_PG_PASSWORD=kong123" \ 5 -e "KONG_PASSWORD=kong123" \ 6 kong:latest kong migrations bootstrap 创建 kong 创建 kong gateway 1 docker run -d --name kong \ 2 --network=kong-net \ 3 -e "KONG_DATABASE=postgres" \ 4 -e "KONG_PG_HOST=kong-database" \ 5 -e "KONG_PG_USER=kong" \ 6 -e "KONG_PG_PASSWORD=kong123" \ 7 -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ 8 -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ 9 -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ 10 -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ 11 -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ 12 -e "KONG_ADMIN_LISTEN=0.
JOBCHER BLOG
搭建docker registry 镜像仓库
搭建 docker registry 镜像仓库 获取镜像 1docker pull registry:2.7.1 1docker pull hyper/docker-registry-web 容器运行 1mkdir -p /opt/data/registry 2docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry --name registry registry:2.7.1 1docker run -d -p 8080:8080 --name registry-web --link registry \ 2 -e REGISTRY_URL=http://192.168.99.146:5000/v2 \ 3 -e REGISTRY_TRUST_ANY_SSL=true \ 4 -e REGISTRY_BASIC_AUTH="GjhYGDGi2HhkJB" \ 5 -e REGISTRY_NAME=192.168.99.146:5000 \ 6 hyper/docker-registry-web 上传容器 1vim /etc/docker/daemon.json 2{ 3 "insecure-registries": ["192.168.99.146:5000"] 4} 5 6docker tag sjtfreaks/hogo-nginx:v1.1 192.168.99.146:5000/sjtfreaks/hogo-nginx:v1.1 7docker push 192.168.99.146:5000/sjtfreaks/hogo-nginx:v1.1
JOBCHER BLOG
rsync 文件同步
rsync 文件同步 rsync 是一个常用的 Linux 应用程序,用于文件同步 安装 1# Debian or Ubuntu 2$ sudo apt-get install rsync 3 4# Red Hat 5$ sudo yum install rsync 6 7# Arch Linux 8$ sudo pacman -S rsync 基本用法 使用 rsync 命令时,可以作为 cp 和 mv 命令的替代方法,将源目录同步到目标目录。 -r 表示递归,即包含子目录。注意,-r 是必须的,否则 rsync 运行不会成功。source 目录表示源目录,destination 表示目标目录。 -a 参数可以替代-r,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新 1rsync -r source destination 远程同步 1rsync -av <源地址>/ <用户名>@<ip地址>:/<目标地址> 友情地址:mysql 迁移
JOBCHER BLOG
helm 安装
helm 安装 脚本安装 1curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 2chmod 700 get_helm.sh 3./get_helm.sh 4 5#或者可以使用这个命令 6curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash 7 8helm help 二进制安装 1wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz 2tar -zxvf helm-v3.7.2-linux-amd64.tar.gz 3cd helm-v3.7.2-linux-amd64 4mv linux-amd64/helm /usr/local/bin/helm 5helm help
JOBCHER BLOG
k8s 部署loki日志
k8s 部署 loki 日志 helm 拉取 loki 1#加源 2helm repo add grafana https://grafana.github.io/helm-charts 3helm repo update 4#拉取 5helm fetch grafana/loki-stack --untar --untardir . 6cd loki-stack 7# 生成 k8s 配置 8helm template loki . > loki.yaml 9# 部署(如果要修改默认配置必须要修改一下yaml) 10k3s kubectl apply -f loki.yaml
JOBCHER BLOG
获取用户浏览器默认语言设置,自动判断跳转不同网站
自动判断跳转不同网站 根据用户目前的浏览器配置语言进行显示 供语言切换按钮,用户自定义选择不同的语言显示 根据识别用户的浏览器语言,自动判断并跳转到相应的语言网页,让你的网站更加灵动。 以下需要将代码放在 HTML 的内即可,然后自行制作多语言页面。 代码如下: 1<script type="text/javascript"> 2 //获取用户语言的顺序是 3 //1.获取本地缓存里的内容 4 //2.用户浏览器的语言设置 5 //如果上面2个都没有获取到,就直接使用'en'作为用户选择的语言 6 var language = 7 localStorage.getItem("locale") || 8 window.navigator.language.toLowerCase() || 9 "en"; 10 //把用户的语言写入缓存,供下次获取使用 11 localStorage.setItem("locale", language); 12 //判断用户的语言,跳转到不同的地方 13 if (language.indexOf("zh-") !== -1) { 14 window.location = "/zh-cn/index.html"; 15 } else if (language.indexOf("en") !== -1) { 16 window.location = "/en/index.html"; 17 } else { 18 //其它的都使用英文 19 window.location = "/en/index.html"; 20 } 21</script> 核心代码
JOBCHER BLOG
linux服务基础知识
linux 服务基础知识 1、哪些设置能够提升 SSH 远程管理的安全等级 2、ssh 连接时认证时间过长如何解决? 3、scp 和 rsync 进行远程文件复制有什么区别? 4、请描述通过 DHCP 服务器获取 IP 地址的过程。 5、简单描述 FTP 的主动模式和被动模式的区别? 6、集群环境中,如何保证所有服务器之间的时间误差较小。 7、请描述用户访问网站时 DNS 的解析过程。 8、解释权威 DNS 和递归 DNS 的含义,并描述智能 DNS 的实现原理。 9、公司里有一台服务器,需要在上面跑两个网站,并且其中一个网站需要更换新域名,请问如何处理? 网站1:www.a.com 网站2:www.b.com(旧) www.d.com(新) 10、简述 Apache 的三种工作模式? 11、请写出工作中常见的 Apache 优化策略。 12、有哪些技术可以提高网站的安全和效率? 13、Apache 和 Nginx 各有什么优缺点,应该如何选择? 14、为什么 Nginx 的并发能力强,资源消耗低? 15、写出几个 Nginx 的常用模块,并描述其功能。 16、请解释 Nginx 是如何连接 PHP 进行页面解析的? 17、请描述 Nginx 和 Tomcat 之间的数据传输过程? 18、请写出几个常见的 HTTP 状态码,并解释出现原因。
JOBCHER BLOG
mysql基础知识
mysql 基础知识 1、库表 student.report,有 3 个字段,姓名、学科、成绩,记录如下,根据要求完成 SQL 语句: Name Subject Result 李白 Math 95 张三 English 83 王五 Math 79 李六 Math 85 张二 English 74 查询姓李的同学的个数。 查询表中数学成绩大于 80 的前 2 名同学的名字,并按分数从大到小的顺序排列。 2、MYSQL 集群一主多从,主库宕机,如何合理切换到从库,其它从库如何处理? 3、单台 MySQL 达到性能瓶颈时,如何击碎性能瓶颈? 4、MySQL 什么时候创建索引? 5、误操作 drop 语句导致数据库数据破坏,请给出恢复的实际大体步骤。 6、如何保证 Redis 能永久保存数据? 7、如何利用 Redis 对 MySQL 进行性能优化?
JOBCHER BLOG
shell基础知识
shell 基础知识 1、有一个 b.txt 文本(内容如下),要求将所有域名截取出来,并统计重复域名出现的次数: http://www.baidu.com/index.html https://www.atguigu.com/index.html http://www.sina.com.cn/1024.html https://www.atguigu.com/2048.html http://www.sina.com.cn/4096.html https://www.atguigu.com/8192.html 2、统计当前服务器正在连接的 IP 地址,并按连接次数排序 3、使用循环在/atguigu 目录下创建 10 个 txt 文件,要求文件名称由 6 位随机小写字母加固定字符串(_gg)组成,例如:pzjebg_gg.txt。 4、生成随机数字。 5、批量检查多个网站是否可以正常访问,要求使用 shell 数组实现,检测策略尽量模拟用户真实访问模式。 http://www.atguigu.com http://www.gulixueyuan.com http://www.baidu.com
JOBCHER BLOG
Kubernetes 创建nfs存储类
Kubernetes 创建 nfs 存储类 首先你需要在别的终端上创建 nfs 服务并能提供 nfs 访问 Kubernetes 不包含内部 NFS 驱动。你需要使用外部驱动为 NFS 创建 StorageClass。 https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner 安装 nfs 驱动 安装 nfs 驱动 1#安装nfs客户端 2apt-get install nfs-common 3git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git 4cd nfs-subdir-external-provisioner/deploy 5k3s kubectl create -f rbac.yaml 6vim deployment.yaml 编辑 deployment.yaml 1apiVersion: apps/v1 2kind: Deployment 3metadata: 4 name: nfs-client-provisioner 5 labels: 6 app: nfs-client-provisioner 7 # replace with namespace where provisioner is deployed 8 namespace: default 9spec: 10 replicas: 1 11 strategy: 12 type: Recreate 13 selector: 14 matchLabels: 15 app: nfs-client-provisioner 16 template: 17 metadata: 18 labels: 19 app: nfs-client-provisioner 20 spec: 21 serviceAccountName: nfs-client-provisioner 22 containers: 23 - name: nfs-client-provisioner 24 image: k8s.
JOBCHER BLOG
nginx 日志格式整理
nginx 日志配置 语法 access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志 access_log off; # 关闭访问日志 例子: access_log /var/logs/nginx-access.log access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m 使用 log_format 自定义日志格式 Nginx 预定义了名为 combined 日志格式,如果没有明确指定日志格式默认使用该格式: log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; 如果不想使用 Nginx 预定义的格式,可以通过 log_format 指令来自定义。 语法 log_format name [escape=default|json] string ...; 变量 含义 $bytes_sent 发送给客户端的总字节数 $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小 $connection 连接序列号 $connection_requests 当前通过连接发出的请求数量 $msec 日志写入时间,单位为秒,精度是毫秒 $pipe 如果请求是通过 http 流水线发送,则其值为"p",否则为“.
JOBCHER BLOG
linux系统开启root权限
linux 系统开启 root 权限 修改 ssh 服务配置文件 1sudo su - 2sudo vim /etc/ssh/sshd_config 增加权限 在# Authentication: 下输入 1PermitRootLogin yes 更改 root 密码,重启服务 1sudo passwd root 2service sshd restart
JOBCHER BLOG
mysql 笔记(1)
mysql 学习笔记(1) 本文章不涉及到关于 mysql 开放上的问题,主要记录关于 mysql 出现的问题,以及如何去维护 mysql 数据的日常。 mysql 各类信息的收集 收集变量信息 1show global variables; 收集进程信息 1show PROCESSLIST; 收集错误日志 1show global variables like 'log_error'; 收集慢日志信息 1show global variables like 'slow_querry_log_file'; 收集锁信息,高峰时期运行三次,每次间隔 10s 1SELECT locked_table, 2 locked_index, 3 locked_type, 4 blocking_pid, 5 T2.USER blocking_user, 6 T2.HOST blocking_host, 7 blocking_lock_mode, 8 blocking_trx_rows_modified, 9 waiting_pid, 10 T3.USER waiting_user, 11 T3.HOST waiting_host, 12 waiting_lock_mode, 13 waiting_trx_row_modified, 14 wait_age_secs, 15 waiting_query 16FROM sys.x$innodb_lock_waits T1 17LEFT JOIN INFROMATION_SCHEMA.
JOBCHER BLOG
163企业邮箱设置教程
163 企业邮箱设置教程 请进入这个网站 https://qiye.163.com/help/l-11.html
JOBCHER BLOG
git技巧
git 技巧 Git 是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。而 “版本管理工具” 能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。 下面的内容就是列举了常用的 Git 命令和一些小技巧,可以通过 “页面内查找” 的方式进行快速查询:Ctrl/Command+f。 开卷必读 如果之前未使用过 Git,可以学习 Git 小白教程入门 一定要先测试命令的效果后,再用于工作环境中,以防造成不能弥补的后果!到时候别拿着砍刀来找我 所有的命令都在git version 2.7.4 (Apple Git-66)下测试通过 统一概念: 工作区:改动(增删文件和内容) 暂存区:输入命令:git add 改动的文件名,此次改动就放到了 ‘暂存区’ 本地仓库(简称:本地):输入命令:git commit 此次修改的描述,此次改动就放到了 ’本地仓库’,每个 commit,我叫它为一个 ‘版本’。 远程仓库(简称:远程):输入命令:git push 远程仓库,此次改动就放到了 ‘远程仓库’(GitHub 等) commit-id:输出命令:git log,最上面那行 commit xxxxxx,后面的字符串就是 commit-id 如果喜欢这个项目,欢迎 Star、提交 Pr、反馈问题😊 目录 脑图 展示帮助信息 回到远程仓库的状态 重设第一个 commit 查看冲突文件列表 展示工作区和暂存区的不同 展示暂存区和最近版本的不同 展示暂存区、工作区和最近版本的不同 快速切换到上一个分支 删除已经合并到 master 的分支 展示本地分支关联远程仓库的情况 关联远程分支 列出所有远程分支 列出本地和远程分支 查看远程分支和本地分支的对应关系 远程删除了分支本地也想删除 创建并切换到本地分支 从远程分支中创建并切换到本地分支 删除本地分支 删除远程分支 重命名本地分支 查看标签 查看标签详细信息 本地创建标签 推送标签到远程仓库 删除本地标签 删除远程标签 切回到某个标签 放弃工作区的修改 恢复删除的文件 以新增一个 commit 的方式还原某一个 commit 的修改 回到某个 commit 的状态,并删除后面的 commit 修改上一个 commit 的描述 查看 commit 历史 显示本地更新过 HEAD 的 git 命令记录 修改作者名 修改远程仓库的 url 增加远程仓库 列出所有远程仓库 查看两个星期内的改动 把 A 分支的某一个 commit,放到 B 分支上 给 git 命令起别名 存储当前的修改,但不用提交 commit 保存当前状态,包括 untracked 的文件 展示所有 stashes 回到某个 stash 的状态 回到最后一个 stash 的状态,并删除这个 stash 删除所有的 stash 从 stash 中拿出某个文件的修改 展示所有 tracked 的文件 展示所有 untracked 的文件 展示所有忽略的文件 强制删除 untracked 的文件 强制删除 untracked 的目录 展示简化的 commit 历史 查看某段代码是谁写的 把某一个分支导出成一个文件 从包中导入分支 执行 rebase 之前自动 stash 从远程仓库根据 ID,拉下某一状态,到本地分支 详细展示一行中的修改 清除 .
JOBCHER BLOG
docker image镜像上传
docker image 镜像上传 登入 docker hub,在https://hub.docker.com上注册你的账号。 1docker login 2username:#输入你的用户名 3password:#输入你的密码 上传镜像 1docker tag nginx:hugo sjtfreaks/hogo-nginx:v1 2docker push sjtfreaks/hogo-nginx:v1
JOBCHER BLOG
docker进阶使用
docker 进阶使用 dockerfile 和 docker compose 的配置 Dockerfile 使用 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 例子: 1 FROM nginx 2 RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html 保存 Dockerfile 文件并在本地路径执行 1 docker build -t nginx:v1-test . 2 docker run -name docker run --name nginx-test -d -p 8080:80 nginx:v1-test 浏览 nginx 页面确认更新内容 curl 127.0.0.1:8080 输出: 这是一个本地构建的nginx镜像 Docker 命令详解 COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。 1 COPY [--chown=<user>:<group>] <源路径1>... <目标路径> 2 COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] <源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如: 1 COPY hom* /mydir/ 2 COPY hom?
JOBCHER BLOG
Kubernetes k8s 组件
Kubernetes k8s 组件 控制平面组件(Control Plane Components) 控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 replicas 字段时,启动新的 pod)。 kube-apiserver API 服务器是 Kubernetes 控制面的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。 etcd etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 kube-scheduler 控制平面组件,负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。 kube-controller-manager 运行控制器进程的控制平面组件。 cloud-controller-manager 云控制器管理器是指嵌入特定云的控制逻辑的 控制平面组件。 云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。 Node 组件 节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。 kubelet 一个在集群中每个节点(node)上运行的代理。 它保证容器(containers)都 运行在 Pod 中。 kube-proxy kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。 容器运行时(Container Runtime) 容器运行环境是负责运行容器的软件。 Kubernetes 支持多个容器运行环境: Docker、 containerd、CRI-O 以及任何实现 Kubernetes CRI (容器运行环境接口)。
JOBCHER BLOG
2021年第50周记
2021 年第 50 周周记 这周完成了以下任务 搭建 hugo 博客 使用 docker 封装了 blog 搭建 k3s 环境 计划: 学习 k8s 总结:没啥好总结,刚开始写周记,就随便写一点吧 欢迎关注我的博客www.jobcher.com
JOBCHER BLOG
nginx 汇总
nginx 汇总 各类 nginx 问题汇总 安装 nginx 1 #centos 2 yum install nginx 3 #ubuntu 4 apt install nginx http 代理 正向代理 1 server { 2 listen 80; 3 server_name www.nbtyfood.com; 4 5 location / { 6 proxy_pass http://127.0.0.1:8080; 7 } 8 } 反向代理 负载均衡 1 upstream mysvr { 2 server 192.168.10.121:3333; 3 server 192.168.10.122:3333; 4 } 5 server { 6 .... 7 location ~*^.+$ { 8 proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表 9 } 10 } 热备
JOBCHER BLOG
TCP/IP详解
TCP/IP 协议 什么是 TCP/IP 协议 OSI 七层架构 TCP/IP 四层模型 协议 应用层 HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS 表示层 应用层 XDR、ASN.1、NCP、TLS、ASCII 会话层 sockets、SOCKS、PAP 传输层 传输层 TCP、UDP、RTP、SCTP 网络层 网络互连层 IP、ICMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP 数据链路层 网络访问(链接)层 以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11 物理层 调制解调器、无线电、光纤 报文结构 TCP 报文段首部格式 源端口和目的端口:各占 2 个字节,分别写入源端口和目的端口。IP 地址 + 端口号就可以确定一个进程地址 序号/序列号(Sequense Number,SN):在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。该字段表示本报文段所发送的数据的第一个字节的序号。初始序号称为 Init Sequense Number, ISN(序号/序列号这个字段很重要,大家留个印象,下文会详细讲解) 例如,一报文段的序号是 101,共有 100 字节的数据。这就表明:本报文段的数据的第一个字节的序号是 101,最后一个字节的序号是 200。显然,下一个报文段的数据序号应当从 201 开始,即下一个报文段的序号字段值应为 201。 确认号 ack:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为 N,则表明:到序号 N-1 为止的所有数据都已正确收到。 数据偏移(首部长度):它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。这个字段实际上是指出 TCP 报文段的首部长度。 保留:占 6 位,应置为 0,保留为今后使用。
JOBCHER BLOG
自建服务器内网穿透
内网穿透 文章中使用的内网穿透前提是必须具有公网 IP 的云服务器,不符合条件的同学可以跳过了。 nps 内网穿透 nps 是一款轻量级、高性能、功能强大的内网穿透代理服务器。 在公网服务器上安装 nps sever 端 1 wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz 2 tar -zxvf linux_amd64_server.tar.gz 3 sudo ./nps install 4 sudo nps start 在控制端安装 npc client 端 1 wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz 2 tar -zxvf linux_amd64_client.tar.gz 3 sudo ./npc -server=ip:port -vkey=web界面中显示的密钥 4 sudo npc start npc 安装完成可以进入 web 页面穿透端口和域名 http://localhost:8080 frps 内网穿透 frps 相对于 nps 的劣势是有断流的风险 frps 相对于 nps 的优势是对于高流量的媒体服务能够提供更可靠的支持 安装 frps 1 wget https://code.aliyun.com/MvsCode/frps-onekey/raw/master/install-frps.sh -O ./install-frps.sh 2 chmod 700 .