diff --git a/install/termix-install.sh b/install/termix-install.sh index 9bd9caf0f..9d4828167 100644 --- a/install/termix-install.sh +++ b/install/termix-install.sh @@ -27,83 +27,212 @@ msg_ok "Installed Dependencies" NODE_VERSION="22" setup_nodejs fetch_and_deploy_gh_release "termix" "Termix-SSH/Termix" -msg_info "Building ${APPLICATION} (Patience)" +msg_info "Building ${APPLICATION} Frontend (Patience)" cd /opt/termix export COREPACK_ENABLE_DOWNLOAD_PROMPT=0 + +find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete 2>/dev/null || true + $STD npm install --ignore-scripts --force -$STD npm rebuild better-sqlite3 --force +$STD npm cache clean --force $STD npm run build +msg_ok "Built ${APPLICATION} Frontend" + +msg_info "Building ${APPLICATION} Backend" +$STD npm rebuild better-sqlite3 --force $STD npm run build:backend -mkdir -p /opt/termix/data /opt/termix/uploads -msg_ok "Built ${APPLICATION}" +msg_ok "Built ${APPLICATION} Backend" + +msg_info "Setting up Production Dependencies" +cd /opt/termix +$STD npm ci --only=production --ignore-scripts --force +$STD npm rebuild better-sqlite3 bcryptjs --force +$STD npm cache clean --force +msg_ok "Set up Production Dependencies" + +msg_info "Setting up Directories" +mkdir -p /opt/termix/data \ + /opt/termix/uploads \ + /opt/termix/html \ + /opt/termix/nginx \ + /opt/termix/nginx/logs \ + /opt/termix/nginx/cache \ + /opt/termix/nginx/client_body + +cp -r /opt/termix/dist/* /opt/termix/html/ 2>/dev/null || true +cp -r /opt/termix/src/locales /opt/termix/html/locales 2>/dev/null || true +cp -r /opt/termix/public/fonts /opt/termix/html/fonts 2>/dev/null || true +msg_ok "Set up Directories" msg_info "Configuring Nginx" -cat <<'EOF' >/etc/nginx/sites-available/termix.conf -server { - listen 8080; - server_name _; +cat <<'NGINXEOF' >/etc/nginx/sites-available/termix.conf +pid /opt/termix/nginx/nginx.pid; +error_log /opt/termix/nginx/logs/error.log warn; - add_header X-Content-Type-Options nosniff always; - add_header X-XSS-Protection "1; mode=block" always; +events { + worker_connections 1024; +} - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { - root /opt/termix/dist; - expires 1y; - add_header Cache-Control "public, immutable"; - try_files $uri =404; - } +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + access_log /opt/termix/nginx/logs/access.log; - location / { - root /opt/termix/dist; - index index.html; - try_files $uri $uri/ /index.html; - } + client_body_temp_path /opt/termix/nginx/client_body; + proxy_temp_path /opt/termix/nginx/proxy_temp; - location ~ ^/(users|version|releases|alerts|rbac|credentials|snippets|terminal|database|db|encryption|ssh|health)(/.*)?$ { - proxy_pass http://127.0.0.1:30001; - proxy_http_version 1.1; - 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; - proxy_connect_timeout 60s; - proxy_send_timeout 300s; - proxy_read_timeout 300s; - } + sendfile on; + keepalive_timeout 65; + client_header_timeout 300s; - location /ssh/websocket/ { - proxy_pass http://127.0.0.1:30002/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - proxy_read_timeout 86400s; - proxy_send_timeout 86400s; - proxy_buffering off; - } + server { + listen 8080; + server_name _; - location ~ ^/status(/.*)?$ { - proxy_pass http://127.0.0.1:30005; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - } + add_header X-Content-Type-Options nosniff always; + add_header X-XSS-Protection "1; mode=block" always; - location ~ ^/docker(/.*)?$ { - proxy_pass http://127.0.0.1:30007; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_connect_timeout 60s; - proxy_send_timeout 300s; - proxy_read_timeout 300s; + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + root /opt/termix/html; + expires 1y; + add_header Cache-Control "public, immutable"; + try_files $uri =404; + } + + location / { + root /opt/termix/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + location ~ ^/users(/.*)?$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + 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; + } + + location ~ ^/(version|releases|alerts|rbac|credentials|snippets|terminal|encryption)(/.*)?$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + 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; + } + + location ~ ^/(database|db)(/.*)?$ { + client_max_body_size 5G; + client_body_timeout 300s; + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_connect_timeout 60s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + proxy_request_buffering off; + proxy_buffering off; + } + + location /ssh/ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location /ssh/websocket/ { + proxy_pass http://127.0.0.1:30002/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Real-IP $remote_addr; + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + proxy_buffering off; + proxy_request_buffering off; + } + + location /ssh/tunnel/ { + proxy_pass http://127.0.0.1:30003; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location /ssh/file_manager/ssh/ { + client_max_body_size 5G; + client_body_timeout 300s; + proxy_pass http://127.0.0.1:30004; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_connect_timeout 60s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + proxy_request_buffering off; + proxy_buffering off; + } + + location ~ ^/ssh/file_manager/(recent|pinned|shortcuts)$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location /health { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + } + + location ~ ^/(status|metrics)(/.*)?$ { + proxy_pass http://127.0.0.1:30005; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location ~ ^/(uptime|activity)(/.*)?$ { + proxy_pass http://127.0.0.1:30006; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location ^~ /docker/console/ { + proxy_pass http://127.0.0.1:30008/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + proxy_buffering off; + proxy_request_buffering off; + } + + location ~ ^/docker(/.*)?$ { + proxy_pass http://127.0.0.1:30007; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_connect_timeout 60s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + } } } -EOF -ln -sf /etc/nginx/sites-available/termix.conf /etc/nginx/sites-enabled/ +NGINXEOF rm -f /etc/nginx/sites-enabled/default -$STD systemctl reload nginx +rm -f /etc/nginx/nginx.conf +ln -sf /etc/nginx/sites-available/termix.conf /etc/nginx/nginx.conf msg_ok "Configured Nginx" msg_info "Creating Service" @@ -118,7 +247,7 @@ User=root WorkingDirectory=/opt/termix Environment=NODE_ENV=production Environment=DATA_DIR=/opt/termix/data -Environment=PORT=30001 +Environment=PORT=8080 ExecStart=/usr/bin/node /opt/termix/dist/backend/index.js Restart=on-failure RestartSec=5 @@ -126,7 +255,7 @@ RestartSec=5 [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now termix +systemctl enable -q --now termix nginx msg_ok "Created Service" motd_ssh