You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hml1/部署指导文档.md

170 lines
7.2 KiB
Markdown

# 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
![这是图片](/assets/img/taf-bootstrap.jp "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键确认
然后输入安全码