7.2 KiB
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

三、数据库部署
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键确认
然后输入安全码