Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Nas synology hébergé une application python/flask sur le port 80

+2 votes

J'ai réalisé mon application web avec python et flask et j'aurai aimer pouvoir l'héberger sur mon nas syno sur le port 80.

Mais voilà, après pas mal de recherches je n'ai tjr pas réussi...
Je peut en effet l'héberger sur un autre port par exemple 9000, mais le but est de pouvoir l'hébergé sur le port 80 pour que le nom de domaine puisse pointer directement sur le site.

Donc est-ce possible d’héberger mes apps python/flask sur un nas sur le port 80 de n'importe quel manière, cgi, fastcgi, mod_wsgi, la version de dsm est la 6.0 ?

demandé 1-Dec-2016 par trockler
edité 1-Dec-2016 par max

1 Réponse

+2 votes
 
Meilleure réponse

Voilà, j'ai enfin trouvé... Et comme beaucoup de personnes se demande comment faire.

Deux solutions

Solutions 1:

  • Installer chroot debian dans les packets community du syno
  • Désactiver apache sur dsm ( Photo station ne fonctionnera plus mais vous pouvez réactiver apache par la suite donc ce n'est pas perdu "Attention il y a deux serveurs apache qui tourne simultanément sur le dsm et qui écoute le port 80 par défaut si webstation est désactiver le deuxieme apache écoute pour rediriger sur le port 5000 du syno...") à vous de les stopper pour que le serveur apache de debian puisse écouter sur le port 80 par défaut. "je ne sais plus exactement comment j'ai fait mais google c'est votre pote"
  • /var/packages/debian-chroot/scripts/start-stop-status start
  • /var/packages/debian-chroot/scripts/start-stop-status chroot
  • apt update && apt upgrade
  • apt-get install apache2 libapache2-mod-wsgi
  • Ensuite vous installez mysql où mariadb "server et client"

Pour apache2 vérifier que vous disposez soit du modpython, modwsgi, mod_cgi

La doc flask: http://flask.pocoo.org/docs/0.11/deploying/mod_wsgi/
Référer vous à la doc pour modifier apache sur le debian et créer votre fichier .wsgi, .fastcgi...

Voilà vous pouvez coder vos applications avec divers framework python! Vous pouvez également installer virtualenv, pip etc...

Solution 2:
Pas besoin de chroot debian... juste sur dsm

  • Activez les packages python où python3
  • Ativez la connexion ssh dans le syno port 22
  • Dans votre terminal: "ssh monutilisateur@ipsyno et ensuite entrez votre mot de passe"
  • Vous prenez les droits: "root "sudo -i"
  • Installer virtualenv: "easy_install virtualenv"
  • Monter votre environnement virtuel exemple: "virtualenv --no-site-packages -p /usr/bin/python2.7 flaskweb
  • source bin/activate
  • pip install flask
  • pip freeze > requirements.txt "pas obligatoire"
  • utiliser un port différents de 80 par exemple 9000
  • Dans dsm créer un virtualhost par exemple : "flask"
  • Créer le dossier "flask" dans votre répertoire www
  • Créer un fichier index.php au niveau de la racine
  • Dans ce fichier index.php ecriver juste:

    <?php header('Location: http://votreaddr:9000') ?>

Votre applications sera hébergé sur le port 9000 mais quand une personne se connectera sur votre nom de domaine 'port 80', elle sera rediriger sur votre nom de domaine 'port 9000'

Au niveau du fichier flask exemple:

#! /usr/bin/python2.7
# -*- coding:utf-8 -*-

import os
from flask import Flask

app = Flask(__name__)

app.config.from_object(__name__)
app.config.update(dict(
    DEBUG = False,
    THREADED = True,
    SECRET_KEY = os.urandom(24)
))

@app.route('/')
def page_index():
    return "<h1>Hello</h1>"

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=9000)

J'avoue ce n'est pas super propre mais je n'ai pas trouvé mieux... c'est même très très moche car on utilise le serveur interne de python qui n'est pas prévus pour faire de la production...
Favoriser le chroot debian.

Pour la première méthode c'est hyper casse tête de tout stopper sur le port 80 du syno, c'est le truc réellement difficile...

Mais bon, on peut donc hébergé une application python /flask /bottle /django sa fonctionne des deux manières! pour le chroot debian sur le port 80 :) c'est cool car on ne casse pas tout sur le syno, on peut donc stopper le serveur du chroot debian pour relancer celui du syno.

