Patroni-postgresql-etcd-minio

From wiki.baghirzade.pro
Revision as of 07:43, 25 September 2025 by Sadmin (talk | contribs)
Jump to navigation Jump to search
Vagrant.configure("2") do |config|

  # MinIO
  config.vm.define "minio" do |minio|
    minio.vm.box = "ubuntu/jammy64"
    minio.vm.hostname = "minio"
    minio.vm.network "public_network", ip: "IP-minio"
    minio.vm.provider "virtualbox" do |vb|
      vb.memory = 1024
      vb.cpus = 1
    end
    # provision для установки MinIO
minio.vm.provision "shell", inline: <<-SHELL
    set -e
    sudo apt-get update -y
    sudo apt-get install -y wget

    # бинарник
    wget -q https://dl.min.io/server/minio/release/linux-amd64/minio -O /tmp/minio
    sudo install -m 0755 /tmp/minio /usr/local/bin/minio

    # системный пользователь и каталоги
    id -u minio-user &>/dev/null || sudo useradd -r minio-user -s /usr/sbin/nologin
    sudo mkdir -p /usr/local/share/minio
    sudo chown -R minio-user:minio-user /usr/local/share/minio

    # TLS каталоги
    sudo mkdir -p /etc/minio/certs
    sudo chown -R minio-user:minio-user /etc/minio/certs

    # systemd unit
    sudo tee /etc/systemd/system/minio.service >/dev/null <<'EOF'
[Unit]
Description=MinIO
After=network.target

[Service]
User=minio-user
Group=minio-user
Environment="MINIO_VOLUMES=/usr/local/share/minio"
Environment="MINIO_OPTS=--console-address :9001"
Environment="MINIO_CERT_DIR=/etc/minio/certs"
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
Restart=always
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

    sudo systemctl daemon-reload
    sudo systemctl enable --now minio
  SHELL
  end

  # HAProxy nodes
  { "haproxy-01" => "IP-node1",
    "haproxy-02" => "IP-node2",
    "haproxy-03" => "IP-node3" }.each do |name, ip|
    config.vm.define name do |node|
      node.vm.box = "ubuntu/jammy64"
      node.vm.hostname = name
      node.vm.network "public_network", ip: ip
      node.vm.provider "virtualbox" do |vb|
        vb.memory = 512
        vb.cpus = 1
      end
    end
  end

  # PostgreSQL nodes
  { "postgresql-01" => "IP-node4",
    "postgresql-02" => "IP-node5",
    "postgresql-03" => "IP-node6" }.each do |name, ip|
    config.vm.define name do |node|
      node.vm.box = "ubuntu/jammy64"
      node.vm.hostname = name
      node.vm.network "public_network", ip: ip
      node.vm.provider "virtualbox" do |vb|
        vb.memory = 2048
        vb.cpus = 2
      end
    end
  end

  # Certificate Authority
  config.vm.define "ca" do |ca|
    ca.vm.box = "ubuntu/jammy64"
    ca.vm.hostname = "ca"
    ca.vm.network "public_network", ip: "IP-node7"
    ca.vm.provider "virtualbox" do |vb|
      vb.memory = 512
      vb.cpus = 1
    end
  end
end