参考: https://github.com/Dokploy/dokploy/discussions/369#discussioncomment-14504780

  1. 在新机器部署 Dokploy

    curl -sSL https://dokploy.com/install.sh | sh
  2. 在新机器停止 Dokploy

    docker service rm dokploy-redis
    docker service rm dokploy-postgres
    docker rm -f dokploy-traefik
    docker service rm dokploy
  3. 复制数据

    # 迁移 /etc/dokploy
    rsync -avz root@旧服务器IP:/etc/dokploy /etc/dokploy
    
    # 迁移 docker 卷
    rsync -avz root@旧服务器IP:/var/lib/docker/volumes/dokploy-postgres-database/_data/ /var/lib/docker/volumes/dokploy-postgres-database/_data/  
    rsync -avz root@旧服务器IP:/var/lib/docker/volumes/dokploy-docker-config/_data/ /var/lib/docker/volumes/dokploy-docker-config/_data/  
    rsync -avz root@旧服务器IP:/var/lib/docker/volumes/redis-data-volume/_data/ /var/lib/docker/volumes/redis-data-volume/_data/
  4. 设置卷权限

    chown -R 999:999 /var/lib/docker/volumes/dokploy-postgres-database/_data
  5. 重启服务

    # 创建一个新的 dokploy-redis 服务
    docker service create \
      --name dokploy-redis \
      --constraint 'node.role==manager' \
      --network dokploy-network \
      --mount type=volume,source=redis-data-volume,target=/data \
      redis:7
    
    # 创建一个新的 dokploy-postgres 服务
    docker service create \
      --name dokploy-postgres \
      --constraint 'node.role==manager' \
      --network dokploy-network \
      --env POSTGRES_USER=dokploy \
      --env POSTGRES_DB=dokploy \
      --env POSTGRES_PASSWORD=amukds4wi9001583845717ad2 \
      --mount type=volume,source=dokploy-postgres-database,target=/var/lib/postgresql/data \
      postgres:16
    
    # 创建一个新的 dokploy-traefik 服务
    docker run -d \
        --name dokploy-traefik \
        --restart always \
        -v /etc/dokploy/traefik/traefik.yml:/etc/traefik/traefik.yml \
        -v /etc/dokploy/traefik/dynamic:/etc/dokploy/traefik/dynamic \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -p 80:80/tcp \
        -p 443:443/tcp \
        -p 443:443/udp \
        traefik:v3.5.0
    
    docker network connect dokploy-network dokploy-traefik
    
    # 复制此值,并将其粘贴到ADVERTISE_ADDR变量中:
    ip addr show | grep -E "inet (192\.168\.|10\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.)" | head -n1 | awk '{print $2}' | cut -d/ -f1
    
    # 创建 dokploy 服务
    docker service create \
      --name dokploy \
      --replicas 1 \
      --network dokploy-network \
      --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
      --mount type=bind,source=/etc/dokploy,target=/etc/dokploy \
      --mount type=volume,source=dokploy-docker-config,target=/root/.docker \
      --publish published=3000,target=3000,mode=host \
      --update-parallelism 1 \
      --update-order stop-first \
      --constraint 'node.role == manager' \
      -e ADVERTISE_ADDR="改成上面获取到的IP" \
      dokploy/dokploy:latest
  6. 登录后, 在 Web Server 设置中更新服务器 IP
  7. 完成
最后修改:2025 年 10 月 18 日
如果觉得我的文章对你有用,请随意赞赏