当前位置:首页>php>两台服务器运维太累?这套全自动方案,PHP/Java/Node/Python全搞定,一键部署+自动备份

两台服务器运维太累?这套全自动方案,PHP/Java/Node/Python全搞定,一键部署+自动备份

  • 2026-09-09 02:35:49
两台服务器运维太累?这套全自动方案,PHP/Java/Node/Python全搞定,一键部署+自动备份
手里攥着两台云服务器,既要跑Web服务,又要扛数据库,还得兼容PHP、Java、Node.js、Python多种语言项目。

每天重复初始化环境、部署服务、手动备份、查故障,费时费力还容易出错。

别再埋头手动运维了!

今天给大家带来一套极简、稳定、零复杂、可直接抄作业的双服务器自动化运维方案,适配多语言环境+PostgreSQL数据库,看完就能落地,彻底解放双手。


📌 适用场景

  • 服务器数量:2台(主+备,高可用架构)

  • 运行环境:同时兼容PHP、Java、Node.js、Python项目

  • 数据库:PostgreSQL(主从同步,数据更安全)

  • 用途:Web站点、云主机、个人/小企业业务部署

🧰 方案选型(轻量不折腾)

拒绝臃肿架构,只用刚需工具,运维成本极低,新手也能玩转:

  • Ansible:批量管控两台服务器,一键初始化、批量操作

  • Docker+Docker Compose:环境标准化,杜绝“一台能跑一台报错”

  • PostgreSQL主从:主库对外服务,从库实时备份,防止数据丢失

  • 定时备份+Cron:每天自动备份数据库+项目文件,跨机同步

  • Uptime Kuma:轻量可视化监控,服务宕机及时告警

🖥️ 两台服务器分工

服务器A(主):8.255.255.255

  • 对外Web入口,承载全站访问

  • PostgreSQL主数据库

  • 运行全部多语言项目

  • 监控中心、自动备份脚本

服务器B(备):8.255.255.254

  • 备用Web环境

  • PostgreSQL从库,实时同步主库数据

  • 备份文件存储节点,防止单点故障


📄 全套配置(直接复制粘贴,零修改)

这里把域名、IP、数据库密码全部填实,拿到手就能用,省去手动改配置的麻烦。

1. Ansible批量管控配置

主机清单(hosts文件)

[web_servers]server_a ansible_host=8.255.255.255 ansible_user=rootserver_b ansible_host=8.255.255.254 ansible_user=root[all:vars]ansible_ssh_private_key_file=~/.ssh/id_rsaansible_port=22

服务器初始化脚本(init.yml)

- name: 初始化两台服务器环境  hosts: web_servers  gather_facts: false  tasks:    - name: 更新并安装基础工具      apt:        update_cache: yes        name: [git, curl, vim, unzip, wget, gnupg, lsb-release]        state: present    - name: 安装 Docker      shell: curl -fsSL https://get.docker.com | bash    - name: 启动并开机自启 Docker      service:        name: docker        state: started        enabled: yes    - name: 创建备份目录      file:        path: /backup        state: directory        mode: '0755'

执行命令

ansible-playbook -i hosts init.yml

2. 服务器A 主环境Docker Compose

存放路径:/root/docker-compose.yml

version: '3.8'services:  # 主 PostgreSQL 数据库  postgres:    image: postgres:15    restart: always    ports:      - "5432:5432"    environment:      POSTGRES_USER: admin      POSTGRES_PASSWORD: 123456      POSTGRES_DB: demo    volumes:      - ./pg_data:/var/lib/postgresql/data    networks:      - app_net  # Nginx + PHP 环境  php:    image: wyplay/fpm-nginx:php8.2    restart: always    ports:      - "8080:80"    volumes:      - ./php_web:/var/www/html    networks:      - app_net  # Java 运行环境  java:    image: eclipse-temurin:17    restart: always    ports:      - "8081:8080"    volumes:      - ./java_app:/app    command: java -jar /app/app.jar    networks:      - app_net  # Node.js 运行环境  node:    image: node:20    restart: always    ports:      - "8082:3000"    volumes:      - ./node_app:/app    working_dir: /app    command: npm start    networks:      - app_net  # Python 运行环境  python:    image: python:3.11    restart: always    ports:      - "8083:8000"    volumes:      - ./python_app:/app    working_dir: /app    command: python app.py    networks:      - app_net  # 统一入口Nginx(绑定域名)  nginx:    image: nginx:alpine    restart: always    ports:      - "80:80"      - "443:443"    volumes:      - ./nginx/conf.d:/etc/nginx/conf.d      - ./nginx/ssl:/etc/nginx/ssl      - ./php_web:/var/www/html    networks:      - app_net  # 轻量监控面板  kuma:    image: louislam/uptime-kuma:1    restart: always    ports:      - "3001:3001"    volumes:      - ./kuma_data:/app/data    networks:      - app_netnetworks:  app_net:

