在Hestiacp中新建网站,配置ssl,新建数据库的操作就不再赘述了。如果你是第一次看到hestiacp系列教程,请点击下方链接,就能看到完整的一系列教程了。
如果你想利用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 支持
systemd
的notify
类型。在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.key
和public.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有两种路径访问模式:
- 路径模式(Path-Style Access): 在路径模式下,存储桶名称作为URL路径的一部分。例如:
http://localhost:9000/minio/bucket-name/object-name
- 虚拟主机模式(Virtual-Host Style Access): 在虚拟主机模式下,存储桶名称作为URL的子域名。例如:
http://bucket-name.localhost:9000/object-name