@genxis/n8nrockstars 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/PUBLISHING.md +148 -0
- package/README.md +276 -0
- package/bin/cli.js +121 -0
- package/index.js +22 -0
- package/lib/apache-proxy.js +65 -0
- package/lib/checker.js +90 -0
- package/lib/cpanel-subdomain.js +94 -0
- package/lib/deployer.js +209 -0
- package/lib/ftp-uploader.js +54 -0
- package/lib/n8n-starter.js +76 -0
- package/lib/postgres-installer.js +44 -0
- package/lib/ssh-executor.js +58 -0
- package/package.json +45 -0
- package/templates/install-complete.sh +119 -0
- package/templates/server.js.template +70 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Complete n8n installation script for cPanel servers
|
|
3
|
+
# Generated by n8nROCKSTARS
|
|
4
|
+
# This handles ALL the edge cases
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
SERVER_USER="{{USER}}"
|
|
9
|
+
DOMAIN="{{DOMAIN}}"
|
|
10
|
+
DB_PASS="{{DB_PASSWORD}}"
|
|
11
|
+
ADMIN_PASS="{{ADMIN_PASSWORD}}"
|
|
12
|
+
DB_NAME="${SERVER_USER}_n8n"
|
|
13
|
+
DB_USER="${SERVER_USER}_n8n"
|
|
14
|
+
|
|
15
|
+
echo "🎸 n8nROCKSTARS Deployment Script"
|
|
16
|
+
echo "=================================="
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# 1. Install PostgreSQL 15
|
|
20
|
+
echo "1. Installing PostgreSQL 15..."
|
|
21
|
+
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm 2>/dev/null || true
|
|
22
|
+
dnf -qy module disable postgresql
|
|
23
|
+
dnf install -y postgresql15-server postgresql15
|
|
24
|
+
export PGSETUP_INITDB_OPTIONS="--encoding=UTF8"
|
|
25
|
+
/usr/pgsql-15/bin/postgresql-15-setup initdb 2>/dev/null || true
|
|
26
|
+
systemctl enable postgresql-15
|
|
27
|
+
systemctl start postgresql-15
|
|
28
|
+
sleep 3
|
|
29
|
+
|
|
30
|
+
# 2. Create database
|
|
31
|
+
echo "2. Creating PostgreSQL database..."
|
|
32
|
+
su - postgres -c "psql -c \"CREATE DATABASE $DB_NAME;\"" 2>/dev/null || true
|
|
33
|
+
su - postgres -c "psql -c \"CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';\"" 2>/dev/null || true
|
|
34
|
+
su - postgres -c "psql -c \"ALTER DATABASE $DB_NAME OWNER TO $DB_USER;\""
|
|
35
|
+
su - postgres -c "psql -d $DB_NAME -c \"GRANT ALL ON SCHEMA public TO $DB_USER;\""
|
|
36
|
+
|
|
37
|
+
# 3. Configure Apache proxy (HTTP)
|
|
38
|
+
echo "3. Configuring Apache reverse proxy..."
|
|
39
|
+
mkdir -p /usr/local/apache/conf/userdata/std/2_4/${SERVER_USER}/${DOMAIN}
|
|
40
|
+
|
|
41
|
+
cat > /usr/local/apache/conf/userdata/std/2_4/${SERVER_USER}/${DOMAIN}/proxy.conf << 'EOF'
|
|
42
|
+
<IfModule mod_security2.c>
|
|
43
|
+
SecRuleEngine Off
|
|
44
|
+
</IfModule>
|
|
45
|
+
ProxyPreserveHost On
|
|
46
|
+
ProxyPass / http://127.0.0.1:5678/
|
|
47
|
+
ProxyPassReverse / http://127.0.0.1:5678/
|
|
48
|
+
RequestHeader set X-Forwarded-Proto "http"
|
|
49
|
+
EOF
|
|
50
|
+
|
|
51
|
+
# 4. Configure Apache proxy (HTTPS)
|
|
52
|
+
mkdir -p /usr/local/apache/conf/userdata/ssl/2_4/${SERVER_USER}/${DOMAIN}
|
|
53
|
+
|
|
54
|
+
cat > /usr/local/apache/conf/userdata/ssl/2_4/${SERVER_USER}/${DOMAIN}/proxy.conf << 'EOF'
|
|
55
|
+
<IfModule mod_security2.c>
|
|
56
|
+
SecRuleEngine Off
|
|
57
|
+
</IfModule>
|
|
58
|
+
ProxyPreserveHost On
|
|
59
|
+
ProxyPass / http://127.0.0.1:5678/
|
|
60
|
+
ProxyPassReverse / http://127.0.0.1:5678/
|
|
61
|
+
RequestHeader set X-Forwarded-Proto "https"
|
|
62
|
+
RequestHeader set X-Forwarded-Port "443"
|
|
63
|
+
EOF
|
|
64
|
+
|
|
65
|
+
# 5. Enable proxy modules
|
|
66
|
+
mkdir -p /etc/apache2/conf/includes
|
|
67
|
+
|
|
68
|
+
cat > /etc/apache2/conf/includes/pre_main_global.conf << 'EOF'
|
|
69
|
+
LoadModule proxy_module modules/mod_proxy.so
|
|
70
|
+
LoadModule proxy_http_module modules/mod_proxy_http.so
|
|
71
|
+
LoadModule headers_module modules/mod_headers.so
|
|
72
|
+
EOF
|
|
73
|
+
|
|
74
|
+
# 6. Rebuild Apache
|
|
75
|
+
echo "4. Rebuilding Apache configuration..."
|
|
76
|
+
/scripts/rebuildhttpdconf
|
|
77
|
+
systemctl restart httpd
|
|
78
|
+
|
|
79
|
+
# 7. Start n8n
|
|
80
|
+
echo "5. Starting n8n..."
|
|
81
|
+
pkill -f "node.*server.js" 2>/dev/null || true
|
|
82
|
+
cd /home/${SERVER_USER}/n8n
|
|
83
|
+
nohup node server.js > n8n.log 2>&1 </dev/null &
|
|
84
|
+
disown
|
|
85
|
+
|
|
86
|
+
# 8. Wait and verify
|
|
87
|
+
echo "6. Verifying deployment..."
|
|
88
|
+
sleep 10
|
|
89
|
+
|
|
90
|
+
if netstat -tulpn | grep -q 5678; then
|
|
91
|
+
echo ""
|
|
92
|
+
echo "✅ n8n IS RUNNING!"
|
|
93
|
+
echo ""
|
|
94
|
+
echo "URL: https://${DOMAIN}"
|
|
95
|
+
echo "Username: admin"
|
|
96
|
+
echo "Password: $ADMIN_PASS"
|
|
97
|
+
echo ""
|
|
98
|
+
echo "Credentials saved to: /root/n8n-credentials.txt"
|
|
99
|
+
|
|
100
|
+
cat > /root/n8n-credentials.txt << CREDS
|
|
101
|
+
n8n Deployment Credentials
|
|
102
|
+
==========================
|
|
103
|
+
|
|
104
|
+
URL: https://${DOMAIN}
|
|
105
|
+
Username: admin
|
|
106
|
+
Password: $ADMIN_PASS
|
|
107
|
+
|
|
108
|
+
Database: $DB_NAME
|
|
109
|
+
DB User: $DB_USER
|
|
110
|
+
DB Password: $DB_PASS
|
|
111
|
+
|
|
112
|
+
Deployed: $(date)
|
|
113
|
+
CREDS
|
|
114
|
+
|
|
115
|
+
else
|
|
116
|
+
echo "❌ n8n failed to start"
|
|
117
|
+
echo "Check logs: cat /home/${SERVER_USER}/n8n/n8n.log"
|
|
118
|
+
exit 1
|
|
119
|
+
fi
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* n8n Startup Script
|
|
4
|
+
* Auto-generated by n8nROCKSTARS
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { spawn } = require('child_process');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
|
|
10
|
+
// n8n configuration
|
|
11
|
+
process.env.N8N_HOST = '{{DOMAIN}}';
|
|
12
|
+
process.env.N8N_PORT = '5678';
|
|
13
|
+
process.env.N8N_LISTEN_ADDRESS = '0.0.0.0'; // Critical: Force IPv4
|
|
14
|
+
process.env.N8N_PROTOCOL = 'https';
|
|
15
|
+
process.env.WEBHOOK_URL = 'https://{{DOMAIN}}';
|
|
16
|
+
|
|
17
|
+
// PostgreSQL database
|
|
18
|
+
process.env.DB_TYPE = 'postgresdb'; // Critical: n8n v2+ requires PostgreSQL
|
|
19
|
+
process.env.DB_POSTGRESDB_HOST = 'localhost';
|
|
20
|
+
process.env.DB_POSTGRESDB_PORT = '5432';
|
|
21
|
+
process.env.DB_POSTGRESDB_DATABASE = '{{DB_NAME}}';
|
|
22
|
+
process.env.DB_POSTGRESDB_USER = '{{DB_USER}}';
|
|
23
|
+
process.env.DB_POSTGRESDB_PASSWORD = '{{DB_PASSWORD}}';
|
|
24
|
+
|
|
25
|
+
// Execution settings
|
|
26
|
+
process.env.EXECUTIONS_DATA_SAVE_ON_SUCCESS = 'all';
|
|
27
|
+
process.env.EXECUTIONS_DATA_SAVE_ON_ERROR = 'all';
|
|
28
|
+
process.env.EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS = 'true';
|
|
29
|
+
|
|
30
|
+
// Security
|
|
31
|
+
process.env.N8N_BASIC_AUTH_ACTIVE = 'true';
|
|
32
|
+
process.env.N8N_BASIC_AUTH_USER = 'admin';
|
|
33
|
+
process.env.N8N_BASIC_AUTH_PASSWORD = '{{ADMIN_PASSWORD}}';
|
|
34
|
+
|
|
35
|
+
// Performance
|
|
36
|
+
process.env.N8N_PAYLOAD_SIZE_MAX = '16';
|
|
37
|
+
process.env.N8N_METRICS = 'false';
|
|
38
|
+
|
|
39
|
+
console.log('Starting n8n...');
|
|
40
|
+
console.log('Host:', process.env.N8N_HOST);
|
|
41
|
+
console.log('Port:', process.env.N8N_PORT);
|
|
42
|
+
console.log('Database:', process.env.DB_POSTGRESDB_DATABASE);
|
|
43
|
+
|
|
44
|
+
// Start n8n
|
|
45
|
+
const n8nPath = path.join(__dirname, 'node_modules', 'n8n', 'bin', 'n8n');
|
|
46
|
+
const n8n = spawn('node', [n8nPath, 'start'], {
|
|
47
|
+
stdio: 'inherit',
|
|
48
|
+
env: process.env
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
n8n.on('error', (err) => {
|
|
52
|
+
console.error('Failed to start n8n:', err);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
n8n.on('exit', (code) => {
|
|
57
|
+
console.log(`n8n exited with code ${code}`);
|
|
58
|
+
process.exit(code);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Handle termination gracefully
|
|
62
|
+
process.on('SIGTERM', () => {
|
|
63
|
+
console.log('Received SIGTERM, shutting down...');
|
|
64
|
+
n8n.kill('SIGTERM');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
process.on('SIGINT', () => {
|
|
68
|
+
console.log('Received SIGINT, shutting down...');
|
|
69
|
+
n8n.kill('SIGINT');
|
|
70
|
+
});
|