5.9 KiB
Blogging CMS - Coolify Installation Guide
Deploy your self-hosted blogging platform on Coolify in minutes.
Prerequisites
- Active Coolify instance (v4.0+)
- Git repository (GitHub, GitLab, Gitea)
- Domain name (optional, but recommended)
- 1GB RAM minimum
Step 1: Prepare Your Repository
-
Fork or clone this repository to your Git provider
git clone https://github.com/kalvin0x8d0/blogging-cms.git cd blogging-cms -
Push to your Git provider (if using your own fork)
git remote add origin <your-git-repo-url> git push -u origin main
Step 2: Create Coolify Project
- Log into your Coolify dashboard
- Click "New Project"
- Select "Docker Compose" as the project type
- Name your project (e.g., "My Blog")
Step 3: Connect Your Git Repository
- Click "New Service"
- Select "Git Repository"
- Choose your Git provider (GitHub/GitLab/Gitea)
- Select this repository
- Leave the path as
.(root directory) - Click "Save"
Step 4: Configure Environment Variables
In Coolify's environment editor, add:
# Database
DB_HOST=mariadb
DB_PORT=3306
DB_USER=cms_user
DB_PASSWORD=generate_secure_password_here
DB_ROOT_PASSWORD=generate_root_password_here
DB_NAME=blogging_cms
# Application
PORT=8080
SITE_URL=https://yourdomain.com
SESSION_KEY=generate_secure_random_key_here
# Optional
MARKDOWN_BREAKS=true
MARKDOWN_TYPOGRAPHER=false
Generating Secure Keys
# Generate SESSION_KEY (on your local machine)
openssl rand -base64 32
# Or use this Python one-liner
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
Step 5: Configure Reverse Proxy (Caddy)
- In Coolify, go to "Network" or "Proxy" settings
- Click "New Reverse Proxy"
- Set Domain:
yourdomain.com - Set Target:
http://localhost:8080(or container name) - Enable HTTPS: Yes (auto-certificate with Let's Encrypt)
- Save
Step 6: Deploy
- Click "Deploy" in your project
- Monitor logs:
docker-compose logs -f - Wait for MariaDB to initialize (30-60 seconds)
Step 7: Access Your Blog
- Homepage:
https://yourdomain.com - Dashboard:
https://yourdomain.com/dashboard - RSS Feed:
https://yourdomain.com/feed
Post-Deployment
1. First-Time Setup
# Access Coolify terminal
docker-compose exec app sh
# Check database connection
go run main.go
2. Create Admin User
# Via API (POST request)
curl -X POST https://yourdomain.com/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"email": "you@example.com",
"password": "secure_password"
}'
3. Backup Strategy
Enable automated backups in Coolify:
- Storage Settings → Add Volume Backup
- Select:
mariadb_data - Frequency: Daily or Weekly
- Retention: 30 days
4. Domain Configuration
If using DNS, add:
blog.example.com CNAME your-coolify-domain.com
Troubleshooting
Container Won't Start
Check logs:
docker-compose logs app
docker-compose logs mariadb
Common issues:
- Port 8080 already in use → Change PORT in environment
- MariaDB not ready → Wait 1-2 minutes, redeploy
- Database password error → Verify all DB_* variables match
Posts Not Showing
-
Verify database is running:
docker-compose exec mariadb mysql -u cms_user -p blogging_cms -e "SHOW TABLES;" -
Check if posts are published:
SELECT title, published FROM posts LIMIT 5;
Static Files Return 404
- Ensure
/staticdirectory exists - Check file permissions in Docker:
ls -la static/ - Verify paths in
main.gomatch your setup
HTTPS Certificate Issues
-
Let's Encrypt renewal:
docker-compose down docker-compose up -d -
Manual certificate:
- Use Coolify's built-in cert manager
- Or configure in reverse proxy settings
Monitoring & Maintenance
Health Checks
Coolify monitors the / endpoint. If unhealthy:
curl https://yourdomain.com/
Database Maintenance
Weekly optimization:
docker-compose exec mariadb mysql -u cms_user -p blogging_cms \
-e "OPTIMIZE TABLE posts, users, comments;"
Log Rotation
Coolify handles log rotation automatically. Check:
- Application logs: Docker logs
- Access logs: Reverse proxy logs
Performance Optimization
For Coolify
-
Enable Docker layer caching
- Coolify → Project Settings → Docker
-
Set appropriate resource limits
- mariadb: 256MB RAM
- app: 128MB RAM
-
Enable persistent volumes
- Database data
- Static assets cache
Application Settings
Add to environment:
# Connection pooling
DB_MAX_CONNECTIONS=20
# Cache headers
CACHE_POSTS=3600
Updating the Application
-
Pull latest changes:
git pull origin main git push origin main -
Coolify auto-redeployment (if enabled)
- Or manually trigger deploy
-
Database migrations:
- Usually automatic on startup
- Check logs for any errors
Backup & Restore
Automatic Backups
Coolify has built-in volume backup:
- Storage → Volumes → mariadb_data
- Set backup schedule
- Retention policy: 30 days
Manual Backup
docker-compose exec mariadb mysqldump \
-u cms_user -p blogging_cms > backup.sql
Restore
docker-compose exec mariadb mysql \
-u cms_user -p blogging_cms < backup.sql
Security Checklist
- ✅ Change all default passwords
- ✅ Enable HTTPS via Let's Encrypt
- ✅ Set strong SESSION_KEY
- ✅ Enable database backups
- ✅ Configure firewall rules
- ✅ Monitor access logs
- ✅ Keep Coolify updated
Getting Help
- Issues: GitHub Issues (if public repo)
- Coolify Docs: docs.coollabs.io
- Docker Help: docs.docker.com
Your self-hosted blog is ready! 🎉
Start writing at https://yourdomain.com/dashboard ✍️