wenmo8 发布的文章

1、概述

Docker 作为一款广受欢迎的容器化技术,为开发者提供了极大的便利。它能够将应用程序以及其全部的依赖项整合并打包,形成一个标准化的独立单元 —— 镜像。对 Docker 镜像进行优化意义非凡,一方面可以显著降低镜像的存储空间占用,进而大幅提升其下载与部署的速率;另一方面,还能有效强化系统的安全性,为应用的稳定运行保驾护航。

在本文中,我们将探讨一系列切实可行的 Docker 镜像优化技巧,助力开发者轻松掌握这一关键技能,为构建高效、可靠的容器化应用奠定坚实基础,让您的开发与部署流程更加顺畅无阻,全面提升应用的性能表现与安全保障。

2、Docker镜像优化技巧

2.1 使用合适的基础镜像

选择合适的基础镜像是优化 Docker 镜像的重要一步。尽量选择体积小、功能简单的基础镜像。

示例,以下是一个使用 alpine 作为基础镜像的 Dockerfile 示例:

# 使用 alpine 作为基础镜像
FROM alpine:3.15

# 安装必要的依赖
RUN apk add --no-cache python3 py3-pip

# 设置工作目录
WORKDIR /app

# 复制应用文件
COPY . .

# 安装 Python 依赖
RUN pip install -r requirements.txt

# 启动应用
CMD ["python3", "app.py"] 

2.2 合并 RUN 指令

每个 RUN 指令都会创建一个新的层,增加镜像的大小。通过合并多个 RUN 指令,可以减少镜像的层数,进而减少镜像的体积。

示例:

# 不推荐的做法:多层构建
RUN apk add --no-cache git
RUN apk add --no-cache curl

# 推荐的做法:合并 RUN 指令

RUN apk add --no-cache git curl

2.3 清理不必要的文件

在构建镜像的过程中,可能会生成一些不必要的文件或缓存。可以在 Dockerfile 中使用清理命令来减小镜像体积。

示例:

