Update "Installation"
1 parent
369560ac8b
commit
625d9e60bd
1 file changed
+411
+411
@@ -0,0 +1,411 @@
|
||||
# Installation
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before installing Pterodisbot, ensure you have:
|
||||
|
||||
- **Python 3.8 or higher** (for traditional installation)
|
||||
- **Docker** (for containerized deployment)
|
||||
- **Kubernetes cluster** (for K8s deployment)
|
||||
- **Discord bot token** (from Discord Developer Portal)
|
||||
- **Discord server (guild) ID**
|
||||
- **Pterodactyl/Pelican Panel** with API access
|
||||
- **Pterodactyl Client API key** (starts with `ptlc_` or `pacc_`)
|
||||
- **Pterodactyl Application API key** (starts with `ptla_` or `papp_`)
|
||||
|
||||
---
|
||||
|
||||
## Discord Bot Setup
|
||||
|
||||
Before installing the bot software, you need to create a Discord application and bot account.
|
||||
|
||||
### 1. Create Discord Application
|
||||
|
||||
1. Navigate to the [Discord Developer Portal](https://discord.com/developers/applications)
|
||||
2. Click the **"New Application"** button in the top-right corner
|
||||
3. Enter a name for your application (e.g., "Pterodactyl Bot")
|
||||
4. Accept the Terms of Service and click **"Create"**
|
||||
|
||||
### 2. Configure Bot Settings
|
||||
|
||||
1. In the left sidebar, click on **"Bot"**
|
||||
2. Click **"Add Bot"** and confirm by clicking **"Yes, do it!"**
|
||||
3. Under the bot's username, you'll see a **Token** section:
|
||||
- Click **"Reset Token"** and then **"Copy"** to get your bot token
|
||||
- ⚠️ **Keep this token secret!** Never share it publicly or commit it to version control
|
||||
4. Scroll down to **"Privileged Gateway Intents"** and enable:
|
||||
- ✅ **Message Content Intent** (required for the bot to read message content)
|
||||
5. Click **"Save Changes"** at the bottom
|
||||
|
||||
### 3. Set Bot Permissions
|
||||
|
||||
1. In the left sidebar, click on **"OAuth2"** → **"URL Generator"**
|
||||
2. Under **"Scopes"**, select:
|
||||
- ✅ `bot`
|
||||
- ✅ `applications.commands`
|
||||
3. Under **"Bot Permissions"**, select:
|
||||
- ✅ **View Channels** (allows bot to see channels)
|
||||
- ✅ **Send Messages** (allows bot to post embeds)
|
||||
- ✅ **Embed Links** (required for rich embeds)
|
||||
- ✅ **Attach Files** (required for metrics graphs)
|
||||
- ✅ **Read Message History** (allows bot to edit existing messages)
|
||||
- ✅ **Use Slash Commands** (required for `/server_status` commands)
|
||||
|
||||
### 4. Invite Bot to Your Server
|
||||
|
||||
1. Copy the **Generated URL** at the bottom of the OAuth2 URL Generator page
|
||||
2. Paste this URL into your browser and press Enter
|
||||
3. Select the Discord server where you want to add the bot
|
||||
4. Click **"Authorize"** and complete the CAPTCHA if prompted
|
||||
5. The bot should now appear in your server (offline until you start the application)
|
||||
|
||||
### 5. Get Your Guild ID
|
||||
|
||||
1. In Discord, enable **Developer Mode**:
|
||||
- Click the ⚙️ gear icon (User Settings)
|
||||
- Navigate to **"Advanced"** under "App Settings"
|
||||
- Toggle on **"Developer Mode"**
|
||||
2. Right-click on your server icon in the left sidebar
|
||||
3. Click **"Copy Server ID"** at the bottom of the menu
|
||||
4. Save this ID - you'll need it for the bot configuration
|
||||
|
||||
### 6. Create Server Role
|
||||
|
||||
1. In your Discord server, click the server name at the top to open the dropdown menu
|
||||
2. Select **"Server Settings"** → **"Roles"**
|
||||
3. Click **"Create Role"**
|
||||
4. Name the role exactly: `Game Server User`
|
||||
5. The role doesn't need any special permissions - it's only used for bot access control
|
||||
6. Click **"Save Changes"**
|
||||
7. Assign this role to any users who should be able to control game servers
|
||||
|
||||
---
|
||||
|
||||
## Traditional Installation
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://git.serendipity.systems/k.eaven/pterodisbot.git
|
||||
cd pterodactyl-discord-bot
|
||||
```
|
||||
|
||||
### 2. Install Required Dependencies
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 3. Create and Configure Your `config.ini` File
|
||||
|
||||
See the [Configuration](/Configuration) section for details.
|
||||
|
||||
### 4. Run the Bot
|
||||
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Docker Installation
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://git.serendipity.systems/k.eaven/pterodisbot.git
|
||||
cd pterodactyl-discord-bot
|
||||
```
|
||||
|
||||
### 2. Build the Docker Image
|
||||
|
||||
```bash
|
||||
docker build -t pterodisbot .
|
||||
```
|
||||
|
||||
### 3. Create a Directory for Configuration
|
||||
|
||||
```bash
|
||||
mkdir -p bot-config
|
||||
```
|
||||
|
||||
### 4. Create a `config.ini` File
|
||||
|
||||
Create a `config.ini` file in the `bot-config` directory with your settings (see [Configuration](/Configuration)).
|
||||
|
||||
### 5. Run the Container
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name pterodisbot \
|
||||
-v $(pwd)/bot-config:/app \
|
||||
pterodisbot
|
||||
```
|
||||
|
||||
### 6. Docker Compose (Recommended)
|
||||
|
||||
Create a `docker-compose.yml` file:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
pterodisbot:
|
||||
build: .
|
||||
environment:
|
||||
# Remove brackets and spaces in environment variables
|
||||
# Ideally, use .env file to assign values to these instead
|
||||
- DISCORD_TOKEN={Your Discord bot token from Developer Portal}
|
||||
- ALLOWED_GUILD_ID={Your Discord server ID from step 5 above}
|
||||
- PANEL_URL={Your Pterodactyl panel URL with https://}
|
||||
- CLIENT_API_KEY={Pterodactyl client API key starting with ptlc_}
|
||||
- APPLICATION_API_KEY={Pterodactyl application API key starting with ptla_}
|
||||
volumes:
|
||||
- bot_logs:/app/logs
|
||||
- bot_embed:/app/embed
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
bot_logs:
|
||||
bot_embed:
|
||||
```
|
||||
|
||||
Then run:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Kubernetes Installation
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://git.serendipity.systems/k.eaven/pterodisbot.git
|
||||
cd pterodactyl-discord-bot
|
||||
```
|
||||
|
||||
### 2. Build and Push the Docker Image
|
||||
|
||||
```bash
|
||||
docker build -t your-registry/pterodisbot:latest .
|
||||
docker push your-registry/pterodisbot:latest
|
||||
```
|
||||
|
||||
### 3. Create a Kubernetes Namespace (Optional but Recommended)
|
||||
|
||||
```bash
|
||||
kubectl create namespace pterodisbot
|
||||
```
|
||||
|
||||
### 4. Create a Kubernetes Secret with Your Configuration
|
||||
|
||||
```bash
|
||||
kubectl create secret generic pterodisbot-config \
|
||||
--from-literal=DISCORD_TOKEN='your-discord-bot-token' \
|
||||
--from-literal=ALLOWED_GUILD_ID='your-discord-guild-id' \
|
||||
--from-literal=PANEL_URL='https://your.pterodactyl.panel' \
|
||||
--from-literal=CLIENT_API_KEY='ptlc_your-client-api-key' \
|
||||
--from-literal=APPLICATION_API_KEY='ptla_your-application-api-key' \
|
||||
-n pterodisbot
|
||||
```
|
||||
|
||||
### 5. Create a PersistentVolumeClaim for Logs and Embed Data
|
||||
|
||||
```yaml
|
||||
# pvc.yaml
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: pterodisbot-data
|
||||
namespace: pterodisbot
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl apply -f pvc.yaml
|
||||
```
|
||||
|
||||
### 6. Create the Deployment
|
||||
|
||||
```yaml
|
||||
# deployment.yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: pterodisbot
|
||||
namespace: pterodisbot
|
||||
labels:
|
||||
app: pterodisbot
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: pterodisbot
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: pterodisbot
|
||||
spec:
|
||||
containers:
|
||||
- name: pterodisbot
|
||||
image: your-registry/pterodisbot:latest
|
||||
imagePullPolicy: Always
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: pterodisbot-config
|
||||
volumeMounts:
|
||||
- name: pterodisbot-data
|
||||
mountPath: /app/logs
|
||||
subPath: logs
|
||||
- name: pterodisbot-data
|
||||
mountPath: /app/embed
|
||||
subPath: embed
|
||||
resources:
|
||||
requests:
|
||||
memory: "256Mi"
|
||||
cpu: "100m"
|
||||
limits:
|
||||
memory: "512Mi"
|
||||
cpu: "500m"
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["python", "-c", "import sys; sys.exit(0)"]
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
readinessProbe:
|
||||
exec:
|
||||
command: ["python", "-c", "import sys; sys.exit(0)"]
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
volumes:
|
||||
- name: pterodisbot-data
|
||||
persistentVolumeClaim:
|
||||
claimName: pterodisbot-data
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl apply -f deployment.yaml
|
||||
```
|
||||
|
||||
### 7. (Optional) Create a Service for Metrics/Health Checks
|
||||
|
||||
```yaml
|
||||
# service.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: pterodisbot
|
||||
namespace: pterodisbot
|
||||
labels:
|
||||
app: pterodisbot
|
||||
spec:
|
||||
selector:
|
||||
app: pterodisbot
|
||||
ports:
|
||||
- name: http
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
type: ClusterIP
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl apply -f service.yaml
|
||||
```
|
||||
|
||||
### 8. (Optional) Create a HorizontalPodAutoscaler
|
||||
|
||||
```yaml
|
||||
# hpa.yaml
|
||||
apiVersion: autoscaling/v2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: pterodisbot
|
||||
namespace: pterodisbot
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: pterodisbot
|
||||
minReplicas: 1
|
||||
maxReplicas: 3
|
||||
metrics:
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: 70
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl apply -f hpa.yaml
|
||||
```
|
||||
|
||||
### 9. Verify the Deployment
|
||||
|
||||
```bash
|
||||
kubectl get pods -n pterodisbot
|
||||
kubectl logs -n pterodisbot -l app=pterodisbot -f
|
||||
```
|
||||
|
||||
### 10. For Production: Use Kustomize
|
||||
|
||||
Create a `kustomization.yaml`:
|
||||
|
||||
```yaml
|
||||
# kustomization.yaml
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: pterodisbot
|
||||
resources:
|
||||
- pvc.yaml
|
||||
- deployment.yaml
|
||||
- service.yaml
|
||||
- hpa.yaml
|
||||
images:
|
||||
- name: pterodisbot
|
||||
newTag: latest
|
||||
commonLabels:
|
||||
app: pterodisbot
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl apply -k .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verification
|
||||
|
||||
After installation, verify the bot is working:
|
||||
|
||||
1. Check the bot appears online in your Discord server
|
||||
2. Use `/server_status` command to create your first status embed
|
||||
3. Verify buttons work (Start/Stop/Restart/Show Address)
|
||||
4. Check logs for any errors:
|
||||
```bash
|
||||
# Traditional
|
||||
tail -f logs/pterodisbot.log
|
||||
|
||||
# Docker
|
||||
docker logs -f pterodisbot
|
||||
|
||||
# Kubernetes
|
||||
kubectl logs -n pterodisbot -l app=pterodisbot -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Related Pages
|
||||
|
||||
- [Architecture](/Architecture) - System design
|
||||
- [Configuration](/Configuration) - Config options
|
||||
- [Usage](/Usage) - Commands and workflows
|
||||
- [Features](/Features) - Feature details
|
||||
- [Contributing](/Contributing) - Development guidelines
|
||||
Reference in new issue
Block a user