Контекст таков: я хочу обслуживать статический веб-сайт внутри контейнера Docker, чтобы иметь некоторые выделенные метрики, и я хочу, чтобы журналы использовали stdout/stderr.
Для этого я решил использовать Lighttpd с образом Alpine.
Я нашел советздесьгде мы создаем ссылку на stdout, но после создания ссылки права доступа меняются и lighttpd перестает писать в access.log.
Я пробовал изменить server.username
lighttpd.conf на «root», но он отказывается это делать, говоря: «
(server.c.1330) Я не буду устанавливать uid равным 0.
Я пробовал изменить разрешения access.log после создания ссылки, но безуспешно.
Есть ли способ настроить lighttpd для использования stdout/stderr?
Моя текущая конфигурация:
var.basedir = "/var/www/localhost"
var.logdir = "/var/log/lighttpd"
var.statedir = "/var/lib/lighttpd"
server.modules = ( "mod_access",
"mod_setenv",
"mod_rewrite",
"mod_redirect",
"mod_status",
"mod_simple_vhost",
"mod_evhost",
"mod_alias",
"mod_userdir",
"mod_secdownload",
"mod_fastcgi",
"mod_proxy",
"mod_cgi",
"mod_ssi",
"mod_compress",
"mod_usertrack",
"mod_expire",
"mod_rrdtool",
"mod_accesslog" )
include "mime-types.conf"
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "lighttpd"
server.groupname = "wheel"
server.document-root = var.basedir + "/htdocs"
static-file.exclude-extensions = (".php", ".pl", ".cgi", ".fcgi")
url.access-deny = ("~", ".inc")
accesslog.filename = "/var/log/lighttpd/access.log"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
Мой текущий Dockerfile:
FROM alpine:3.12
RUN adduser -S lighttpd -G wheel
RUN apk update --no-cache
RUN apk add --update --no-cache \
lighttpd=1.4.55-r1
COPY ./static /var/www/localhost/htdocs/
COPY lighttpd/* /etc/lighttpd/
RUN ln -sf /dev/stdout /var/log/lighttpd/access.log \
&& ln -sf /dev/stderr /var/log/lighttpd/error.log
EXPOSE 80 443
ENTRYPOINT ["/usr/sbin/lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]
решение1
Если вы закомментируете server.errorlog
, то lighttpd будет выводить лог в stderr.
Если accesslog.filename = "/dev/stdout"
не работает, то пробовали ли вы настроить accesslog.filename = "/proc/self/fd/1"
?