我的技术笔记

记录技术历程

NFS 即网络文件系统(Network File-System)

因文件夹需要在不同 Linux 设备上同步的原因,又想偷个懒。

安装

安装 NFS服务器端

1
sudo apt-get install nfs-kernel-server

安装 NFS客户端

1
sudo apt-get install nfs-common

配置

配置格式说明

DIR IP(读写权限,sync,no_root_squash)

DIR

共享目录

IP

所有 ping 通该主机的用户 : *
指定网段,在该网段中的用户可以挂载 : 192.168.1.*
指定IP用户能挂载 : 192.168.1.12

读写权限

ro : 只读
rw : 读写

sync

同步

no_root_squash

不降低root用户的权限

打开 NFS 配置文件

1
sudo vim /etc/exports
1
/opt/gitlab-runner/android-sdk 10.0.2.240(rw,sync,no_root_squash)

验证

1
sudo mount -t nfs 10.0.0.239:/opt/gitlab-runner/android-sdk /mnt/android-sdk-remote-nfs -o nolock

连接到个人目录下

1
ln -s /mnt/android-sdk-remote-nfs /home/ubuntu/Android/sdk-remote

手动挂载成功后,就可以配置为服务开机启动(systemd)

测试读写速度

在当前目录下,以 io-test.dbf 文件来测试读写性能

1
time dd if=/dev/zero of=io-test.dbf bs=4k count=10000

Windows 挂载

挂载块大小指定为 64KB

1
mount \\192.168.55.88\mnt\ceph\data\Android -o rsize=64,wsize=64,iocharset=utf8,timeo=15  X:\

卸载

1
umount X:

NFS 默认 uid、gid 修改为 1055

NFS共享目录挂载时uid和gid均为-2,而NFS服务的默认 uid 和 gid 为 65534,因此此时仅有共享目录的读权限。

修改注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
添加DWORD值两项:AnonymousUid,AnonymousGid ,选择10进制,填入 1055

查询

找到 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 && /etc/init.d/nginx restart

先确定 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

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 -f docker-compose.yml up -d

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
0%