docker 部署简单nginx服务器

    xiaoxiao2021-12-12  12

    今儿来了个需求, 用docker去部署nginx的静态服务器。

    仔细观察这个命题,看似不难,直接docker run啥的一堆命令就好了,目录主要包括数据目录,配置目录以及日志目录。

    #!/bin/bash # 说明:该脚本用于启动staticnginx服务器,模拟线上static.machtalk.net docker run --detach \ --name staticserver \ --publish 80:80 \ -v /data/staticserver/data:/usr/share/nginx/html:rw \ -v /data/staticserver/config/nginx.conf:/etc/nginx/nginx.conf:rw \ -v /data/staticserver/config/servers:/etc/nginx/servers:rw \ -v /data/staticserver/logs/error.log:/var/log/nginx/error.log:rw \ -d nginx

    如上配置之后,nginx可以跑起来,可是会遇到一个问题,就是日志看不到了。以下开始学习如何显示log。

    docker nginx里面的配置

    如何进docker

    # 如下命令打出一个nginx的docker docker run --name tt -d -t -i nginx # 直接在docker里面运行bash docker exec -i -t tt /bin/bash

    root@78045edd70cc:/etc/nginx# cat nginx.conf user nginx; 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; }

    要想看日志,调整如下:

    首先是nginx.conf配置文件

    pid /etc/nginx/nginx.pid; error_log /var/log/nginx/error.log warn; user nginx; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; client_body_temp_path /etc/nginx/client_body_temp; proxy_temp_path /etc/nginx/proxy_temp; fastcgi_temp_path /etc/nginx/fastcgi_temp; uwsgi_temp_path /etc/nginx/uwsgi_temp; scgi_temp_path /etc/nginx/scgi_temp; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 65; include servers/*.conf; }

    其次是,调整 子文件的配置

    server { listen 80; server_name static.abc.net,_; access_log /var/log/nginx/static.a.log; error_log /var/log/nginx/static.e.log; location / { root /usr/share/nginx/html; index index.html index.htm; } location ~* \.(eot|ttf|woff|woff2|svg|otf)$ { add_header Access-Control-Allow-Origin *; } }

    另外,别忘了创建好/var/log/nginx/下面的access.log和error.log,要不,会报错的哦。

    touch /var/log/nginx/access.log touch /var/log/nginx/error.log

    看看我们的启动文件

    #!/bin/bash # 说明:该脚本用于启动staticnginx服务器,模拟线上static.machtalk.net docker stop staticserver && echo "停止服务成功!" || echo "停止服务失败!" docker rm staticserver && echo "销毁服务成功!" || echo "销毁服务失败!" docker run --detach \ --name staticserver \ --publish 80:80 \ -v /data/staticserver/data:/usr/share/nginx/html:rw \ -v /data/staticserver/config/nginx.conf:/etc/nginx/nginx.conf:rw \ -v /data/staticserver/config/servers:/etc/nginx/servers:rw \ -v /data/staticserver/logs:/var/log/nginx:rw \ -d nginx

    这次的配置文件新增了开始的几行,省的每次docker ps docker stop docker rm的麻烦。

    目录对应关系列一下如下

    本地路径docker路径备注/data/staticserver/data/usr/share/nginx/html数据文件将夹/data/staticserver/config/nginx.conf/etc/nginx/nginx.conf主配置文件/data/staticserver/config/servers/etc/nginx/servers子目录文件夹/data/staticserver/logs/var/log/nginx日志文件夹

    说到这,可能还有两个问题,如果日志老实写,是不是我们应该部署logrotaged呀。呵呵,这点 nginx docker早就想到啦,里面有log轮转配置的。

    root@e5d5154e7161:/etc/logrotate.d# cat nginx /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }

    哦,好吧,另外,为啥使用docker logs -f –tail=40 staticserver的时候会看到刷刷的日志来。 那是因为做了 /var/log/nginx/access.log > /dev/stdout以及/var/log/nginx/error.log > /dev/stderr的链接

    哦哦,好吧。

    那么还有一件事儿, 就是https的问题咋弄来。这个还不难,目录映射白,不过这个这次用不到,就不BB了。

    转载请注明原文地址: https://ju.6miu.com/read-900054.html

    最新回复(0)