{"id":24731443,"url":"https://github.com/awoyele/multi-wordpress-docker-stack","last_synced_at":"2026-04-02T18:52:31.103Z","repository":{"id":273158987,"uuid":"918859540","full_name":"awoyele/multi-wordpress-docker-stack","owner":"awoyele","description":"Docker-powered stack for running multiple WordPress sites on a single server with isolated environments and easy deployment","archived":false,"fork":false,"pushed_at":"2025-01-19T03:43:24.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-27T16:49:23.900Z","etag":null,"topics":["containerization","docker","docker-compose","multi-site","multisite","nginx-proxy","php","webhosting","wordpress"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/awoyele.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-19T03:38:14.000Z","updated_at":"2025-01-19T03:48:38.000Z","dependencies_parsed_at":"2025-01-19T04:28:44.646Z","dependency_job_id":"9a5c4b87-8f6c-48ac-be00-c08cde97ae73","html_url":"https://github.com/awoyele/multi-wordpress-docker-stack","commit_stats":null,"previous_names":["awoyele/multi-wordpress-docker-stack"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awoyele%2Fmulti-wordpress-docker-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awoyele%2Fmulti-wordpress-docker-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awoyele%2Fmulti-wordpress-docker-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awoyele%2Fmulti-wordpress-docker-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/awoyele","download_url":"https://codeload.github.com/awoyele/multi-wordpress-docker-stack/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244981293,"owners_count":20542288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containerization","docker","docker-compose","multi-site","multisite","nginx-proxy","php","webhosting","wordpress"],"created_at":"2025-01-27T16:49:32.860Z","updated_at":"2025-12-30T22:07:06.864Z","avatar_url":"https://github.com/awoyele.png","language":"PHP","readme":"# WordPress Docker Development Environment\n\nThis is a Docker-based development environment for WordPress, featuring MySQL, phpMyAdmin, and Nginx Proxy Manager.\n\n## Initial Setup\n\n1. **Environment Configuration**\n   ```bash\n   cp .env.sample .env\n   ```\n   Edit `.env` with your preferred settings:\n   - `IP`: Local IP address (default: 127.0.0.1)\n   - `PORT`: WordPress port (default: 8000)\n   - `DB_NAME`: Database name (default: wordpress)\n   - `DB_ROOT_PASSWORD`: MySQL root password (default: somewordpress)\n\n2. **Start MySQL First**\n   ```bash\n   docker-compose up -d db\n   ```\n   Wait a few seconds for MySQL to initialize completely.\n\n3. **Start WordPress and Nginx Proxy**\n   ```bash\n   docker-compose up -d wp proxy\n   ```\n   This will start:\n   - WordPress at http://127.0.0.1:8000 (or your configured IP:PORT)\n   - Nginx Proxy Manager at http://127.0.0.1:81\n\n## Accessing Services\n\n### WordPress\n- Main site: http://127.0.0.1:8000 (or your configured IP:PORT)\n- Admin panel: http://127.0.0.1:8000/wp-admin\n\n### phpMyAdmin\n- Access at: http://127.0.0.1:8080\n- Login with:\n  - Server: db\n  - Username: root\n  - Password: (your DB_ROOT_PASSWORD from .env)\n\n### Nginx Proxy Manager\n- Admin UI: http://127.0.0.1:81\n- Default login:\n  - Email: admin@example.com\n  - Password: changeme\n- [Setting up Reverse Proxy](#setting-up-reverse-proxy-with-nginx-proxy-manager)\n\n## Using WP-CLI\n\nWP-CLI is included for WordPress management. Here are some common commands:\n\n1. **Update WordPress Core**\n   ```bash\n   docker-compose run --rm wpcli core update\n   ```\n\n2. **Update Themes**\n   ```bash\n   # List themes\n   docker-compose run --rm wpcli theme list\n   \n   # Update all themes\n   docker-compose run --rm wpcli theme update --all\n   \n   # Update specific theme\n   docker-compose run --rm wpcli theme update theme-name\n   ```\n\n3. **Update Plugins**\n   ```bash\n   # List plugins\n   docker-compose run --rm wpcli plugin list\n   \n   # Update all plugins\n   docker-compose run --rm wpcli plugin update --all\n   ```\n\n## Project Structure\n\n```\n.\n├── wordpress/\n│   ├── wp-app/\n│   │   ├── wp-config.php\n│   │   └── wp-content/\n│   └── config/\n├── database/\n│   ├── mysql/\n│   ├── wp-data/\n│   └── config/\n└── proxy/\n    ├── data/\n    └── letsencrypt/\n```\n\n- `wordpress/`: Contains WordPress configuration and content\n- `database/`: Contains MySQL data and phpMyAdmin configuration\n- `proxy/`: Contains Nginx Proxy Manager data and certificates\n\n## Database Management with phpMyAdmin\n\n1. **Viewing Database**\n   - Log in to phpMyAdmin at http://127.0.0.1:8080\n   - Navigate to your database (default: wordpress)\n   - Browse tables, run queries, and manage data\n\n2. **Common Operations**\n   - View table structure and data\n   - Export/Import databases\n   - Run SQL queries\n   - Manage users and permissions\n\n## Maintenance\n\n1. **Backup Database**\n   ```bash\n   docker-compose exec db mysqldump -u root -p wordpress \u003e backup.sql\n   ```\n\n2. **Stop All Services**\n   ```bash\n   docker-compose down\n   ```\n\n3. **View Logs**\n   ```bash\n   docker-compose logs -f [service_name]\n   ```\n   Replace [service_name] with: wp, db, proxy, or pma\n\n## Running Multiple WordPress Sites\n\nYou can run multiple WordPress sites using this setup, sharing the main MySQL server but with separate databases. Here's how to set up additional sites:\n\n1. **Create New Site Directory Structure**\n   ```bash\n   # Create required directories\n   mkdir -p site2/{config,wp-app/wp-content}\n   \n   # Copy configuration files\n   cp wordpress/config/wp_php.ini site2/config/\n   ```\n\n2. **Set Up Configuration Files**\n   - Create `.env` from template:\n     ```bash\n     cd site2\n     cp .env.sample .env\n     ```\n   - Configure in `.env`:\n     - Different PORT (e.g., 8001)\n     - Different DB_NAME (e.g., wordpress_site2)\n     - Same DB_ROOT_PASSWORD as main site\n\n   - Create wp-config.php with:\n     - Unique table prefix (e.g., 'wp_site2_')\n     - Different authentication keys and salts\n\n3. **Create Database and Start Site**\n   ```bash\n   # Create new database\n   docker-compose exec db mysql -u root -p -e \"CREATE DATABASE IF NOT EXISTS wordpress_site2;\"\n   \n   # Navigate to site directory\n   cd site2\n   \n   # Start WordPress\n   docker-compose up -d\n   ```\n\nYour new site will be available at http://127.0.0.1:8001 (or your configured IP:PORT)\n\n### Multi-Site Architecture\n\nEach site has its own:\n- Docker Compose file (using shared MySQL)\n- WordPress container\n- Environment configuration\n- wp-content directory\n- Database (on shared MySQL server)\n\nBenefits of this approach:\n- Simplified database management\n- Shared MySQL resources\n- Independent WordPress instances\n- Separate content directories\n- Easy database backups through phpMyAdmin\n\n### Using Nginx Proxy Manager\n\nYou can still use the main installation's Nginx Proxy Manager to:\n- Set up different domains for each site\n- Manage SSL certificates\n- Configure reverse proxies for all sites\n\n## Notes\n\n- The wp-content directory is persistent and stored locally\n- Database data is stored in ./database/mysql\n- For production, ensure you change all default passwords in .env\n- Keep your WordPress core, themes, and plugins updated using WP-CLI\n\n## Setting up Reverse Proxy with Nginx Proxy Manager\n\nThe Nginx Proxy Manager allows you to easily set up reverse proxies for your WordPress site. This is particularly useful when:\n- You want to access your site using a domain name instead of IP:PORT\n- You need to set up SSL/TLS certificates\n- You're running multiple sites on different ports\n\n### Steps to Configure a Reverse Proxy\n\n1. **Access Nginx Proxy Manager**\n   - Go to http://127.0.0.1:81\n   - Log in with default credentials (if first time)\n   - Change default password when prompted\n\n2. **Add a New Proxy Host**\n   - Click \"Add Proxy Host\"\n   - Fill in the following:\n     - Domain Names: Your domain (e.g., yourdomain.local)\n     - Scheme: http\n     - Forward Hostname/IP: wp\n     - Forward Port: 80\n     - Configure any additional settings as needed\n\n3. **SSL/TLS Configuration (Optional)**\n   - In the SSL tab of your proxy host:\n     - Select \"Request a new SSL Certificate\"\n     - Or \"Use a custom certificate\" if you have one\n     - Enable Force SSL if desired\n\n4. **Advanced Configuration**\n   - Custom locations\n   - Websockets support\n   - Access lists\n   - Custom headers\n\n### Important Notes\n- The container name 'wp' is used as the Forward Hostname because Docker's internal DNS will resolve it\n- Make sure your domain points to your server's IP if using a real domain\n- For local development, add your domain to your hosts file\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawoyele%2Fmulti-wordpress-docker-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fawoyele%2Fmulti-wordpress-docker-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawoyele%2Fmulti-wordpress-docker-stack/lists"}