Tengo un servidor en casa que ejecuta Ubuntu 13.10 configurado como servidor web y repositorio git. Si envío mi proyecto desde mi sistema al servidor, se ejecuta un enlace posterior a la recepción que mueve los archivos (proyecto Symfony2) a la raíz web del servidor virtual correcto.
Parte de la razón por la que hago esto (alojar mi propio servidor) es porque quiero aprender más sobre las mejores prácticas en alojamiento de servidores.
Envío a mi servidor git a través de SSH como usuario git que tiene permiso para los repositorios git en /opt/git (alguna guía recomienda hacerlo de esta manera). El shell para el usuario de git está configurado en /usr/bin/git-shell.
Mi servidor web es nginx ejecutándose como usuario 'www-data'. Creo que esta es la configuración predeterminada ya que no la configuré.
El problema que tengo ahora es que después de implementar el usuario www-data y mi propio usuario (tim) no tienen permiso para escribir en el directorio de caché, lo que provoca que Symfony falle.
La razón por la que mi usuario (tim) está involucrado es porque el proyecto tiene un cronjob que configuré en mi propia cuenta de usuario, lo que podría no ser la mejor idea.
Además, por alguna razón, los permisos predeterminados para el directorio caché/después de una confirmación son
drwxr-xr-x 4 git git 4096 Jul 29 09:33 cache
Entonces, hasta donde yo sé, eso significa que solo el usuario de git puede crear archivos/directorios dentro de la carpeta de caché.
Ahora puedo pensar en 101 formas de manejar este problema, pero estoy más interesado en una forma correcta/intencionada de resolver mi problema.
¿Debería de alguna manera transferir los archivos al usuario www-data y ejecutar los cronjobs como el mismo usuario?
- Esto parece complicado porque no creo que el usuario de git pueda "entregar archivos a otra persona".
¿Debo encontrar una manera de ejecutar el enlace posterior a la recepción como un usuario diferente www-data o tim?
¿Qué usuario debería ejecutar mi cronjob? ¿Puede ser simplemente tim? ¿O debería ser el usuario de www-data? (o Dios no lo quiera raíz)
Este es el contenido de mi script posterior a la recepción (lo encontré en algún sitio web, no recuerdo cuál)
#!/bin/sh
#
## store the arguments given to the script
read oldrev newrev refname
## Where to store the log information about the updates
LOGFILE=./post-receive.log
# The deployed directory (the running site)
DEPLOYDIR=/var/www/project.timfennis.com
## Record the fact that the push has been received
echo -e "Received Push Request at $( date +%F )" >> $LOGFILE
echo " - Old SHA: $oldrev New SHA: $newrev Branch Name: $refname" >> $LOGFILE
## Update the deployed copy
echo "Starting Deploy" >> $LOGFILE
echo " - Starting code update"
GIT_WORK_TREE="$DEPLOYDIR" git checkout -f
echo " - Finished code update"
echo " - Starting composer update"
cd "$DEPLOYDIR"; composer update; cd -
echo " - Finished composer update"
echo "Finished Deploy" >> $LOGFILE
Estoy bastante seguro de que el compositor es quien restablece los permisos de mi archivo a 755 porque el directorio de caché se elimina cada vez.