从零到一:手把手教你用Docker Compose在Linux服务器上部署Jira Data Center(含Nginx反向代理配置)
从零到一:手把手教你用Docker Compose在Linux服务器上部署Jira Data Center(含Nginx反向代理配置)
在当今快节奏的软件开发环境中,一个可靠的项目管理平台已经成为团队协作的基石。Jira Data Center作为Atlassian推出的企业级解决方案,不仅继承了Jira强大的敏捷项目管理功能,更通过集群部署实现了高可用性和水平扩展能力。对于追求稳定性和可控性的技术团队而言,自建Jira Data Center服务无疑是最佳选择。
本文将带你从零开始,使用Docker Compose在Linux服务器上完整部署一套生产级Jira Data Center环境。不同于简单的单机安装教程,我们将重点解决三个核心问题:如何通过容器化技术简化复杂组件的依赖管理、如何配置Nginx实现安全的反向代理和负载均衡、以及如何针对企业级应用进行基础性能调优。整个部署过程基于Ubuntu 20.04 LTS,但同样适用于其他主流Linux发行版。
1. 环境准备与架构设计
在开始部署前,我们需要明确整个系统的架构组成。一个完整的Jira Data Center部署包含以下核心组件:
- 应用节点集群:运行Jira应用的Docker容器组,至少需要两个节点实现高可用
- 共享数据库:PostgreSQL数据库服务,建议使用独立服务器
- 共享文件存储:NFS或云存储,用于存放附件和索引
- 负载均衡层:Nginx反向代理,处理SSL终止和请求分发
1.1 服务器资源配置建议
根据Atlassian官方推荐的生产环境要求,我们建议以下最低配置:
| 组件类型 | CPU核心 | 内存 | 存储空间 | 网络带宽 |
|---|---|---|---|---|
| Jira应用节点 | 4核 | 8GB | 50GB | 1Gbps |
| PostgreSQL数据库 | 4核 | 16GB | 500GB | 1Gbps |
| NFS存储服务器 | 2核 | 4GB | 1TB | 1Gbps |
注意:以上配置适用于中小型团队(50-100用户)。更大规模的部署需要按比例增加资源,特别是数据库服务器的内存和存储。
1.2 系统依赖安装
在所有节点上执行以下基础环境准备:
# 更新系统并安装基础工具
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y docker.io docker-compose nfs-common
# 配置Docker守护进程(所有节点)
sudo tee /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
# 重启Docker服务
sudo systemctl restart docker
2. PostgreSQL数据库配置
Jira支持多种数据库后端,但PostgreSQL因其性能和可靠性成为生产环境的首选。以下是数据库服务器的专用配置:
2.1 优化PostgreSQL参数
创建自定义配置文件/etc/postgresql/13/main/conf.d/jira.conf:
# 连接和认证
max_connections = 300
shared_buffers = 4GB
work_mem = 16MB
# 查询优化
random_page_cost = 1.1
effective_cache_size = 12GB
maintenance_work_mem = 1GB
# WAL和复制
wal_level = replica
synchronous_commit = off
2.2 创建专用数据库和用户
通过Docker Compose部署PostgreSQL服务:
# docker-compose.db.yml
version: '3.8'
services:
postgres:
image: postgres:13
container_name: jira_postgres
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: jira_user
POSTGRES_DB: jira_db
volumes:
- pg_data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
volumes:
pg_data:
启动数据库服务前,记得在.env文件中设置DB_PASSWORD环境变量:
echo "DB_PASSWORD=your_secure_password" > .env
docker-compose -f docker-compose.db.yml up -d
3. Jira Data Center容器化部署
3.1 准备共享存储
在NFS服务器上创建共享目录并配置权限:
# NFS服务器执行
sudo mkdir -p /data/jira/shared
sudo chown -R 2001:2001 /data/jira/shared
在各应用节点挂载此共享目录:
echo "nfs-server-ip:/data/jira/shared /var/jira/shared nfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mkdir -p /var/jira/shared
sudo mount -a
3.2 Docker Compose编排配置
创建主部署文件docker-compose.jira.yml:
version: '3.8'
services:
jira-node1:
image: atlassian/jira-software:9.4.0
container_name: jira_node1
environment:
- JIRA_HOME=/var/atlassian/application-data/jira
- JIRA_PROXY_NAME=jira.yourdomain.com
- JIRA_PROXY_PORT=443
- JIRA_PROXY_SCHEME=https
volumes:
- /var/jira/shared:/var/atlassian/application-data/jira/shared
- jira_local1:/var/atlassian/application-data/jira/local
ports:
- "8081:8080"
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
interval: 30s
timeout: 10s
retries: 3
jira-node2:
image: atlassian/jira-software:9.4.0
container_name: jira_node2
environment:
- JIRA_HOME=/var/atlassian/application-data/jira
- JIRA_PROXY_NAME=jira.yourdomain.com
- JIRA_PROXY_PORT=443
- JIRA_PROXY_SCHEME=https
volumes:
- /var/jira/shared:/var/atlassian/application-data/jira/shared
- jira_local2:/var/atlassian/application-data/jira/local
ports:
- "8082:8080"
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
interval: 30s
timeout: 10s
retries: 3
volumes:
jira_local1:
jira_local2:
3.3 初始化Jira集群
启动服务后,通过浏览器访问任一节点完成初始配置:
- 选择"Data Center"部署模式
- 配置数据库连接:
- 数据库类型:PostgreSQL
- 主机:postgres容器IP或主机名
- 端口:5432
- 数据库名:jira_db
- 用户名:jira_user
- 密码:your_secure_password
- 设置集群名称和共享目录路径(/var/atlassian/application-data/jira/shared)
- 完成管理员账户配置
4. Nginx反向代理与SSL配置
4.1 安装Certbot获取SSL证书
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot certonly --standalone -d jira.yourdomain.com
4.2 Nginx负载均衡配置
创建/etc/nginx/conf.d/jira.conf:
upstream jira_backend {
zone jira 64k;
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 443 ssl http2;
server_name jira.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/jira.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jira.yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://jira_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, no-transform";
proxy_pass http://jira_backend;
}
}
4.3 性能优化参数
在Nginx主配置/etc/nginx/nginx.conf中添加以下全局优化参数:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
# 其他现有配置...
client_max_body_size 100M;
keepalive_timeout 75s;
keepalive_requests 1000;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
5. 生产环境调优与维护
5.1 Jira性能参数调整
修改$JIRA_HOME/jira-config.properties:
# 连接池配置
jira.pool.max.size=60
jira.pool.min.idle=10
jira.pool.max.idle=30
# 缓存设置
jira.lucene.optimize.interval=86400
jira.delay.indexing=true
# 异步任务
jira.async.task.thread.pool.size=20
jira.mail.thread.pool.size=10
5.2 定期维护任务
创建维护脚本/usr/local/bin/jira-maintenance.sh:
#!/bin/bash
# 数据库备份
docker exec jira_postgres pg_dump -U jira_user -d jira_db -Fc > /backups/jira_db_$(date +%Y%m%d).dump
# 索引优化
curl -u admin:password -X POST "http://localhost:8080/rest/api/2/reindex"
# 日志轮转
find /var/lib/docker/containers -name "*.log" -size +100M -exec truncate -s 50M {} \;
设置cron任务每周执行:
0 2 * * 6 /usr/local/bin/jira-maintenance.sh >> /var/log/jira_maintenance.log 2>&1
5.3 监控与告警配置
推荐使用Prometheus+Grafana监控以下关键指标:
- 应用层:活跃用户数、请求响应时间、错误率
- 系统层:CPU/内存使用率、磁盘I/O、网络吞吐量
- Jira特有:索引延迟、数据库查询时间、缓存命中率
示例Prometheus配置:
scrape_configs:
- job_name: 'jira'
metrics_path: '/monitoring/metrics'
static_configs:
- targets: ['jira-node1:8080', 'jira-node2:8080']
basic_auth:
username: 'monitor_user'
password: 'secure_password'
更多推荐
所有评论(0)