Licitator 1.0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
8.5 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. # Licitator v1.0
  2. Proyecto en Symfony 4.4 para el Servicio de Gestion de Desarrollos Digitales del Principado de Asturias
  3. ### Especificaciónes de servidor ###
  4. ## Hardware ##
  5. Procesador 1.4 GHz Intel 64 o AMD 64 o superior con 2 CPUs o nucleos
  6. Tarjeta de red Gigabyte
  7. 4GB RAM o superior
  8. 40 GB de espacio o más, el espacio dependerá de la cantidad de archivos que se prevea almacenar en el servidor.
  9. ## Software ##
  10. Php 7.3 o superior
  11. MySql 5.7 o MariaDb 10.2 o superior
  12. Servidor web Apache 2.4 o Nginx 1.16 o superior (La configuración del servidor varía).
  13. Acceso ssh al servidor (para instalación y configuración)
  14. ### Instalación ###
  15. La instalación consta de varios pasos sucesivos automatizables mediante un script.
  16. Diferenciamos entre instalación automática y manual.
  17. # Descargar repositorio #
  18. Descargamos el repositorio bien por ssh:
  19. ```command
  20. git clone [Repositorio] [carpeta local donde se clonara]
  21. ```
  22. o por https:
  23. ```command
  24. git clone https://[user]@[Repositorio] [carpeta local donde se clonara]
  25. ```
  26. Tras esto entramos en la carpeta:
  27. ```
  28. cd [carpeta local donde se clonara]/httpdocs
  29. ```
  30. ## Instalación Automatica ##
  31. Ejecutar el comando situado en la carpeta scripts del repositorio.
  32. ```commmand
  33. deploy.sh [carpeta de instalación] [nueva base de datos] [usuario base de datos] [password base de datos]
  34. ```
  35. ## Instalación Manual ##
  36. La instalación manual realiza exactamente los mismos pasos que la automática.
  37. # Crear la base de datos #
  38. Una vez realizado el install, procedemos a crear la base de datos donde:
  39. - nombre-bbdd: Nombre de la Base de Datos
  40. - usuario: Usuario de la máquina
  41. - -p: Contraseña del usuario si tuviera
  42. ```command
  43. mysql -u usuario -p -e "create database nombre-bbdd;"
  44. ```
  45. Si hubiera alguna dificultad al hacerlo mediante comando podemos creala con cualquier cliente Mysql.
  46. ### CHAT, Mercure ###
  47. Para el chat se está usando el componente [mercure](https://symfony.com/doc/current/components/mercure.html) incluido en symfony.
  48. Para gestionar conexiones persistentes, Mercure confía en un Hub: un servidor dedicado que maneja conexiones SSE persistentes con los clientes.
  49. La aplicación Symfony publica las actualizaciones en el Hub, que las transmitirá a los clientes.
  50. Hay que descargar una implementación oficial y de código abierto (AGPL) de un Hub de [Mercure.rocks](https://mercure.rocks/).
  51. [Descargas github](https://github.com/dunglas/mercure/releases)
  52. Debemos incluir estos parámetros en nuestro archivo .env o .env.local
  53. ```
  54. MERCURE_PUBLISH_URL=http://localhost:3000/.well-known/mercure
  55. MERCURE_JWT_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOltdfX0.Oo0yg7y4yMa1vr_bziltxuTCqb8JVHKxp-f_FwwOim0
  56. ```
  57. En `MERCURE_PUBLISH_URL` inluiremos la url y el puerto de acceso a nuestro Hub mercure, seguido de `/.well-known/mercure`.
  58. El otro parámetro es el `MERCURE_JWT_TOKEN` se pueden crear y firmar tokens JWT en está página [jwt.io](https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.iHLdpAEjX4BqCsHJEegxRmO-Y6sMxXwNATrQyRNt3GY)
  59. El JWT debe estar firmado con la misma clave secreta que la utilizada por el Hub para verificar el JWT (! ChangeMe! En nuestro ejemplo). El cuerpo del JWT debe contener al menos la siguiente estructura para poder publicar:
  60. ```
  61. {
  62. "mercure": {
  63. "publicar": []
  64. }
  65. }
  66. ```
  67. [Mas info](https://symfony.com/doc/current/mercure.html#configuration)
  68. Una vez instalado el HUB hay que ejecutar este comando para arrancarlo.
  69. ````
  70. ./mercure --jwt-key='!ChangeMe!' --addr='localhost:3000' --allow-anonymous --cors-allowed-origins='*'
  71. ````
  72. ``!ChangeMe!`` es la key con la que está firmado el token de desarrollo incluido en el archivo .env en el atributo `MERCURE_JWT_TOKEN`, en el caso de usar otra key para firmar el token deberemos usar esta última en el parámetro `--jwt-key` del comando al iniciar el Hub, de otro modo los mensajes no se recibiran correctamente.
  73. Una vez creada la base de datos configuramos nuestro fichero local de entorno con las siguientes variables:
  74. - Conexión DDBB
  75. - Tipo de entorno de trabajo
  76. - Desarrollo: dev
  77. - Produccion: prod
  78. - Test: test
  79. - Indicar el idioma por defecto de aplicación, en este caso sería:
  80. - Español: es
  81. - Inglés: en
  82. - Tipo de correo electrónico
  83. - Dirección de correo electrónico
  84. - Nombre del FROM
  85. ```
  86. echo "DATABASE_URL=mysql://root:@127.0.0.1:3306/nombre-bbdd" > .env.local
  87. echo "APP_ENV=prod" >> .env.local
  88. echo "APP_LOCALE=es" >> .env.local
  89. echo "APP_SECRET=0a965b54faef5f2766f9ca1a2285abf2" >> .env.local
  90. echo "MAILER_URL='gmail://prometeo.tests:#Pr0met3o&2019^@gmail.com?encryption=tls'" >> .env.local
  91. echo "MAILER_ADDRESS=prometeo.tests@gmail.com" >> .env.local
  92. echo "MAILER_SENDER_NAME='Prometeo Innovations S.L.N.E.'" >> .env.local
  93. ```
  94. # Instalar Composer #
  95. Ejecutamos:
  96. * OJO composer se ejecutara con la versión base de php instaldada en el servidor si queremos usar una versión diferente deberemos preceder este comando con la version de php que queramos.
  97. ```command
  98. composer install
  99. ```
  100. Para instalar todas las dependencias de los paquetes.
  101. En caso de insuficiencia de memoria ejecutar:
  102. ```
  103. php -d memory_limit=-1 composer install
  104. ```
  105. Ajustando rutas en caso de ser necesario. (Ej, con rutas absolutas para php y/o composer).
  106. # Dependencias propias #
  107. * OJO
  108. Este proyecto tiene dos repositorios propios o modificados para ajustarse a nuestras necesidades. Estos dos repos se encuentran en la carpeta repositories, en el caso de realizar algun cambio en en cualquiera de ellos hay que actualizar la version en el archivo composer.json del/los repositorio/s en cuestion y ejecutar `composer update paquete/nombre-del-repo` para actualizar los cambios en la carpeta vendor.
  109. # Actualizar la base de datos #
  110. Actualizamos el esquema de la base de datos.
  111. ```command
  112. php bin/console doctrine:schema:update --force --dump-sql
  113. ```
  114. # Cargamos las fixtures #
  115. Dentro de las fixtures se incluyen los usuarios
  116. * administrador
  117. * editor
  118. * test
  119. * caso_estudio_%locale% : existen tantos usuarios caso_estudio como idiomas se hayan configurado.
  120. ```command
  121. php bin/console doctrine:fixtures:load --env dev
  122. ```
  123. # Generar usuario administrador (opcional) #
  124. Si, por cualquier cosa no queremos cargar las fixtures con los usuarios podemos crear el usuario administrador con el
  125. siguiente comando:
  126. ```
  127. php bin/console fos:user:create [nombreusuario] --super-admin
  128. ```
  129. # Generar assets #
  130. Una vez completada la instalación base debemos generar los assets o archivos estáticos de cada uno de los módulo para
  131. que sean accesibles desde symfony.NOTA: EL ORDEN ES IMPORTANTE.
  132. ```
  133. php bin/console ckeditor:install
  134. php bin/console assets:install
  135. php bin/console elfinder:install
  136. ```
  137. #Ajustar permisos#
  138. Una vez instalado todo ajustamos los permisos
  139. ```
  140. sudo chmod -R 777 vendor
  141. sudo chmod -R 777 var
  142. sudo chmod -R 777 public
  143. sudo chmod -R 755 bin
  144. ```
  145. ###Configuraciones varias
  146. Para que la landing de acdr cargue los contadores de la home hay que habilitar el CORS, se puede hacer en el archivo httpdocs/public/.htaccess añadiendo las siguientes lineas
  147. ```
  148. Header set Access-Control-Allow-Origin "*"
  149. Header set Access-Control-Allow-Methods "GET"
  150. Header set Access-Control-Allow-Headers "Content-Type, Authorization"
  151. ```
  152. en el caso de que el servidor funcione con php-fpm debemos saber que php-fpm anula los headers del htaccess, esto se soluciona introduciendo las lineas anteriores en la configuracion del host.
  153. ### DESARROLLO / Actualizaciones del código fuente (Provisional)###
  154. Si nuestras entidades / BBDD sufren modificaciones en su esquema debemos de realizar las siguientes operaciones
  155. 1. Actualizar la nueva estructura de la BBDD en el skipper y realizar la correspondiente Export to ORM
  156. 2. En las entidades User y Rule meter la propia clase en el DiscriminatorMap
  157. 3. Regenerar las entidades
  158. ```command
  159. php bin/console make:entity --regenerate
  160. ```
  161. 4. Crear una nueva versión de las migraciones para ello se debe ejecutar.
  162. ```command
  163. php bin/console doctrine:migrations:diff
  164. ```
  165. 5. Verificar que el nuevo esquema de la BBDD sea válido.
  166. ```command
  167. php bin/console doctrine:schema:validate
  168. ```
  169. 6. Actualizar la estructura de la BBDD.
  170. ```command
  171. php bin/console doctrine:migrations:migrate
  172. ```
  173. 7. Verificar que no queda ninguna actualización pendiente.
  174. ```command
  175. php bin/console doctrine:schema:update --dump-sql
  176. ```
  177. 8. Crear las nuevas fixtures si fuera necesario.
  178. 9. Crear Backup de BBDD.
  179. ```command
  180. mysqldump -u root database_name | gzip -c > data.sql.gz
  181. mysqldump -u root database_name -D > nodata.sql
  182. ```
  183. 10. Commitear los cambios git
  184. ```git
  185. git add -A
  186. git commit -a -m "Cambios en la BBDD (stable)
  187. ```cast