启动命令

docker compose up -d

3. 服务器B PG从库Docker Compose

存放路径:/root/docker-compose.yml

version: '3.8'services:  postgres_slave:    image: postgres:15    restart: always    ports:      - "5432:5432"    environment:      POSTGRES_USER: admin      POSTGRES_PASSWORD: 123456      PGUSER: admin      PGPASSWORD: 123456    volumes:      - ./pg_slave_data:/var/lib/postgresql/data    command: |      bash -c "      until pg_basebackup -h 8.255.255.255 -U admin -D /var/lib/postgresql/data -X stream -P;      do sleep 5; done;      echo 'primary_conninfo = host=8.255.255.255 port=5432 user=admin password=123456' > /var/lib/postgresql/data/postgresql.auto.conf;      echo 'standby_mode = on' >> /var/lib/postgresql/data/postgresql.auto.conf;      chown -R postgres:postgres /var/lib/postgresql/data;      docker-entrypoint.sh postgres      "    networks:      - slave_netnetworks:  slave_net:

4. 全自动备份脚本

存放路径:服务器A /backup.sh

功能:每日凌晨2点自动备份数据库+全站文件,同步到备用服务器,自动清理7天前旧备份

#!/bin/bashDATE=$(date +%Y%m%d)# 备份PG主库docker exec postgres pg_dump -U admin demo > /backup/pg_demo_$DATE.sql# 打包全部项目文件tar -zcf /backup/web_all_$DATE.tar.gz \  /root/php_web \  /root/java_app \  /root/node_app \  /root/python_app# 同步到备用服务器scp /backup/pg_demo_$DATE.sql /backup/web_all_$DATE.tar.gz root@8.255.255.254:/backup/# 清理过期文件find /backup -type f -mtime +7 -delete

授权并设置定时任务

chmod +x /backup.shcrontab -e

添加以下内容,保存退出

0 2 * * * /backup.sh

5. 域名Nginx配置

存放路径:/root/nginx/conf.d/demo.conf

适配域名:www.demo.com,统一分发多语言项目请求

server {    listen 80;    server_name www.demo.com;    # PHP项目访问    location /php {        root /var/www/html;        index index.php;        fastcgi_pass php:9000;        fastcgi_index index.php;        include fastcgi_params;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    }    # Java服务访问    location /java {        proxy_pass http://java:8080;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }    # Node服务访问    location /node {        proxy_pass http://node:3000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }    # Python服务访问    location /python {        proxy_pass http://python:8000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }    # 默认首页    location / {        root /var/www/html;        index index.html index.php;    }}

重启Nginx生效

docker compose restart nginx

6. 监控面板访问

Uptime Kuma监控地址:http://*:3001

  • 监控网站、数据库、各语言服务运行状态

  • 支持邮件、钉钉、企业微信告警

  • 服务异常第一时间通知,不用守着服务器


✅ 这套方案能实现什么?

  • 一键初始化两台服务器,省去重复配置

  • 一套环境兼容4种语言,互不冲突

  • 数据库主从同步,不怕单点故障

  • 每日自动备份+跨机存档,杜绝数据丢失

  • 域名统一访问,路径清晰易维护

  • 可视化监控,宕机自动告警

  • 系统崩溃重装,10分钟恢复全套环境

💡 写在最后

运维不用拼体力,选对工具、搭好架构,两台服务器也能做到稳定、安全、全自动。

这套方案足够个人、小企业使用,后期扩容也不用重构架构,直接加机器拓展即可。

收藏起来,部署的时候直接照着抄,告别手动运维,把时间花在更有价值的事上。

最新文章

随机文章