Jump to content

VPS: Difference between revisions

From Archive
No edit summary
No edit summary
 
Line 3: Line 3:
''Self-hosted services and applications running on the ejfvps infrastructure''
''Self-hosted services and applications running on the ejfvps infrastructure''


== Applications ==  
== Applications ==
* '''Main Website''' - [https://ejfox.com ejfox.com] - Personal site and blog (Nuxt.js)
* '''Main Website''' - [https://ejfox.com ejfox.com] - Personal site and blog (Nuxt.js)
* '''Archive Wiki''' - [https://archive.ejfox.com archive.ejfox.com] - MediaWiki knowledge base
* '''Archive Wiki''' - [https://archive.ejfox.com archive.ejfox.com] - MediaWiki knowledge base
Line 10: Line 10:
* '''Personal APIs''' - ejfox.com/api/* - Self-quantification data endpoints
* '''Personal APIs''' - ejfox.com/api/* - Self-quantification data endpoints
* '''[[ArchiveBox]]''' - [https://snap.ejfox.com snap.ejfox.com] - Web archiving and snapshot preservation
* '''[[ArchiveBox]]''' - [https://snap.ejfox.com snap.ejfox.com] - Web archiving and snapshot preservation
* '''Smallweb''' - [https://ejfox.tools ejfox.tools] - Personal app platform and development environment
* '''n8n''' - [https://n8n.tools.ejfox.com n8n.tools.ejfox.com] - Workflow automation and API orchestration
* '''n8n''' - [https://n8n.tools.ejfox.com n8n.tools.ejfox.com] - Workflow automation and API orchestration
* '''Grafana''' - [https://grafana.tools.ejfox.com grafana.tools.ejfox.com] - System metrics and personal data dashboards
* '''Grafana''' - [https://grafana.tools.ejfox.com grafana.tools.ejfox.com] - System metrics and personal data dashboards
Line 16: Line 15:
* '''Umami Analytics''' - [https://umami.tools.ejfox.com umami.tools.ejfox.com] - Privacy-focused web analytics
* '''Umami Analytics''' - [https://umami.tools.ejfox.com umami.tools.ejfox.com] - Privacy-focused web analytics


== System Overview ==


== Architecture ==
=== Hardware Specifications ===
 
{| class="wikitable"
=== Domain Strategy ===
! Component !! Specification
* '''ejfox.com''' - Main personal brand and API endpoints
|-
* '''ejfox.tools''' - Development tools and utilities subdomain
| '''Host System''' || Debian GNU/Linux 12 (bookworm)
* '''*.tools.ejfox.com''' - Individual tool subdomains for organized access, powered by smallweb
|-
* '''archive.ejfox.com''' - Knowledge management and documentation
| '''Kernel''' || Linux 6.1.0-37-cloud-amd64
* '''room302.studio''' - Studio work
|-
| '''Hostname''' || ejfvps
|-
| '''Architecture''' || x86_64
|-
| '''CPU''' || Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (2 cores)
|-
| '''Memory''' || 3.8GB RAM
|-
| '''Root Storage''' || 7.8GB (/dev/vda1)
|-
| '''Data Storage''' || 20GB (/dev/vdb1)
|-
| '''Data2 Storage''' || 49GB (/dev/vdc)
|}


=== Port Mapping ===
=== Port Mapping ===
Line 57: Line 71:
|}
|}


== Docker Troubleshooting ==


=== Emergency Procedures ===


== System Overview ==
==== Kill Runaway Docker Process ====
 
When dockerd consumes 100%+ CPU:
'''Host System:''' Debian GNU/Linux 12 (bookworm)<br>
<pre>
'''Kernel:''' Linux 6.1.0-37-cloud-amd64<br>
'''Hostname:''' ejfvps<br>
'''Architecture:''' x86_64<br>
'''CPU:''' Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (2 cores)<br>
'''Memory:''' 3.8GB RAM<br>
'''Storage:'''
* Root: 7.8GB (/dev/vda1)
* Data: 20GB (/dev/vdb1)
* Data2: 49GB (/dev/vdc)
 
== Core Infrastructure Services ==
 
=== Reverse Proxy & SSL ===
* '''Caddy''' - Modern web server with automatic HTTPS
** Port: 80/443
** Config: /etc/caddy/Caddyfile
** Features: Automatic SSL certificates, HTTP/2, reverse proxy
 
=== Container Orchestration ===
* '''Docker Engine''' - Container runtime
* '''Docker Compose''' - Multi-container application definitions
* '''Containerd''' - Low-level container runtime
 
=== System Monitoring ===
* '''Cloudflared''' - Cloudflare tunnel service
* '''Fail2ban''' - Intrusion prevention system
* '''Monit''' - System monitoring daemon
 
== Application Stack ==
 
=== Analytics & Monitoring ===
 
==== Umami Analytics ====
'''Primary Instance:'''
* '''Image:''' ghcr.io/umami-software/umami:postgresql-latest
 
==== Grafana Monitoring Stack ====
* '''Grafana''' - Visualization dashboard
** Image: grafana/grafana:latest
** Plugins: ClickHouse, GitHub, Loki Explorer, Pyroscope, JSON datasource
 
* '''Loki''' - Log aggregation system
** Image: grafana/loki:latest
 
==== Uptime Monitoring ====
* '''Uptime Kuma''' - Self-hosted monitoring tool
** Image: louislam/uptime-kuma:latest
** Base URL: https://status.tools.ejfox.com
** Features: Website monitoring, notifications, status pages
 
=== Content Management ===
 
==== MediaWiki ====
* '''Image:''' mediawiki:latest
* '''Port:''' 8437 → 80
* '''Database:''' SQLite (multiple databases)
* '''Extensions:''' AWS S3 integration
* '''Skin:''' Citizen theme
* '''Volumes:'''
** Data: /home/debian/mediawiki/data
** Config: /home/debian/mediawiki/LocalSettings.php
 
==== ArchiveBox ====
* '''Image:''' archivebox/archivebox:latest
* '''Features:''' Web archiving, full-text search via Sonic
* '''Components:'''
** Main archiver
** Background scheduler (ofelia-based)
** Sonic search backend
** noVNC remote browser control
 
=== Development & Automation ===
 
==== Smallweb ====
* '''Image:''' ghcr.io/pomdtr/smallweb:latest
* '''Ports:''' 7777, 2222
* '''Purpose:''' Lightweight web app hosting platform
* '''Projects:''' Multiple TypeScript/Deno applications including:
** Health dashboard and webhooks
** GitHub integrations
** Location tracking
** Screenshot generation
** Weather apps
** Mastodon integration
 
==== n8n Workflow Automation ====
* '''Image:''' docker.n8n.io/n8nio/n8n
 
==== Retroscope ====
* '''Custom Application''' - retroscope
* '''Scheduler:''' mcuadros/ofelia:latest
* '''Status:''' Healthy, with background job scheduling
 
=== Personal Websites ===
 
==== ejfox.com ====
* '''Custom Build''' - ejfoxcom_ejfox
* '''Port:''' 3013 → 3013
* '''Size:''' 1.84GB image
* '''Status:''' Production website
 
==== room302.studio ====
* '''Custom Build''' - website_room302
* '''Port:''' 3012 → 3012
* '''Size:''' 1.82GB image
* '''Status:''' Secondary website
 
== Network Configuration ==
 
=== Backup Strategy ===
* MediaWiki has backup/restore scripts
* Database files stored in persistent volumes
* Configuration files version controlled
 
== Process Management ==
 
=== PM2 ===
* '''PM2 modules:''' Auto-pull, log rotation
* '''Stopped processes:''' Discord bot, capabilities service
* '''Log management:''' Automated log rotation
 
 
---
 
== Docker Troubleshooting Guide ==
 
=== Common Docker Issues and Solutions ===
 
==== High CPU Usage by Docker ====
'''Symptoms:''' dockerd process consuming 100%+ CPU, system unresponsive, SSH slow or failing
 
'''Quick Fix:'''
<syntaxhighlight lang="bash">
# Force kill Docker
# Force kill Docker
sudo kill -9 $(pgrep dockerd)
sudo kill -9 $(pgrep dockerd)
Line 200: Line 83:
sudo systemctl stop docker.socket
sudo systemctl stop docker.socket
sudo systemctl stop containerd
sudo systemctl stop containerd
</syntaxhighlight>
</pre>
 
==== Docker Bridge Networking Issues ====
'''Problem:''' Default bridge network conflicts with VPS network configuration


'''Solution:''' Disable Docker's bridge networking
==== Disable Docker Bridge Networking ====
<syntaxhighlight lang="bash">
Prevents bridge networking conflicts on VPS:
# Create/edit Docker daemon config
<pre>
sudo nano /etc/docker/daemon.json
# Edit /etc/docker/daemon.json
 
# Add this configuration:
{
{
   "iptables": false,
   "iptables": false,
Line 218: Line 96:
# Restart Docker
# Restart Docker
sudo systemctl restart docker
sudo systemctl restart docker
</syntaxhighlight>
</pre>
 
==== Docker Won't Stay Dead ====
'''Problem:''' Docker restarts automatically even after stopping


'''Solution:''' Disable all Docker services and sockets
==== Prevent Docker Auto-Restart ====
<syntaxhighlight lang="bash">
<pre>
sudo systemctl stop docker docker.socket containerd
sudo systemctl stop docker docker.socket containerd
sudo systemctl disable docker docker.socket containerd
sudo systemctl disable docker docker.socket containerd
sudo systemctl mask docker  # Prevents any activation
sudo systemctl mask docker  # Prevents any activation
</syntaxhighlight>
</pre>


=== Disk Space Management ===
=== Disk Space Management ===


==== Quick Space Recovery ====
==== Quick Cleanup Commands ====
<syntaxhighlight lang="bash">
<pre>
# Nuclear Docker cleanup (removes ALL unused data)
# Nuclear Docker cleanup (removes ALL unused data)
docker system prune -a --volumes --force
docker system prune -a --volumes --force
Line 242: Line 117:
# Clean apt cache
# Clean apt cache
sudo apt clean
sudo apt clean
</pre>


# Find large files (when du doesn't work)
==== Find Large Files Without du ====
When du hangs or is slow:
<pre>
# Find files over 100MB
find /data2 -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh
find /data2 -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh
ls -lhS /directory/  # Sort by size without du
</syntaxhighlight>


==== Docker Overlay2 Cleanup ====
# Sort directory by size
Docker's overlay2 directory accumulates layers over time. Location: `/var/lib/docker/overlay2/` or `/data2/docker/overlay2/`
ls -lhS /directory/
 
# Count Docker veth interfaces
ip link show | grep veth | wc -l
</pre>
 
==== Docker Overlay2 Maintenance ====
Location: `/var/lib/docker/overlay2/` or `/data2/docker/overlay2/`


Regular maintenance:
<pre>
<syntaxhighlight lang="bash">
# Check Docker disk usage
# Check Docker disk usage
docker system df
docker system df


# Remove unused images
# Progressive cleanup
docker image prune -a
docker image prune -a      # Remove unused images
docker container prune      # Remove stopped containers
docker volume prune          # Remove unused volumes
docker builder prune         # Remove build cache
</pre>
 
=== System Diagnostics ===
 
==== Process Monitoring ====
<pre>
# System load
top
ps aux | grep -E "(docker|containerd)"
 
# Memory status
free -h
 
# Disk status
df -h
</pre>
 
==== Log Investigation ====
<pre>
# Check time-specific logs
sudo journalctl --since "2025-09-09 07:00" --until "2025-09-09 08:00"
 
# Docker logs
sudo journalctl -u docker -n 100


# Remove stopped containers
# System errors
docker container prune
sudo journalctl -b -p err
</pre>


# Remove unused volumes
=== Recovery Methods ===
docker volume prune
</syntaxhighlight>


=== Emergency Recovery Procedures ===
==== Console Keyboard Shortcuts ====
* '''Ctrl+Alt+F2 to F6''' - Switch TTY when console is flooded
* '''Ctrl+C''' - Interrupt running process
* '''Ctrl+Alt+Del''' - Force system reboot


==== When Console is Flooded with Errors ====
==== Volume Mount Recovery ====
'''Try these keyboard combinations:'''
When instance is inaccessible:
* `Ctrl+Alt+F2` through `F6` - Switch to different TTY
* `Ctrl+C` repeatedly - Interrupt running process
* `Ctrl+Alt+Del` - Force system reboot


==== Creating Recovery Access ====
'''Option 1: Volume Mount Method'''
# Stop broken instance
# Stop broken instance
# Create minimal rescue instance
# Create minimal rescue instance
# Detach root volume from broken instance
# Detach root volume from broken instance
# Attach to rescue instance as /dev/vdb
# Attach to rescue instance as secondary drive
# Mount and fix:
# Mount and repair:
<syntaxhighlight lang="bash">
 
<pre>
sudo mount /dev/vdb1 /mnt
sudo mount /dev/vdb1 /mnt
sudo chroot /mnt
sudo chroot /mnt
# Fix whatever is broken
# Fix issues (disable services, edit configs, etc)
systemctl disable problem-service
systemctl disable problem-service
exit
exit
sudo umount /mnt
sudo umount /mnt
</syntaxhighlight>
</pre>


'''Option 2: Rebuild Instance'''
=== Preventive Maintenance ===
* Preserves attached data volumes
* Fresh OS installation
* Keeps IP address
* Requires reinstalling services


=== System Diagnostics ===
==== Weekly Tasks ====
* Clean Docker: `docker system prune -a --volumes`
* Check disk usage: `df -h`
* Review Docker disk usage: `docker system df`
 
==== Monthly Tasks ====
* Clean old logs: `sudo journalctl --vacuum-time=30d`
* Update system packages: `sudo apt update && sudo apt upgrade`
* Review container resource usage
 
==== Critical Files ====
{| class="wikitable"
! File/Directory !! Purpose
|-
| /etc/docker/daemon.json || Docker daemon configuration
|-
| /etc/systemd/system/docker.service.d/ || Docker service overrides
|-
| /var/lib/docker/ || Docker data directory
|-
| /etc/caddy/Caddyfile || Reverse proxy configuration
|}
 
=== Network Configuration ===


==== Essential Diagnostic Commands ====
==== Docker Network Alternatives ====
<syntaxhighlight lang="bash">
When bridge networking fails:
# System load and processes
top
htop
ps aux | grep -E "(docker|high-cpu-process)"


# Disk I/O issues
<pre>
iostat -x 1 3
# Host networking (shares host network)
iotop
docker run --network host image:tag


# Network interfaces
# No network
ip link show | grep veth | wc -l  # Count Docker interfaces
docker run --network none image:tag


# Memory status
# Custom network
free -h
docker network create mynet --driver bridge
docker run --network mynet image:tag
</pre>


# Disk usage (alternatives to du)
==== Firewall Management ====
df -h
With Docker iptables disabled:
ls -lhS /directory/
* Manage ports via Caddy reverse proxy
find /path -type f -size +100M -exec ls -lh {} \;
* Use ufw for firewall rules
</syntaxhighlight>
* Manual iptables configuration if needed


==== Log Investigation ====
=== Monitoring Thresholds ===
<syntaxhighlight lang="bash">
# Check system logs for time period
sudo journalctl --since "2025-09-09 07:00" --until "2025-09-09 08:00"


# Docker-specific logs
{| class="wikitable"
sudo journalctl -u docker -n 100
! Metric !! Warning Level !! Critical Level
|-
| Disk Usage || 85% || 95%
|-
| CPU Usage (sustained) || 70% || 90%
|-
| Memory Usage || 80% || 90%
|-
| Docker overlay2 size || 20GB || 30GB
|}


# Check for errors
== Service-Specific Documentation ==
sudo journalctl -b -p err


# When logs show nothing (system too broken to log)
=== Core Services ===
# This indicates severe resource exhaustion
</syntaxhighlight>


=== Preventive Measures ===
==== Caddy (Reverse Proxy) ====
* '''Port:''' 80/443
* '''Config:''' /etc/caddy/Caddyfile
* '''Features:''' Automatic SSL, HTTP/2, reverse proxy
* '''Restart:''' `sudo systemctl restart caddy`


==== Regular Maintenance Tasks ====
==== Docker & Containerd ====
<syntaxhighlight lang="bash">
* '''Config:''' /etc/docker/daemon.json
# Weekly: Clean Docker
* '''Data:''' /data2/docker/
docker system prune -a --volumes
* '''Status:''' `systemctl status docker`
* '''Logs:''' `journalctl -u docker`


# Monthly: Clean logs
==== PM2 Process Manager ====
sudo journalctl --vacuum-time=30d
* '''Status:''' `pm2 status`
* '''Logs:''' `pm2 logs`
* '''Save config:''' `pm2 save`
* '''Startup script:''' `pm2 startup`


# Monitor disk usage
=== Container Management ===
df -h
docker system df
</syntaxhighlight>


==== Critical Configuration Files ====
==== Essential Container Commands ====
* `/etc/docker/daemon.json` - Docker daemon configuration
<pre>
* `/etc/systemd/system/docker.service.d/` - Docker service overrides
# View all containers
* `/var/lib/docker/` - Docker data directory (can be symlinked to larger disk)
docker ps -a


==== Resource Monitoring ====
# Start specific service
Set up alerts for:
docker start container_name
* Disk usage above 90%
* CPU usage sustained above 80%
* Memory usage above 85%
* Docker overlay2 directory size


=== Network Configuration for VPS ===
# View logs
docker logs -f container_name


==== Alternative Docker Network Modes ====
# Restart with docker-compose
When bridge networking causes issues:
cd /path/to/project
<syntaxhighlight lang="bash">
docker-compose up -d
# Host networking (shares host network stack)
docker run --network host image:tag


# None (no network)
# Rebuild container
docker run --network none image:tag
docker-compose build --no-cache
docker-compose up -d
</pre>


# Custom networks (create your own)
==== Backup Procedures ====
docker network create mynet --driver bridge
* MediaWiki: Backup scripts in `/home/debian/mediawiki/`
docker run --network mynet image:tag
* Docker volumes: Located in `/data2/docker/volumes/`
</syntaxhighlight>
* Databases: Regular dumps to `/data/backups/`
* Configuration: Version controlled in git repositories


==== Firewall Considerations ====
[[Category:System Administration]]
Docker manipulates iptables by default. To prevent this:
[[Category:Docker]]
* Set `"iptables": false` in daemon.json
[[Category:VPS Management]]
* Manage firewall rules manually with ufw or iptables
* Use reverse proxy (Caddy/Nginx) for port management

Latest revision as of 13:43, 9 September 2025

VPS Documentation

Self-hosted services and applications running on the ejfvps infrastructure

Applications

System Overview

Hardware Specifications

Component Specification
Host System Debian GNU/Linux 12 (bookworm)
Kernel Linux 6.1.0-37-cloud-amd64
Hostname ejfvps
Architecture x86_64
CPU Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (2 cores)
Memory 3.8GB RAM
Root Storage 7.8GB (/dev/vda1)
Data Storage 20GB (/dev/vdb1)
Data2 Storage 49GB (/dev/vdc)

Port Mapping

Service Internal Port Public URL Purpose
Main Website 3013 ejfox.com Personal site & blog
Personal APIs 3013 ejfox.com/api/* Self-quantification endpoints
MediaWiki 8437 archive.ejfox.com Knowledge base
ArchiveBox 4040 snap.ejfox.com Web archiving
Smallweb 7777 ejfox.tools Development platform
n8n 5678 n8n.tools.ejfox.com Workflow automation
Datasette 8002 datasette.tools.ejfox.com Data exploration
Capabilities 9991 capabilities.tools.ejfox.com Skills tracking
Grafana 3333 grafana.tools.ejfox.com Metrics dashboards
Loki 3100 loki.tools.ejfox.com Log aggregation
Umami 3900 umami.tools.ejfox.com Web analytics
Uptime Kuma 54321 status.tools.ejfox.com Uptime monitoring
Room302 3012 room302.studio Creative projects

Docker Troubleshooting

Emergency Procedures

Kill Runaway Docker Process

When dockerd consumes 100%+ CPU:

# Force kill Docker
sudo kill -9 $(pgrep dockerd)
sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo systemctl stop containerd

Disable Docker Bridge Networking

Prevents bridge networking conflicts on VPS:

# Edit /etc/docker/daemon.json
{
  "iptables": false,
  "bridge": "none"
}

# Restart Docker
sudo systemctl restart docker

Prevent Docker Auto-Restart

sudo systemctl stop docker docker.socket containerd
sudo systemctl disable docker docker.socket containerd
sudo systemctl mask docker  # Prevents any activation

Disk Space Management

Quick Cleanup Commands

# Nuclear Docker cleanup (removes ALL unused data)
docker system prune -a --volumes --force

# Clean journal logs
sudo journalctl --vacuum-time=3d

# Clean apt cache
sudo apt clean

Find Large Files Without du

When du hangs or is slow:

# Find files over 100MB
find /data2 -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh

# Sort directory by size
ls -lhS /directory/

# Count Docker veth interfaces
ip link show | grep veth | wc -l

Docker Overlay2 Maintenance

Location: `/var/lib/docker/overlay2/` or `/data2/docker/overlay2/`

# Check Docker disk usage
docker system df

# Progressive cleanup
docker image prune -a       # Remove unused images
docker container prune       # Remove stopped containers
docker volume prune          # Remove unused volumes
docker builder prune         # Remove build cache

System Diagnostics

Process Monitoring

# System load
top
ps aux | grep -E "(docker|containerd)"

# Memory status
free -h

# Disk status
df -h

Log Investigation

# Check time-specific logs
sudo journalctl --since "2025-09-09 07:00" --until "2025-09-09 08:00"

# Docker logs
sudo journalctl -u docker -n 100

# System errors
sudo journalctl -b -p err

Recovery Methods

Console Keyboard Shortcuts

  • Ctrl+Alt+F2 to F6 - Switch TTY when console is flooded
  • Ctrl+C - Interrupt running process
  • Ctrl+Alt+Del - Force system reboot

Volume Mount Recovery

When instance is inaccessible:

  1. Stop broken instance
  2. Create minimal rescue instance
  3. Detach root volume from broken instance
  4. Attach to rescue instance as secondary drive
  5. Mount and repair:
sudo mount /dev/vdb1 /mnt
sudo chroot /mnt
# Fix issues (disable services, edit configs, etc)
systemctl disable problem-service
exit
sudo umount /mnt

Preventive Maintenance

Weekly Tasks

  • Clean Docker: `docker system prune -a --volumes`
  • Check disk usage: `df -h`
  • Review Docker disk usage: `docker system df`

Monthly Tasks

  • Clean old logs: `sudo journalctl --vacuum-time=30d`
  • Update system packages: `sudo apt update && sudo apt upgrade`
  • Review container resource usage

Critical Files

File/Directory Purpose
/etc/docker/daemon.json Docker daemon configuration
/etc/systemd/system/docker.service.d/ Docker service overrides
/var/lib/docker/ Docker data directory
/etc/caddy/Caddyfile Reverse proxy configuration

Network Configuration

Docker Network Alternatives

When bridge networking fails:

# Host networking (shares host network)
docker run --network host image:tag

# No network
docker run --network none image:tag

# Custom network
docker network create mynet --driver bridge
docker run --network mynet image:tag

Firewall Management

With Docker iptables disabled:

  • Manage ports via Caddy reverse proxy
  • Use ufw for firewall rules
  • Manual iptables configuration if needed

Monitoring Thresholds

Metric Warning Level Critical Level
Disk Usage 85% 95%
CPU Usage (sustained) 70% 90%
Memory Usage 80% 90%
Docker overlay2 size 20GB 30GB

Service-Specific Documentation

Core Services

Caddy (Reverse Proxy)

  • Port: 80/443
  • Config: /etc/caddy/Caddyfile
  • Features: Automatic SSL, HTTP/2, reverse proxy
  • Restart: `sudo systemctl restart caddy`

Docker & Containerd

  • Config: /etc/docker/daemon.json
  • Data: /data2/docker/
  • Status: `systemctl status docker`
  • Logs: `journalctl -u docker`

PM2 Process Manager

  • Status: `pm2 status`
  • Logs: `pm2 logs`
  • Save config: `pm2 save`
  • Startup script: `pm2 startup`

Container Management

Essential Container Commands

# View all containers
docker ps -a

# Start specific service
docker start container_name

# View logs
docker logs -f container_name

# Restart with docker-compose
cd /path/to/project
docker-compose up -d

# Rebuild container
docker-compose build --no-cache
docker-compose up -d

Backup Procedures

  • MediaWiki: Backup scripts in `/home/debian/mediawiki/`
  • Docker volumes: Located in `/data2/docker/volumes/`
  • Databases: Regular dumps to `/data/backups/`
  • Configuration: Version controlled in git repositories