Skip to content
Snippets Groups Projects
0_setup.py 2.79 KiB
Newer Older
#!/usr/bin/env python3
Stéphane Diemer's avatar
Stéphane Diemer committed
# -*- coding: utf-8 -*-
import os
Stéphane Diemer's avatar
Stéphane Diemer committed

import utils


def setup(interactive=True):
    cmds = [
Stéphane Diemer's avatar
Stéphane Diemer committed
        'apt-get remove -y apache2',
        'apt-get install -y nginx',
Stéphane Diemer's avatar
Stéphane Diemer committed
        'rm -f /etc/nginx/sites-enabled/default',
        'rm -f /etc/nginx/sites-enabled/default.conf',
Stéphane Diemer's avatar
Stéphane Diemer committed
    ]
    hosts = list()
    need_uwsgi = False
    # MediaServer vhost (mediaserver-msuser)
Stéphane Diemer's avatar
Stéphane Diemer committed
    if os.path.exists('/home/msuser/msinstance'):
        hosts.append(utils.get_conf('MS_SERVER_NAME') or 'mediaserver')
Stéphane Diemer's avatar
Stéphane Diemer committed
    if os.path.exists('/home/msmonitor/msmonitor'):
        hosts.append(utils.get_conf('MONITOR_SERVER_NAME') or 'msmonitor')
Stéphane Diemer's avatar
Stéphane Diemer committed
    if os.path.exists('/home/skyreach/htdocs'):
        hosts.append(utils.get_conf('CM_SERVER_NAME') or 'campusmanager')
    # TODO: get domains by parsing files in sites-enabled
    if need_uwsgi:
        cmds.append('apt-get install -y uwsgi uwsgi-plugin-python3')
Stéphane Diemer's avatar
Stéphane Diemer committed
    utils.run_commands(cmds)
    # Update hosts file
    if hosts:
        utils.add_hosts_to_localhost(hosts)
    ssl_conf = '/etc/nginx/conf.d/ssl.conf'
    if os.path.exists(ssl_conf):
        utils.run_commands([
            'grep ssl_certificate /etc/nginx/conf.d/ssl.conf > /etc/nginx/conf.d/ssl_certificate.conf',
            'mv /etc/nginx/conf.d/ssl.conf /etc/nginx/conf.d/ssl.conf.old',
        ])
    # Update certificate in ssl_certificate.conf
    ssl_conf = '/etc/nginx/conf.d/ssl_certificate.conf'
    if not os.path.exists(ssl_conf):
        utils.log('The SSL configuration file "%s" does not exist, SSL certificate not updated.' % ssl_conf)
    else:
        default_cert = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
        ssl_cert = utils.get_conf('SSL_CERTIFICATE') or default_cert
        ssl_key = utils.get_conf('SSL_CERTIFICATE_KEY') or '/etc/ssl/private/ssl-cert-snakeoil.key'
        if ssl_cert == default_cert:
            utils.log('The configuration uses the default certificate, no modification will be made in "%s".' % ssl_conf)
            with open(ssl_conf, 'r') as fo:
                content = fo.read()
            new_content = content
            new_content = re.sub(r'ssl_certificate\s+([\w/\-\_\.]+);', 'ssl_certificate %s;' % ssl_cert, new_content)
            new_content = re.sub(r'ssl_certificate_key\s+([\w/\-\_\.]+);', 'ssl_certificate_key %s;' % ssl_key, new_content)
            if new_content != content:
                with open(ssl_conf, 'w') as fo:
                    fo.write(new_content)
                utils.log('SSL configuration file "%s" updated.' % ssl_conf)
                utils.log('SSL configuration file "%s" already up to date.' % ssl_conf)
    utils.run_commands(['nginx -t', 'service nginx restart'])