This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/master by this push:
new d2a44ef52e django portal deploy
d2a44ef52e is described below
commit d2a44ef52eb7e2cd9f9688e7cc9056e783cc601c
Author: lahiruj <[email protected]>
AuthorDate: Thu Jul 10 23:45:06 2025 -0400
django portal deploy
---
dev-tools/deployment-scripts/deploy_portal.sh | 142 ++++++++++++++++++++++++++
1 file changed, 142 insertions(+)
diff --git a/dev-tools/deployment-scripts/deploy_portal.sh
b/dev-tools/deployment-scripts/deploy_portal.sh
new file mode 100644
index 0000000000..fdf2459978
--- /dev/null
+++ b/dev-tools/deployment-scripts/deploy_portal.sh
@@ -0,0 +1,142 @@
+#!/bin/bash
+set -e
+
+if [ "$#" -ne 2 ]; then
+ echo "Usage: $0 <portal_name> <domain_name>"
+ exit 1
+fi
+
+PORTAL_NAME=$1
+DOMAIN_NAME=$2
+
+PORTALS_BASE_DIR="/var/www/portals"
+APACHE_USER="pga"
+APACHE_GROUP="pga"
+PYTHON_EXECUTABLE="python3.9"
+
+PROJECT_ROOT="${PORTALS_BASE_DIR}/django-${PORTAL_NAME}"
+VENV_PATH="${PROJECT_ROOT}/venv"
+SETTINGS_LOCAL_SRC="./settings_local_${PORTAL_NAME}.py"
+
+# Assumes python3.9 and certbot are already installed
+echo ">>> Installing essential build tools..."
+sudo apt-get update
+sudo apt-get install -y python3-pip git apache2 gcc apache2-dev
libmysqlclient-dev npm
+
+echo ">>> Setting up project directory..."
+if [ ! -d "${PROJECT_ROOT}" ]; then
+ sudo mkdir -p ${PROJECT_ROOT}
+fi
+TMP_CLONE_DIR=$(mktemp -d)
+git clone https://github.com/apache/airavata-django-portal.git ${TMP_CLONE_DIR}
+sudo rsync -av --delete ${TMP_CLONE_DIR}/
${PROJECT_ROOT}/airavata-django-portal/
+rm -rf ${TMP_CLONE_DIR}
+
+echo ">>> Creating Python 3.9 virtual environment..."
+if [ ! -d "${VENV_PATH}" ]; then
+ sudo ${PYTHON_EXECUTABLE} -m venv ${VENV_PATH}
+fi
+
+echo ">>> Installing Python dependencies..."
+sudo ${VENV_PATH}/bin/pip install --upgrade pip setuptools wheel
+sudo bash -c "cd ${PROJECT_ROOT}/airavata-django-portal &&
${VENV_PATH}/bin/pip install -r requirements.txt"
+sudo ${VENV_PATH}/bin/pip install mod_wsgi mysqlclient==2.2.0
+
+echo ">>> Building frontend assets..."
+cd ${PROJECT_ROOT}/airavata-django-portal
+sudo bash -c 'export NVM_DIR="/root/.nvm"; [ -s "$NVM_DIR/nvm.sh" ] && \.
"$NVM_DIR/nvm.sh" ; nvm install 19 && npm install -g yarn && ./build_js.sh'
+cd -
+
+echo ">>> Configuring Django..."
+if [ ! -f "$SETTINGS_LOCAL_SRC" ]; then
+ echo "ERROR: Local settings file ${SETTINGS_LOCAL_SRC} not found!"
+ exit 1
+fi
+sudo cp ${SETTINGS_LOCAL_SRC}
${PROJECT_ROOT}/airavata-django-portal/django_airavata/settings_local.py
+sudo ${VENV_PATH}/bin/python ${PROJECT_ROOT}/airavata-django-portal/manage.py
migrate --noinput
+sudo ${VENV_PATH}/bin/python ${PROJECT_ROOT}/airavata-django-portal/manage.py
collectstatic --noinput
+
+echo ">>> Configuring Apache..."
+VHOST_CONF="/etc/apache2/sites-available/${PORTAL_NAME}.conf"
+
+sudo bash -c "cat > ${VHOST_CONF}" <<EOF
+<VirtualHost *:80>
+ ServerName ${DOMAIN_NAME}
+
+ ## Redirect all http traffic to https
+ RewriteEngine On
+ RewriteCond %{HTTPS} off
+ RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
+</VirtualHost>
+
+<VirtualHost *:443>
+ ServerName ${DOMAIN_NAME}
+ TimeOut 300
+
+ # Redirect root to /admin
+ RedirectMatch ^/$ /admin
+
+ Alias /robots.txt ${PROJECT_ROOT}/static/robots.txt
+ Alias /favicon.ico ${PROJECT_ROOT}/static/favicon.ico
+
+ Alias /static/ ${PROJECT_ROOT}/static/
+ <Directory ${PROJECT_ROOT}/static>
+ Require all granted
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
text/javascript application/javascript image/svg+xml
+ Header set Cache-Control "no-cache"
+ RequestHeader edit "If-None-Match" "^\"((.*)-gzip)\"$" "\"\\\$1\",
\"\\\$2\""
+ <FilesMatch "\.[0-9a-f]{8}\.(css|js|svg)$">
+ Header set Cache-Control "max-age=31536000, public"
+ </FilesMatch>
+ </Directory>
+
+ Alias /media/ ${PROJECT_ROOT}/airavata-django-portal/django_airavata/media/
+ <Directory ${PROJECT_ROOT}/airavata-django-portal/django_airavata/media>
+ Require all granted
+ </Directory>
+
+ WSGIDaemonProcess ${DOMAIN_NAME} \\
+ display-name=%{GROUP} \\
+ python-home=${VENV_PATH} \\
+
python-path=${PROJECT_ROOT}/airavata-django-portal:${VENV_PATH}/lib/python3.9/site-packages
\\
+ processes=1 \\
+ user=${APACHE_USER} \\
+ group=${APACHE_GROUP} \\
+ lang=en_US.UTF-8 \\
+ locale=en_US.UTF-8
+ WSGIProcessGroup ${DOMAIN_NAME}
+
+ WSGIScriptAlias /
${PROJECT_ROOT}/airavata-django-portal/django_airavata/wsgi.py
+ WSGIPassAuthorization On
+
+ <Directory ${PROJECT_ROOT}/airavata-django-portal/django_airavata>
+ <Files wsgi.py>
+ Require all granted
+ </Files>
+ </Directory>
+
+ ErrorLog /var/log/apache2/${PORTAL_NAME}.error.log
+ CustomLog /var/log/apache2/${PORTAL_NAME}.requests.log combined
+
+ SSLEngine on
+ SSLCertificateFile /etc/letsencrypt/live/${DOMAIN_NAME}/cert.pem
+ SSLCertificateChainFile /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem
+ SSLCertificateKeyFile /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem
+</VirtualHost>
+EOF
+
+echo ">>> Setting file permissions..."
+sudo chown -R ${APACHE_USER}:${APACHE_GROUP} ${PROJECT_ROOT}
+sudo chmod -R 775 ${PROJECT_ROOT}
+
+echo ">>> Enabling Site, running Certbot, and restarting..."
+sudo a2dissite 000-default.conf || true
+sudo a2enmod ssl rewrite headers
+sudo a2ensite ${PORTAL_NAME}.conf
+sudo systemctl restart apache2
+
+sudo certbot --apache -d ${DOMAIN_NAME} --non-interactive --agree-tos -m
[email protected] --redirect
+
+sudo systemctl restart apache2
+
+echo ">>> Deployment Complete."
\ No newline at end of file