!!!!! IMPORTANT: avant le chroot, activer bien la connexion ssh et telnet pour être certain de gardez accès aux syno et de pouvoir start apache.

répondu 2-Dec-2016 par trockler

Cool, merci d'avoir donné la soluce, si tu pouvais cliquer sur la coche en dessous de ta réponse pour la marquer comme "acceptée", comme ça ça servira aux autres.
Merci.

Coucou max, sorry c'est la première fois que je fesais un question/réponse sur indexerror, je ne vois pas la coche en dessous de la réponse :s

là :)

enter image description here

Mdr le plan, ça ne peut pas être plus clair ! En tout cas merci d'avoir partagé la solution c'est cool

Remise au goût du jour d'un exemple pas très bon de 2016.
Voiçi la meilleur méthode pour créés des applications web python sur un nas synology.

  • Activez le package python 3 et la webstation
  • Dans webstation > paramètres généraux > serveur principal http activer nginx
  • Dans panneau de configuration > réseau > paramètres DSM > activer un domaine personnalisé: "test" ( ce qui nous permettra d'accéder au nas en entrant test.local et nous simplifiera la tâche par la suite.)
  • Activez la connexion ssh dans "panneau de configuration > terminal et smtp
  • On utilise le service ddns de synology pour avoir un accès externe dans notre cas "test.synology.me"
  • Dans panneau de configuration > sécurité > certificat: on génére notre certificat ssl avec let's encrypt
  • Connectez-vous au nas en ssh
  • Prenez les droits root sudo -i
  • Installer virtualenv: easy_install virtualenv
  • On monte notre environement virtuel: virtualenv -p python3 flasktest
  • On installe flask et gunicorn: pip install flask gunicorn
  • On crée notre application web, fichier: init.py
  • On lance notre application web avec gunicorn: gunicorn --certfile /usr/syno/etc/certificate/system/default/cert.pem --keyfile /usr/syno/etc/certificate/system/default/privkey.pem -b 127.0.0.1:5000 app:app
  • Dans /etc/nginx/sites-enabled on crée un fichier de configuration serveur, on va utiliser nginx comme proxy, dans notre cas le fichier sera flasktest.conf

fichier flasktest.conf:

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    gzip on;

    server_name test.synology.me;

    location / {
        proxy_pass https://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_log /volume1/projects/flasktest/logs/error.log; 
    access_log /volume1/projects/flasktest/logs/acess.log; 
}
  • On ouvre le port panneau de configuration > accès externe > configuration routeur > créer > application intégrer > activer la check case pour webstation et appliquer

  • On vérifie notre fichier serveur pour ça on entre la commande, nginx -t

  • On redémarre nginx synoservicecfg --restart nginx

Vous avez accès désormais à vos applications web en python depuis l'extérieur en https **https://test.synology.me**

un petit peu plus d'informations...
Pour terminer et accéder à votre application de manière permanente si jamais le nas viendrai à redémarrer, crasher... vous pouvez créer un script qui relancera gunicorn car sinon la webstation prend le relais d'ailleurs si vous entrez ip du nas en local vous ne verrez pas votre apps web en python car nous n'avons pas modifier le fichier de configuration principal /etc/nginx/nginx.conf en local c'est donc la page index.html par defaut de la webstation qui sera affiché.

exemple:

cd /volume1/projects/flasktest
source bin/activate
gunicorn --certfile /usr/syno/etc/certificate/system/default/cert.pem --keyfile /usr/syno/etc/certificate/system/default/privkey.pem -b 127.0.0.1:5000 app:app
</dev/null 2>&1 &

De plus, vous pouvez ajouter un superviseur par exemple supervisor pour surveiller et contrôler le processus gunicorn.

Voila ce que nous avons en totalité
Flask: Serveur backend
Nginx: proxy inverse
Gunicorn: déployer l'application
Supervisor: Surveiller et contrôler le processus gunicorn

Voiçi la meilleur méthodologie pour créer des applications web en python sur un nas synology...

Vous voulez lancer votre apps sur le port 80 sans que la webstation puisse prendre le relais si gunicorn crash? pas de soucis modifier le fichier /etc/nginx/nginx.conf, faite attention à ne pas tout péter :) ;)

Voilà à vous de complétez le fichier de configuration et le reste, supervisor etc... :)

...