An opinionated, production-ready Ubuntu server management toolkit for WordPress with modular architecture, state persistence, and beautiful CLI output.
Before using these scripts, ensure your server meets these requirements:
- Fresh Ubuntu Install - Ubuntu 24.04 LTS
- Root Access - Must have root or sudo privileges
- Available Ports - Ports 21, 22, 80, 443 must be free
- FTP Passive Ports - Ports 30000-31000 must be available
# Clone the repository
git clone https://github.com/emreerkan/sesemi.git
cd sesemi
# Simple - just provide domain
sudo ./setup.sh example.com
# Continue interrupted installation
sudo ./setup.sh example.com --continue
# Restart from beginning
sudo ./setup.sh example.com --restart# 0. On target server: Clone the repository
git clone https://github.com/emreerkan/sesemi.git
cd sesemi
# 1. On source server: Prepare migration files
# Use migration helper script or manually gather required files
./prepare-migration.sh
# 2. Transfer migration-example.com.tar.gz to target server
scp migration-example.com.tar.gz root@your-target-server-ip:~
# 3. On target server: Extract and migrate
tar -xzf migration-example.com.tar.gz
sudo ./migrate.sh example.com ./migration-example.com
# Continue interrupted migration
sudo ./migrate.sh example.com ./migration-example.com --continue- docs/SETUP.md - Complete setup guide with quick start
- docs/MIGRATION.md - Complete migration guide with quick start
- docs/TESTING.md - Testing with Multipass VMs (macOS)
- Modular Architecture - Clean lib/ directory with versioned modules
- State Persistence - Resume from interruption points
- Error Handling - Comprehensive validation and error messages
- Beautiful Output - Color-coded progress with step counters
- Detailed Logging - Complete operation logs
- Fresh WordPress installation (production + staging)
- Random credential generation (for setup)
- SSL (Cloudflare origin or self-signed)
- WP-CLI integration
- Cleanup capability
- Server-to-server WordPress migration
- File validation (7 required files)
- Database import
- Cloudflare origin certificates required
- Helper script for source preparation
Shared by both setup and migration scripts:
common/apache.sh- Apache virtual hosts configurationcommon/colors.sh- ANSI color codes for terminal outputcommon/firewall.sh- UFW firewall configurationcommon/ftp.sh- vsftpd FTP server setupcommon/logger.sh- Logging and output functionscommon/packages.sh- APT package installationcommon/wpcli.sh- WP-CLI installation
Used only by setup.sh:
setup/certificates.sh- SSL certificate handling (Cloudflare or self-signed)setup/cleanup.sh- Cleanup operations for previous installationssetup/database.sh- MariaDB database creation with random credentialssetup/state.sh- State management and persistencesetup/system.sh- User and folder creationsetup/validators.sh- Input and environment validationsetup/wordpress.sh- Fresh WordPress installation
Used only by migrate.sh:
migrate/certificates.sh- SSL certificate installation (Cloudflare origin only)migrate/database.sh- Database import from SQL dumpsmigrate/files.sh- WordPress file extraction and permissionsmigrate/state.sh- Migration state managementmigrate/system.sh- User and folder creationmigrate/validators.sh- File and environment validation
- Apache 2.4
- MariaDB 11.x
- PHP 8.3+ (auto-detected)
- vsftpd
- WP-CLI
- UFW firewall
- Setting up a brand new server
- Creating a new WordPress site
- No existing WordPress installation
- Starting from scratch
- Moving site from Server A to Server B
- Same domain (no URL changes)
- Have existing database dumps and files
- Production environment migration
- Firewall automatically configured (ports 80, 443, 21)
- Strong random password generation
- File permissions properly set (775/664)
- ACL support for shared access
- MariaDB secured with root password
/root/sesemi/setup/$DOMAIN/state.json- Step trackingcredentials.txt- All passwordsconfig.env- Configurationsetup.log- Operation log
/root/sesemi/migration/$DOMAIN/state.json- Step trackingmigration_summary.txt- Migration summarymigration.log- Operation log
For issues or questions:
- Check docs/SETUP.md for setup issues
- Check docs/MIGRATION.md for migration issues
- Review logs in
/root/sesemi/{setup,migration}/$DOMAIN/ - Use
--helpflag for usage information
MIT License - Feel free to use and modify!
Base code: Emre Erkan | X | Web Site | GitHub.
AI assistance: Copilot with Claude Sonnet 4.5
Developed for reliable WordPress server management with focus on:
- Code maintainability through modular design
- Operational reliability through state persistence
- User experience through clear progress feedback