Docker 中運行 Nginx,以及使用 Logrotate 進行日誌輪替

安裝nginx

docker 的安裝可以參考Docker部署微服務(Cloud-Admin)以及Docker參數、命令

  1. 獲取鏡像
docker pull nginx
  1. 運行
docker run -d --rm -p 80:80 --name nginx nginx
  1. 拷貝配置(只保留nginx.conf以及conf.d)
docker cp nginx:/etc/nginx /etc/nginx
  1. 停止容器
docker stop nginx
  1. 修改配置文件conf.d下的defalut.conf
server {
   listen       80;
   server_name  localhost;
   charset utf-8;
   root /opt/nginx/dist;
   index index.html index.htm;
   location /jwt/ {
       # 轉發請求到後端服務網關
       proxy_pass http://容器名:8765/jwt/;
   }
   location /api/ {
       proxy_pass http://容器名:8765/api/;
   }    
   error_page 404 /404.html;
   location = /40x.html {
   }
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
   }
}
  1. 重新運行鏡像
docker run --name nginx --network spring-net -p 80:80 -d -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /etc/nginx/conf.d:/etc/nginx/conf.d -v /opt/nginx/dist:/opt/nginx/dist -v /etc/localtime:/etc/localtime:ro -v /var/log/nginx:/var/log/nginx nginx

使用 Logrotate 進行日誌輪替

  1. 在宿主機新建腳本/var/log/nginx/nginx.sh
    # 不是中止Nginx的進程,而是傳遞給它信號重新生成日誌
    kill -USR1 $(/bin/cat /var/run/nginx.pid)
    
  2. 新建配置文件vi /etc/logrotate.d/nginx
    /var/log/nginx/access.log /var/log/nginx/error.log {
    	daily
    	rotate 60
    	compress
    	notifempty
    	dateext
    	sharedscripts
        postrotate
        	# docker 中運行 Nginx,執行第一步的腳本
        	docker exec -d nginx /bin/sh /var/log/nginx/nginx.sh
        	# 宿主機運行 Nginx
        	# /bin/kill -USR1 $(/bin/cat /var/run/nginx.pid)
        endscript
    }
    
  3. Logrotate 配置文件參數詳解
    參數 參數說明
    daily 日誌的輪替週期是每天
    weekly 日誌的輪替週期是每週
    monthly 日誌的輪替週期是每月
    rotate 數字 保留的日誌文件個數,0指沒有備份
    compress 當進行日誌輪替時,對舊的日誌進行壓縮
    create mode owner group 建立新日誌,同時指定新日誌的權限與所有者和所屬組,如 create 0644 root root
    mail address 當進行日誌輪替時,輸出內容通過郵件發送到指定的郵件地址,如 mail [email protected]
    missingok 如果日誌不存在,則忽略改日誌的警告信息
    notifempty 如果日誌爲空文件,則不進行日誌輪替
    minsize 大小 日誌只有大於指定大小才進行日誌輪替,而不是按照時間輪替,如 size 100k
    dateext 使用日期作爲日誌輪替文件的後綴,如 access.log-2019-07-12
    sharedscripts 在此關鍵詞之後的腳本只執行一次
    prerotate/endscript 在日誌輪替之前執行腳本命令。endscript 標識 prerotate 腳本結束
    postrotate/endscript 在日誌輪替之前執行腳本命令。endscript 標識 postrotate腳本結束
  4. 測試是否有效logrotate -vf /etc/logrotate.d/nginx
    參數 參數說明
    -?或–help 在線幫助
    -d或–debug 詳細顯示指令執行過程,便於排錯或瞭解程序執行的情況
    -f或–force 強行啓動記錄文件維護操作,縱使logrotate指令認爲沒有需要亦然
    -s<狀態文件>或–state=<狀態文件> 使用指定的狀態文件
    -v或–version 顯示指令執行過程
    -usage 顯示指令基本用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章