在政务云上部署Web环境,为了保证服务器安全,甲方只开放一个端口且只允许使用https协议进行访问,经过思考,决定使用docker部署网站,使用nginx反向代理,通过不同的二级域名访问不同的端口。
1 使用docker部署网站
参见:https://blog.csdn.net/mingjing941018/article/details/136801590
2 使用docker安装nginx
//安装命令
docker pull nginx
//查看安装的镜像,安装完成后,会生成一个nginx镜像
docker images
3 为了方便更改配置,将nginx的配置文件和证书文件挂载到服务器本地
1.创建本地挂载目录;
//配置文件挂载目录
mkdir /opt/docker/nginx/conf.d -p
//证书文件存放目录
mkdir /opt/docker/nginx/cert -p
2.先运行nginx容器,查看配置文件目录;
//启动nginx
docker run --name nginx -p 80:80 -d nginx
//进入docker的nginx容器
docker exec -it nginx bash
//查找nginx配置文件default.conf
//这个在/etc/nginx/conf.d/default.conf
find / -name "default.conf"
//查找nginx配置文件nginx.conf
//这个在/etc/nginx/nginx.conf
find / -name "nginx.conf"
//退出容器
exit
3.将容器的配置文件复制到我们的挂载目录中;
//把docker内的default.conf复制到外部
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/docker/nginx/conf.d/default.conf
//把docker内的nginx.conf复制到外部
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf.d/nginx.conf
4.删除之前的容器
//停止容器
docker stop nginx
//删除容器
docker rm -f nginx
5.编辑挂载目录下的nginx.conf文件,否则执行下一步,查看日志信息会报异常:nginx: [emerg] open() “/etc/nginx/mime.types” failed (2: No such file or directory) in /etc/nginx/nginx.conf
删除红框内容:
6.使用挂载命令运行容器
//-v表示挂载的文件,-v [该文件在容器外部的位置]:[该文件在容器内部的位置]
docker run --name nginx -p 80:80 -p 443:443 -v /opt/docker/nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /opt/docker/nginx/cert:/etc/nginx -d nginx
//查看容器是否正常运行
docker ps
//查看日志信息
docker logs nginx
7.修改配置文件default.conf
//若有多个网站,可使用多个server
server {
listen 80; #侦听80端口
listen 443 ssl; #侦听443端口,用于SSL
server_name tandk.com www.tandk.com; # 自己的域名
# 注意证书文件名字和位置,是从/etc/nginx/下开始算起的
ssl_certificate 1_tandk.com_bundle.crt;
ssl_certificate_key 2_tandk.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8090;
}
}
8.配置完成,重启容器
//停止nginx
docker stop nginx
//启动容器
docker start nginx
//查看是否启动成功
docker ps
4 关于证书
免费证书:可免费使用一年,一个二级域名需使用一个证书
付费证书:设置一个主域名证书,所有二级域名都可以使用这个证书
5 关于数据盘挂载
由于系统盘空间有限,服务器一般需要挂载数据盘,但是有些情况下,数据盘挂载之后,服务器一旦重启会造成挂载丢失,这个要注意检查:
//查看磁盘信息
df -h
//进入系统根目录
cd /
//创建data文件夹用于挂载数据
mkdir data
//对数据盘进行分区,/dev/vdb为未挂载的数据盘
fdisk /dev/vdb
//执行上边的命令之后,会有分区引导,逐步执行下边的命令
n p 1 w
//查看未挂载的数据盘
fdisk -l
//格式化挂载的数据盘,/dev/vdbl为刚刚格式化的数据盘
mkfs.ext4 /dev/vdbl
//数据盘挂载
mount /dev/vdb1 /data
//修改配置,保证服务器重启时挂载数据盘
vi /etc/fstab
//将下面的内容添加到配置文件的最后一行
/dev/vdb1 /data ext4 defaults 0 0
6 关于Docker默认路径
数据盘挂载之后,需要将Docker默认镜像和容器存储位置设置到挂载的数据盘上
1.查看docker默认目录
docker info
默认路径为系统根目录:/var/lib/docker
2.停止docker服务
systemctl stop docker
3.创建docker默认目录
mkdir /data/docker -p
4.根据需要迁移原docker默认目录下的文件
mv /var/lib/docker/* /data/docker
5.配置docker默认目录
//一般情况下,这个文件不存在,直接新建
vi /etc/docker/daemon.json
//内容如下
{
"data-root": "/data/docker"
}
6.编辑docker配置文件
//打开并配置docker文件
vi /etc/systemd/system/multi-user.target.wants/docker.service
//找到ExecStart部分并更新为以下内容
ExecStart=/usr/bin/dockerd --graph=/mnt/docker --storage-driver=overlay
7.重启docker服务
systemctl daemon-reload
systemctl restart docker