This guide helps you deploy Bitbucket and Jira on Azure using Docker, with a shared PostgreSQL database.
Create an Azure Resource Group and provision two virtual machines:
7990, 7999, 22, 80.8080, 22, 80.5432, 22, 80.Set up a managed PostgreSQL database on Azure and create separate databases for Bitbucket and Jira.
Once connected to PostgreSQL, create two separate databases:
CREATE DATABASE bitbucket_db;
CREATE DATABASE jira_db;
Then, create a dedicated user for each application:
CREATE USER bitbucket_user WITH PASSWORD 'StrongBitbucketPassword';
CREATE USER jira_user WITH PASSWORD 'StrongJiraPassword';
Grant permissions so each user can only access its respective database:
GRANT ALL PRIVILEGES ON DATABASE bitbucket_db TO bitbucket_user;
GRANT ALL PRIVILEGES ON DATABASE jira_db TO jira_user;
Ensure Docker and Docker Compose are installed on both virtual machines.
Enable Git LFS to handle large file repositories:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker && sudo systemctl start docker
# Install Git LFS
sudo apt update
sudo apt install git-lfs -y
# Enable Git LFS
git lfs install
mkdir -p /opt/atlassian/bitbucket /opt/atlassian/jira
chown -R 2001:2001 /opt/atlassian/bitbucket # For Bitbucket
chown -R 2002:2002 /opt/atlassian/jira # For Jira
On the Bitbucket VM, configure and deploy Bitbucket using Docker Compose:
Inside /opt/atlassian/, create docker-compose.yml:version: '3'
services:
bitbucket:
image: atlassian/bitbucket:latest
ports:
- "7990:7990"
- "7999:7999"
environment:
- 'JDBC_URL=jdbc:postgresql://my-postgres-db.postgres.database.azure.com:5432/bitbucket_db'
- 'JDBC_USER=bitbucket_user'
- 'JDBC_PASSWORD=StrongBitbucketPassword'
- 'BITBUCKET_LFS_ENABLED=true' # Enable Git LFS
volumes:
- /opt/atlassian/bitbucket:/var/atlassian/application-data/bitbucket
restart: unless-stopped
networks:
- atlassian
networks:
atlassian:
On the Jira VM, configure and deploy Jira using Docker Compose:
Inside /opt/atlassian/, create docker-compose.yml:version: '3'
services:
jira:
image: atlassian/jira-software:latest
ports:
- "8080:8080"
environment:
- 'JDBC_URL=jdbc:postgresql://my-postgres-db.postgres.database.azure.com:5432/jira_db'
- 'JDBC_USER=jira_user'
- 'JDBC_PASSWORD=StrongJiraPassword'
volumes:
- /opt/atlassian/jira:/var/atlassian/application-data/jira
restart: unless-stopped
networks:
- atlassian
networks:
atlassian:
cd /opt/atlassian
docker-compose up -d
✅ Bitbucket → http://your-azure-ip:7990
✅ Jira → http://your-azure-ip:8080
Ensure that only trusted IPs can access your services by configuring firewall rules.
Go to the web interface and complete the setup:
In Bitbucket, go to Administration → Jira Integration and add your Jira server URL.
Now, Jira issues will be linked to commits, branches, and pull requests! 🎯
Your Bitbucket & Jira are now running on separate VMs with a shared PostgreSQL database on Azure! 🎉
On a local machine where you use Git, initialize and track large files:# Initialize Git LFS
git lfs install
# Track Source Engine-specific model, texture, and map files
git lfs track "*.mdl" "*.vtx" "*.vvd" "*.phy" "*.ani" "*.dx80.vtx" "*.dx90.vtx" "*.sw.vtx" "*.xbox.vtx" \
"*.vmt" "*.vtf" "*.vmf" "*.vmm" "*.bsp" "*.nav" "*.lin" "*.ain"
# Track Source Engine scripts and config files
git lfs track "*.qc" "*.qci" "*.txt" "*.cfg" "*.res" "*.lst" "*.kv" "*.vcd" "*.fgd"
# Track general 3D model formats
git lfs track "*.obj" "*.fbx" "*.dae" "*.smd" "*.dmx" "*.blend" "*.max" "*.3ds" "*.stl" "*.lwo" "*.abc"
# Track texture, material, and shader files
git lfs track "*.tga" "*.dds" "*.png" "*.jpg" "*.jpeg" "*.bmp" "*.psd" "*.exr" "*.hdr" "*.tiff" "*.tif" "*.vmat"
# Track audio and video formats used in Source
git lfs track "*.wav" "*.mp3" "*.ogg" "*.bik" "*.mp4"
# Track compression and archives
git lfs track "*.zip" "*.rar" "*.7z" "*.tar" "*.gz" "*.bz2" "*.xz"
# Track Source tool and engine asset files
git lfs track "*.pak" "*.vpk" "*.gma" "*.cache" "*.bin"
# Track development files and scripts
git lfs track "*.sln" "*.vcproj" "*.vcxproj" "*.user" "*.props" "*.filters" "*.bat" "*.sh" "*.cmd" \
"*.patch" "*.diff" "*.cmake" "*.mak"
# Track source control and metadata files
git lfs track "*.log" "*.sdf" "*.ipch" "*.ncb"
# Verify tracked files
cat .gitattributes
# Commit the changes
git add .gitattributes
git commit -m "Enable Git LFS tracking for Source Engine development"
git push origin main
Without a database, Bitbucket and Jira cannot function because they rely on PostgreSQL to store and retrieve data dynamically.
Think of PostgreSQL as the "brain" that remembers everything—without it, your Bitbucket repositories and Jira issues wouldn't persist after a restart.
| Service | Azure VM | CPU/RAM | SSD | Ports Open |
|---|---|---|---|---|
| Bitbucket | bitbucket-vm | 4 vCPU / 16GB RAM | 1TB | 7990, 7999, 22 |
| Jira | jira-vm | 4 vCPU / 16GB RAM | 500GB | 8080, 22 |
| PostgreSQL | Azure Managed DB | Cloud | Cloud | 5432 |
| Service | Record Type | Host | Value (VM Public IP) |
|---|---|---|---|
| Bitbucket | A | bitbucket.yourcompany.com | <Bitbucket_VM_Public_IP> |
| Jira | A | jira.yourcompany.com | <Jira_VM_Public_IP> |
💡 Save changes and wait for DNS propagation (can take a few minutes to hours).
Run these steps on each VM (Bitbucket & Jira):
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
Open the Nginx config file:
sudo nano /etc/nginx/sites-available/default
Replace the content with this (Bitbucket example):
server {
listen 80;
server_name bitbucket.yourcompany.com;
location / {
proxy_pass http://127.0.0.1:7990;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
For Jira, replace 7990 with 8080 and use jira.yourcompany.com.
Save and exit (CTRL + X, then Y, then ENTER).
Restart Nginx:
sudo systemctl restart nginx
Run this command on each VM:
sudo certbot --nginx -d bitbucket.yourcompany.com
For Jira, run:
sudo certbot --nginx -d jira.yourcompany.com
Follow the prompts and choose "redirect HTTP to HTTPS".
Check if SSL works by visiting:
Set up auto-renewal:
sudo systemctl enable certbot.timer
Your Bitbucket and Jira instances are now securely accessible over HTTPS with a domain. 🎉
| File Extension | Description |
|---|---|
| .sln | Visual Studio Solution file, used to manage multiple projects. |
| .vcproj | Visual Studio 2008 project file, contains project configurations. |
| .vcxproj | Visual Studio 2010+ project file, for newer versions of Visual Studio. |
| .ncb | Visual Studio IntelliSense database, stores code autocomplete data. |
| .sdf | Visual Studio database file for IntelliSense and project data. |
| .user | User-specific settings for Visual Studio projects. |
| .pdb | Program Database file, contains debugging symbols for compiled binaries. |
| .exe | Executable file, the compiled game or tools used in development. |
| .dll | Dynamic Link Library, contains compiled code for game logic or engine functions. |
| .lib | Static library file, used for linking compiled code into an application. |
| .obj | Compiled object file, intermediate step before linking into an executable. |
| .exp | Export file generated during DLL compilation, contains function addresses. |
| .bsp | Compiled Source Engine map file used in gameplay. |
| .vmf | Valve Map Format, the editable version of a map created in Hammer. |
| .vmt | Valve Material Type file, defines surface properties and textures. |
| .vtf | Valve Texture Format file, contains image data used in materials. |
| .mdl | Compiled 3D model used by the Source Engine. |
| .vtx / .vvd / .phy | Model mesh, vertex, and physics data files associated with .mdl. |
| .qc | Model compile script file used by Studiomdl. |
| .smd / .dmx | Model and animation source files used before compiling into .mdl. |
| .wav | Waveform audio file, used for sound effects and dialogue. |
| .mp3 / .ogg | Compressed audio formats, used for music and longer voiceovers. |
| .vcd | Choreography file used in Faceposer for scripted scenes. |
| .res | Resource file defining map-specific asset requirements. |
| .cfg / .txt / .kv | Configuration and key-value files for scripting and settings. |
| .fgd | Forge Game Definition file, used by Hammer to define entity classes. |
| .log | Log file generated by the engine or compile tools. |
| .vpk | Valve Pak archive file, used to package game assets. |
| .gma | Garry’s Mod Addon file, a packed collection of assets and scripts. |
| .pak | Generic package file format used by some Source mods. |
| .cache / .bin | Compiled or cached game data files. |
| .tga / .dds / .bmp / .jpg / .png | Image formats used for textures and UI. |
| .psd / .tif / .exr / .hdr | High-quality image formats used in texture workflows. |
| .bat / .sh | Script files used to automate build or launch processes. |
| .zip / .rar / .7z | Compressed archive files for distributing mods or assets. |