150 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
# This script automates the setup of Qortal with nginx proxy, SSL configuration, and other system settings.
 | 
						|
 | 
						|
# Define functions for installing packages and handling user input
 | 
						|
install_packages() {
 | 
						|
    sudo apt update 
 | 
						|
    sudo apt install -y nginx certbot python3-certbot-nginx curl git default-jdk
 | 
						|
}
 | 
						|
 | 
						|
setup_qortal() {
 | 
						|
    # Clone Qortal repository and run the setup script
 | 
						|
    curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/refs/heads/main/generic-linux-setup.sh
 | 
						|
    chmod +x generic-linux-setup.sh
 | 
						|
    ./generic-linux-setup.sh
 | 
						|
}
 | 
						|
 | 
						|
configure_nginx() {
 | 
						|
    read -p "Enter the domain name for nginx configuration: " DOMAIN
 | 
						|
    read -p "Do you have an existing SSL certificate? (yes/no): " SSL_CERT_CHOICE
 | 
						|
    if [[ $SSL_CERT_CHOICE == "yes" ]]; then
 | 
						|
        read -p "Enter the SSL certificate path: " CERT_PATH
 | 
						|
        read -p "Enter the SSL certificate key path: " CERT_KEY_PATH
 | 
						|
    else
 | 
						|
        echo "Setting up SSL certificate using Certbot. Ensure ports 80 and 443 are open."
 | 
						|
        sudo certbot --nginx -d "$DOMAIN"
 | 
						|
        CERT_PATH="/etc/letsencrypt/live/$DOMAIN/fullchain.pem"
 | 
						|
        CERT_KEY_PATH="/etc/letsencrypt/live/$DOMAIN/privkey.pem"
 | 
						|
    fi
 | 
						|
 | 
						|
    LAN_IP=$(hostname -I | awk '{print $1}')
 | 
						|
 | 
						|
    # Backup existing nginx config files
 | 
						|
    cd
 | 
						|
    mkdir -p nginx-config-backup
 | 
						|
    sudo rsync -raPz /etc/nginx/sites-enabled/* nginx-config-backup/
 | 
						|
    sudo rm -rf /etc/nginx/sites-enabled/*
 | 
						|
 | 
						|
    # Create nginx configuration
 | 
						|
    cat <<EOF > "qortal-gateway-node"
 | 
						|
server {
 | 
						|
    listen 80 default_server;
 | 
						|
    server_name _;
 | 
						|
    
 | 
						|
    return 301 https://\$host\$request_uri;
 | 
						|
}
 | 
						|
    
 | 
						|
server {
 | 
						|
    listen 443 ssl;
 | 
						|
    server_name $DOMAIN;
 | 
						|
    ssl_certificate $CERT_PATH;
 | 
						|
    ssl_certificate_key $CERT_KEY_PATH;
 | 
						|
    ssl_prefer_server_ciphers on;
 | 
						|
 | 
						|
    location / {
 | 
						|
        proxy_pass http://$LAN_IP:8080;
 | 
						|
 | 
						|
        proxy_set_header Host \$host;
 | 
						|
        proxy_set_header X-Real-IP \$remote_addr;
 | 
						|
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
						|
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
						|
    }
 | 
						|
}
 | 
						|
EOF
 | 
						|
 | 
						|
    # Enable nginx configuration and restart nginx
 | 
						|
    cd
 | 
						|
    sudo cp qortal-gateway-node /etc/nginx/sites-available
 | 
						|
    mkdir -p backups
 | 
						|
    mv -f qortal-gateway-node backups/"qortal-gateway-node-nginx-config"
 | 
						|
    sudo ln -s /etc/nginx/sites-available/qortal-gateway-node /etc/nginx/sites-enabled/
 | 
						|
    sudo nginx -t && sudo systemctl restart nginx
 | 
						|
}
 | 
						|
 | 
						|
configure_qortal_settings() {
 | 
						|
    # Check if Qortal core is running
 | 
						|
    QORTAL_RUNNING=false
 | 
						|
    if curl -s localhost:12391/admin/status > /dev/null; then
 | 
						|
        QORTAL_RUNNING=true
 | 
						|
        echo "Qortal core is currently running. It will be restarted after settings modification."
 | 
						|
    fi
 | 
						|
    # Modify settings.json in ~/qortal directory
 | 
						|
    SETTINGS_PATH="$HOME/qortal/settings.json"
 | 
						|
    if [[ -f $SETTINGS_PATH ]]; then
 | 
						|
      mkdir -p backups && cp $SETTINGS_PATH backups/"qortal-settings-json-rename-to-settings.json-if-required"
 | 
						|
    fi
 | 
						|
    cat <<EOF > $SETTINGS_PATH
 | 
						|
{
 | 
						|
  "gatewayEnabled": true,
 | 
						|
  "gatewayPort": 8080,
 | 
						|
  "maxPeers": 333,
 | 
						|
  "maxNetworkThreadPoolSize": 2200,
 | 
						|
  "repositoryConnectionPoolSize": 4620,
 | 
						|
  "allowConnectionsWithOlderPeerVersions": false,
 | 
						|
  "minPeerVersion": "4.6.0",
 | 
						|
  "maxThreadsPerMessageType": [
 | 
						|
        { "messageType": "ARBITRARY_DATA_FILE", "limit": 25 },
 | 
						|
        { "messageType": "GET_ARBITRARY_DATA_FILE", "limit": 25 },
 | 
						|
        { "messageType": "ARBITRARY_DATA", "limit": 25 },
 | 
						|
        { "messageType": "GET_ARBITRARY_DATA", "limit": 25 },
 | 
						|
        { "messageType": "ARBITRARY_DATA_FILE_LIST", "limit": 25 },
 | 
						|
        { "messageType": "GET_ARBITRARY_DATA_FILE_LIST", "limit": 25 },
 | 
						|
        { "messageType": "ARBITRARY_SIGNATURES", "limit": 25 },
 | 
						|
        { "messageType": "ARBITRARY_METADATA", "limit": 25 },
 | 
						|
        { "messageType": "GET_ARBITRARY_METADATA", "limit": 25 },
 | 
						|
        { "messageType": "GET_TRANSACTION", "limit": 25 },
 | 
						|
        { "messageType": "TRANSACTION_SIGNATURES", "limit": 25 },
 | 
						|
        { "messageType": "TRADE_PRESENCES", "limit": 25 }
 | 
						|
  ],
 | 
						|
  "builtDataExpiryInterval": "5 * 24 * 60 * 60 * 1000L",
 | 
						|
  "minOutbountPeers": 32,
 | 
						|
  "maxDataPeers": 22,
 | 
						|
  "maxDataPeerConnectionTime": "8*60",
 | 
						|
  "slowQueryThreshold": "8000",
 | 
						|
  "apiLoggingEnabled": true,
 | 
						|
  "blockCacheSize": 220,
 | 
						|
  "apiRestricted": true,
 | 
						|
  "listenAddress": "0.0.0.0",
 | 
						|
  "apiWhitelistEnabled": false,
 | 
						|
  "minBlockchainPeers": 3
 | 
						|
}
 | 
						|
EOF
 | 
						|
 | 
						|
# Restart Qortal core if it was running before settings modification
 | 
						|
    if [[ $QORTAL_RUNNING == true ]]; then
 | 
						|
        echo "Restarting Qortal core...Please wait...will take ~30 seconds..."
 | 
						|
        cd ~/qortal
 | 
						|
        ./stop.sh && sleep 25 && ./start.sh
 | 
						|
        cd
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
setup_cron() {
 | 
						|
    read -p "Do you want to start Qortal on boot? (yes/no): " START_ON_BOOT
 | 
						|
    if [[ $START_ON_BOOT == "yes" ]]; then
 | 
						|
        (crontab -l ; echo "@reboot ~/QORTector-scripts/start-qortal.sh") | crontab -
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# Main execution
 | 
						|
install_packages
 | 
						|
setup_qortal
 | 
						|
configure_nginx
 | 
						|
configure_qortal_settings
 | 
						|
setup_cron
 | 
						|
 | 
						|
echo "Setup complete!"
 | 
						|
exit 0
 | 
						|
 |