随机密码生成器-Docker化部署实践
·
随机密码生成器 - 基于Spring Boot的Docker化部署实践
前言
在网络安全日益重要的今天,强密码的使用已成为保护个人信息和账户安全的基本要求。每次修改服务器密码都要想一想设置啥密码,于是就简单做了一个随机密码生成器。
项目简介
随机密码生成器是一个简单易用的Web应用,用于生成安全的随机密码。该工具具有以下特点:
- 支持自定义密码长度(4-32位)
- 可选择包含大写字母、小写字母、数字和特殊符号
- 界面简洁美观,操作直观
- 支持一键复制生成的密码
- 响应式设计,支持移动端和桌面端访问
项目架构
整体架构
┌─────────────────────────────────────────────────────────────┐
│ 用户浏览器 │
└───────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Docker容器 (tingyu-tool) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Spring Boot应用 (8999端口) │ │
│ │ ┌────────────────────────────────────┐ │ │
│ │ │ 前端页面 (Thymeleaf) │ │ │
│ │ │ - HTML/CSS/JS │ │ │
│ │ └────────────────────────────────────┘ │ │
│ │ 密码生成逻辑 (JavaScript) │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
部署步骤
使用Docker Compose部署方式,我构建了镜像,上传到阿里镜像仓库了,可以直接使用
创建docker-compose.yml
version: '3.8'
services:
tingyu-tool:
image: registry.cn-hangzhou.aliyuncs.com/xiaolinzi/mkpwd:1.0
container_name: mkpwd-tool
ports:
- "8999:8999"
restart: unless-stopped
启动容器
docker-compose up -d
部署过程中的问题与解决方案
问题1:Docker镜像拉取超时
问题描述:
在构建Docker镜像时,遇到以下错误:
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
原因分析:
- Docker Hub官方镜像源在国内访问速度慢
- 网络连接不稳定导致下载超时
解决方案:
- 配置国内镜像加速器
编辑Docker配置文件:
sudo nano /etc/docker/daemon.json
添加以下内容:
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
- 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
- 验证配置
docker info | grep "Registry Mirrors"
问题2:基础镜像选择
问题描述:
使用openjdk:8-jre-alpine镜像时,由于网络问题无法拉取。
解决方案:
改用本地已有的ubuntu:20.04镜像,在容器内安装OpenJDK 8 JRE。
优势:
- ubuntu:20.04镜像通常在本地已存在
- 安装过程更稳定可控
- 避免了网络依赖问题
使用方法
访问应用
容器启动成功后,通过以下地址访问:
- 本地访问: http://localhost:8999
- 远程访问: http://服务器IP:8999
功能使用
-
设置密码长度
- 拖动滑动条选择4-32位密码长度
- 默认长度为12位
-
选择字符类型
- ☑ 包含大写字母(A-Z)
- ☑ 包含小写字母(a-z)
- ☑ 包含数字(0-9)
- ☐ 包含特殊符号(~!@#$%^&*()_+{}":?><;.,)
-
生成密码
- 点击"生成密码"按钮
- 生成的密码显示在结果区域
-
复制密码
- 点击结果区域或"复制"按钮
- 密码自动复制到剪贴板
项目使用JavaScript在前端实现密码生成逻辑,核心代码如下:
// 随机字符生成函数
function getRandomLower() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 97);
}
function getRandomUpper() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 65);
}
function getRandomNumber() {
return String.fromCharCode(Math.floor(Math.random() * 10) + 48);
}
function getRandomSymbol() {
const symbols = '~!@#$%^&*()_+{}":?><;.,';
return symbols[Math.floor(Math.random() * symbols.length)];
}
// 密码生成主函数
function generatePassword(length, lower, upper, number, symbol) {
let generatedPassword = "";
const typesCount = lower + upper + number + symbol;
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(item => Object.values(item)[0]);
if (typesCount === 0) {
return "";
}
for (let i = 0; i < length; i++) {
typesArr.forEach(type => {
const funcName = Object.keys(type)[0];
generatedPassword += randomFunc[funcName]();
});
}
return generatedPassword.slice(0, length);
}
安全建议
- 密码长度:建议使用至少12位密码
- 字符组合:建议包含大小写字母、数字和特殊符号
- 定期更换:重要账户建议每3-6个月更换密码
- 避免重复:不要在不同网站使用相同密码
- 使用密码管理器:推荐使用LastPass、1Password等专业工具
参考资源
关于作者
本文基于实际部署经验编写,如有问题欢迎交流讨论。
更多推荐
所有评论(0)