上一篇文章手把手教程:使用Docker创建Nginx,并部署Vue项目我们介绍了如何使用Docker创建Nginx,并部署Vue项目。评论区有人问Docker nginx如何实现日志分割。
这篇文章,我们专门来介绍一下Docker nginx日志分割(按天或按小时分割日志)。
为了阅读方便,我们重新介绍使用Docker创建Nginx的步骤,和上一篇文章相比有一些小的修改。
准备工作
- 拉取镜像
拉取nginx镜像到本地:
docker pull nginx:latest
- 创建挂载目录
mkdir -p /usr/local/nginx/{conf,html,logs,conf.d}
- conf : 存放外置nginx配置文件
- html : 存放Vue包
- logs : 存放nginx日志文件
- conf.d : 存放具体项目的nginx配置文件
- 将打包好的Vue项目包(一个名为dist的文件夹)放到 /usr/local/nginx/html 目录下。
[root@192 html]# ls -l /usr/local/nginx/html/总用量 4drwxrwxr-x. 9 admin admin 250 3月 7 17:17 dist
- 在/usr/local/nginx/conf下创建 nginx.conf 文件,作为外置配置文件使用。
user root;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;}
- 在/usr/local/nginx/conf下创建 log_format.conf文件,作为日志分割配置文件使用。
if ($time_iso8601 ~ "^(d{4})-(d{2})-(d{2})T(d{2}):(d{2}):(d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4;}access_log /var/log/nginx/${server_name}_${year}-${month}-${day}-${hour}_access.log main;
如上配置,可以实现日志的按小时分割,生产环境一般改为按天分割即可。
注意:此处会按小时生成日志文件,Nginx容器需要有文件生成的权限,nginx.conf 的第一行user 后不能为nginx。必须改为:
user root
- 创建项目配置文件
在nginx.conf中我们可以看到 include /etc/nginx/conf.d/*.conf 。Nginx会扫描这个目录下所有以.conf结尾的文件。
我个人习惯在nginx.conf设置全局配置,在/etc/nginx/conf.d/下创建单独的项目配置文件。这样更清晰一些。
在/usr/local/nginx/conf.d 目录下创建vip.conf
[root@192 nginx]# vim conf.d/vip.conf server { listen 80; server_name vip; include log_format.conf; location / { root /usr/share/nginx/html; index index.html index.htm; }}
- include: 引入前面我们定义的日志分割配置文件 log_format.conf
- root:表示匹配成功之后进入的目录,我们创建容器后会把/usr/local/nginx/html/dist 目录下的文件拷贝到容器的/usr/share/nginx/html目录下。
- index:表示默认的首页面
- 创建容器
docker run -d -p 80:80 --name nginx80 --restart=always -v /usr/local/nginx/html/dist/:/usr/share/nginx/html -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/logs/:/var/log/nginx -v /usr/local/nginx/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/conf/log_format.conf:/etc/nginx/log_format.conf nginx:latest
如果返回一长串字符即为成功。
参数说明:
- -d 后台运行
- -p 设置端口映射 宿主机端口:容器端口
- --name 设置容器别名
- --restart=always 设置容器开机启动
- -v 数据卷映射 宿主机目录:容器目录。这样方便我们管理容器配置文件及日志文件
效果验证
- 浏览器访问Vue项目
说明部署Vue前端项目成功
- 查看日志目录
[root@192 logs]# ll总用量 8-rw-r--r--. 1 root root 0 3月 9 11:08 access.log-rw-r--r--. 1 root root 291 3月 9 11:08 error.log-rw-r--r--. 1 root root 2110 3月 9 11:08 vip_2020-03-09-03_access.log
可以看到,产生了vip_2020-03-09-03_access.log,日志分割也成功了。