在Hestiacp中新建网站配置ssl新建数据库的操作就不再赘述了。如果你是第一次看到hestiacp系列教程,请点击下方链接,就能看到完整的一系列教程了。

HestiaCP - HOSTEYE

如果你想利用hestiacp的备份与恢复功能,那就将minio安装到网站目录下。这里将以此类情况演示。

安装 MinIO 服务器

这里新建用户不建议用minio 你可以使用minio-user

因为要利用hestiacp的备份与恢复功能,所以我们全部自定义安装。

然后进入网站目录/home/minio-user/web/xxx.com/public_html/

使用以下命令下载最新的稳定 MinIO 二进制文件并将其安装到系统

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

使用 systemd 守护进程

在 /etc/systemd/system 路径下新建 minio.service 文件,并填入以下内容:

[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/home/minio-user/web/xxx.com/public_html/minio/minio

[Service]
WorkingDirectory=/home/minio-user/web/xxx.com/public_html

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/home/minio-user/web/xxx.com/public_html/config/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /home/minio-user/web/xxx.com/public_html/config/minio\"; exit 1; fi"
ExecStart=/home/minio-user/web/xxx.com/public_html/minio/minio server $MINIO_OPTS $MINIO_VOLUMES

# MinIO RELEASE.2023-05-04T21-44-30Z 增加了对 Type=notify 的支持 (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# 这可以改进 systemctl 设置,其中其他服务使用 `After=minio.server`
# 取消注释以启用此功能
# Type=notify
Type=notify
# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

详细解释

1. [Unit] 部分

这一部分定义了服务的基本信息和依赖关系。

[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/home/minio-user/web/xxx.com/public_html/minio/minio

  • Description: 这是服务的描述,显示服务的名称或用途,这里是 "MinIO"。
  • Documentation: 这是指向 MinIO 文档的链接,如果你想查看 MinIO 的官方文档,可以根据这个链接访问。
  • Wants=network-online.target: 这个指令表明 MinIO 需要网络才能正常启动。在系统启动时,systemd 会确保网络在线之后再启动 MinIO。
  • After=network-online.target: 指定在网络联机之后再启动 MinIO,确保网络服务已启动并可用。
  • AssertFileIsExecutable: 在启动 MinIO 之前,systemd 会检查 /home/minio-user/web/xxx.com/public_html/minio/minio 是否可执行。如果该文件不存在或不可执行,服务将不会启动。

2. [Service] 部分

这一部分定义了 MinIO 服务如何启动、运行以及行为控制等重要配置。

[Service]
WorkingDirectory=/home/minio-user/web/xxx.com/public_html

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/home/minio-user/web/xxx.com/public_html/config/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /home/minio-user/web/xxx.com/public_html/config/minio\"; exit 1; fi"
ExecStart=/home/minio-user/web/xxx.com/public_html/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
  • WorkingDirectory: 定义了 MinIO 服务运行时的工作目录。这个目录会成为 MinIO 进程启动时的当前工作目录。

  • User=minio-user 和 Group=minio-user: 指定服务以哪个用户和用户组的身份运行。这里是 minio-user 用户和组,这样的配置有助于提高安全性,避免使用 root 权限运行服务。

  • ProtectProc=invisible: 此选项是为了增强安全性,将 /proc 目录对非授权用户隐藏。这意味着其他用户不能看到该进程的详细信息,能够提升 MinIO 服务的安全性。

  • EnvironmentFile: 指定读取环境变量的文件(这里是 /home/minio-user/web/xxx.com/public_html/config/minio),通过这个文件来为服务设置环境变量。- 表示如果文件不存在,忽略错误并继续启动服务。

  • ExecStartPre: 在 MinIO 服务启动之前执行的命令。在这里,它检查环境变量 MINIO_VOLUMES 是否在 /home/minio-user/web/xxx.com/public_html/config/minio 中设置。如果没有设置,服务将不会启动,并显示错误信息。

  • ExecStart: 定义 MinIO 服务的启动命令。这里是执行 MinIO 的二进制文件 /home/minio-user/web/xxx.com/public_html/minio/minio server,并使用环境变量 $MINIO_OPTS$MINIO_VOLUMES 来指定启动选项和卷。

# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify
# Uncomment the line to enable the functionality
# Type=notify
  • Type=notify(已注释):在 MinIO 2023 年 5 月的某个版本之后,MinIO 支持 systemdnotify 类型。在 Type=notify 下,MinIO 启动后会向 systemd 发送一个通知,告诉 systemd 进程已经准备好提供服务。如果你希望在其他服务中使用 After=minio.service 的依赖关系,并确保 MinIO 完全启动后才启动其他服务,可以启用这一行。
Restart=always
LimitNOFILE=65536
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no
  • Restart=always: 配置 MinIO 服务失败后始终自动重启。这是为了确保 MinIO 服务始终运行,即使在出现错误时也会自动恢复。

  • LimitNOFILE=65536: 设置 MinIO 进程可以打开的最大文件描述符数量为 65536。因为 MinIO 可能会处理大量并发连接,所以需要设置较大的文件描述符限制。

  • TasksMax=infinity: 设置 MinIO 进程可以创建的最大线程数为无限制。这是为了确保在处理高负载或大量并发时,不会因为系统的线程限制导致问题。

  • TimeoutStopSec=infinity: 禁用停止服务的超时时间。默认情况下,systemd 会在服务停止时等待一段时间,然后发送 SIGKILL 信号强制终止服务。这里的设置取消了超时限制,意味着 systemd 会无限期等待 MinIO 正常关闭。

  • SendSIGKILL=no: 禁止在停止 MinIO 时发送 SIGKILL 信号。通常,systemd 会在服务停止后的一段时间内发送 SIGTERM 信号以请求服务优雅停止,如果超过超时时间则会强制发送 SIGKILL 终止服务。这里关闭了强制终止信号,确保服务在停止时有足够时间清理资源。

3. [Install] 部分

这一部分定义了 MinIO 服务的安装和目标运行级别。

[Install]
WantedBy=multi-user.target
  • WantedBy=multi-user.target: 这定义了 MinIO 服务的目标运行级别。multi-user.target 是一个常见的运行级别,表示 MinIO 服务将在不需要图形界面的多用户系统模式下启动。这通常是服务器环境的默认运行级别。

创建环境变量文件

/home/minio-user/web/xxx.com/public_html/config/下创建环境变量文件minio。MinIO Server 容器可以使用此文件作为所有环境变量的来源。

内容参考:

# MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 设置 MinIO 服务器的 root 账户。
# 该用户拥有执行 S3 和管理 API 操作的无限制权限,适用于部署中的任何资源。
# 如果不设置,将使用默认值 'minioadmin:minioadmin'。
# 无论环境如何,MinIO 建议设置非默认值作为最佳实践。

MINIO_ROOT_USER=test
MINIO_ROOT_PASSWORD=555555555

# MINIO_VOLUMES 设置 MinIO 服务器使用的存储卷或路径。

MINIO_VOLUMES="/home/minio-user/web/xxx.com/public_html/data"

# MINIO_OPTS 设置传递给 MinIO 服务器的任何其他命令行选项。
# 例如,`--console-address :9001` 设置 MinIO 控制台的监听端口。
# `--certs-dir` 来定义minio的证书位置,方便后面开启https,并利用nginx反向代理。
MINIO_OPTS="--address :9000 --console-address :9001 --certs-dir /home/minio-user/web/xxx.com/public_html/ssl"

启动 MinIO 服务

systemctl start minio.service

连接到 MinIO 服务

可以通过在浏览器中输入 MinIO 服务器的任何主机名或 IP 地址来访问 MinIO 控制台Console,例如http://localhost:9001

配置 Nginx

开启 MinIO 的https访问

还记得环境变量中设置的--certs-dir参数吗?把hestiacp中申请下来的证书放到你设置的路径里,然后重命名为private.keypublic.crt并记得修改权限。

hestiacp证书的存放目录是/home/minio-user/conf/web/xxx.com/ssl/

Nginx 反向代理

hestiacp反代离不开模板,下面是我提供的参考模板,请自行修改

.tpl


server {
   listen       %ip%:%proxy_port%;
   server_name  %domain_idn% %alias_idn%;

   # Allow special characters in headers
   ignore_invalid_headers off;
   # Allow any size file to be uploaded.
   # Set to a value such as 1000m; to restrict file size to a specific value
   client_max_body_size 0;
   # Disable buffering
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_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;

      proxy_connect_timeout 300;
      # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass https://minio_s3; # This uses the upstream directive definition to load balance
   }

   location /minio/ui/ {
      rewrite ^/minio/ui/(.*) /$1 break;
      proxy_set_header Host $http_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;
      proxy_set_header X-NginX-Proxy true;

      # This is necessary to pass the correct IP to be hashed
      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      # To support websockets in MinIO versions released after January 2023
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
      # Uncomment the following line to set the Origin request to an empty string
      # proxy_set_header Origin '';
      proxy_set_header Origin '';
      chunked_transfer_encoding off;

      proxy_pass https://minio_console; # This uses the upstream directive definition to load balance
   }
}

.stpl

upstream minio_s3 {
   least_conn;
   server 127.0.0.1:9000;
}

upstream minio_console {
   least_conn;
   server 127.0.0.1:9001;
}


server {
   listen %ip%:%proxy_ssl_port% ssl;
   server_name  %domain_idn% %alias_idn%;

	ssl_certificate     %ssl_pem%;
	ssl_certificate_key %ssl_key%;
	ssl_stapling        on;
	ssl_stapling_verify on;

	# TLS 1.3 0-RTT anti-replay
	if ($anti_replay = 307) { return 307 https://$host$request_uri; }
	if ($anti_replay = 425) { return 425; }

   # Allow special characters in headers
   ignore_invalid_headers off;
   # Allow any size file to be uploaded.
   # Set to a value such as 1000m; to restrict file size to a specific value
   client_max_body_size 0;
   # Disable buffering
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_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;

      proxy_connect_timeout 300;
      # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass https://minio_s3; # This uses the upstream directive definition to load balance
   }

   location /minio/ui/ {
      rewrite ^/minio/ui/(.*) /$1 break;
      proxy_set_header Host $http_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;
      proxy_set_header X-NginX-Proxy true;

      # This is necessary to pass the correct IP to be hashed
      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      # To support websockets in MinIO versions released after January 2023
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
      # Uncomment the following line to set the Origin request to an empty string
      # proxy_set_header Origin '';
      proxy_set_header Origin '';
      chunked_transfer_encoding off;

      proxy_pass https://minio_console; # This uses the upstream directive definition to load balance
   }
}

防火墙放行端口

略。

其他

这样配置后是minio的路径模式。若想开启虚拟主机模式,请自行查阅官方文档,这里不再赘述。

MinIO有两种路径访问模式:

  1. 路径模式(Path-Style Access): 在路径模式下,存储桶名称作为URL路径的一部分。例如:http://localhost:9000/minio/bucket-name/object-name
  2. 虚拟主机模式(Virtual-Host Style Access): 在虚拟主机模式下,存储桶名称作为URL的子域名。例如:http://bucket-name.localhost:9000/object-name

包含的标签:

教程, HestiaCP

最后更新: October 22, 2024