我的技术笔记

记录技术历程

查询

找到 IO 占用高的进程,每 2 秒更新一次

1
pidstat -d 2

当前目录下,文件夹大小。扫描深度 1

1
du -lh --max-depth=1

当前目录,文件夹大小

1
du -sh

文件操作

对比文件夹

1
diff -qr dir1/ dir2/

复制文件夹

1
cp -r dir-from/ dir-target/

Nginx

测试配置成功后重启

1
sudo nginx -t && sudo /etc/init.d/nginx restart

vim

清空所有文件内容

1
:%d

ntp

如果您使用的是systemd-timesyncd(Ubuntu 默认)

1
sudo vim /etc/systemd/timesyncd.conf

腾讯云-公网

1
NTP=ntp.tencent.com ntp2.tencent.com ntp3.tencent.com ntp4.tencent.com ntp5.tencent.com

腾讯云-内网

1
NTP=time1.tencent.com time2.tencent.com time3.tencent.com time4.tencent.com time5.tencent.com

阿里云

1
NTP=ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp2.aliyun.com ntp3.aliyun.com

先确定 Ubuntu 是否安装 Docker Compose,那就先查询本机 Docker Compose 版本

1
docker-compose --version

结果:

1
2
3
4
Command 'docker-compose' not found, but can be installed with:

snap install docker # version 20.10.8, or
apt install docker-compose

安装

安装 – APT 方式

1
apt  install docker-compose

再次确认 Docker Compose 版本结果:

1
docker-compose version 1.17.1, build unknown

安装 – Github 二进制文件方式

通过比对 Github 上的 docker-compose 的版本发现,还有更新版本 v2.1.0。
想尝鲜试一试最新版本,先卸载掉 APT 安装的 1.17.1 版本。
再安装二进制文件到本机路径: /usr/local/bin/docker-compose 。

1
sudo curl -L "https://github.com/docker/compose/releases/download/v2.1.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

修改执行全新和建软链:

1
sudo chmod +x /usr/local/bin/docker-compose & sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

再次确认 Docker Compose 版本结果:

1
Docker Compose version v2.1.0

Sonatype Nexus3

Nexus Docker 镜像 – 3.36.0

查询 Nexus Docker 镜像),拉取 3.36.0 版本的 Docker 镜像到本地

1
docker pull sonatype/nexus3:3.36.0

配置 docker-compose.yml

预期

参考 Docker,使用 Sonatype Nexus3

docker 环境 目录 /nexus-data 映射宿主目录 /opt/maven/sonatype-work-docker/nexus-3.36.0
docker 环境 端口 5432 映射宿主端口 6432

新建 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
version: "3.0"
services:
nexus3-3.36.0:
image: sonatype/nexus3:3.36.0
container_name: nexus3-3.36.0
ports:
- "6432:5432"
restart: always
volumes:
- /opt/maven/sonatype-work-docker/nexus-3.36.0:/nexus-data
environment:
INSTALL4J_ADD_VM_PARAMS: "-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g"

文件夹权限修改

参考后,确保 nexus3 挂载 HOST 文件夹权限正确!

1
sudo chown -R 200:200 /opt/maven/sonatype-work-docker/nexus-3.36.0

验证 docker-compose

1
sudo docker-compose up
1
sudo docker-compose up --remove-orphans

正式部署新装,后台运行

1
sudo docker-compose -f docker-compose.yml up -d

正式部署升级,后台运行

1
sudo docker-compose -f docker-compose.yml up -d --remove-orphans

维护

keytool 创建 jks 格式证书,以及转换 p12

创建命令

1
keytool -genkeypair -alias [keyname] -keystore [demo.jks] -validity [365]

选择密钥算法 ECDSA

