Files
thrillwiki_django_no_react/shared/scripts/unraid/autoinstall-user-data.yaml
pacnpal d504d41de2 feat: complete monorepo structure with frontend and shared resources
- Add complete backend/ directory with full Django application
- Add frontend/ directory with Vite + TypeScript setup ready for Next.js
- Add comprehensive shared/ directory with:
  - Complete documentation and memory-bank archives
  - Media files and avatars (letters, park/ride images)
  - Deployment scripts and automation tools
  - Shared types and utilities
- Add architecture/ directory with migration guides
- Configure pnpm workspace for monorepo development
- Update .gitignore to exclude .django_tailwind_cli/ build artifacts
- Preserve all historical documentation in shared/docs/memory-bank/
- Set up proper structure for full-stack development with shared resources
2025-08-23 18:40:07 -04:00

207 lines
5.6 KiB
YAML

#cloud-config
autoinstall:
# version is an Autoinstall required field.
version: 1
# Install Ubuntu server packages and ThrillWiki dependencies
packages:
- ubuntu-server
- curl
- wget
- git
- python3
- python3-pip
- python3-venv
- nginx
- postgresql
- postgresql-contrib
- redis-server
- nodejs
- npm
- build-essential
- ufw
- fail2ban
- htop
- tree
- vim
- tmux
- qemu-guest-agent
# User creation
identity:
realname: 'ThrillWiki Admin'
username: thrillwiki
# Default [PASSWORD-REMOVED] (change after login)
password: '$6$rounds=4096$saltsalt$[AWS-SECRET-REMOVED]AzpI8g8T14F8VnhXo0sUkZV2NV6/.c77tHgVi34DgbPu.'
hostname: thrillwiki-vm
locale: en_US.UTF-8
keyboard:
layout: us
package_update: true
package_upgrade: true
# Use direct storage layout (no LVM)
storage:
swap:
size: 0
layout:
name: direct
# SSH configuration
ssh:
allow-pw: true
install-server: true
authorized-keys:
- {SSH_PUBLIC_KEY}
# Network configuration - will be replaced with proper config
network:
version: 2
ethernets:
enp1s0:
dhcp4: true
dhcp-identifier: mac
# Commands to run after installation
late-commands:
# Update GRUB
- curtin in-target -- update-grub
# Enable and start services
- curtin in-target -- systemctl enable qemu-guest-agent
- curtin in-target -- systemctl enable postgresql
- curtin in-target -- systemctl enable redis-server
- curtin in-target -- systemctl enable nginx
# Configure PostgreSQL
- curtin in-target -- sudo -u postgres createuser -s thrillwiki
- curtin in-target -- sudo -u postgres createdb thrillwiki_db
- curtin in-target -- sudo -u postgres psql -c "ALTER USER thrillwiki PASSWORD 'thrillwiki123';"
# Configure firewall
- curtin in-target -- ufw allow OpenSSH
- curtin in-target -- ufw allow 'Nginx Full'
- curtin in-target -- ufw --force enable
# Clone ThrillWiki repository if provided
- curtin in-target -- bash -c 'if [ -n "{GITHUB_REPO}" ]; then cd /home/thrillwiki && git clone "{GITHUB_REPO}" thrillwiki-app && chown -R thrillwiki:thrillwiki thrillwiki-app; fi'
# Create deployment script
- curtin in-target -- tee /home/thrillwiki/deploy-thrillwiki.sh << 'EOF'
#!/bin/bash
set -e
echo "=== ThrillWiki Deployment Script ==="
# Check if repo was cloned
if [ ! -d "/home/thrillwiki/thrillwiki-app" ]; then
echo "Repository not found. Please clone your ThrillWiki repository:"
echo "git clone YOUR_REPO_URL thrillwiki-app"
exit 1
fi
cd /home/thrillwiki/thrillwiki-app
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install Python dependencies
if [ -f "requirements.txt" ]; then
pip install -r requirements.txt
else
echo "Warning: requirements.txt not found"
fi
# Install Django if not in requirements
pip install django psycopg2-binary redis celery gunicorn
# Set up environment variables
cat > ***REMOVED*** << 'ENVEOF'
DEBUG=False
SECRET_KEY=your-secret-key-change-this
DATABASE_URL=[DATABASE-URL-REMOVED]
REDIS_URL=redis://localhost:6379/0
ALLOWED_HOSTS=localhost,127.0.0.1,thrillwiki-vm
ENVEOF
# Run Django setup commands
if [ -f "manage.py" ]; then
python manage.py collectstatic --noinput
python manage.py migrate
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@thrillwiki.com', 'thrillwiki123') if not User.objects.filter(username='admin').exists() else None" | python manage.py shell
fi
# Configure Nginx
sudo tee /etc/nginx/sites-available/thrillwiki << 'NGINXEOF'
server {
listen 80;
server_name _;
location /static/ {
alias /home/thrillwiki/thrillwiki-app/staticfiles/;
}
location /media/ {
alias /home/thrillwiki/thrillwiki-app/media/;
}
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
}
NGINXEOF
# Enable Nginx site
sudo ln -sf /etc/nginx/sites-available/thrillwiki /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
# Create systemd service for Django
sudo tee /etc/systemd/system/thrillwiki.service << 'SERVICEEOF'
[Unit]
Description=ThrillWiki Django App
After=network.target
[Service]
User=thrillwiki
Group=thrillwiki
[AWS-SECRET-REMOVED]wiki-app
[AWS-SECRET-REMOVED]wiki-app/venv/bin
ExecStart=/home/thrillwiki/thrillwiki-app/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 thrillwiki.wsgi:application
Restart=always
[Install]
WantedBy=multi-user.target
SERVICEEOF
# Enable and start ThrillWiki service
sudo systemctl daemon-reload
sudo systemctl enable thrillwiki
sudo systemctl start thrillwiki
echo "=== ThrillWiki deployment complete! ==="
echo "Access your application at: http://$(hostname -I | awk '{print $1}')"
echo "Django Admin: http://$(hostname -I | awk '{print $1}')/admin"
echo "Default superuser: admin / thrillwiki123"
echo ""
echo "Important: Change default passwords!"
EOF
# Make deployment script executable
- curtin in-target -- chmod +x /home/thrillwiki/deploy-thrillwiki.sh
- curtin in-target -- chown thrillwiki:thrillwiki /home/thrillwiki/deploy-thrillwiki.sh
# Clean up
- curtin in-target -- apt-get autoremove -y
- curtin in-target -- apt-get autoclean
# Reboot after installation
shutdown: reboot