This repository contains two Next.js applications:
- cptsd-cms: Content Management System (hosted at
cms.cptsd.in) - cptsd-blog-public: Public blog application (hosted at
blog.cptsd.in)
cptsd/
βββ cptsd-cms/ # CMS application
β βββ app/ # Next.js app directory
β βββ components/ # React components
β βββ lib/ # Utility libraries
β βββ models/ # MongoDB models
β βββ Dockerfile # Docker image definition
β βββ docker-compose.yml
β βββ Jenkinsfile # CI/CD pipeline
β
βββ cptsd-blog-public/ # Blog public application
β βββ lib/ # Utility libraries
β βββ models/ # MongoDB models
β βββ Dockerfile # Docker image definition
β βββ docker-compose.yml
β βββ Jenkinsfile # CI/CD pipeline
β
βββ docker-compose.jenkins.yml # Jenkins CI/CD server
βββ scripts/ # Deployment and setup scripts
βββ .gitignore
- Docker and Docker Compose
- Caddy (for reverse proxy with SSL)
- Access to server with root privileges
- Domain DNS access (GoDaddy)
# On your server
./scripts/setup-domains.sh
./scripts/setup-jenkins.shIn GoDaddy DNS settings, add A records:
cmsβ Your server IPblogβ Your server IPjenkinsβ Your server IP
./scripts/init-git.shgit remote add origin https://github.com/yourusername/cptsd.git
git branch -M main
git push -u origin main- Navigate to
https://jenkins.cptsd.in - Get initial admin password:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword - Install recommended plugins
- Create new Pipeline job:
cptsd-cms - Configure:
- Pipeline definition: Pipeline script from SCM
- SCM: Git
- Repository URL: Your GitHub repository URL
- Script Path:
cptsd-cms/Jenkinsfile - Branch:
*/main(or*/master)
- Create new Pipeline job:
cptsd-blog-public - Configure:
- Pipeline definition: Pipeline script from SCM
- SCM: Git
- Repository URL: Your GitHub repository URL
- Script Path:
cptsd-blog-public/Jenkinsfile - Branch:
*/main(or*/master)
- In GitHub repository settings β Webhooks
- Add webhook:
- Payload URL:
https://jenkins.cptsd.in/github-webhook/ - Content type:
application/json - Events:
Just the push event
- Payload URL:
- This will trigger automatic builds on push
cd /opt/cptsd-cms
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildcd /opt/cptsd-blog-public
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildEach application requires a .env file in its deployment directory:
MONGODB_URI=mongodb://admin:password@mongodb:27017/cptsd-cms?authSource=admin
S3_ENDPOINT=http://minio:9000
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
S3_BUCKET_NAME=cptsd-cms
OPENAI_API_KEY=sk-...
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=secure-password
NEXTAUTH_URL=https://cms.cptsd.in
NEXTAUTH_SECRET=...MONGODB_URI=mongodb://admin:password@mongodb:27017/cptsd-cms?authSource=admin- CMS: https://cms.cptsd.in
- Blog: https://blog.cptsd.in
- Jenkins: https://jenkins.cptsd.in
# CMS
cd /opt/cptsd-cms && docker-compose ps
# Blog
cd /opt/cptsd-blog-public && docker-compose ps
# Jenkins
docker ps | grep jenkins# CMS
cd /opt/cptsd-cms && docker-compose logs -f
# Blog
cd /opt/cptsd-blog-public && docker-compose logs -f
# Jenkins
docker logs -f jenkins# CMS
cd /opt/cptsd-cms && docker-compose restart
# Blog
cd /opt/cptsd-blog-public && docker-compose restartEnsure Jenkins container has Docker socket mounted:
docker exec jenkins docker ps- Check Caddy status:
systemctl status caddy - Check Caddy logs:
tail -f /var/log/caddy/*.log - Verify DNS:
dig cms.cptsd.in
Check Jenkins console output and application logs:
docker logs jenkins
cd /opt/cptsd-cms && docker-compose logsPrivate project