Version 11 (modified by 13 years ago) ( diff ) | ,
---|
Table of Contents
Installation Guidelines: Linux (Production: Apache/MySQL)
Production Installs that are maintained by others are usually installed with Apache & MySQL.
- Apache is a well-supported & flexible web server which can run Sahana well through mod_WSGI
- MySQL is a well-supported database with an easy-to-use Admin UI (phpMyAdmin)
The simplest way to install is using our attached installation scripts.
This is split into 2 halves, as the 1st script can create a base image which is then customised per-instance using the configure script.
Note: We install using the latest Stable versions of both Web2Py & Eden. Problems can still occur, however.
Before Imaging
#!/bin/sh # Script to turn a generic Debian Squeeze box into an Eden server # with Apache & MySQL # Update system apt-get update apt-get upgrade -y # Install Admin Tools apt-get install -y unzip psmisc mlocate telnet lrzsz vim elinks-lite rcconf htop sudo # Email apt-get -y install exim4-config exim4-daemon-light ######## # MySQL ######## apt-get -y install mysql-server python-mysqldb phpmyadmin mytop ######### # Apache ######### apt-get -y install libapache2-mod-wsgi a2enmod rewrite a2enmod deflate a2enmod headers a2enmod expires # Enable Basic Authentication for WebServices sed -i 's|</IfModule>|WSGIPassAuthorization On|' /etc/apache2/mods-enabled/wsgi.conf echo "</IfModule>" >> /etc/apache2/mods-enabled/wsgi.conf apache2ctl restart # Holding Page for Maintenance windows cat << EOF > "/var/www/maintenance.html" <html><body><h1>Site Maintenance</h1>Please try again later...</body></html> EOF ######### # Python ######### # Install Libraries apt-get -y install libgeos-c1 # Install Python 2.6 apt-get -y install python2.6 python-dev ipython apt-get -y install python-lxml python-setuptools python-shapely python-dateutil apt-get -y install python-serial apt-get -y install python-imaging python-reportlab apt-get -y install python-xlwt python-xlrd apt-get -y install bzr ######### # Web2Py ######### # Install Web2Py adduser --system --disabled-password web2py addgroup web2py cd /home wget http://www.web2py.com/examples/static/web2py_src.zip unzip web2py_src.zip ln -s /home/web2py ~ cat << EOF > "/home/web2py/routes.py" #!/usr/bin/python default_application = 'eden' default_controller = 'default' default_function = 'index' routes_onerror = [ ('eden/400', '!'), ('eden/401', '!'), ('eden/*', '/eden/errors/index'), ('*/*', '/eden/errors/index'), ] EOF ############## # Sahana Eden ############## # Install Sahana Eden cd web2py cd applications bzr branch lp:sahana-eden/stable eden # Fix permissions chown web2py ~web2py chown web2py ~web2py/applications/admin/cache chown web2py ~web2py/applications/admin/cron chown web2py ~web2py/applications/admin/databases chown web2py ~web2py/applications/admin/errors chown web2py ~web2py/applications/admin/sessions chown web2py ~web2py/applications/eden chown web2py ~web2py/applications/eden/cache chown web2py ~web2py/applications/eden/cron chown web2py ~web2py/applications/eden/databases chown web2py ~web2py/applications/eden/errors chown web2py ~web2py/applications/eden/models chown web2py ~web2py/applications/eden/sessions chown web2py ~web2py/applications/eden/static/img/markers chown web2py ~web2py/applications/eden/uploads mkdir -p ~web2py/applications/eden/uploads/gis_cache mkdir -p ~web2py/applications/eden/uploads/images mkdir -p ~web2py/applications/eden/uploads/tracks chown web2py ~web2py/applications/eden/uploads/gis_cache chown web2py ~web2py/applications/eden/uploads/images chown web2py ~web2py/applications/eden/uploads/tracks ln -s /home/web2py/applications/eden ~ ##################### # Management scripts ##################### cat << EOF > "/usr/local/bin/backup" #!/bin/sh NOW=$(date +"%Y-%m-%d") mysqldump sahana > /root/backup-$NOW.sql OLD=$(date --date='7 day ago' +"%Y-%m-%d") rm -f /root/backup-$OLD.sql EOF chmod +x /usr/local/bin/backup cat << EOF > "/usr/local/bin/compile" #!/bin/sh cd ~web2py python web2py.py -S eden -R applications/eden/static/scripts/tools/compile.py apache2ctl restart EOF chmod +x /usr/local/bin/compile cat << EOF > "/usr/local/bin/maintenance" #!/bin/sh if [ "" != "off" ] then a2dissite maintenance a2ensite production cd ~web2py && sudo -H -u web2py python web2py.py -K eden -Q >/dev/null 2>&1 & else killall -u web2py python a2ensite maintenance a2dissite production fi apache2ctl restart EOF chmod +x /usr/local/bin/maintenance cat << EOF > "/usr/local/bin/pull" #!/bin/sh cd ~web2py/applications/eden sed -i 's/deployment_settings.base.migrate = False/deployment_settings.base.migrate = True/g' models/000_config.py bzr pull /usr/local/bin/maintenance rm -rf compiled cd ~web2py sudo -H -u web2py python web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py cd ~web2py/applications/eden sed -i 's/deployment_settings.base.migrate = True/deployment_settings.base.migrate = False/g' models/000_config.py /usr/local/bin/compile /usr/local/bin/maintenance off EOF chmod +x /usr/local/bin/pull # Change the value of prepopulate, if-necessary cat << EOF > "/usr/local/bin/clean" #!/bin/sh /usr/local/bin/maintenance cd ~web2py/applications/eden rm -f databases/* rm -f errors/* rm -f sessions/* rm -f uploads/* sed -i 's/deployment_settings.base.migrate = False/deployment_settings.base.migrate = True/g' models/000_config.py sed -i 's/deployment_settings.base.prepopulate = 0/deployment_settings.base.prepopulate = 1/g' models/000_config.py rm -rf compiled mysqladmin -f drop sahana mysqladmin create sahana cd ~web2py sudo -H -u web2py python web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py cd ~web2py/applications/eden sed -i 's/deployment_settings.base.migrate = True/deployment_settings.base.migrate = False/g' models/000_config.py sed -i 's/deployment_settings.base.prepopulate = 1/deployment_settings.base.prepopulate = 0/g' models/000_config.py /usr/local/bin/maintenance off /usr/local/bin/compile EOF chmod +x /usr/local/bin/clean cat << EOF > "/usr/local/bin/w2p" #!/bin/sh cd ~web2py python web2py.py -S eden -M EOF chmod +x /usr/local/bin/w2p # END
After Imaging
configure-eden-apache-mysql.sh
#!/bin/sh # Script to configure an Eden server # - assumes that install-eden-apache-mysql.sh has been run BRANCH="~nursix.org/sahana-eden/stable" if [ "$BRANCH" != "~nursix.org/sahana-eden/stable" ]; then echo "parent_location = http://bazaar.launchpad.net/$BRANCH" > /home/web2py/applications/eden/.bzr/branch/branch.conf fi echo -e "What domain name should we use? : \c " read DOMAIN echo -e "What host name should we use? : \c " read hostname sitename=$hostname".$DOMAIN" echo -e "What is the current root MySQL password: \c " read rootpw # @ToDo: Generate a random password echo -e "What should be the MySQL password for user 'sahana': \c " read password echo "Now reconfiguring system" cd /etc filename="hosts" sed -i "s|localdomain localhost|localdomain localhost $hostname|" $filename cd /etc filename="hostname" echo $hostname > $filename cd /etc filename="mailname" echo $sitename > $filename # Update system (in case run at a much later time than the install script) apt-get update apt-get upgrade -y #cd ~web2py #bzr pull cd ~web2py/applications/eden bzr pull # ----------------------------------------------------------------------------- # MySQL Database # ----------------------------------------------------------------------------- echo "Setting up Database" # Allow root user to access database without entering password cat << EOF > "/root/.my.cnf" [client] user=root EOF echo "password='$rootpw'" >> "/root/.my.cnf" # Create database mysqladmin create sahana # Create user for Sahana application echo "CREATE USER 'sahana'@'localhost' IDENTIFIED BY '$password';" > "/tmp/mypass" echo "GRANT ALL PRIVILEGES ON *.* TO 'sahana'@'localhost' WITH GRANT OPTION;" >> "/tmp/mypass" mysql < /tmp/mypass rm -f /tmp/mypass # Schedule backups for 02:01 daily echo "1 2 * * * * root /usr/local/bin/backup" >> "/etc/crontab" # ----------------------------------------------------------------------------- # Email # ----------------------------------------------------------------------------- echo configure for Internet mail delivery dpkg-reconfigure exim4-config # ----------------------------------------------------------------------------- # Sahana Eden # ----------------------------------------------------------------------------- echo "Setting up Sahana" # Copy Templates cp ~web2py/applications/eden/deployment-templates/cron/crontab ~web2py/applications/eden/cron cp ~web2py/applications/eden/deployment-templates/models/000_config.py ~web2py/applications/eden/models sed -i 's|EDITING_CONFIG_FILE = False|EDITING_CONFIG_FILE = True|' ~web2py/applications/eden/models/000_config.py sed -i "s|akeytochange|$sitename$password|" ~web2py/applications/eden/models/000_config.py sed -i "s|127.0.0.1:8000|$sitename|" ~web2py/applications/eden/models/000_config.py sed -i 's|base.cdn = False|base.cdn = True|' ~web2py/applications/eden/models/000_config.py # Configure Database sed -i 's|deployment_settings.database.db_type = "sqlite"|deployment_settings.database.db_type = "mysql"|' ~web2py/applications/eden/models/000_config.py sed -i "s|deployment_settings.database.password = \"password\"|deployment_settings.database.password = \"$password\"|" ~web2py/applications/eden/models/000_config.py # Create the Tables & Populate with base data sed -i 's|deployment_settings.base.prepopulate = 0|deployment_settings.base.prepopulate = 1|' ~web2py/applications/eden/models/000_config.py sed -i 's|deployment_settings.base.migrate = False|deployment_settings.base.migrate = True|' ~web2py/applications/eden/models/000_config.py cd ~web2py sudo -H -u web2py python web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py # Configure for Production sed -i 's|deployment_settings.base.prepopulate = 1|deployment_settings.base.prepopulate = 0|' ~web2py/applications/eden/models/000_config.py sed -i 's|deployment_settings.base.migrate = True|deployment_settings.base.migrate = False|' ~web2py/applications/eden/models/000_config.py cd ~web2py sudo -H -u web2py python web2py.py -S eden -R applications/eden/static/scripts/tools/compile.py # Add Scheduler sed -i 's|exit 0|cd ~web2py \&\& python web2py.py -K eden -Q >/dev/null 2>\&1 \&|' /etc/rc.local echo "exit 0" >> /etc/rc.local #read -p "Press any key to Reboot..." echo "Now rebooting.." reboot # END
Note:
See TracWiki
for help on using the wiki.