Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
django_react_produccio [2026/04/13 09:16] enric_mieza_sanchez [Django] |
django_react_produccio [2026/04/13 10:58] (actual) enric_mieza_sanchez [Configurar Apache2] super per isard user |
||
|---|---|---|---|
| Línia 38: | Línia 38: | ||
| Abans de començar necessitem disposar de: | Abans de començar necessitem disposar de: | ||
| - | * Un projecte Django amb React, ja sigui en un sol repo en o en repositoris separats. Si no en tens cap, pots fer servir [[https:// | + | * Un **projecte Django amb React**, ja sigui en un sol repo en o en repositoris separats. Si no en tens cap, pots fer servir [[https:// |
| - | * Un servidor operatiu amb accés SSH i amb un domnini configurat que l'hi apunta elmeudomini.com . L' | + | * Un **servidor** operatiu amb accés SSH i amb un domnini configurat que l'hi apunta elmeudomini.com . L' |
| + | |||
| + | Assumim que el servidor que disposem és dedicat únicament a aquesta app. És possible configurar diverses aplicacions en un server, però en ares de la simplicitat ho plategem així. | ||
| \\ | \\ | ||
| Línia 71: | Línia 73: | ||
| Assumim que el projecte Django utilitza un plugin com '' | Assumim que el projecte Django utilitza un plugin com '' | ||
| + | |||
| + | També assumim que instal·larem l' | ||
| <code bash> | <code bash> | ||
| Línia 139: | Línia 143: | ||
| </ | </ | ||
| - | Editeu '' | + | Editeu '' |
| + | |||
| + | Un cop configurat amb els dominis adequats, podem compilar l'app React. | ||
| $ npm run build | $ npm run build | ||
| + | <WRAP tip> | ||
| + | El '' | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Configurar Apache2 ===== | ||
| + | |||
| + | \\ | ||
| + | |||
| + | === Permisos de carpetes === | ||
| + | |||
| + | Probablement haureu clonat el repositori del projecte al //home directory// de l' | ||
| + | |||
| + | $ chmod 755 ~ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | === Arxius estàtics Django === | ||
| + | Necessitem recollir tots els arxius estàtics del projecte Django per servir-los a la URL ''/ | ||
| + | STATIC_URL = ' | ||
| + | |||
| + | I afegiu a darrera el nom de la carpeta o vulgueu els arxius estàtics (podeu triar el nom): | ||
| + | STATIC_ROOT = ' | ||
| + | |||
| + | Ara ja podeu recollir tots els arxius estàtics de l'app Django i del seu //admin panel//: | ||
| + | (env) $ ./manage.py collectstatic | ||
| + | |||
| + | \\ | ||
| + | |||
| + | === Instal·lem Apache === | ||
| + | |||
| + | Ara sí! Instal·lem Apache i el mòdul '' | ||
| + | |||
| + | $ sudo apt install apache2 libapache2-mod-wsgi-py3 | ||
| + | $ sudo a2enmod rewrite | ||
| + | |||
| + | \\ | ||
| + | |||
| + | === Configuració Apache === | ||
| + | |||
| + | La configuració, | ||
| + | * **Django**: | ||
| + | * Rutes de processament: | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | * ''/ | ||
| + | * **ReactJS**: | ||
| + | * ''/'': | ||
| + | * ''/ | ||
| + | |||
| + | |||
| + | Assumim que tenim una configuració monousuari i monoaplicació (una VM o CT dedicat per a aquesta app). En aquest cas podeu implementar directament a la site per defecte d' | ||
| + | |||
| + | <file apache / | ||
| + | < | ||
| + | # Si només tenim 1 domini, no cal anomenar-lo | ||
| + | # | ||
| + | |||
| + | WSGIDaemonProcess myapp python-home=/ | ||
| + | WSGIProcessGroup myapp | ||
| + | WSGIScriptAlias / / | ||
| + | |||
| + | < | ||
| + | <Files wsgi.py> | ||
| + | Require all granted | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Alias /static/ / | ||
| + | < | ||
| + | Require all granted | ||
| + | </ | ||
| + | Alias /media/ / | ||
| + | < | ||
| + | Require all granted | ||
| + | </ | ||
| + | |||
| + | # REACT FRONTEND | ||
| + | Alias /assets / | ||
| + | Alias /index.html / | ||
| + | AliasMatch ^/$ / | ||
| + | < | ||
| + | Require all granted | ||
| + | </ | ||
| + | |||
| + | # Regla de reescriptura per a React Router | ||
| + | # Les rutes conegudes no entren: /admin /api /static /media i /assets | ||
| + | # La resta de rutes van a dist/ | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{REQUEST_URI} !^/admin | ||
| + | RewriteCond %{REQUEST_URI} !^/api | ||
| + | RewriteCond %{REQUEST_URI} !^/static | ||
| + | RewriteCond %{REQUEST_URI} !^/media | ||
| + | RewriteCond %{REQUEST_URI} !^/assets | ||
| + | RewriteCond %{REQUEST_FILENAME} !-f | ||
| + | RewriteRule ^ / | ||
| + | |||
| + | ServerAdmin webmaster@localhost | ||
| + | DocumentRoot / | ||
| + | |||
| + | ErrorLog ${APACHE_LOG_DIR}/ | ||
| + | CustomLog ${APACHE_LOG_DIR}/ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Reinicia Apache amb: | ||
| + | $ sudo systemctl restart apache2.service | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Comprovacions ===== | ||
| + | |||
| + | Si no et dona errors al reiniciar Apache, prova les següents comprovacions. | ||
| + | |||
| + | Django funciona a ''/ | ||
| + | $ curl https:// | ||
| + | $ curl https:// | ||
| + | |||
| + | Si no es veu des de fora amb el domini, intenta comprovar que sí que funciona des de dins: | ||
| + | $ curl http:// | ||
| + | $ curl http:// | ||
| + | |||
| + | En particular, comprova que els arxius estàtics es veuen quan anem a ''/ | ||
| + | |||
| + | Funciona el // | ||
| + | |||
| + | Si no es veu des de fora, intenta la comprovació interna: | ||
| + | $ curl http:// | ||
| + | |||
| + | Si apareix la pàgina de React però no carrega les dades de l'API, obre la consola de Javascript del navegador i investiga el problema que estigui succeint (CORS, etc.) | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Media Uploads ===== | ||
| + | Comproveu que es pot accedir a ''/ | ||
| + | |||
| + | Si us dona problemes, segurament és que necessitareu donar permisos a ''/ | ||
| + | |||
| + | $ sudo chown -R www-data / | ||