<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-egc/index.php?action=history&amp;feed=atom&amp;title=Despliegue_en_PaaS_-_23%2F24</id>
		<title>Despliegue en PaaS - 23/24 - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-egc/index.php?action=history&amp;feed=atom&amp;title=Despliegue_en_PaaS_-_23%2F24"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Despliegue_en_PaaS_-_23/24&amp;action=history"/>
		<updated>2026-05-16T12:34:48Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-egc/index.php?title=Despliegue_en_PaaS_-_23/24&amp;diff=9635&amp;oldid=prev</id>
		<title>Brgutierrez: Página creada con «*Diapositivas: Archivo:06- PaaS2324.pdf *local_settings.deploy.py: ‎&lt;syntaxhighlight lang=&quot;python&quot;&gt; import os  import dj_database_url  BASE_DIR = os.path.dirname(os.p...»</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-egc/index.php?title=Despliegue_en_PaaS_-_23/24&amp;diff=9635&amp;oldid=prev"/>
				<updated>2023-10-16T07:32:03Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con «*Diapositivas: &lt;a href=&quot;/wiki-egc/index.php/Archivo:06-_PaaS2324.pdf&quot; title=&quot;Archivo:06- PaaS2324.pdf&quot;&gt;Archivo:06- PaaS2324.pdf&lt;/a&gt; *local_settings.deploy.py: ‎&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt; import os  import dj_database_url  BASE_DIR = os.path.dirname(os.p...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;*Diapositivas: [[Archivo:06- PaaS2324.pdf]]&lt;br /&gt;
*local_settings.deploy.py:&lt;br /&gt;
‎&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os &lt;br /&gt;
import dj_database_url&lt;br /&gt;
&lt;br /&gt;
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = []&lt;br /&gt;
RENDER_EXTERNAL_HOSTNAME = os.environ.get('RENDER_EXTERNAL_HOSTNAME')&lt;br /&gt;
if RENDER_EXTERNAL_HOSTNAME:&lt;br /&gt;
    ALLOWED_HOSTS.append(RENDER_EXTERNAL_HOSTNAME)&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = os.environ.get('SECRET_KEY')&lt;br /&gt;
&lt;br /&gt;
DEBUG = 'RENDER' not in os.environ&lt;br /&gt;
&lt;br /&gt;
# Modules in use, commented modules that you won't use&lt;br /&gt;
MODULES = [&lt;br /&gt;
    'authentication',&lt;br /&gt;
    'base',&lt;br /&gt;
    'booth',&lt;br /&gt;
    'census',&lt;br /&gt;
    'mixnet',&lt;br /&gt;
    'postproc',&lt;br /&gt;
    'store',&lt;br /&gt;
    'visualizer',&lt;br /&gt;
    'voting',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
MIDDLEWARE = [&lt;br /&gt;
    'django.middleware.security.SecurityMiddleware',&lt;br /&gt;
    'whitenoise.middleware.WhiteNoiseMiddleware',&lt;br /&gt;
    'django.contrib.sessions.middleware.SessionMiddleware',&lt;br /&gt;
    'django.middleware.common.CommonMiddleware',&lt;br /&gt;
    'django.middleware.csrf.CsrfViewMiddleware',&lt;br /&gt;
    'django.contrib.auth.middleware.AuthenticationMiddleware',&lt;br /&gt;
    'django.contrib.messages.middleware.MessageMiddleware',&lt;br /&gt;
    'django.middleware.clickjacking.XFrameOptionsMiddleware',&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
STATIC_URL='/static/'&lt;br /&gt;
if not DEBUG:&lt;br /&gt;
    STATIC_ROOT=os.path.join(BASE_DIR, 'staticfiles')&lt;br /&gt;
    STATICFILES_STORAGE='whitenoise.storage.CompressedManifestStaticFilesStorage'&lt;br /&gt;
&lt;br /&gt;
BASEURL = 'https://{}'.format(os.environ.get('RENDER_EXTERNAL_HOSTNAME'))&lt;br /&gt;
&lt;br /&gt;
APIS = {&lt;br /&gt;
    'authentication': BASEURL,&lt;br /&gt;
    'base': BASEURL,&lt;br /&gt;
    'booth': BASEURL,&lt;br /&gt;
    'census': BASEURL,&lt;br /&gt;
    'mixnet': BASEURL,&lt;br /&gt;
    'postproc': BASEURL,&lt;br /&gt;
    'store': BASEURL,&lt;br /&gt;
    'visualizer': BASEURL,&lt;br /&gt;
    'voting': BASEURL,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DATABASE_URL = os.environ.get('DATABASE_URL')&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    'default': dj_database_url.parse(DATABASE_URL)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ALLOWED_ORIGINS = ['https://{}'.format(os.environ.get('RENDER_EXTERNAL_HOSTNAME'))]&lt;br /&gt;
CSRF_COOKIE_SECURE = True&lt;br /&gt;
CSRF_COOKIE_SAMESITE = 'Strict'&lt;br /&gt;
CSRF_TRUSTED_ORIGINS = ALLOWED_ORIGINS.copy()&lt;br /&gt;
&lt;br /&gt;
# number of bits for the key, all auths should use the same number of bits&lt;br /&gt;
KEYBITS = 256&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*launch.sh:&lt;br /&gt;
‎&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
cd decide/&lt;br /&gt;
cp local_settings.deploy.py local_settings.py&lt;br /&gt;
./manage.py createsuperuser --noinput&lt;br /&gt;
./manage.py collectstatic --noinput&lt;br /&gt;
./manage.py makemigrations&lt;br /&gt;
./manage.py migrate&lt;br /&gt;
gunicorn -w 5 decide.wsgi:application --timeout=500&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*requirements.txt:&lt;br /&gt;
‎&amp;lt;syntaxhighlight lang=&amp;quot;txt&amp;quot;&amp;gt;&lt;br /&gt;
Django==4.1&lt;br /&gt;
pycryptodome==3.15.0&lt;br /&gt;
djangorestframework==3.14.0&lt;br /&gt;
django-cors-headers==3.13.0&lt;br /&gt;
requests==2.28.1&lt;br /&gt;
django-filter==22.1&lt;br /&gt;
psycopg2==2.9.4&lt;br /&gt;
coverage==6.5.0&lt;br /&gt;
jsonnet==0.18.0&lt;br /&gt;
django-nose==1.4.6&lt;br /&gt;
django-rest-swagger==2.2.0&lt;br /&gt;
selenium==4.7.2&lt;br /&gt;
dj-database-url == 2.1.0&lt;br /&gt;
pynose == 1.4.8&lt;br /&gt;
whitenoise==6.5.0&lt;br /&gt;
gunicorn==21.2.0&lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*workflow build + deploy:&lt;br /&gt;
‎&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
name: Python application&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
    branches:&lt;br /&gt;
      - deploy2&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
&lt;br /&gt;
    services:&lt;br /&gt;
      postgres:&lt;br /&gt;
        image: postgres:14.9&lt;br /&gt;
        env:&lt;br /&gt;
          POSTGRES_USER: decide&lt;br /&gt;
          POSTGRES_PASSWORD: decide&lt;br /&gt;
          POSTGRES_DB: decide&lt;br /&gt;
        ports:&lt;br /&gt;
          - 5432:5432&lt;br /&gt;
        # needed because the postgres container does not provide a healthcheck&lt;br /&gt;
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5&lt;br /&gt;
&lt;br /&gt;
    steps:&lt;br /&gt;
    - uses: actions/checkout@v3&lt;br /&gt;
    - name: Set up Python 3.10.12&lt;br /&gt;
      uses: actions/setup-python@v4&lt;br /&gt;
      with:&lt;br /&gt;
        python-version: 3.10.12&lt;br /&gt;
    - name: psycopg2 prerequisites&lt;br /&gt;
      run: sudo apt-get install libpq-dev&lt;br /&gt;
    - name: Install dependencies and config&lt;br /&gt;
      run: |&lt;br /&gt;
        python -m pip install --upgrade pip&lt;br /&gt;
        pip install -r requirements.txt&lt;br /&gt;
        pip install codacy-coverage&lt;br /&gt;
        cp decide/local_settings.gactions.py decide/local_settings.py&lt;br /&gt;
    - name: Run migrations (unnecessary)&lt;br /&gt;
      run: |&lt;br /&gt;
        cd decide&lt;br /&gt;
        python manage.py migrate&lt;br /&gt;
    - name: Run tests&lt;br /&gt;
      run: |&lt;br /&gt;
        cd decide&lt;br /&gt;
        ./manage.py test  --keepdb &lt;br /&gt;
  &lt;br /&gt;
  deploy:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    needs: build&lt;br /&gt;
    steps:&lt;br /&gt;
    - name: Deploy&lt;br /&gt;
      if: github.ref == 'refs/heads/deploy2'&lt;br /&gt;
      env:&lt;br /&gt;
        deploy_url: ${{secrets.RENDER_DEPLOY_HOOK_URL}}&lt;br /&gt;
      run: |&lt;br /&gt;
        curl &amp;quot;$deploy_url&amp;quot; &lt;br /&gt;
‎&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Brgutierrez</name></author>	</entry>

	</feed>