pytition / Pytition

Django app for self-hosted privacy-friendly online petitions
https://pytition.org
BSD 3-Clause "New" or "Revised" License
100 stars 28 forks source link

Install on gandi simple hosting #217

Open JLuc opened 4 years ago

JLuc commented 4 years ago

I opened an instance of gandi python simple hosting platform.

Le dossier racine du site par défaut est /srv/data/web/vhosts/default. Il n'y a donc pas de www comme dans la doc d'install, mais je suppose que default est l'équivalent de www. Il y a d'autre différences qui ont nécessité de petites adaptations

À cette étape, ç'a a l'air un peu en place puisque django-admin --version renvoie : 2.2.11

Après c'est plus coton. Il n'y a pas de fichier settings.py à l'endroit indiqué par la doc d'install, et je n'en connais pas le format. Une recherche sur internet me donne des pistes. La doc pourrait elle donner un fichier settings.py exemple ? Est ce normal qu'il n'existe pas au début ? Je copie plus loin le fichier auquel j'aboutis après quelques recherches.

J'ai alors galéré à essayer de trouver comment le faire prendre en compte pour django-admin car il y avait le message en rouge : Note that only Django core commands are listed as settings are not properly configured (error: No module named 'pytition').. J'ai notamment essayé avec DJANGO_SETTINGS_MODULE='/srv/data/web/vhosts/default/pytition/pytition/pytition/settings.py' et idem sans py, mais ça donné : Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).

Puis j'ai vu qu'il était correctement positionné à l'intérieur même du code de manage.py alors j'ai laissé tomber le pb de django-admin.

Donc je fais python3 manage.py migrate, et j'ai l'erreur _mysql_exceptions.OperationalError: (1045, "Access denied for user 'hosting-user'@'localhost' (using password: NO)") qui semble indiquer que le fichier de settings n'est pas pris en compte.

Que faut il faire ?

mon my.cnf

[client]
database = "pytitionbdd"
user = "xxxxxxx"
password = "pytitionmdp"
default-character-set = utf8

Rq : j'ai au préalable créé la base de donnée.

mon settings.py :

"""
Django settings - créé par JLuc 
...
"""
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
SECRET_KEY = 'uneclesecrete'
ALLOWED_HOSTS = ['mywebsite.ext']
DATABASES = DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/srv/data/web/vhosts/default/pytition/my.cnf',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}
STATIC_ROOT = '/srv/data/web/vhosts/default/static'
fallen commented 4 years ago

Salut, si tu utilises la version 2.0 de pytition (ou bien la tête de la branche master) il faut éditer le fichier base.py. C'est lui qui contient la config (l'équivalent de settings.py dans la plupart des projets Django). Il est là : https://github.com/pytition/Pytition/blob/master/pytition/pytition/settings/base.py Donc dans pytition/pytition/settings/base.py

fallen commented 4 years ago

Je viens de voir que la doc n'était pas à jour, je l'ai mise à jour, merci :)

numahell commented 4 years ago

Après nos discussions sur le ticket #167 , j'ai testé aussi Simple hosting, mais avec un autre projet et en utilisant postgreSQL. J'ai rédigé ce tutoriel, qui doit pouvoir être adapté pour du MySQL aussi.

Je voulais mettre un deuxième site, mais apparemment on ne peut avoir qu'un seul dépôt git pour une instance python.

fallen commented 4 years ago

Salut @numahell et @JLuc . Je suis en train de "proprifier" la manière de gérer la config de pytition. Du coup, sur les derniers commits de la branche master, il faut maintenant copier config_example.py en config.py (ou autre nom) et éditer la config à l'intérieur. Les valeurs "par défaut" sont toujours dans base.py qui est importé au début du config_example.py. Ca a l'avantage que maintenant on ne modifie plus un des fichiers distribué par Pytition. Donc typiquement si on a déployé son instance à partir d'un git clone du dépot, on n'a plus de modification locale d'un fichier versionné par git. Donc on peut plus facilement mettre à jour via git pull.

Ca rajoute en revanche la contrainte de devoir exporter la variable d'environnement suivante : DJANGO_SETTINGS_MODULE=pytition.settings.config (ou .le_nom_de_ma_config) dans son Apache/nginx/uwsgi.

Ca me parait plus propre comme ça mais ça peut encore évoluer :) Aussi, je suis en train de rédiger la documentation d'installation et de configuration, c'est encore lacunaire et basique mais ça ressemble à ça : https://pytition.readthedocs.io/en/latest/

Voilà :)

numahell commented 4 years ago

Je pense que c'est une bonne pratique d'avoir un fichier de settings local à part et non commité, ça évite les erreurs. Je rajouterais config.py dans le fichier .gitignore pour éviter de commiter le mot de passe de la base de données. Au moment du déploiement, on le transfère manuellement vers le serveur via ssh ou ftp.

De toutes manières, quoiqu'on fasse il faut indiquer quelque part dans quelle configuration on se trouve : dev, test, prod… donc l'indiquer au niveau du wsgi.py est tout à fait valable.

numahell commented 4 years ago

Sinon il y a local_settings.py dans le .gitignore déjà, à voir comment appeler le fichier de config local ^^