4.9 KiB
Developer Guide
This guide contains information relevant to developers working on the Mold Cost Calculator application, including the deployment process and other technical details.
Environments
The application is set up with two distinct, isolated environments running on the server1 host:
- Production: The live application accessible at
moldcost.jimmygan.com. - Staging: A complete replica of the production environment for testing, accessible at
dev.moldcost.jimmygan.com.
Automated CI/CD Deployment Workflow (v2.0)
The project uses a self-hosted Continuous Integration/Continuous Deployment (CI/CD) pipeline on the production server (server1). This is achieved using a "branch-aware" post-receive Git hook.
How It Works
The deployment process is fully automated and triggered by git push:
- A developer pushes code to a specific branch (
developmentormaster). - The push action is received by the bare Git repository located at
/var/repo/mold_cost_online_tool.git. - The
post-receivehook script is automatically triggered. - The script inspects the branch name:
- If the push is to the
developmentbranch, it executes the staging deployment script (redeploy.staging.sh). - If the push is to the
masterbranch, it executes the production deployment script (redeploy.sh).
- If the push is to the
- The respective deployment script handles pulling the latest code, rebuilding the correct container image, and restarting the application services for that specific environment.
This workflow provides a safe and automated way to test changes in a production-like staging environment before deploying them to the live production environment.
Workflow Diagram
graph LR
subgraph "Developer's Local Machine"
A[git push origin development] --> C{Git Server}
B[git push origin master] --> C
end
subgraph "Remote Server (server1)"
C -- "Triggers Hook" --> D{post-receive Hook}
D -- "Reads Branch" --> E{Branch is 'development'?}
D -- "Reads Branch" --> F{Branch is 'master'?}
E -- "Yes" --> G[Execute ./redeploy.staging.sh]
F -- "Yes" --> H[Execute ./redeploy.sh]
subgraph "Staging Environment (dev.moldcost.jimmygan.com)"
G --> I[Build Staging Image]
I --> J[Run Staging Containers<br>App on Port 5003<br>DB on Port 5434]
end
subgraph "Production Environment (moldcost.jimmygan.com)"
H --> K[Build Production Image]
K --> L[Run Production Containers<br>App on Port 5002<br>DB on Port 5433]
end
end
style A fill:#cce5ff,stroke:#333
style B fill:#cce5ff,stroke:#333
style E fill:#e6f7ff,stroke:#333
style F fill:#e6f7ff,stroke:#333
style I fill:#d4edda,stroke:#333
style K fill:#d4edda,stroke:#333
Database Synchronization
To ensure the staging environment has relevant data for testing, the production database is synced to the staging database automatically every night. This is handled by a cron job on the server that executes the sync_prod_to_staging_db.sh script. This process overwrites the staging database completely, ensuring a fresh, but isolated, dataset.
The development database is mold_cost_development and runs in a container named mold_cost_db_development. It is completely isolated from the production database.
To keep the development database populated with realistic data, we use a script to sync the production database to it.
Database Sync Script
The script sync_prod_to_dev_db.sh is located in the project root. It performs the following actions:
- Dumps the entire contents of the
productiondatabase. - Drops and recreates the
developmentdatabase. - Restores the dump into the
developmentdatabase.
WARNING: This is a destructive operation for the development database. Any changes made directly to the development DB will be wiped out when the script runs.
Automating with Cron
To run this sync automatically, you should set up a cron job on the server (server1). A good practice is to run it nightly.
- SSH into
server1. - Open the crontab editor:
crontab -e - Add the following line to run the script every day at 3:00 AM:
0 3 * * * /home/jimmyg/mold_cost_online_tool/sync_prod_to_dev_db.sh - Make sure the script is executable:
chmod +x /home/jimmyg/mold_cost_online_tool/sync_prod_to_dev_db.sh
Logs for the sync process are stored at /home/jimmyg/mold_cost_online_tool/logs/db_sync.log.
Finalizing Setup
Once all the above is configured, the setup is complete. You can now:
- Push to the
developmentbranch to deploy todev.moldcost.jimmygan.com. - Push to the
masterbranch to deploy tomoldcost.jimmygan.com. - Have the development database automatically sync with production data nightly.
You should perform a one-time, manual run of the sync script to initially populate the development database.