diff --git a/部署指导文档.md b/部署指导文档.md new file mode 100644 index 0000000..6a1ce29 --- /dev/null +++ b/部署指导文档.md @@ -0,0 +1,169 @@ +# EIM项目安全部署方案 +##### 容器列表 +| 容器名称 | 容器映射端口 |备注说明 | +| -------- | -------- |-------- | +| mysql数据库 | 3306 | | +| nginx服务器 | 8081 | | +| nacos服务器 |8848、9848、9849 | | +| eim服务器 | 8101 | | + +##### 宿主机端口开放 +| 容器名称 | 对外开放端口 |备注说明 | +| -------- | -------- |-------- | +| mysql数据库 | 3306 | | +| nginx服务器 | | | +| nacos服务器 |8848 | | +| eim服务器 | 8101 | | +### 一、docker容器的安全策略 +##### 1. 版本控制与镜像管理 +使用Docker时,及时管理和维护镜像版本非常重要。在生产环境中,我们应该使用具有稳定性和经过验证的镜像版本,并定期更新和测试新的镜像版本。此外,建议使用私有的Docker镜像仓库,以确保权限控制和镜像的完整性。EIP项目使用镜像仓库列表: +| 镜像分类 | 镜像仓库地址 |备注说明 | +| -------- | -------- |-------- | +| mysql数据库 | | | +| nginx服务器 | | | +| nacos服务器 | | | +| eim服务器 | 218.17.55.193:3001/pdc/openjdk:8 | | +##### 2. 权限控制 +在将应用程序容器化之前,需要对容器进行安全加固。将容器限制在一个最小的权限集合中,以减少潜在的攻击面。 +###### (1)创建Docker用户组,并将需要使用Docker的用户添加到该用户组中。这可以通过执行以下命令实现: + sudo groupadd docker + sudo usermod -aG docker $USER --$USER替换为用户名 + sudo gpasswd -a yzj docker + newgrp docker +然后,重新登录以使更改生效。 +###### (2)将Docker socket文件的所有者更改为Docker用户组。这可以通过执行以下命令实现: + sudo chown root:docker /var/run/docker.sock +这将允许在无需root权限的情况下运行Docker。 + ##### 3. 资源限制和监控 +为了避免容器资源的过度使用或不足,我们应该设置适当的资源限制,并对其进行监控。使用Docker提供的资源管理工具,例如Docker Compose或Kubernetes,可以更好地管理容器的资源分配。同时,通过监控容器的运行状况和性能指标,可以及时发现和解决潜在的问题。 + + docker run --cpus=0.5 --memory=512m myimage + + ##### 4. 容器日志和监控 + 配置容器日志收集系统,将容器日志集中管理和分析,以及添加适当的告警机制 +### 二、配置文件修改(使用bootstrap-test.yml) + ##### 1. 修改dtaf-service.jar配置文件 + bootstrap.yml + ![bootstrap.yml](/taf-bootstrap.jpg "Magic Gardens") + +### 三、数据库部署 +##### 1. 生成mysql数据库容器 + docker pull mysql:latest #使用私有仓库镜像 + + docker run -itd --name mysql-app -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql #密码要求轻度高,包含大小写字母,数字,特殊字符 + +##### 2. 创建生产数据库用户 + CREATE USER 'eim'@'192.168.8.100' IDENTIFIED BY 'pass123'; #密码要求轻度高,包含大小写字母,数字,特殊字符 + GRANT ALL PRIVILEGES ON *.* TO 'eim'@'192.168.8.100'; + FLUSH PRIVILEGES; + +注意:限制用户只能从特定IP地址登录可以增强安全性,但也要确保你不会意外地限制合法用户。始终确保你了解正在执行的操作,并始终保持数据库的安全性。 +##### 3. 禁止root用户远程登录 + REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; + FLUSH PRIVILEGES; +root用户将无法通过远程连接登录MySQL数据库。记住,在禁用root远程登录之后,确保你有其他方式可以安全地管理和维护你的数据库。 +##### 3. 执行数据库脚本 + +### 四、nginx部署 + +1、拷贝nginx.conf、eimp到/home/yzj文件(eimp为前端代码) + + docker pull nginx:stable-perl + cd /home/yzj + mkdir -p /home/yzj/eim-prod/nginx/conf + mkdir -p /home/yzj/eim-prod/nginx/html + cp nginx.conf /home/yzj/eim-prod/nginx/conf + cp -r eimp/ /home/yzj/eim-prod/nginx/html + docker run -d -p 8081:80 --name eim-nginx -v /home/yzj/eim-prod/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/yzj/eim-prod/nginx/logs:/var/log/nginx -v /home/yzj/eim-prod/nginx/html:/usr/share/nginx/html nginx:stable-perl +验证: +### 五、nacos部署 +1、拷贝nacos-server-2.2.0.zip、Dockerfile到/home/yzj/nacos-build 文件 + cd /home/yzj/nacos-build/ + docker pull openjdk:8-jre + docker build -t nacos:eim . + docker run -d -it --name nacos-eim -p 8848:8848 -p 9848:9848 -p 9849:9849 nacos:eim +Dockerfile内容 + + FROM openjdk:8-jre + ENV WORK_HOME /usr/local + WORKDIR $WORK_HOME + ADD nacos-server-2.2.0.zip /usr/local + RUN unzip /usr/local/nacos-server-2.2.0.zip + RUN chmod +x /usr/local/nacos/bin/startup.sh + EXPOSE 8848 9848 9849 + ENTRYPOINT [ "sh", "-c", "/usr/local/nacos/bin/startup.sh && tail -f /usr/local/nacos/logs/start.out" ] + +### 六、eim部署 +1、拷贝customer-service.jar、dtaf-service.jar、eima-bff.jar、eim-service.jar、eimp-gateway.jar、Dockerfile到/home/yzj/eim-build 文件 + + cd /home/yzj/eim-build/ + docker pull openjdk:8-jre + docker build -t eim:0428 . + docker run -d -it --name eim -p 8101:8101 eim:0428 + + #确定启动后,进入容器内启动eimp-gateway服务 + + docker exec -it eim /bin/bash + nohup java -jar eimp-gateway.jar & +Dockerfile内容 + + FROM openjdk:8-jre + ENV WORK_HOME /opt/ + WORKDIR $WORK_HOME + EXPOSE 8101 + ADD customer-service.jar /opt/ + ADD dtaf-service.jar /opt/ + ADD eima-bff.jar /opt/ + ADD eim-service.jar /opt/ + ADD eimp-gateway.jar /opt/ + RUN chmod +x /opt/*.jar + CMD ["sh", "-c", "java -jar dtaf-service.jar > /dtaf-service.log 2>&1 & java -jar customer-service.jar > /customer-service.log 2>&1 & java -jar eima-bff.jar > /eima-bff.log 2>&1 & java -jar eim-service.jar > /eim-service.log 2>&1 "] + +### 七、docker宿主机隔离 +##### 1. 禁止root用户登录 + vi /etc/ssh/sshd_config + + PermitRootLogin选项,并将其值修改为no + + sudo /etc/init.d/ssh restart + +##### 2. 使用密钥登录 +###### (1)在windows堡垒机上生成密钥 + + ssh-keygen -t rsa #生成密钥 + + 弹出密钥保存路径,直接回车即可 + 弹出输入安全码,设置一个远程连接安全码。 +###### (2)上传公钥到服务器 + + scp ~/.ssh/id_rsa.pub yzj@192.168.8.156:~/ + +###### (3)到服务器上将公钥添加到authorized_keys + + ssh yzj@192.168.8.156 #登录到linux系统 + +追加id\_rsa.pub公钥到authorized\_keys(如果没有则新建) + + mkdir -p ~/.ssh #如果已经存在就不需要执行 + + chmod 700 ~/.ssh + + cat ~/id_rsa.pub >> ~/.ssh/authorized_keys + +###### (4)打开密钥连接并关闭网络连接 + + vi /etc/ssh/sshd_config + +`PubkeyAuthentication` 选项设置为 `yes`,以启用公钥认证 +`PasswordAuthentication`选项被设置为`no`,关闭密码登录 +保存并关闭文件后,重启SSH服务 + + sudo /etc/init.d/ssh restart + +###### (5)通过密钥连接 + ssh yzj@192.168.8.156 + 第一次需要按enter键确认 + 然后输入安全码 + + +