diff --git a/contrib/scripts/install/production.sh b/contrib/scripts/install/production.sh new file mode 100644 index 0000000000..405e43ecb0 --- /dev/null +++ b/contrib/scripts/install/production.sh @@ -0,0 +1,171 @@ +#!/usr/bin/env bash + +# ====== CONFIG ====== +INSTALLATION_DIRECTORY=/usr/share/mayan-edms/ +DB_NAME=mayan_edms +DB_USERNAME=mayan +DB_PASSWORD=test123 +# ==== END CONFIG ==== + +cat << EOF | sudo tee -a /etc/motd.tail +********************************** + +Mayan EDMS Vagrant Production Box + +********************************** +EOF + +echo -e "\n -> Running apt-get update & upgrade \n" +sudo apt-get -qq update +sudo apt-get -y upgrade + +echo -e "\n -> Installing core binaries \n" +apt-get install nginx supervisor redis-server postgresql libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr unpaper poppler-utils -y + +echo -e "\n -> Setting up virtualenv \n" +rm -f ${INSTALLATION_DIRECTORY} +virtualenv ${INSTALLATION_DIRECTORY} +source ${INSTALLATION_DIRECTORY}bin/activate + +echo -e "\n -> Installing Mayan EDMS from PyPI \n" +pip install mayan-edms + +echo -e "\n -> Installing Python client for PostgreSQL, Redis, and uWSGI \n" +pip install psycopg2 redis uwsgi + +echo -e "\n -> Creating the database for the installation \n" +echo "CREATE USER mayan WITH PASSWORD '$DB_PASSWORD';" | sudo -u postgres psql +sudo -u postgres createdb -O $DB_USERNAME $DB_NAME + +echo -e "\n -> Creating the directories for the logs \n" +mkdir /var/log/mayan + +echo -e "\n -> Making a convenience symlink \n" +cd ${INSTALLATION_DIRECTORY} +ln -s lib/python2.7/site-packages/mayan . + +echo -e "\n -> Creating an initial settings file \n" +mayan-edms.py createsettings + +echo -e "\n -> Updating the mayan/settings/local.py file \n" +cat >> mayan/settings/local.py << EOF +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': '$DB_NAME', + 'USER': '$DB_USERNAME', + 'PASSWORD': '$DB_PASSWORD', + 'HOST': 'localhost', + 'PORT': '5432', + } +} + +BROKER_URL = 'redis://127.0.0.1:6379/0' +CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' +EOF + +echo -e "\n -> Migrating the database or initialize the project \n" +mayan-edms.py initialsetup + +echo -e "\n -> Disabling the default NGINX site \n" +rm -f /etc/nginx/sites-enabled/default + +echo -e "\n -> Creating a uwsgi.ini file \n" +cat > uwsgi.ini << EOF +[uwsgi] +chdir = ${INSTALLATION_DIRECTORY}lib/python2.7/site-packages/mayan +chmod-socket = 664 +chown-socket = www-data:www-data +env = DJANGO_SETTINGS_MODULE=mayan.settings.production +gid = www-data +logto = /var/log/uwsgi/%n.log +pythonpath = ${INSTALLATION_DIRECTORY}lib/python2.7/site-packages +master = True +max-requests = 5000 +socket = ${INSTALLATION_DIRECTORY}uwsgi.sock +uid = www-data +vacuum = True +wsgi-file = ${INSTALLATION_DIRECTORY}lib/python2.7/site-packages/mayan/wsgi.py +EOF + +echo -e "\n -> Creating the directory for the uWSGI log files \n" +mkdir -p /var/log/uwsgi + +echo -e "\n -> Creating the NGINX site file for Mayan EDMS, /etc/nginx/sites-available/mayan \n" +cat > /etc/nginx/sites-available/mayan << EOF +server { + listen 80; + server_name localhost; + + location / { + include uwsgi_params; + uwsgi_pass unix:${INSTALLATION_DIRECTORY}uwsgi.sock; + + client_max_body_size 30M; # Increse if your plan to upload bigger documents + proxy_read_timeout 30s; # Increase if your document uploads take more than 30 seconds + } + + location /static { + alias ${INSTALLATION_DIRECTORY}mayan/media/static; + expires 1h; + } + + location /favicon.ico { + alias ${INSTALLATION_DIRECTORY}mayan/media/static/appearance/images/favicon.ico; + expires 1h; + } +} +EOF + +echo -e "\n -> Enabling the NGINX site for Mayan EDMS \n" +ln -s /etc/nginx/sites-available/mayan /etc/nginx/sites-enabled/ + +echo -e "\n -> Creating the supervisor file for the uWSGI process, /etc/supervisor/conf.d/mayan-uwsgi.conf \n" +cat > /etc/supervisor/conf.d/mayan-uwsgi.conf << EOF +[program:mayan-uwsgi] +command = ${INSTALLATION_DIRECTORY}bin/uwsgi --ini ${INSTALLATION_DIRECTORY}uwsgi.ini +user = root +autostart = true +autorestart = true +redirect_stderr = true +EOF + +echo -e "\n -> Creating the supervisor file for the Celery worker, /etc/supervisor/conf.d/mayan-celery.conf \n" +cat > /etc/supervisor/conf.d/mayan-celery.conf << EOF +[program:mayan-worker] +command = ${INSTALLATION_DIRECTORY}bin/python ${INSTALLATION_DIRECTORY}bin/mayan-edms.py celery --settings=mayan.settings.production worker -Ofair -l ERROR +directory = ${INSTALLATION_DIRECTORY} +user = www-data +stdout_logfile = /var/log/mayan/worker-stdout.log +stderr_logfile = /var/log/mayan/worker-stderr.log +autostart = true +autorestart = true +startsecs = 10 +stopwaitsecs = 10 +killasgroup = true +priority = 998 + +[program:mayan-beat] +command = ${INSTALLATION_DIRECTORY}bin/python ${INSTALLATION_DIRECTORY}bin/mayan-edms.py celery --settings=mayan.settings.production beat -l ERROR +directory = ${INSTALLATION_DIRECTORY} +user = www-data +numprocs = 1 +stdout_logfile = /var/log/mayan/beat-stdout.log +stderr_logfile = /var/log/mayan/beat-stderr.log +autostart = true +autorestart = true +startsecs = 10 +stopwaitsecs = 1 +killasgroup = true +priority = 998 +EOF + +echo -e "\n -> Collecting the static files \n" +mayan-edms.py collectstatic --noinput + +echo -e "\n -> Making the installation directory readable and writable by the webserver user \n" +chown www-data:www-data ${INSTALLATION_DIRECTORY} -R + +echo -e "\n -> Restarting the services \n" +/etc/init.d/nginx restart +/etc/init.d/supervisor restart