Repository navigation
Expand file tree
/
Copy pathinstall-codeforge-debian.sh
More file actions
161 lines (137 loc) · 6.69 KB
/
Copy pathinstall-codeforge-debian.sh
File metadata and controls
161 lines (137 loc) · 6.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/bin/bash
# FancyCode Debian Server Installer v2.4.3
# Installation: sudo bash install-codeforge-debian.sh
set -e
echo "==============================================="
echo " FancyCode Debian Server Installer v2.4.3"
echo "==============================================="
echo ""
if [ "$EUID" -ne 0 ]; then
echo "Bitte als root ausführen: sudo bash install-codeforge-debian.sh"
exit 1
fi
# ── Konfiguration ──────────────────────────────────────────────
INSTALL_DIR="/opt/codeforge"
SERVICE_NAME="codeforge-remote"
PORT="${PORT:-8787}"
TOKEN="${CODEFORGE_TOKEN:-}"
# ── Abhängigkeiten installieren ─────────────────────────────────
echo "[1/5] Installiere Abhängigkeiten..."
apt-get update -qq
apt-get install -y -qq curl nodejs npm 2>/dev/null || apt-get install -y -qq curl
# Node.js 20+ falls nötig
if ! node -v 2>/dev/null | grep -qE 'v(1[89]|2[0-9])'; then
echo " Installiere Node.js 20.x..."
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y -qq nodejs
fi
echo " Node.js: $(node -v)"
echo " npm: $(npm -v)"
# ── Installationsverzeichnis ────────────────────────────────────
echo "[2/5] Erstelle Installationsverzeichnis..."
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"
# ── Server-Datei installieren ───────────────────────────────────
echo "[3/5] Installiere FancyCode Remote Server..."
# Falls die Datei im aktuellen Verzeichnis liegt, kopieren
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if [ -f "$SCRIPT_DIR/codeforge-remote-server.mjs" ]; then
cp "$SCRIPT_DIR/codeforge-remote-server.mjs" "$INSTALL_DIR/"
elif [ -f "$SCRIPT_DIR/../codeforge-remote-server.mjs" ]; then
cp "$SCRIPT_DIR/../codeforge-remote-server.mjs" "$INSTALL_DIR/"
else
# Aus Repository laden (schlaegt fehl, wenn das Quell-Repository privat ist)
echo " Lade Server von GitHub..."
curl -fsSL "https://raw.githubusercontent.com/Pikaswelt/CodeForge/main/codeforge-remote-server.mjs" -o "$INSTALL_DIR/codeforge-remote-server.mjs" 2>/dev/null || {
rm -f "$INSTALL_DIR/codeforge-remote-server.mjs"
echo " FEHLER: Konnte codeforge-remote-server.mjs nicht finden."
echo " Das Quell-Repository ist evtl. nicht oeffentlich. Nutze codeforge-connect-debian.sh"
echo " oder server-setup-codeforge.sh (Server ist dort eingebettet) oder kopiere die Datei"
echo " manuell nach $INSTALL_DIR/."
exit 1
}
fi
chmod +x "$INSTALL_DIR/codeforge-remote-server.mjs"
# Laufzeit-Abhaengigkeiten des Servers. Der Server startet auch ohne sie (API, Kopplung und
# Dateizugriff laufen weiter), aber WebSocket-Sync und lokale Terminals brauchen diese Pakete.
if [ ! -d "$INSTALL_DIR/node_modules/ws" ] || [ ! -d "$INSTALL_DIR/node_modules/node-pty" ]; then
echo " Installiere Server-Abhaengigkeiten (ws, node-pty)..."
apt-get install -y -qq build-essential python3 2>/dev/null || true
( cd "$INSTALL_DIR" && npm install --no-audit --no-fund --omit=dev ws node-pty >/dev/null 2>&1 ) || \
echo " WARNUNG: ws/node-pty fehlen - Terminals und Sync bleiben deaktiviert."
fi
# CLI Tool mitkopieren
if [ -f "$SCRIPT_DIR/codeforge-cli.mjs" ]; then
cp "$SCRIPT_DIR/codeforge-cli.mjs" "$INSTALL_DIR/"
chmod +x "$INSTALL_DIR/codeforge-cli.mjs"
echo " CLI installiert: codeforge-cli"
fi
# ── Token generieren ────────────────────────────────────────────
if [ -z "$TOKEN" ]; then
TOKEN=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
fi
# ── systemd Service ─────────────────────────────────────────────
echo "[4/5] Richte systemd-Dienst ein..."
# The token must not land in the unit file, which every local user can read.
ENV_FILE=/etc/codeforge-remote.env
install -m 600 /dev/null "$ENV_FILE"
cat > "$ENV_FILE" <<EOF_ENV
CODEFORGE_TOKEN=${TOKEN}
CODEFORGE_HOST=0.0.0.0
CODEFORGE_PORT=${PORT}
PATH=/root/.local/bin:/usr/local/bin:/usr/bin:/bin
EOF_ENV
cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF
[Unit]
Description=FancyCode Remote Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=${INSTALL_DIR}
EnvironmentFile=${ENV_FILE}
ExecStart=/usr/bin/node ${INSTALL_DIR}/codeforge-remote-server.mjs
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable "$SERVICE_NAME"
systemctl restart "$SERVICE_NAME"
# ── Abschluss ───────────────────────────────────────────────────
echo "[5/5] Installation abgeschlossen!"
echo ""
echo "==============================================="
echo " FancyCode Server ist bereit!"
echo "==============================================="
echo ""
IP_ADDR=$(hostname -I | awk '{print $1}')
CONNECTION_JSON="{\"url\":\"http://${IP_ADDR}:${PORT}\",\"token\":\"${TOKEN}\",\"projectPath\":\"/opt/codeforge\"}"
CONNECTION_KEY=$(echo -n "$CONNECTION_JSON" | base64 | tr -d '\n\r')
echo " ╔══════════════════════════════════════════════════════════╗"
echo " ║ 📱 CONNECTION KEY FÜR DIE MOBILE APP: ║"
echo " ║ Kopiere diesen Key und füge ihn in der App ein: ║"
echo " ║ ║"
echo " ║ $CONNECTION_KEY"
echo " ║ ║"
echo " ║ FancyCode-App → Verbinden → Einfügen → FERTIG! ✨ ║"
echo " ╚══════════════════════════════════════════════════════════╝"
echo ""
echo " Server-URL: http://${IP_ADDR}:${PORT}"
echo " Token: ${TOKEN}"
echo ""
echo " Befehle:"
echo " systemctl status ${SERVICE_NAME} – Status prüfen"
echo " systemctl restart ${SERVICE_NAME} – Neustarten"
echo " journalctl -u ${SERVICE_NAME} -f – Logs anzeigen"
echo ""
echo " Kopplungsmodus starten:"
echo " curl -X POST -H \"Authorization: Bearer ${TOKEN}\" http://localhost:${PORT}/pair/start"
echo ""
echo " CLI lokal nutzen:"
echo " node /opt/codeforge/codeforge-cli.mjs --url http://localhost:${PORT} --token ${TOKEN} --interactive"
echo ""