# 安装依赖并清理缓存
RUN apk add --no-cache git curl && rm -rf /var/cache/apk/*

2.4 使用 .dockerignore 文件

与 .gitignore 文件类似,.dockerignore 文件可以用来排除不必要的文件和目录,避免将它们包含在镜像中。这有助于减小镜像体积,并加快构建速度。

示例,在项目根目录下创建一个 .dockerignore 文件,内容如下:

# 排除不必要的文件和目录
*.log
node_modules/

2.5 使用多阶段构建

多阶段构建允许你在一个 Dockerfile 中使用多个 FROM 指令,从而只将所需的文件复制到最终镜像中。这种方法可以显著减小镜像体积。详细介绍参见《
Docker中Dockerfile多From 指令存在的意义
》这篇博文。

示例:

# 第一阶段:构建应用
FROM golang:1.22 AS builder

#RUN #go env -w GOPROXY=https://goproxy.cn,direct
# Run this with docker build --build_arg $(go env GOPROXY) to override the goproxy
#ARG goproxy=https://goproxy.cn,direct
#ENV GOPROXY=$goproxy

WORKDIR /workspace

COPY ../../apis apis/
COPY ../../clients clients/
COPY ../../cmd cmd/
COPY ../../pkg/controllers controllers/
COPY ../../pkg pkg/
COPY ../../pkg/constant constant/
COPY ../../swaggerDocs swaggerDocs/
COPY ../../go.mod go.mod
COPY ../../go.sum go.sum
RUN go mod tidy && go mod vendor
# Do not force rebuild of up-to-date packages (do not use -a) and use the compiler cache folder RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETPLATFORM} go build -o /workspace/ke ./cmd/ke # 第二阶段:创建最终镜像 FROM alpine:3.19 WORKDIR / COPY --from=builder /workspace/ke /bin/ke ENTRYPOINT ["/bin/ke"] 

2.6 使用标签和版本控制

给镜像打上标签,可以方便地进行版本控制和管理,避免混淆不同版本的镜像。

示例:

# 构建镜像并打标签
docker build -t helloworld:1.0 .

3、总结

在容器化应用的浪潮中,优化 Docker 镜像对于提升应用性能和安全性意义非凡。选择合适基础镜像是关键起点,如同搭建稳固根基,能有效控制镜像的规模与功能范畴。巧妙合并相关指令,可避免镜像层不必要的增多,切实缩减体积。构建过程中,及时清理冗余文件,剔除无实际作用的元素,为镜像 “瘦身”。合理运用.dockerignore 文件,精准排除无关文件和目录,加速构建并减少无用负载。采用多阶段构建策略,分步筛选,仅保留最终运行的必要组件,降低复杂性并提升效率。

遵循 “
容器镜像应仅含应用程序及其运行时依赖项
” 的原则,运用这些优化技巧,让 Docker 镜像更加精简高效,为容器化应用的平稳、快速部署保驾护航,助力开发者充分发挥 Docker 技术优势,推动应用开发与部署向高质量发展迈进。

参考:《
distroless 镜像介绍及调试基于distroless 镜像的容器

参考:《
Docker中Dockerfile多From 指令存在的意义

本文分享自华为云社区
《Karmada v1.12 版本发布!单集群应用迁移可维护性增强》
,作者:云容器大未来。

Karmada 是开放的多云多集群容器编排引擎,旨在帮助用户在多云环境下部署和运维业务应用。凭借兼容 Kubernetes 原生 API 的能力,Karmada 可以平滑迁移单集群工作负载,并且仍可保持与 Kubernetes 周边生态工具链协同。

Karmada v1.12版本
[1]
现已发布,本版本包含下列新增特性:

  • 应用级故障迁移功能增强(新增状态中继机制,适用于大数据处理程序高可用场景,如 Flink)

  • 单集群应用迁移能力增强(适用于单集群存量应用迁移)

  • Karmada Operator 高可用部署能力支持

  • OverridePolicy 支持局部修改结构化字段值

新特性概览

▶  应用级故障迁移功能增强

在之前的版本中,Karmada 提供了基本的应用级故障迁移能力,能够通过应用的健康状态或自定义的故障等条件触发应用迁移。为了满足有状态应用在故障迁移过程中保留其运行状态的需求,Karmada 在 v1.12 版本新增了应用状态中继机制。对于大数据处理应用(例如 Flink),利用此能力可以从故障前的 checkpoint 重新启动,无缝恢复到重启前的数据处理状态,从而避免数据重复处理。

社区在
PropagationPolicy/ClusterPropagationPolicy API
中的
.spec.failover.application
下引入了一个新的
StatePreservation
字段, 用于定义有状态应用在故障迁移期间保留和恢复状态数据的策略。结合此策略,当应用从一个故障集群迁移到另一个集群时,能够从原始资源配置中提取关键数据。

状态保留策略
StatePreservation
包含了一系列
StatePreservationRule
配置,通过 JSONPath 来指定需要保留的状态数据片段,并利用关联的
AliasLabelName
将数据传递到迁移后的集群。

以 Flink 应用为例,在 Flink 应用中,
jobID
是一个唯一的标识符,用于区分和管理不同的 Flink 作业(jobs)。每个 Flink 作业在提交到 Flink 集群时都会被分配一个
jobID
。当作业发生故障时,Flink 应用可以利用
jobID
来恢复故障前作业的状态,从故障点处继续执行。具体的配置和步骤如下:

apiVersion: policy.karmada.io/v1alpha1
kind:PropagationPolicy
metadata:
name:foo
spec:
#...
failover:
    application:
      decisionConditions:
        tolerationSeconds:60
      purgeMode:Immediately
      statePreservation:
        rules:
          -aliasLabelName:application.karmada.io/failover-jobid
            jsonPath:"{ .jobStatus.jobID }"
  1. 迁移前,Karmada 控制器将按照用户配置的路径提取 job ID。

  2. 迁移时,Karmada 控制器将提取的 job ID 以 label 的形式注入到 Flink 应用配置中,比如
    application.karmada.io/failover-jobid : <jobID>

  3. 运行在成员集群的 Kyverno 拦截 Flink 应用创建请求,并根据
    jobID
    获取该 job 的 checkpoint 数据存储路径,比如
    /<shared-path>/<job-namespace>/<jobId>/checkpoints/xxx
    ,然后配置
    initialSavepointPath
    指示从save point 启动。

  4. Flink 应用根据
    initialSavepointPath
    下的 checkpoint 数据启动,从而继承迁移前保存的最终状态。

该能力基于 FlinkDeployment 打造,但广泛适用于能够基于某个 save point 启动的有状态应用程序,这些应用均可参考上述流程实现故障迁移的状态中继。

此功能需要启用 StatefulFailoverInjection 特性开关。StatefulFailoverInjection 目前处于 Alpha 阶段,默认情况下是关闭的。

功能约束:

  1. 应用必须限定在单个集群中运行;

  2. 迁移清理策略(PurgeMode)限定为
    Immediately,即故障应用需立即删除然后再创建新应用,确保数据一致性。

▶  单集群应用迁移能力增强

在用户将业务从单集群迁移至多集群的过程中,如果资源已经被迁移到 Karmada 控制面,那么当控制面中的资源模板被删除时,成员集群中的资源也会随之删除。但在某些场景,用户希望能够保留成员集群中的资源。例如,作为管理员,在工作负载迁移过程中可能遇到意外情况(如云平台无法发布应用程序或 Pod 异常), 需要回滚机制立刻恢复到迁移之前的状态,以便快速止损。

在 v1.12 版本,社区在
PropagationPolicy/ClusterPropagationPolicy API 中引入了
PreserveResourcesOnDeletion 字段,用于定义当控制面中的资源模板被删除时成员集群上资源的保留行为,如果设置为
true,则成员集群上的资源将被保留。结合此字段,一旦用户在迁移过程中发现异常,可以快速执行回滚操作并保留成员集群中原有的资源,整个迁移回滚过程更加安全可控。

使用该字段请注意以下两点:

  • 该配置对所有成员集群统一生效,不会仅针对部分集群进行选择性控制。

  • 当 Policy 被删除时,资源模板及已分发的成员集群资源将保持不变,除非被显式删除。

以 PropagationPolicy 为例,用户在删除 Karmada 控制面资源模板时,可以配置如下 PropagationPolicy 来保留成员集群的资源:

apiVersion: policy.karmada.io/v1alpha1
kind:PropagationPolicy
metadata:
name:nginx-pp
spec:
conflictResolution:Overwrite
preserveResourcesOnDeletion:true# 资源模板删除后,成员集群资源依然保留
placement:
    clusterAffinity:
      clusterNames:
      -member1
resourceSelectors:
-apiVersion:apps/v1
    kind:Deployment
    name:nginx
-apiVersion:v1
    kind:Service
    name:nginx-svc

更多有关安全回滚迁移的资料请参考:
迁移操作如何回滚
[2]

▶  Karmada Operator 高可用部署能力支持

作为社区维护的安装工具,Karmada-operator 可以用来部署和管理多个 Karmada 实例。为了更好地支持高可用部署方案,karmada-operator 在本版本实施了一系列针对性的改进和优化措施,包括:

  • 引入了对自定义 CA 证书的支持;

  • 支持连接外部 etcd;

  • 可通过 Secret 指定外部 etcd 客户端的凭据;

  • 可为 Karmada 组件指定卷和卷挂载;

  • 对外暴露 APISever 服务,用于服务发现。

这些增强使得 karmada-operator 能够跨多个管理集群部署一个高度可用的 Karmada 控制平面,这些集群可以跨越不同的数据中心,从而满足故障恢复的诉求。

上图是通过 Karmada-operator 构建的生产级高可用架构,在这个架构中,Karmada-operator 跨不同地理位置的数据中心部署多个 Karmada 控制面,并将它们连接到同一个外部 etcd 集群。这种设置不仅确保了跨数据中心的数据一致性,还简化了数据管理和维护工作。

此外,借助 Karmada-operator 提供的 APIServer 服务暴露能力,结合 Ingress 对外提供统一的服务访问。同时,利用可配置的CA证书机制,保障了 Karmada 实例与外部服务间通信的安全性。

此架构显著增强了系统对单个数据中心故障的抵御能力,最大限度地减少了因数据中心故障导致的服务中断风险,保证了业务连续性和用户体验的稳定性,符合严格的灾难恢复标准。

▶  OverridePolicy 支持局部修改结构化字段值

OverridePolicy 允许用户针对特定集群自定义资源的覆盖策略,确保资源可以在不同环境中灵活适配和优化。Kubernetes 资源如 Secrets 和 ConfigMaps 常常会用到结构化的字段值,如 ConfigMaps 的
.data 利用 YAML 格式的结构化数据承载配置信息。在实际应用中,存在只需要修改其部分字段的情况,而且,当原始的结构化字段值复杂且内容繁多时,使用全覆盖将会大大增大 OverridePolicy 的配置难度。

为了解决这一问题,并提高 OverridePolicy 在此类场景中的易用性,Karmada 引入了
FieldOverrider 特性。
FieldOverrider 支持对 JSON 和 YAML 格式的结构化字段值进行局部修改,即只添加或替换或删除所需的字段。这种方式简化了配置过程,提高了效率,同时减少了出错的可能性,使得资源管理更加直观和便捷。通过
FieldOverrider,用户可以对结构化字段值进行更精细化地处理,适应多变的应用环境需求。

下面以 ConfigMap 为例,用户可通过
FieldOverrider 部分覆盖 ConfigMap 的
.data 字段来实现集群间的差异化配置。

# example-configmap
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  config.yaml: |
    app:
      database:
        port: 5432
        ip: 127.0.0.1
        name: example
        zone: zone1
# example-overridepolicy
apiVersion:policy.karmada.io/v1alpha1
kind:OverridePolicy
metadata:
name:example
spec:
resourceSelectors:
    -apiVersion:v1
      kind:ConfigMap
      name:example-configmap
overrideRules:
    -overriders:
        fieldOverrider:
          -fieldPath:/data/config.yaml
            yaml:
              -subPath:/app/database/port
                operator:replace# 支持add、remove和replace操作
                value:"3306"
      targetCluster:
        clusterNames:
          -member1

经过以上配置,集群 member1 中的 ConfigMap 将更新为:

# example-configmap in member1
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap
data:
  config.yaml: |
    app:
      database:
        port: 3306 # 更新了port
        ip: 127.0.0.1
        name: example
        zone: zone1

更多
FieldOverrider 的用法请参考:
FieldOverrider 使用指南
[3]

▶ 致谢贡献者

Karmada v1.12 版本包含了来自 33 位贡献者的 253 次代码提交,在此对各位贡献者表示由衷的感谢:

贡献者列表:

参考资料

[1]Karmada v1.12版本:

https://github.com/karmada-io/karmada/releases/tag/v1.12.0

[2]迁移操作如何回滚:

https://karmada.io/zh/docs/next/administrator/migration/migrate-in-batch#%E8%BF%81%E7%A7%BB%E6%93%8D%E4%BD%9C%E5%A6%82%E4%BD%95%E5%9B%9E%E6%BB%9A

[3]FieldOverrider 使用指南:

https://karmada.io/docs/userguide/scheduling/override-policy/#fieldoverrider

【更多华为云云原生干货推荐】
华为云云原生王者之路集训营


华为云云原生王者之路集训营

为帮助广大技术爱好者快速掌握云原生相关技能,华为云云原生团队与华为云学院联合CNCF开源软件大学启动人才培养计划,推出《
华为云云原生王者之路集训营
》,
从云原生基础知识介绍到最佳实践讲解、底层原理和方案架构深度剖析,层层深入,满足不同云原生技术基础和学习目标人群的需求
。本课程还精选数十个企业典型应用场景,作为学员上机实践案例,帮助学员将所学技术快速与企业业务相结合,服务于企业生产。

点击关注,第一时间了解华为云新鲜技术~

在现代数字世界中,图形用户界面(GUI)是人机交互的核心。然而,尽管大型语言模型(LLM)如ChatGPT在处理文本任务上表现出色,但在理解和操作GUI方面仍面临挑战,因此最近一年来,在学界和大模型社区中,越来越多的研究者和开发者们开始关注VLM-based GUI Agent。2023年12月,智谱发布了CogAgent,第一个基于视觉语言模型(Visual Language Model, VLM)的开源 GUI agent 模型,而在最近,最新的CogAgent模型 CogAgent-9B-20241220发布,让LLM操作GUI在技术上更进了一步。

1. CogAgent的诞生与发展

CogAgent是基于视觉语言模型的开源GUI代理模型。它的独特之处在于仅依赖于屏幕截图作为输入,不需要HTML等文本表征。这使得CogAgent能够在各种基于GUI交互的场景中应用,如个人电脑、手机、车机设备等。随着CogAgent的发布,越来越多的研究者和开发者开始关注VLM-based GUI Agent的研究。

1.1 CogAgent-9B-20241220的发布

CogAgent-9B-20241220是CogAgent团队经过一年迭代优化后的最新版本。该版本基于GLM-4V-9B双语开源VLM基座模型,通过数据采集与优化、多阶段训练与策略改进等方法,使其在GUI感知、推理预测准确性、动作空间完善性、任务的普适和泛化性上得到了大幅提升。

CogAgent-9B-20241220

1.2 CogAgent 执行过程

下图展示了CogAgent-9B-20241220执行用户指令的过程。

  • 以 GUI 截图为唯一的环境输入,结合已经完成的动作历史,计算当前 GUI 截图中最合适的动作。
  • 根据更新后的历史动作和截图,计算后续的操作
  • 重复上述过程,直到CogAgent认为指令执行完毕

CogAgent-9B-20241220

2. CogAgent-9B的技术架构与优化

CogAgent-9B-20241220在模型基座、视觉处理模块、数据集丰富与完善、预训练策略优化、后训练策略改进等方面进行了全面的升级。

2.1 模型基座和结构升级

CogAgent使用更强大的视觉语言模型
GLM-4V-9B
作为基座模型,大幅提升了模型的基座图像理解性能。在视觉处理模块上,CogAgent实现了更高效统一的视觉处理模块,支持1120*1120原生高分辨率图像输入。

2.2 数据集丰富与完善

CogAgent团队广泛收集并整合了多种数据集,包括无监督数据和GUI指令微调数据集。这些数据集的丰富性和多样性为CogAgent提供了更广泛的训练和测试基础,使其能够更好地适应实际应用场景。

2.3 预训练与后训练策略优化

在预训练阶段,CogAgent引入了GUI Grounding预训练方法,通过屏幕截图和layout对,构造界面子区域和layout表征的对应关系。在后训练阶段,CogAgent采用了更科学的GUI agent后训练策略,使模型具备了更强的分析、推理、预测能力。

3. CogAgent-9B的应用与性能评估

CogAgent-9B-20241220在多个数据集上的测试结果显示了其卓越的性能。尤其是在Screenspot、OmniAct、CogAgentBench-basic-cn、OSworld等数据集上,CogAgent均取得了领先的成绩。

评测结果对比

CogAgent-9B-20241220模型在多平台、多类别的 GUI agent 及 GUI grounding benchmarks 上取得了当前最优的结果。

4. GUI Agent的未来展望

随着CogAgent-9B-20241220的发布,GUI Agent的研究和工程热又迈入一个新的台阶,智谱表示此版CogAgent模型已被应用于智谱AI的GLM-PC产品 (
https://cogagent.aminer.cn/home
申请内测),预计25年Q1会开展公测。

在之前,智谱发布了AutoGLM,通过CogAgent控制手机实现点餐、买票等操作,节省用户时间。我的理解这些场景还不是刚需,但是非常有潜力变成一个更通用的入口,不过手机终归还不是生产力平台,GLM-PC产品则更让人值得期待,杀死RPA的最后一根稻草。

现在豆包在强化浏览器的功能,就是要将豆包app打造为一个高生产力的入口平台,或许不远的将来,就能看到豆包支持操作PC各类应用的功能。

未来,GUI Agent产品有望在更多的应用领域中得到应用,如智能家居、智能座舱等,为用户提供更智能、更便捷的交互体验。


title: 在不同操作系统上安装 PostgreSQL
date: 2024/12/26
updated: 2024/12/26
author:
cmdragon

excerpt:
PostgreSQL 是当今最受欢迎的开源关系数据库管理系统之一,由于其强大的功能和灵活性,广泛应用于不同的行业和应用场景。在开始使用 PostgreSQL 之前,用户需要了解如何在不同的操作系统(如 Linux、Windows 和 macOS)上正确安装。每种操作系统都有其独特的安装步骤和注意事项,因此掌握这些细节对于顺利搭建数据库环境至关重要。

categories:

  • 前端开发

tags:

  • PostgreSQL
  • 安装指南
  • 操作系统
  • Linux
  • Windows
  • macOS
  • 数据库管理


image
image

扫描
二维码
关注或者微信搜一搜:
编程智域 前端至全栈交流与成长

PostgreSQL 是一种广泛使用的开源关系数据库管理系统,具有高度的灵活性和强大的功能,适用于多种操作系统。在不同的操作系统上安装 PostgreSQL 时,各自的环境特点和配置要求各不相同。在主要操作系统—包括 Linux、Windows 和 macOS—上安装 PostgreSQL 的步骤及注意事项。通过对这些安装过程的深入分析,读者将能够掌握在不同平台上成功安装和配置 PostgreSQL 的最佳实践,从而实现高效、安全的数据库管理。

1. 引言

PostgreSQL 是当今最受欢迎的开源关系数据库管理系统之一,由于其强大的功能和灵活性,广泛应用于不同的行业和应用场景。在开始使用 PostgreSQL 之前,用户需要了解如何在不同的操作系统(如 Linux、Windows 和 macOS)上正确安装。每种操作系统都有其独特的安装步骤和注意事项,因此掌握这些细节对于顺利搭建数据库环境至关重要。

2. 在 Linux 上安装 PostgreSQL

Linux 是 PostgreSQL 的主要发展平台,许多 Linux 发行版均提供了 PostgreSQL 的安装包。以下是一些主要的 Linux 发行版上安装 PostgreSQL 的步骤。

2.1 Ubuntu 系列

  1. 更新软件包列表

    sudo apt update
    
  2. 安装 PostgreSQL

    默认的 Ubuntu 软件库中包含 PostgreSQL,直接使用命令安装:

    sudo apt install postgresql postgresql-contrib
    
  3. 验证安装

    安装完成后,可以通过以下命令验证 PostgreSQL 是否正常运行:

    sudo systemctl status postgresql
    
  4. 配置 PostgreSQL

    默认情况下,PostgreSQL 使用
    postgres
    用户进行管理。可以通过以下命令切换到该用户:

    sudo -i -u postgres
    
  5. 创建数据库和用户

    使用
    psql
    工具创建新数据库和用户:

    createdb mydb
    createuser myuser --pwprompt
    

2.2 CentOS 系列

  1. 安装 EPEL 仓库

    sudo yum install epel-release
    
  2. 安装 PostgreSQL

    PostgreSQL 的官方仓库提供了更为最新的版本,可以通过以下步骤添加该仓库并安装:

    sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo yum install postgresql12 postgresql12-server postgresql12-contrib
    
  3. 初始化数据库

    安装后,初始化 PostgreSQL 数据库:

    sudo /usr/pgsql-12/bin/postgresql12-setup initdb
    
  4. 启动 PostgreSQL 服务

    sudo systemctl start postgresql-12
    sudo systemctl enable postgresql-12
    
  5. 防火墙设置

    如果需要远程访问,需在防火墙中开放 PostgreSQL 默认端口(5432):

    sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    

2.3 其他 Linux 发行版

其他发行版上的安装过程大致相似,用户需要根据可用的包管理工具和软件库进行调整。例如,在 Arch Linux 上,可以使用
pacman
进行安装:

sudo pacman -S postgresql

3. 在 Windows 上安装 PostgreSQL

在 Windows 上安装 PostgreSQL 相对直观,以下是详细步骤:

3.1 下载安装程序

访问 PostgreSQL 官方网站(
https://www.postgresql.org/download/windows/
)下载 Windows 安装包。安装包包括图形化安装程序,简化了安装过程。

3.2 运行安装程序

  1. 启动安装程序

    双击下载的
    .exe
    文件以启动安装向导。

  2. 选择安装目录

    在安装向导中,选择 PostgreSQL 的安装目录。默认的路径通常为:

    C:\Program Files\PostgreSQL\<版本号>\
    
  3. 选择组件

    在组件选择界面,用户可以选择安装哪些组件,通常包括数据库服务器、pgAdmin(管理工具)等。

  4. 设置超级用户

    在此步骤中,用户需要设置 PostgreSQL 的超级用户(默认是
    postgres
    )的密码。

  5. 配置端口

    默认情况下,PostgreSQL 使用 5432 端口。用户可以根据需要修改该端口,但建议保持默认值。

  6. 选择 Locale

    确定数据库的区域设置,通常选择默认即可。

  7. 完成安装

    完成所有配置后,点击“安装”,等待安装程序完成安装过程。

  8. 启动 PostgreSQL

    安装完成后,PostgreSQL 服务会自动启动,可以通过“服务”管理工具查看服务状态。

3.3 使用 pgAdmin 管理数据库

在 Windows 安装 PostgreSQL 后,可以通过 pgAdmin 图形化界面管理数据库,创建新数据库、用户并执行 SQL 查询。

4. 在 macOS 上安装 PostgreSQL

macOS 用户可以通过 Homebrew 或官方安装包来安装 PostgreSQL,以下是具体方法。

4.1 通过 Homebrew 安装

  1. 安装 Homebrew
    (如果尚未安装):
    打开终端并运行以下命令:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. 更新 Homebrew

    brew update
    
  3. 安装 PostgreSQL

    使用以下命令安装 PostgreSQL:

    brew install postgresql
    
  4. 启动 PostgreSQL 服务

    安装完成后,可以启动 PostgreSQL 服务:

    brew services start postgresql
    
  5. 创建数据库和用户

    切换到 PostgreSQL 用户并创建数据库及用户:

    createuser myuser --pwprompt
    createdb mydb
    

4.2 通过官方安装包安装

  1. 下载安装包

    访问 PostgreSQL 官方网站(
    https://www.postgresql.org/download/macosx/),下载适合的
    .dmg
    文件。

  2. 安装 PostgreSQL

    双击
    .dmg
    文件并按步骤安装,通常会引导您设置密码和选择组件。

  3. 配置环境变量

    安装完成后,可能需要将 PostgreSQL 的
    bin
    目录添加到系统的 PATH 变量中,以便在终端中直接使用 PostgreSQL 命令行工具。

5. 安装后的配置

无论是在何种操作系统上安装 PostgreSQL,完成基本安装后,用户都应进行一些基本配置,以确保数据库的顺利运行。

5.1 数据目录权限

确保 PostgreSQL 数据目录对 PostgreSQL 服务账户是可写的,这通常是默认配置,但在手动创建或移动数据目录时需要加以确认。

5.2 远程访问设置

如果需要从远程客户端访问 PostgreSQL 数据库,用户需要在
pg_hba.conf
文件中配置允许特定IP或网络的连接。

5.3 性能优化

可以根据具体应用场景调整 PostgreSQL 的性能参数,例如
shared_buffers

work_mem

maintenance_work_mem
等。这些参数的合理设置可以显著提高数据库的性能。

6. 常见问题及解决方案

在安装 PostgreSQL 时,用户可能会遇到一些常见问题,以下是一些解决方案:

6.1 安装失败

确保在安装过程中没有其他 PostgreSQL 实例正在运行,并查看安装日志以获取详细的错误信息。

6.2 连接问题

如果无法连接到 PostgreSQL,首先检查服务是否正在运行,确保防火墙未阻止连接,此外,确保使用正确的用户凭据。

6.3 数据库管理工具问题

如果遇到 pgAdmin 等管理工具连接不上数据库,可以检查配置文件的连接设置,确保使用正确的主机、端口和用户信息。

7. 结论

PostgreSQL 是强大的开源关系型数据库管理系统,其在不同操作系统上的安装过程具备一定的特殊性。本文详细探讨了在 Linux、Windows 和 macOS 上安装 PostgreSQL 的步骤,以及一些关键配置和常见问题的解决方案。通过谨慎遵循这些安装和配置步骤,用户将能够顺利搭建出高效、稳定的 PostgreSQL 数据库环境,从而充分发挥其强大的数据管理能力。

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:
编程智域 前端至全栈交流与成长
,阅读完整的文章:
在不同操作系统上安装 PostgreSQL | cmdragon's Blog

往期文章归档:

hello,大家好,我是
程序员海军
。很荣幸能与大家分享我今年的第三篇文章。在过去的一年里,我深入探索了Nuxt3,并在多个项目中实际应用了这一前沿框架,从而对其功能和应用有了全面而深刻的理解。今天,我要带给大家的是一篇关于2024年Nuxt3生态发展的全景扫描。

在这篇文章中,我们将一起探讨Nuxt3的多元化生态,涵盖UI库、请求库、工具库、状态管理、国际化、图标库、表单处理、Nuxt官方模块,以及数据可视化等多个维度。这些内容将帮助我们构建出更加健壮、高效、用户体验卓越的Nuxt3应用。

不仅如此,我们还将深入探讨如何利用Nuxt3的SEO优势,优化项目的展示效果,吸引更多用户,从而为自己的项目带来新的增长点。

UI

Naive UI

  • 推荐理由
    :Naive UI 是一款轻量级且功能全面的 UI 组件库,专为 Vue 3 和 Composition API 设计,样式简洁且现代,支持暗黑模式。适合构建现代化的后台管理系统和前端应用。
  • 文档地址

    NaiveUI官方文档

Element Plus

  • 推荐理由
    :Element Plus 是 Vue 3 版本的 Element UI,提供了一套高质量的 UI 组件,界面简洁、设计优雅,适合各类后台管理系统及中大型项目。
  • 文档地址

    Element Plus 官方文档

Vuetify 3

  • 推荐理由
    :Vuetify 是一个功能强大的 UI 组件库,提供了大量的 UI 组件和深度定制化选项,基于 Material Design 设计规范,适合构建漂亮的 Web 应用。
  • 文档地址

    Vuetify 官方文档

请求库

Axios

  • 推荐理由
    :Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js。它与 Nuxt3 的
    useFetch
    配合使用时可以简化 API 请求,并且易于使用和配置。
  • 文档地址

    Axios 官方文档

Vue Use Fetch

  • 推荐理由
    :这是一个与 Nuxt 3 完美配合的请求库,基于
    useFetch
    钩子封装,提供了更为灵活的 API 请求和状态管理方式,支持缓存、错误处理等功能。
  • 文档地址

    Vue Use Fetch

工具库

  • Lodash

  • 推荐理由
    :Lodash 是一款非常强大的 JavaScript 工具库,提供了许多有用的函数来简化常见的操作,如数组、对象、函数等的操作。它在处理复杂数据结构时非常高效。

  • 文档地址

    Lodash 官方文档

VueUse

  • 推荐理由
    :VueUse 是一套基于 Vue 3 Composition API 的实用函数库,它提供了大量的功能,包含状态管理、响应式引用、事件处理等,可以显著提高开发效率。
  • 文档地址

    VueUse 官方文档

Tailwind CSS

  • 推荐理由
    :Tailwind CSS 是一个功能类优先的 CSS 框架,适合用来构建响应式和高度定制的用户界面。它与 Nuxt 3 配合使用可以显著提高开发效率,尤其在快速布局和设计方面。
  • 文档地址

    Tailwind CSS 官方文档

Day.js

  • 推荐理由
    :Day.js 是一个轻量级的日期处理库,API 与 Moment.js 兼容,但体积更小。适合需要处理日期和时间的场景。
  • 文档地址

    Day.js 官方文档

状态管理

Pinia

  • 推荐理由
    :Pinia 是 Nuxt 3 推荐的官方状态管理库,它是 Vue 3 的响应式状态管理工具,提供了更好的 TypeScript 支持和性能优化。适用于替代 Vuex,适合 Nuxt 3 项目中使用。
  • 文档地址

    Pinia 官方文档

Vuex 4

  • 推荐理由
    :Vuex 是 Vue 的状态管理库,Vuex 4 是支持 Vue 3 的版本。如果你习惯 Vuex 并且项目中已经使用 Vuex,可以继续使用它,但推荐新项目使用 Pinia。
  • 文档地址

    Vuex 官方文档

国际化

Vue I18n (unplugin-vue-i18n)

  • 推荐理由
    :Vue I18n 是 Vue.js 官方的国际化插件,支持多语言和区域化,适合需要支持多语言的 Nuxt 项目,配合 Nuxt 3 使用非常方便。
  • 文档地址

    Vue I18n 官方文档

Nuxt I18n (nuxt-i18n-micro)

  • 推荐理由
    :Nuxt I18n 是 Nuxt 专门为国际化提供的插件,支持多语言切换、路由国际化等功能,特别适合 Nuxt 3 项目中需要国际化的场景。
  • 文档地址

    Nuxt I18n 官方文档

图表库

Heroicons

  • 推荐理由
    :Heroicons 提供了一套免费的 SVG 图标,样式简洁且现代,适合与 Tailwind CSS 和 Nuxt 3 配合使用。
  • 文档地址

    Heroicons 官方文档

yesicon

  • 推荐理由
    :yesicon 提供了
    245,324
    枚高品质矢量图标 来自全球顶尖设计团队。
  • 文档地址

    yesicon

表单处理

VeeValidate

  • 推荐理由
    :VeeValidate 是一款强大的 Vue 3 表单验证库,支持自定义验证规则、异步验证等,能够高效地处理表单验证逻辑。
  • 文档地址

    VeeValidate 官方文档

Nuxt 官方模块

@nuxtjs/auth-next

  • 推荐理由
    :这是 Nuxt.js 官方提供的身份验证模块,支持 OAuth、JWT 等常见认证方式,适合需要身份验证的 Nuxt 应用。它与
    @nuxtjs/axios
    模块兼容。
  • 文档地址

    @nuxtjs/auth-next 官方文档

@nuxtjs/pwa

  • 推荐理由
    :这是 Nuxt.js 官方提供的 PWA(Progressive Web App)模块,可以轻松将你的 Nuxt 应用转换为渐进式 Web 应用,支持离线缓存、推送通知等。

  • 文档地址

    @nuxtjs/pwa 官方文档

@nuxt/content

  • 推荐理由
    :该模块让你能够轻松地将内容管理(如 Markdown、YAML 文件等)集成到 Nuxt 中,用于构建静态网站或博客。它支持实时编辑、动态数据加载等功能。
  • 文档地址

    @nuxt/content 官方文档

@nuxtjs/sitemap

  • 推荐理由
    :这个模块可以自动生成站点的 XML Sitemap,适合 SEO 优化,帮助搜索引擎更好地索引你的 Nuxt 应用。
  • 文档地址

    @nuxtjs/sitemap 官方文档

Nuxt Image

  • 推荐理由
    :Nuxt Image 是一个专为 Nuxt.js 提供的模块,能够自动优化图片的加载、大小和格式,帮助提高网站性能和加载速度。
  • 文档地址

    Nuxt Image 官方文档

数据可视化和图表库

ECharts

  • 推荐理由
    :ECharts 是一个基于 JavaScript 的开源图表库,支持丰富的数据可视化图表,尤其适合大型数据可视化展示,适用于高交互性和高性能要求的场景。
  • 文档地址

    ECharts 官方文档

D3.js

  • 推荐理由
    :D3.js 是一个强大的 JavaScript 数据可视化库,它允许你通过 HTML、SVG 和 CSS 创建交互式图表。它非常适合需要高度定制的图表。
  • 文档地址

    D3.js 官方文档

Vega

  • 推荐理由
    :Vega 是一个数据可视化库,基于 JSON 格式配置图表,支持交互式图表和地图,适合构建复杂的数据可视化应用。
  • 文档地址

    Vega 官方文档

总结

Nuxt3生态的分享就到此结束了,如果大家觉得文章不错的话,可以关注
我:程序员海军
,后续还会分享更多Web最新最全的动态。