mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 07:51:09 -05:00
- 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
207 lines
5.6 KiB
YAML
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
|