oskar persson
He configurado un proyecto de WordPress en contenedores como Azure App Service basado en el imagen oficial de WordPress Docker donde no he realizado modificaciones a la imagen en sí, aparte de agregar un servidor SSH según las instrucciones dadas por Azur. Así es como se ve el Dockerfile:
FROM wordpress:6.0.3-php7.4
########################################## Add SSH support for Azure ##########################################
# Install OpenSSH and set the password for root to "Docker!".
RUN apt update \
&& apt install -y openssh-server \
&& rm -rf /var/lib/apt/lists/*
RUN echo "root:Docker!" | chpasswd
# Copy the sshd_config file to the /etc/ssh/ directory
COPY docker/ssh/sshd_config /etc/ssh/
# Copy and configure the ssh_setup file
RUN mkdir -p /tmp
COPY docker/ssh/ssh_setup.sh /tmp
RUN chmod +x /tmp/ssh_setup.sh \
&& (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null)
# Open port 2222 for SSH access
EXPOSE 80 2222
###############################################################################################################
COPY docker/script.sh script.sh
RUN chmod +x script.sh
CMD []
ENTRYPOINT ["./script.sh"]
Y docker/script.sh
#!/bin/bash
exec service ssh start &
exec /usr/local/bin/docker-entrypoint.sh apache2-foreground
En el servicio de aplicaciones, he agregado el WEBSITES_ENABLE_APP_SERVICE_STORAGE=true
configuración de la aplicación para habilitar almacenamiento persistente así como establecer la WORDPRESS_DB_HOST
, WORDPRESS_DB_NAME
, WORDPRESS_DB_PASSWORD
y WORDPRESS_DB_USER
configuración para conectarme a mi base de datos que se ejecuta en otro host.
Al acceder a la página del servicio de la aplicación en el navegador y pasar por la configuración de WordPress, puedo cargar fácilmente nuevos archivos que se colocan en el sistema de archivos en /var/www/html/wp-content/uploads/<year>/<month>/<filename>
al que luego puedo acceder en mi navegador en https://my-app-service.azurewebsites.net/wp-content/uploads/<year>/<month>/<filename>
.
Con Azure solo datos persistentes escritos en /home
En cambio, traté de mover el /var/www/html/wp-content/uploads
directorio a /home/uploads
y luego cree un enlace simbólico a esto desde la ruta esperada así (la creación del enlace simbólico también podría agregarse al Dockerfile para automatizar esto durante la implementación):
$ cd /var/www/html/wp-content
$ mv uploads /home/uploads
$ ln -s /home/uploads uploads
Ahora, sin embargo, cuando accedo https://my-app-service.azurewebsites.net/wp-content/uploads/<year>/<month>/<filename>
Acabo de recibir una respuesta vacía de 400.
Para ver si esto era algún tipo de limitación de Azure, decidí probar algo similar con la página de Python más simple. archivo acoplable:
FROM python:3.10.0
RUN mkdir -p /var/www/html
WORKDIR /var/www/html
########################################## Add SSH support for Azure ##########################################
# Install OpenSSH and set the password for root to "Docker!".
RUN apt update \
&& apt install -y openssh-server \
&& rm -rf /var/lib/apt/lists/*
RUN echo "root:Docker!" | chpasswd
# Copy the sshd_config file to the /etc/ssh/ directory
COPY docker/ssh/sshd_config /etc/ssh/
# Copy and configure the ssh_setup file
RUN mkdir -p /tmp
COPY docker/ssh/ssh_setup.sh /tmp
RUN chmod +x /tmp/ssh_setup.sh \
&& (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null)
# Open port 2222 for SSH access
EXPOSE 80 2222
###############################################################################################################
COPY docker/script.sh script.sh
RUN chmod +x script.sh
CMD []
ENTRYPOINT ["./script.sh"]
Y ventana acoplable/script.sh
#!/bin/bash
exec service ssh start &
exec python -m http.server 80
Hacer lo mismo aquí funciona, por lo que no parece ser una limitación con Azure. Sin embargo, lo que no entiendo es que la imagen de la ventana acoplable de WordPress con el enlace simbólico funciona como se esperaba ejecutándose en mi máquina local.
¿Qué estoy haciendo mal? ¿Por qué funciona el proyecto de Python pero no el de WordPress?
Lo resolvió agregando un Alias en lugar de un enlace simbólico y deshabilitar MMAP:
docker/extra.conf
:
Alias /wp-content/uploads/ "/home/uploads/"
<Directory "/home/uploads/">
Options Indexes MultiViews
AllowOverride None
Require all granted
</Directory>
<Directory "/home/uploads">
EnableMMAP Off
</Directory>
docker/script.sh
#!/bin/bash
exec service ssh start &
exec /usr/local/bin/docker-entrypoint.sh apache2-foreground
Dockerfile
FROM wordpress:6.0.3-php7.4
########################################## Add SSH support for Azure ##########################################
# Install OpenSSH and set the password for root to "Docker!".
RUN apt update \
&& apt install -y openssh-server \
&& rm -rf /var/lib/apt/lists/*
RUN echo "root:Docker!" | chpasswd
# Copy the sshd_config file to the /etc/ssh/ directory
COPY docker/ssh/sshd_config /etc/ssh/
# Copy and configure the ssh_setup file
RUN mkdir -p /tmp
COPY docker/ssh/ssh_setup.sh /tmp
RUN chmod +x /tmp/ssh_setup.sh \
&& (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null)
# Open port 2222 for SSH access
EXPOSE 80 2222
###############################################################################################################
COPY docker/apache/extra.conf /etc/apache2/extra.conf
RUN cat /etc/apache2/extra.conf >> /etc/apache2/apache2.conf
COPY docker/script.sh /usr/local/bin/script.sh
RUN chmod +x /usr/local/bin/script.sh
CMD []
ENTRYPOINT ["/usr/local/bin/script.sh"]
-
Ah, es por el almacenamiento nfs, está bien
– Slava Kuravski
hace 11 horas
-
Estoy muy feliz de ver que pudiste resolver el problema Oskar.
– jccampanero
Hace 6 horas
Debe cambiar la configuración del servidor web apache para que pueda seguir enlaces simbólicos:
<VirtualHost *:80>
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
-
¿En qué archivo debo hacer esto? Tenga en cuenta que estoy usando la imagen acoplable wordpress: 6.0.3-php7.4.
– Oskar Personson
hace 15 horas
-
La configuración principal está en
/etc/apache2/apache2.conf
pero creo que necesitas modificar/etc/apache2/conf-available/docker-php.conf
– Slava Kuravski
hace 15 horas
-
yo actualice
/etc/apache2/conf-available/docker-php.conf
a lo siguiente pero no tuvo ningún efecto:SetHandler application/x-httpd-php DirectoryIndex disabled DirectoryIndex index.php index.htmlOpciones – Índices +FollowSymLinks AllowOverride All – Oskar Personson
hace 14 horas
-
Tal vez los directorios no coincidan. Intente crear un enlace en /var/www para probar. También puede intentar cambiar la configuración a
– Slava Kuravski
hace 14 horas
-
eso tampoco funciono
– Oskar Personson
hace 14 horas
Por favor, ¿la aplicación o App Service reporta algún error? Probablemente, el error podría estar relacionado con algún tipo de problema de permisos, incluso una mala función del enlace simbólico (honestamente, no puedo decirle si realmente es compatible o no en este caso de uso). Mi mejor consejo es usar almacenamiento azul basado en Azure Files en lugar de almacenar su información de carga o evento todo su
/var/www/html
contenido.– jccampanero
el dia de ayer
No he podido encontrar ningún registro que contenga errores o advertencias. ¿Tienes alguna idea de dónde podría encontrar esto? He considerado usar Azure Storage; sin embargo, preferiría no hacerlo, ya que es otro costo y ya tengo 250 gb de almacenamiento con mi plan App Servive que me gustaría usar para esto.
– Oskar Personson
el dia de ayer
Lo entiendo, Oskar, está perfectamente bien. Probablemente podría acceder a los registros usando SSH como lo configuró. Además, podrías usar CLI de Azure para acceder a la información de registro. No estoy seguro de eso, pero probablemente también podría usar Kudu para acceder a la información de registro del contenedor (por favor, intente esto primero). Consulte esta pregunta SO relacionada. Espero que ayude.
– jccampanero
el dia de ayer
¿Has probado chown/chmod el
/home/uploads
carpeta para ser legible/escribible por su servidor web y usuario PHP Linux? ¿Puede verificar su configuración de Apache/Nginx para la opción “seguir enlace simbólico” y siroot
/rules permite que se sirva esta carpeta? ¿Tiene algo personalizado en htaccess que pueda impedir el acceso? Cuando carga desde WP, el archivo se crea y es correcto, pero no se puede acceder a él desde HTTP, ¿verdad? Pruebe un archivo txt simple con chmod y verifique las configuraciones de nginx/apache/htaccess/permissions.– Mtxz
Hace 19 horas
@Mtxz Probé chown/chmod el directorio /home/uploads pero no parece tener ningún efecto. También intenté cambiar la configuración de Apache agregando la opción FollowSymlink pero esto tampoco hace nada. Es posible que haya varios archivos de configuración en los que necesito hacer esto, pero no estoy seguro de cuáles en ese caso. Todo se mantiene como está escrito en el Dockerfile, no se realiza ninguna otra configuración. Puede encontrar el código fuente de la imagen base (wordpress:6.0.3-php7.4) aquí github.com/docker-library/wordpress/tree/master/latest/php7.4/…
– Oskar Personson
hace 16 horas