在阿里云 2 核 2GB(2C2G)的服务器上部署禅道(ZenTao),由于内存资源相对紧张,强烈建议使用 Docker 方式部署。这种方式比直接安装 LAMP/LNMP 环境更节省内存,且便于管理。如果必须使用传统方式,需要仔细优化 PHP 和数据库配置。
以下是基于 Docker Compose 的推荐部署步骤,同时也提供了传统方式的注意事项。
方案一:Docker 部署(推荐,稳定且省资源)
此方案将 MySQL、PHP、Redis(可选)和 Web 服务容器化,通过 docker-compose 统一管理。
1. 准备服务器环境
登录阿里云 ECS 实例,执行以下命令更新系统并安装 Docker 环境:
# 更新系统包
sudo yum update -y # CentOS/Alibaba Cloud Linux
# 或 sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
# 安装 Docker 和 Docker Compose (以官方脚本为例)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable docker
systemctl start docker
# 安装 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. 创建项目目录与配置文件
创建一个目录用于存放禅道数据:
mkdir -p /opt/zentao && cd /opt/zentao
创建 docker-compose.yml 文件:
nano docker-compose.yml
粘贴以下内容(针对 2GB 内存进行了参数调优):
version: '3'
services:
zentao:
image: zen-tao/zentao:latest
container_name: zentao
ports:
- "80:80"
- "443:443"
environment:
- MYSQL_ROOT_PASSWORD=your_strong_password # 请修改为强密码
- ZENTAO_ADMIN_USER=admin
- ZENTAO_ADMIN_PASSWORD=your_admin_password # 请修改为强密码
volumes:
- ./data/zentao:/var/www/html/data
- ./logs:/var/log/apache2
restart: always
mem_limit: 1.5g # 限制最大内存使用,防止 OOM
cpus: 1.8 # 限制 CPU 使用率,避免单点过载
注意:2GB 内存跑两个容器(MySQL+PHP)比较极限。如果启动后频繁报错
OOM Killer,建议将mem_limit调整为1g或更低,并在 MySQL 配置中进一步限制缓冲池大小。
3. 启动服务
在项目目录下执行:
docker-compose up -d
4. 初始化访问
- 打开浏览器访问
http://<你的公网 IP>。 - 首次进入会引导你进行初始化设置(输入管理员账号密码)。
- 如果使用的是阿里云安全组,确保80 端口已放行。
方案二:传统 LNMP 部署(不推荐,需精细调优)
如果你坚持不使用 Docker,需要在 2GB 内存下手动安装 Nginx + MySQL + PHP。
1. 安装基础软件
# CentOS 示例
yum install nginx mysql-server php php-mysql php-fpm -y
# Ubuntu 示例
apt install nginx mysql-server php-fpm php-mysql -y
2. 关键优化(防止内存溢出)
这是 2GB 服务器的核心步骤。默认配置通常会占用超过 1.5GB 内存,导致系统崩溃。
- 调整 MySQL 配置 (
/etc/my.cnf):[mysqld] innodb_buffer_pool_size = 256M # 默认可能高达 1GB+,必须改小 max_connections = 50 # 降低连接数 key_buffer_size = 16M - 调整 PHP-FPM 配置 (
/etc/php-fpm.d/www.conf):pm = dynamic pm.max_children = 5 # 限制同时运行的 PHP 进程数 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 - 增加 Swap 分区(非常重要):
当物理内存耗尽时,Swap 可以作为临时交换空间,防止服务直接挂掉。dd if=/dev/zero of=/swapfile bs=1G count=2 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstab
3. 下载并解压禅道
cd /usr/share/nginx/html
wget http://www.zentao.net/download/source.html # 或直接去官网下载源码
unzip zentao-pro-*.zip
chown -R nginx:nginx /usr/share/nginx/html/zentao
4. 配置 Nginx
编辑 /etc/nginx/conf.d/zentao.conf,指向禅道目录,并确保 PHP 解析正确。
5. 启动服务
systemctl start nginx
systemctl start mysqld
systemctl start php-fpm
systemctl enable nginx mysqld php-fpm
常见问题与排查
-
启动失败/服务无法访问:
- 检查阿里云控制台的安全组规则,是否放行了 80 (HTTP) 和 443 (HTTPS) 端口。
- 如果是 Docker 模式,使用
docker ps查看容器状态,用docker logs zentao查看详细错误日志。
-
内存不足 (OOM):
- 在 2GB 机器上,如果 MySQL 占用过高,尝试重启服务器观察内存使用情况 (
free -h)。 - 如果是 Docker 部署,务必检查
docker-compose.yml中的mem_limit是否设置合理。 - 如果是传统部署,必须确认
innodb_buffer_pool_size已经大幅调低。
- 在 2GB 机器上,如果 MySQL 占用过高,尝试重启服务器观察内存使用情况 (
-
性能卡顿:
- 禅道是 PHP 应用,对 I/O 敏感。阿里云的普通云盘在并发高时可能会有延迟。
- 建议开启 CloudMonitor 监控 CPU 和内存使用率,避免业务高峰期服务器死机。
总结建议
对于 2 核 2GB 的配置:
- 首选 Docker 方案:资源隔离好,配置简单,通过
mem_limit可以精确控制内存上限。 - 必须开启 Swap:无论哪种方案,都建议至少分配 2GB 的 Swap 空间作为缓冲。
- 定期清理:禅道的运行日志和数据库备份可能会占用大量磁盘空间,记得定期清理
/var/log和数据库备份文件。
CLOUD云枢