
Tengo una configuración de nginx que comienza de la siguiente manera
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_set_misc_module.so;
load_module modules/ngx_http_headers_more_filter_module.so;
load_module modules/ngx_http_cache_purge_module.so;
Cuando uso el siguiente Dockerfile:
FROM nginx:mainline
ADD config/ /etc/nginx/
EXPOSE 80
EXPOSE 443
Recibo el siguiente error cuando intento ejecutar el contenedor:
2024/01/22 19:52:07 [emerg] 8#8: dlopen() "/etc/nginx/modules/ndk_http_module.so" failed (/etc/nginx/modules/ndk_http_module.so: cannot open shared object file: No such file or directory) in /etc/nginx/nginx.conf:1
webserver | nginx: [emerg] dlopen() "/etc/nginx/modules/ndk_http_module.so" failed (/etc/nginx/modules/ndk_http_module.so: cannot open shared object file: No such file or directory) in /etc/nginx/nginx.conf:1
Entonces, los módulos no están presentes. Mi pregunta es ¿cómo puedo habilitarlos? encontréestepost, que instala los módulos de la siguiente manera
$> sudo apt install software-properties-common
$> nginx=stable
$> sudo add-apt-repository ppa:nginx/$nginx
$> sudo apt update
$> sudo apt dist-upgrade
$> sudo apt install nginx-extras
Sin embargo, el comando sudo add-apt-repository ppa:nginx/$nginx
arroja errores.
17.78 Setting up packagekit-tools (1.2.6-5) ...
17.79 Setting up software-properties-common (0.99.30-4) ...
17.90 Processing triggers for dbus (1.14.10-1~deb12u1) ...
18.15 Traceback (most recent call last):
18.15 File "/usr/bin/add-apt-repository", line 362, in <module>
18.15 sys.exit(0 if addaptrepo.main() else 1)
18.15 ^^^^^^^^^^^^^^^^^
18.15 File "/usr/bin/add-apt-repository", line 345, in main
18.15 shortcut = handler(source, **shortcut_params)
18.15 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18.15 File "/usr/lib/python3/dist-packages/softwareproperties/shortcuts.py", line 40, in shortcut_handler
18.15 return handler(shortcut, **kwargs)
18.15 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
18.15 File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 86, in __init__
18.15 if self.lpppa.publish_debug_symbols:
18.15 ^^^^^^^^^^
18.15 File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 126, in lpppa
18.15 self._lpppa = self.lpteam.getPPAByName(name=self.ppaname)
18.15 ^^^^^^^^^^^
18.15 File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 113, in lpteam
18.15 self._lpteam = self.lp.people(self.teamname)
18.15 ^^^^^^^^^^^^^^
18.15 AttributeError: 'NoneType' object has no attribute 'people'
Estoy un poco perdido en este punto sobre cómo instalar los módulos nginx.
Respuesta1
Si buscamos ese mensaje de error ( AttributeError: 'NoneType' object has no attribute 'people'
), encontramos como primer resultadoesta pregunta. La respuesta más votada sugiere que la solución es:
apt-get install python3-launchpadlib
Y de hecho, eso nos permite ejecutar add-apt-repository
:
$ podman run -it --rm docker.io/nginx:mainline bash
root@744ec39923cd:/# apt update >& /dev/null
root@744ec39923cd:/# apt -y install software-properties-common >& /dev/null
root@744ec39923cd:/# add-apt-repository ppa:nginx/stable
Traceback (most recent call last):
.
.
.
File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 113, in lpteam
self._lpteam = self.lp.people(self.teamname)
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'people'
root@744ec39923cd:/# apt -y install python3-launchpadlib >& /dev/null
root@744ec39923cd:/# add-apt-repository ppa:nginx/stable
Repository: 'deb https://ppa.launchpadcontent.net/nginx/stable/ubuntu/ bookworm main'
Description:
This PPA contains the latest Stable Release version of the nginx web server software.
**Only Non-End-of-Life Ubuntu Releases are supported in this PPA**
**Development releases of Ubuntu are not officially supported by this PPA, and uploads for those will not be available until actual final releases for those versions**
More info: https://launchpad.net/~nginx/+archive/ubuntu/stable
Adding repository.
Press [ENTER] to continue or Ctrl-c to cancel.
Adding deb entry to /etc/apt/sources.list.d/nginx-ubuntu-stable-bookworm.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/nginx-ubuntu-stable-bookworm.list
Adding key to /etc/apt/trusted.gpg.d/nginx-ubuntu-stable.gpg with fingerprint 8B3981E7A6852F782CC4951600A6F0A3C300EE8C
Hit:1 http://deb.debian.org/debian bookworm InRelease
Hit:2 http://deb.debian.org/debian bookworm-updates InRelease
Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease
Get:4 http://deb.debian.org/debian bookworm/main amd64 DEP-11 Metadata [4492 kB]
Fetched 4492 kB in 1s (4458 kB/s)
Reading package lists... Done
Pero eso finalmente falla, porque elppa referenciadosólo tiene paquetes para Ubuntu; no hay paquetes para la imagen basada en Debian Bookworm utilizada por la nginx:stable
imagen.
Además, ese PPA solo admite versiones de Ubuntu hasta Bionic (18.04), que se lanzó en 2018.
esta respuestatiene instrucciones para ampliar la imagen base con los módulos dinámicos de nginx.
Dependiendo de sus necesidades, puede ser más sencillo comenzar con una imagen reciente basada en Ubuntu. Nginx y la mayoría de los módulos ya están empaquetados para Ubuntu, por lo que algo como esto te llevará hasta allí:
FROM ubuntu:23.04
RUN apt update && apt -y install \
nginx \
libnginx-mod-http-ndk \
libnginx-mod-http-headers-more-filter \
libnginx-mod-http-cache-purge \
&& \
apt clean all
Eso te da todo excepto ngx_http_set_misc_module.so
.