{"id":725,"date":"2024-08-14T17:25:20","date_gmt":"2024-08-14T23:25:20","guid":{"rendered":"https:\/\/linutopix.site\/?p=725"},"modified":"2024-08-17T09:37:34","modified_gmt":"2024-08-17T15:37:34","slug":"proyecto-django-p1","status":"publish","type":"post","link":"https:\/\/linutopix.site\/?p=725","title":{"rendered":"Proyecto Django P1"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En este post vamos agenerar un proyecto local en django, posteriormente lo subiremos a github y lo clonaremos en un servidor vps de amazon ec2.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"723\" height=\"698\" src=\"https:\/\/linutopix.site\/wp-content\/uploads\/2024\/08\/Captura-desde-2024-08-15-13-12-53.png\" alt=\"\" class=\"wp-image-738\" style=\"width:578px;height:auto\" srcset=\"https:\/\/linutopix.site\/wp-content\/uploads\/2024\/08\/Captura-desde-2024-08-15-13-12-53.png 723w, https:\/\/linutopix.site\/wp-content\/uploads\/2024\/08\/Captura-desde-2024-08-15-13-12-53-300x290.png 300w\" sizes=\"auto, (max-width: 723px) 100vw, 723px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Despues haremos uso de uwsgi y nginx para publicar el servicio en el servidor y por ultimo instalaremos un certificado ssl.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.- Proyecto local<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">instalamos herramientas para generar entorno virtual<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">apt-get instala python3-venv<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">creamos la carpeta del proyecto<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">mkdir proyectodjango<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">instalamos el entorno virtual<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python3 -m venv proyectodjango\/env<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">activamos el entorno virtual<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">source proyectodjango\/env\/bin\/activate<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ya dentro de nuestro entorno virtual instalamos django<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">pip install Django<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos nuestro proyecto con django-admin y elejimos el nombre de nuestro proyecto<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">django-admin startproject proy .<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python manage.py migrate<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Probamos el proyecto activando el servidor<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python manage.py runserver<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos un superusuario para poder acceder al panel de control<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python manage.py createsuperuser<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como paso extra vamos a instalar un tema del panel admin de django para hacer unos cambios<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">pip install django-admin-soft-dashboard<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Modificamos los settings del proyecto para agregar la aplicacion recien instalada<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">vim proy\/settings.py<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agregamos el siguiente codigo en installed aps<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">&#8216;admin_soft.apps.AdminSoftDashboardConfig&#8217;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.- Subimos nuestro proyecto a git<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Iniciamos el repositprio<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git init<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agregamos los archivos<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git add .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agregamos el mensaje<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git commit -m \u00abprimer commit\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Configuramos user<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git config &#8211;global user.email \u00abadmin@rodisoft.site\u00bb<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git config &#8211;global user.name \u00abtomy laptop\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agregamos los origenes<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git remote add origin https:\/\/github.com\/tomym87\/proydjan.git<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git branch -M main<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empujamos los cambios<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git push -u origin main<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Generamos el archivo requirements<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">pip freeze &gt; requirements.txt<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git add .<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git commit -m \u00abagregando requirements\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Subimos los cambios<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git push -u origin main<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3.- Nos conectamos anuestra vps<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">ssh -i \u00abapdjandeb.pem\u00bb admin@ec2-18-116-189-71.us-east-2.compute.amazonaws.com<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Actualizamos nuestro servidor<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo apt update<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo apt upgrade<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instalamos git en nuestro servidor<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo apt install git<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">clonamos nuestro repositorio<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">git clone <a href=\"https:\/\/github.com\/linutopix\/proyectodjango.git\">https:\/\/github.com\/linutopix\/proyectodjango.git<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">entramos a nuestro proyecto<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">cd proyectodjango <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Borramos el entorno virtual para generar uno nuevo<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">rn -rf env<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instalamos herramientas del entorno virtual y activamos un nuvo entorno virtual<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo apt install python3-venv<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python3 -m venv env<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">source env\/bin\/activate<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instalamos los requirements<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">pip install -r requirements.txt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">probamos nuestro proyecto<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python3 manage.py runserver  0.0.0.0:8000<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En mi caso ec2 no tiene abierto el puerto 8000 por defecto asi que entramos al panel de ec2 para abrirlo<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4.- Publicamos nuestro proyecto con uwsgi y nginx<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vemos que version de python tenemos instalada<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python3  -V<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">instalamos herramientas de desarrollo de nustra version de python<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo apt-get install python3.11-dev gcc<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Accedemos a nuestro proyecto activamos nuestro entorno virtual y corremos el servidor django<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">cd proyectodjango<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">source env\/bin\/activate<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python3 manage.py runserver 0.0.0.0:8000<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instalamos uwsgi<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">pip install uwsgi<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos un archivo de prueba en python para probar que podemos servir desde uwsgi<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">vim test.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def application(env, start_response):\n    start_response('200 OK', &#91;('Content-Type','text\/html')])\n    return &#91;b\"Prueba correcta\"]\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Probamos que podamos servir el archivo con uwsgi<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">uwsgi &#8211;http :8000 &#8211;wsgi-file test.py<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora vamos a levantar el proyecto django con uwsgi con el siguiente comando. buscar el archivo wsgi.py para saber la ubicacion del modulo.<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">uwsgi &#8211;http :8000 &#8211;module proydjan.wsgi<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">vmoa a configurar ahora nginx, comenzamos instalandolo<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo apt-get install nginx<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos el archivo de configuracion de nuestro sitio en \/etc\/nginx\/sites-available\/, en nuestro caso lo llamaremos proydjan.conf<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo vim \/etc\/nginx\/sites-available\/proydjan.conf<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># the upstream component nginx needs to connect to\nupstream django {\n    server unix:\/\/\/home\/admin\/proydjango\/proydjango.sock;\n}\n# configuration of the server\nserver {\n    listen      80;\n    server_name proydjango.linutopix.site;\n    charset     utf-8;\n    # max upload size\n    client_max_body_size 75M;\n    # Django media and static files\n    location \/media  {\n        alias \/home\/admin\/proydjango\/media;\n    }\n    location \/static {\n        alias \/home\/admin\/proydjango\/static;\n    }\n    # Send all non-media requests to the Django server.\n    location \/ {\n        uwsgi_pass  django;\n        include     \/home\/admin\/proydjango\/uwsgi_params;\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos el archivo de configuracion de parametros en \/home\/admin\/proydjan\/uwsgi_params con el siguiente contenido<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uwsgi_param  QUERY_STRING       $query_string;\nuwsgi_param  REQUEST_METHOD     $request_method;\nuwsgi_param  CONTENT_TYPE       $content_type;\nuwsgi_param  CONTENT_LENGTH     $content_length;\nuwsgi_param  REQUEST_URI        $request_uri;\nuwsgi_param  PATH_INFO          $document_uri;\nuwsgi_param  DOCUMENT_ROOT      $document_root;\nuwsgi_param  SERVER_PROTOCOL    $server_protocol;\nuwsgi_param  REQUEST_SCHEME     $scheme;\nuwsgi_param  HTTPS              $https if_not_empty;\nuwsgi_param  REMOTE_ADDR        $remote_addr;\nuwsgi_param  REMOTE_PORT        $remote_port;\nuwsgi_param  SERVER_PORT        $server_port;\nuwsgi_param  SERVER_NAME        $server_name;<\/code><\/pre>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">vim \/home\/admin\/proydjan\/uwsgi_params<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creamos el enlace simbolico de nuetsro archivo de configuracion <\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo ln -s \/etc\/nginx\/sites-available\/proydjango.conf \/etc\/nginx\/sites-enabled\/<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Modificamos la configuracion del proyecto para agregar rutas estaticas<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">vim proydjan\/settings.py<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\nSTATIC_ROOT = os.path.join(BASE_DIR, \"static\/\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Geneamos la carpeta de archivos estaticos<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">python manage.py collectstatic<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Agregamos la carpeta media<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">mkdir media<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descargamos una imagen de prueba<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">wget <a href=\"https:\/\/media.tenor.com\/iKwvDRl3cvAAAAAM\/homer-simpson-whoo-hoo.gif\">https:\/\/media.tenor.com\/iKwvDRl3cvAAAAAM\/homer-simpson-whoo-hoo.gif<\/a> -O media\/media.gif<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">borramos el sitio por default y reiniciamos el servicio de nginx<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo rm -rf \/etc\/nginx\/sites-enabled\/default<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo \/etc\/init.d\/nginx restart<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora creamos el socket de conexion <\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">uwsgi &#8211;socket proydjan.sock &#8211;module proydjan.wsgi &#8211;chmod-socket=666<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Configuramos uwsgi para pduccion cresmos el archivo de configuracion .ini<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">vim djangoproy_uwsgi.ini<\/p>\n\n\n\n<pre class=\"wp-block-code has-background\" style=\"background-color:#ffeebe\"><code>&#91;uwsgi]\n# full path to Django project's root directory\nchdir            = \/home\/admin\/proydjan\/\n# Django's wsgi file\nmodule           = proydjan.wsgi\n# full path to python virtual env\nhome             = \/home\/admin\/proydjan\/env\n# enable uwsgi master process\nmaster          = true\n# maximum number of worker processes\nprocesses       = 10\n# the socket (use the full path to be safe\nsocket          = \/home\/admin\/proydjan\/proydjan.sock\n# socket permissions\nchmod-socket    = 666\n# clear environment on exit\nvacuum          = true\n# daemonize uwsgi and write messages into given log\ndaemonize       = \/home\/admin\/uwsgi-emperor.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">corremos el proceso<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">uwsgi &#8211;ini djangoproy_uwsgi.ini<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reiniciamos para mater procesos<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo reboot<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a crear un servicio que monitoree que este activo siempre, entramos a nuestro entorno virtual y creamos la carpeta vassals<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">cd \/home\/admin\/proydjan\/env<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">mkdir vassals<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo ln -s \/home\/admin\/proydjan\/djangoproy_uwsgi.ini \/home\/admin\/proydjan\/env\/vassals\/<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">corremos uwsgi en modo emperador para hacer una prueba<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">uwsgi &#8211;emperor \/home\/admin\/proydjan\/env\/vassals &#8211;uid www-data &#8211;gid www-data<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora vamos a que esto arranque al iniciar el sistema, hay varias formas, nosotros lo haremos con systemd lo llamaremos djangoemperor.uwsgi<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo vim \/etc\/systemd\/system\/djangoemperor.uwsgi.service<\/p>\n\n\n\n<pre class=\"wp-block-code has-background\" style=\"background-color:#fff0c8\"><code>&#91;Unit]\nDescription=Emperor de proydjan\nAfter=network.target\n&#91;Service]\nUser=admin\nRestart=always\nExecStart=\/home\/admin\/proydjan\/env\/bin\/uwsgi --emperor \/home\/admin\/proydjan\/env\/vassals --uid www-data --gid www-data\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Habilitamos y arrancamos el servicio con systemd<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo systemctl enable djangoemperor.uwsgi.service<\/p>\n\n\n\n<p class=\"bgcode wp-block-paragraph\">sudo systemctl start djangoemperor.uwsgi.service<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este post vamos agenerar un proyecto local en django, posteriormente lo subiremos a github y lo clonaremos en un servidor vps de amazon ec2. Despues haremos uso de uwsgi y nginx para publicar el servicio en el servidor y por ultimo instalaremos un certificado ssl. 1.- Proyecto local instalamos herramientas para generar entorno virtual [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-725","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/linutopix.site\/index.php?rest_route=\/wp\/v2\/posts\/725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linutopix.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linutopix.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linutopix.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linutopix.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=725"}],"version-history":[{"count":27,"href":"https:\/\/linutopix.site\/index.php?rest_route=\/wp\/v2\/posts\/725\/revisions"}],"predecessor-version":[{"id":770,"href":"https:\/\/linutopix.site\/index.php?rest_route=\/wp\/v2\/posts\/725\/revisions\/770"}],"wp:attachment":[{"href":"https:\/\/linutopix.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linutopix.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linutopix.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}