1
keytool -genkeypair -alias [keyname] -keystore [demo.jks] -validity [365] -keyalg ec
最佳实践:
store 密码 与 key 密码保持一致。    
密码长度大于8、包含大小写、含特殊字符:`!@#$%^&*()-_=+\|[{}];:’”,.<>/?

检查校验

1
keytool -list -v -keystore [demo.jks]

1
2
# base64 格式
keytool -exportcert -alias [keyname] -keystore [demo.jks] | openssl sha1 -binary | openssl base64

转换 p12 格式

将使用 EC 算法的 jks 转换为 p12 格式

1
keytool -importkeystore -srckeystore [demo.jks] -srcstoretype JKS -deststoretype pkcs12 -destkeystore [demo.p12]

openssl 提取 p12 私钥

1
openssl pkcs12 -nodes -in [demo.p12] -out [demo.private.pem]

openssl 提取公钥

1
openssl pkey -in [demo.private.pem] -pubout -out [demo.public.pem]

生成 csr

1
keytool -certreq -alias [keyname] -keystore [demo.p12] -storetype pkcs12 -file [demo.csr]

获取镜像

获取 docker Sonatype Nexus3 镜像,最新版本

最新版本
1
docker pull sonatype/nexus3
指定版本
1
docker pull sonatype/nexus3:3.30.1

预期

docker 环境 目录 /nexus-data 映射宿主目录 /opt/maven/sonatype-work-docker/nexus3
docker 环境 默认端口 8081 映射宿主端口 5430

映射宿主目录中存在文件和目录的情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 先启动一个默认的 sonatype/nexus3 容器
docker run -p 5430:8081 --name nexus3 sonatype/nexus3:3.30.1

# 进入对应容器
docker exec -i -t xxxxxx /bin/bash

# 查询用户和用户组的 ID
cat /etc/passwd
nexus:x:200:200:Nexus Repository Manager user:/opt/sonatype/nexus:/bin/false
# sonatype/nexus3 容器中,默认的 nexus 对应的用户id为 200

# 删除这个默认容器
docker container rm -f xxx

# 修改宿主目录的 owner
chown -R 200:200 /opt/maven/sonatype-work-docker/nexus3

运行

直接运行
1
2
3
4
docker run -p 5430:8081 --name nexus3 sonatype/nexus3:3.30.1

#docker 环境 自定义端口 5432 映射宿主端口 5432
docker run -p 5432:5432 --name nexus3 -v /opt/maven/sonatype-work-docker/nexus3:/nexus-data sonatype/nexus3:3.30.1
后台运行
1
2
3
4
5
6
7
8
9
# sonatype/nexus3 默认用户 admin ,密码存储在数据文件夹下的 admin.password 
docker run -d -p 5430:8081 --name nexus3 --restart=always sonatype/nexus3:3.30.1

# 映射宿主目录 /opt/maven/sonatype-work-docker/nexus3
docker run -d -p 5430:5432 --name nexus3 --restart=always -v /opt/maven/sonatype-work-docker/nexus3:/nexus-data sonatype/nexus3:3.30.1


#调整 Java VM 参数
docker run -d -p 5430:5432 --name nexus3 --restart=always -v /opt/maven/sonatype-work-docker/nexus3:/nexus-data -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g" sonatype/nexus3:3.30.1

停止-需要时间关闭数据库

1
docker stop --time=120 nexus3

创建证书秘钥

1
openssl genrsa -des3 -out server.key 2048

按要求两次输入相同的密码,以后使用该秘钥文件-server.key 都会要求输入密码。
如果想免除输入密码的步骤,可以使用以下命令移除秘钥文件的密码(考虑安全因数,建议不要这样处理)

1
openssl rsa -in server.key -out server.key_nopass

创建证书申请文件

1
openssl req -new -key server.key -out server.csr

1
openssl req -new -key server.key_nopass -out server.csr

依次选择并输入信息,建议 Common Name 输入服务器 hostname,比如 IP

创建CA证书

1
openssl req -new -x509 -key server.key -out server_ca.crt -days 3650

1
openssl req -new -x509 -key server.key_nopass -out server_ca.crt -days 3650

创建证书

创建自当前日期起有效期为期十年的服务器证书 server.crt

1
openssl x509 -req -days 3650 -in server.csr -CA server_ca.crt -CAkey server.key -CAcreateserial -out server.crt

1
openssl x509 -req -days 3650 -in server.csr -CA server_ca.crt -CAkey server.key_nopass -CAcreateserial -out server.crt

Nginx 部署

打开 Nginx 网站配置文件,配置 ssl_certificate 和 ssl_certificate_key

1
2
3
4
5
6
7
8
9
10
11
12
server {

...
listen 443;
ssl on;
#配置证书位置
ssl_certificate /opt/web.ser.cert/server.crt;
#配置秘钥位置
ssl_certificate_key /www/web.ser.cert/server.key;

...
}
0%