Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初次在Vue项目使用TypeScript,需要做什么

初次在Vue项目使用TypeScript,需要做什么

作者头像
WahFung
发布于 2020-08-24 07:13:02
发布于 2020-08-24 07:13:02
6.9K00
代码可运行
举报
文章被收录于专栏:前端技术分享前端技术分享
运行总次数:0
代码可运行

前言

总所周知,Vue新版本3.0 使用 TypeScript 开发,让本来就很火的 TypeScript 受到更多人的关注。虽然 TypeScript 在近几年才火,但其实它诞生于2012年10月,正式版本发布于2013年6月,是由微软编写的自由和开源的编程语言。TypeScript 是 JavaScript 的一个超集,扩展了 JavaScript 的语法,添加了可选的静态类型和基于类的面向对象编程。

JavaScript开发中经常遇到的错误就是变量或属性不存在,然而这些都是低级错误,而静态类型检查恰好可以弥补这个缺点。什么是静态类型?举个栗子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//javascript 
let str = 'hello'
str = 100 //ok

//typescript
let str:string = 'hello'
str = 100 //error: Type '100' is not assignable to type 'string'.

可以看到 TypeScript 在声明变量时需要为变量添加类型,如果变量值和类型不一致则会抛出错误。静态类型只在编译时进行检查,而且最终编译出来的代码依然是 JavaScript。即使我们为 string 类型的变量赋值为其他类型,代码也是可以正常运行的。

其次,TypeScript 增加了代码的可读性和可维护性,类型定义实际上就是一个很好的文档,比如在调用函数时,通过查看参数和返回值的类型定义,就大概知道这个函数如何使用。

准备工作

npm

安装 typescript

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install typescript @vue/cli-plugin-typescript -D

新增文件

在项目的根目录下创建 shims-vue.d.ts、shims-tsx.d.ts、tsconfig.json

  • shims-vue.d.ts
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue';

declare module '*.vue' {
  export default Vue;
}
  • shims-tsx.d.ts
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue, { VNode } from 'vue';

declare global {
  namespace JSX {
    type Element = VNode
    type ElementClass = Vue
    interface IntrinsicElements {
      [elem: string]: any;
    }
  }
}
  • tsconfig.json
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators":true,
    "sourceMap": true,
    "noImplicitThis": false,
    "baseUrl": ".",
    "types": [
      "webpack-env"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

ESLint配置

为什么使用 ESLint 而不是 TSLint?

今年1月份,TypeScript官方发布博客推荐使用ESLint来代替TSLint。而 ESLint 团队将不再维护 typescript-eslint-parser,也不会在 Npm 上发布,任何使用 tyescript-eslint-parser 的用户应该改用 @tyescript-eslint/parser

官方的解释:

我们注意到TSLint规则的操作方式存在一些影响性能的体系结构问题,ESLint已经拥有了我们希望从linter中得到的更高性能的体系结构。此外,不同的用户社区通常有针对ESLint而不是TSLint构建的lint规则(例如React hook或Vue的规则)。鉴于此,我们的编辑团队将专注于利用ESLint,而不是复制工作。对于ESLint目前没有覆盖的场景(例如语义linting或程序范围的linting),我们将致力于将ESLint的TypeScript支持与TSLint等同起来。

原文

如何使用

AlloyTeam 提供了一套全面的EsLint配置规范,适用于 React/Vue/Typescript 项目,并且可以在此基础上自定义规则。 GitHub

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-config-alloy

配置项的说明查看AlloyTeam ESLint 规则

配置

在项目的根目录中创建.eslintrc.js,然后将以下内容复制到其中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = {
  extends: [
    'alloy',
    'alloy/typescript',
  ],
  env: {
    browser: true,
    node: true,
  },
  rules: {
    // 自定义规则
    'spaced-comment': 'off',
    '@typescript-eslint/explicit-member-accessibility': 'off',
    'grouped-accessor-pairs': 'off',
    'no-constructor-return': 'off',
    'no-dupe-else-if': 'off',
    'no-import-assign': 'off',
    'no-setter-return': 'off',
    'prefer-regex-literals': 'off'
  }
};

补充

如果想知道配置项更多使用,可以到ESLint官网搜索配置项。

如果使用的是VScode,推荐使用ESLint插件辅助开发。

文件改造

入口文件

  1. main.js 改为 main.ts
  2. vue.config.js 修改入口文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path')
module.exports = {
  ...
  pages: {
    index: {
      entry: path.resolve(__dirname+'/src/main.ts')
    },
  },
  ...
}

vue组件文件

随着TypeScript和ES6里引入了类,在一些场景下我们需要额外的特性来支持标注或修改类及其成员。 装饰器(Decorators)为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。

Vue 也为我们提供了类风格组件的 TypeScript 装饰器,使用装饰器前需要在 tsconfig.json 将 experimentalDecorators 设置为 true。

安装vue装饰器

vue-property-decorator库完全依赖vue-class-component,在安装时要一起装上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install vue-class-component vue-property-decorator -D

改造.vue

只需要修改srcipt内的东西即可,其他不需要改动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
import draggable from 'vuedraggable'

@Component({
  created(){
    
  },
  components:{
    draggable
  }
})
export default class MyComponent extends Vue {
  /* data */
  private ButtonGrounp:Array<any> = ['edit', 'del']
  public dialogFormVisible:boolean = false
  
  /*method*/
  setDialogFormVisible(){
    this.dialogFormVisible = false
  }
  addButton(btn:string){
    this.ButtonGrounp.push(btn)
  }

  /*compute*/
  get routeType(){
    return this.$route.params.type
  }
}
</script>

类成员修饰符,不添加修饰符则默认为public

  • public:公有,可以自由访问类的成员
  • protected:保护,类及其继承的子类可访问
  • private:私有,只有类可以访问

Prop

!: 为属性使用明确的赋值断言修饰符,了解更多看文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component, Vue, Prop } from "vue-property-decorator";
export default class MyComponent extends Vue {
  ...
  @Prop({type: Number,default: 0}) readonly id!: number
  ...
}

等同于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
  ...
  props:{
    id:{
      type: Number,
      default: 0
    }
  }
  ...
}

Watch

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component, Vue, Watch } from "vue-property-decorator";
export default class MyComponent extends Vue {
  ...
  @Watch('dialogFormVisible')
  dialogFormVisibleChange(newVal:boolean){
    // 一些操作
  }
  ...
}

等同于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
  ...
  watch:{
    dialogFormVisible(newVal){
      // 一些操作
    }
  }
  ...
}

Provide/Inject

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App.vue
import {Component, Vue, Provide} from 'vue-property-decorator'
@Component
export default class App extends Vue {
  @Provide() app = this
}

// MyComponent.vue
import {Component, Vue, Inject} from 'vue-property-decorator'
@Component
export default class MyComponent extends Vue {
  @Inject() readonly app!: Vue
}

等同于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App.vue
export default {
  provide() {
    return {
      'app': this
    }
  }
}

// MyComponent.vue
export default {
  inject: ['app']
}

更多装饰器使用,参考vue-property-decorator文档

全局声明

*.d.ts 文件

目前主流的库文件都是 JavaScript 编写,TypeScript 身为 JavaScript 的超集,为支持这些库的类型定义,提供了类型定义文件(*.d.ts),开发者编写类型定义文件发布到npm上,当使用者需要在 TypeScript 项目中使用该库时,可以另外下载这个包,让JS库能够在 TypeScript 项目中运行。

比如:md5 相信很多人都使用过,这个库可以将字符串转为一串哈希值,这种转化不可逆,常用于敏感信息进行哈希再发送到后端进行验证,保证数据安全性。如果我们想要在 TypeScript 项目中使用,还需要另外下载 @tyeps/md5,在该文件夹的index.d.ts中可以看到为 md5 定义的类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <reference types="node" />

declare function md5(message: string | Buffer | Array<number>): string;

declare namespace md5 {}

export = md5;

TypeScript 是如何识别 *.d.ts

TypeScript 在项目编译时会全局自动识别 *.d.ts文件,我们需要做的就是编写 *.d.ts,然后 TypeScript 会将这些编写的类型定义注入到全局提供使用。

为vue实例添加属性/方法

当我们在使用this.route或一些原型上的方法时,typescript无法进行推断,在编译时会报属性route不存在的错误,需要为这些全局的属性或方法添加全局声明

对shims-vue.d.ts做修改,当然你也可以选择自定义*.d.ts来添加声明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue';
import VueRouter, { Route } from 'vue-router'

declare module '*.vue' {
  export default Vue;
}

declare module 'vue/types/vue' {
  interface Vue {
    $api: any;
    $bus: any;
    $router: VueRouter;
    $route: Route;
  }
}

自定义类型定义文件

当一些类型或接口等需要频繁使用时,我们可以为项目编写全局类型定义, 根路径下创建@types文件夹,里面存放*.d.ts文件,专门用于管理项目中的类型定义文件。

这里我定义个global.d.ts文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//declare 可以创建 *.d.ts 文件中的变量,declare 只能作用域最外层
//变量
declare var num: number;

//类型
type StrOrNum = string | number

//函数
declare function handler(str: string): void;

// 类
declare class User { 
  
}

//接口
interface OBJ {
  [propName: string]: any;
  [propName: number]: any;
}

interface RES extends OBJ {
  resultCode: number;
  data: any;
  msg?: string;
}

解放双手,transvue2ts转换工具

改造过程最麻烦的就是语法转换,内容都是一些固定的写法,这些重复且枯燥的工作可以交给机器去做。这里我们可以借助 transvue2ts 工具提高效率,transvue2ts 会帮我们把data、prop、watch等语法转换为装饰器语法。

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i transvue2ts -g

使用

安装完之后,transvue2ts 库的路径会写到系统的 path中,直接打开命令行工具即可使用,命令的第二个参数是文件的完整路径。 执行命令后会在同级目录生成转换好的新文件,例如处理view文件夹下的index.vue,转换后会生成indexTS.vue。

处理单文件组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
transvue2ts D:\typescript-vue-admin-demo\src\pages\index.vue
=>
输出路径:D:\typescript-vue-admin-demo\src\pages\indexTS.vue

处理文件夹下的所有vue组件文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
transvue2ts D:\typescript-vue-admin-demo\src\pages
=>
输出路径:D:\typescript-vue-admin-demo\src\pagesTS

补充

不要以为有工具真就完全解放双手,工具只是帮我们转换部分语法。工具未能处理的语法和参数的类型定义,还是需要我们去修改的。要注意的是转换后注释会被过滤掉。

该工具作者在掘金对工具的介绍

关于第三方库使用

一些三方库会在安装时,包含有类型定义文件,使用时无需自己去定义,可以直接使用官方提供的类型定义。

node_modules中找到对应的包文件夹,类型文件一般都会存放在types文件夹内,其实类型定义文件就像文档一样,这些内容能够清晰的看到所需参数和参数类型。

这里列出一些在 Vue 中使用三方库的例子:

element-ui 组件参数

使用类型定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component, Vue } from "vue-property-decorator";
import { ElLoadingComponent, LoadingServiceOptions } from 'element-ui/types/loading'

let loadingMark:ElLoadingComponent; 
let loadingConfig:LoadingServiceOptions = {
  lock: true,
  text: "加载中",
  spinner: "el-icon-loading",
  background: "rgba(255, 255, 255, 0.7)"
};

@Component
export default class MyComponent extends Vue {
  ...
  getList() {
    loadingMark = this.$loading(loadingConfig);
    this.$api.getList()
      .then((res:RES) => {
        loadingMark.close();
      });
  }
  ...
}

element-ui/types/loading,原文件里还有很多注释,对每个属性都做出描述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export interface LoadingServiceOptions {
  target?: HTMLElement | string
  body?: boolean
  fullscreen?: boolean
  lock?: boolean
  text?: string
  spinner?: string
  background?: string
  customClass?: string
}
export declare class ElLoadingComponent extends Vue {
  close (): void
}
declare module 'vue/types/vue' {
  interface Vue {
    $loading (options: LoadingServiceOptions): ElLoadingComponent
  }
}

vue-router 钩子函数

使用类型定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component, Vue } from "vue-property-decorator";
import { NavigationGuard } from "vue-router";

@Component
export default class MyComponent extends Vue {
  beforeRouteUpdate:NavigationGuard = function(to, from, next) {
    next();
  }
}

在vue-router/types/router.d.ts中,开头就可以看到钩子函数的类型定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export type NavigationGuard<V extends Vue = Vue> = (
  to: Route,
  from: Route,
  next: (to?: RawLocation | false | ((vm: V) => any) | void) => void
) => any

还有前面所使用到的RouterRoute,所有的方法、属性、参数等都在这里被描述得清清楚楚

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export declare class VueRouter {
  constructor (options?: RouterOptions);

  app: Vue;
  mode: RouterMode;
  currentRoute: Route;

  beforeEach (guard: NavigationGuard): Function;
  beforeResolve (guard: NavigationGuard): Function;
  afterEach (hook: (to: Route, from: Route) => any): Function;
  push (location: RawLocation, onComplete?: Function, onAbort?: ErrorHandler): void;
  replace (location: RawLocation, onComplete?: Function, onAbort?: ErrorHandler): void;
  go (n: number): void;
  back (): void;
  forward (): void;
  getMatchedComponents (to?: RawLocation | Route): Component[];
  onReady (cb: Function, errorCb?: ErrorHandler): void;
  onError (cb: ErrorHandler): void;
  addRoutes (routes: RouteConfig[]): void;
  resolve (to: RawLocation, current?: Route, append?: boolean): {
    location: Location;
    route: Route;
    href: string;
    normalizedTo: Location;
    resolved: Route;
  };

  static install: PluginFunction<never>;
}
export interface Route {
  path: string;
  name?: string;
  hash: string;
  query: Dictionary<string | (string | null)[]>;
  params: Dictionary<string>;
  fullPath: string;
  matched: RouteRecord[];
  redirectedFrom?: string;
  meta?: any;
}

自定义三方库声明

当使用的三方库未带有 *.d.ts 声明文件时,在项目编译时会报这样的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Could not find a declaration file for module 'vuedraggable'. 'D:/typescript-vue-admin-demo/node_modules/vuedraggable/dist/vuedraggable.umd.min.js' implicitly has an 'any' type.
  Try `npm install @types/vuedraggable` if it exists or add a new declaration (.d.ts) file containing `declare module 'vuedraggable';`

大致意思为 vuedraggable 找不到声明文件,可以尝试安装 @types/vuedraggable(如果存在),或者自定义新的声明文件。

安装 @types/vuedraggable

按照提示先选择第一种方式,安装 @types/vuedraggable,然后发现错误 404 not found,说明这个包不存在。感觉这个组件还挺多人用的(周下载量18w),没想到社区居然没有声明文件。

自定义声明文件

无奈只能选择第二种方式,说实话自己也摸索了有点时间(主要对这方面没做多了解,不太熟悉)

首先在 node_modules/@types 下创建 vuedraggable 文件夹,如果没有 @types 文件夹可自行创建。vuedraggable 文件夹下创建 index.d.ts。编写以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue'
declare class Vuedraggable extends Vue{}
export = Vuedraggable

重新编译后没有报错,解决问题。

建议及注意事项

改造过程

  • 在接入 TypeScript 时,不必一次性将所有文件都改为ts语法,原有的语法也是可以正常运行的,最好就是单个修改
  • 初次改造时出现一大串的错误是正常的,基本上都是类型错误,按照错误提示去翻译进行修改对应错误
  • 在导入ts文件时,不需要加 .ts 后缀
  • 为项目定义全局变量后无法正常使用,重新跑一遍服务器(我就碰到过...)

遇到问题

  • 面向搜索引擎,前提是知道问题出在哪里
  • 多看仔细文档,大多数一些错误都是比较基础的,文档可以解决问题
  • Github 找 TypeScript 相关项目,看看别人是如何写的

写在最后

抽着空闲时间入门一波 TypeScript,尝试把一个后台管理系统接入 TypeScript,毕竟只有实战才能知道有哪些不足,以上记录都是在 Vue 中如何使用 TypeScript,以及遇到的问题。目前工作中还未正式使用到 TypeScript,学习新技术需要成本和时间,大多数是一些中大型的公司在推崇。总而言之,多学点总是好事,学习都要多看多练,知道得越多思维就会更开阔,解决问题的思路也就越多。

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于linux下的SElinux安全系统
SELinux最初由美国国家安全局(NSA)开发,旨在提供更强大的安全机制,以防止潜在的系统漏洞和攻击。它通过强制访问控制机制,将传统的Linux访问权限模型(基于用户和组的访问控制)扩展为更复杂的基于标签的安全模型。
用户5921339
2025/05/20
1900
基于linux下的SElinux安全系统
SELinux初学者指南
SELinux(Security Enhanced Linux)是美国国家安全局2000年发布的一种高级MAC(Mandatory Access Control,强制访问控制)机制,用来预防恶意入侵。SELinux在DAC(Discretionary Access Control,自主访问控制)的基础上实现了强制访问控制,比如读、写和执行权限。
伍尚国
2018/09/11
1.4K0
安全利器 — SELinux
在 Linux 系统中一切皆文件,资源也属于某种文件。用户在访问文件的时候,系统对权限(读、写 、执行)进行检查。只要用户对文件有足够的权限,就可以任意操作资源。root 用户对所有资源拥有所有权限,是个危险的存在。每年都会看到某职员一不小心把系统“干趴下”的新闻。这种权限管理的主体是用户,被称为 Discretionary Access Control ,DAC ,自主访问控制。
天存信息
2021/06/08
1.5K0
安全利器 — SELinux
Linux系统安全-SELinux入门
SELinux(Security-Enhanced Linux)是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。SELinux提供了比传统的UNIX权限更好的访问控制。
谢公子
2022/01/19
1.7K0
Linux系统安全-SELinux入门
SELinux入门学习总结
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
小陈运维
2021/10/13
1.3K0
CentOS下SELinux安全设置 原
在CentOS 7系统中部署SELinux非常简单,由于SELinux已经作为模块集成到内核中,默认SELinux已经处于激活状态。对管理员来说,更多的是需要配置与管理SELinux,CentOS 7系统中SELinux全局配置文件为/etc/sysconfig/selinux,内容如下:
拓荒者
2019/03/11
2.3K0
系统管理员的 SELinux 指南:这个大问题的42个答案
安全、坚固、遵从性、策略是末世中系统管理员的四骑士。除了我们的日常任务之外 —— 监控、备份、实施、调优、更新等等 —— 我们还需要负责我们的系统安全。即使这些系统是第三方提供商告诉我们该禁用增强安全性的系统。这看起来像《碟中碟》中 Ethan Hunt 的工作一样。
用户8639654
2021/10/21
8790
SELinux安全问题
SELinux(Security-Enhanced Linux)是一个安全模块,用于强制执行细粒度的安全策略。SELinux可以显著提高系统的安全性,但有时也会导致一些问题,特别是当应用程序或服务配置不当时。以下是一些诊断和解决SELinux安全问题的方法:
是山河呀
2025/02/03
3540
【Linux】如何管理SELinux?
在运行SELinux的系统上,所有进程和文件都会有相应的标签。新文件通常从父目录继承其SELinux上下文,从而确保它们具有适当的上下文。
MaybeHC
2024/04/23
4680
【Linux】如何管理SELinux?
selinux安全增强linux
文件权限的访问方式: 1.DAC主动访问控制:完全依赖于权限的设置 2.MAC强制访问控制:根据上下文的进程,只能访问特定上下文的内容。
陪你听风
2021/03/31
1.9K0
技术分享 | SELinux 与 MySQL
为了提高 Linux 系统的安全性,在 Linux 上通常会使用 SELinux 或 AppArmor 实现强制访问控制(Mandatory Access Control MAC)。对于 MySQL 数据库的强制访问控制策略通常是激活的,如果用户采用默认的配置,并不会感到强制访问控制策略对 MySQL 数据库的影响,一旦用户修改了 MySQL 数据库的默认配置,例如默认的数据目录或监听端口,MySQL 数据库的活动就会被 SELinux 或 AppArmor 阻止,数据库无法启动,本文简单介绍 SELinux 对 MySQL 数据库的影响。
爱可生开源社区
2021/01/13
1.3K0
三分钟学会 linux 的 selinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
用户7557625
2020/07/15
7550
《Nginx反向代理MinIO集群全实战:负载均衡配置、SELinux安全策略与生产环境调优指南》
虽然MinIO集群内置了负载均衡和高可用,但是用Nginx代理MinIO集群还有其他的好处:
摘星.
2025/05/20
6310
《Nginx反向代理MinIO集群全实战:负载均衡配置、SELinux安全策略与生产环境调优指南》
SELinux的基本使用
从进入了 CentOS 5.x 之后的 CentOS 版本中 (当然包括 CentOS 7),SELinux 已经是个非常完备的核心模块了!尤其 CentOS 提供了很多管理 SELinux 的指令与机制,因此在整体架构上面是单纯且容易操作管理的!所以,在没有自行开发网络服务软件以及使用其他第三方协力软件的情况下,也就是全部使用 CentOS 官方提供的软件来使用我们服务器的情况下,建议大家不要关闭 SELinux ! 让我们来仔细的玩玩这家伙吧!
小柒吃地瓜
2020/04/23
3.1K0
使用命令行配置防火墙 [root@host ~]# firewall-cmd --set-default-znotallow=dmz Warning: ZONE_ALREADY_SET: dmz
青灯古酒
2023/10/16
3380
使用命令行配置防火墙 [root@host ~]# firewall-cmd --set-default-znotallow=dmz  Warning: ZONE_ALREADY_SET: dmz
如何在CentOS7上禁用或关闭SELinux
介绍 SELinux 是内置于 Linux 内核中的强制访问控制 (MAC) 执行器。它限制了可能对系统构成威胁的个别服务的权限。 没有 SELinux 的 CentOS 系统依赖于其所有特权软件应用程序的配置。单个错误配置可能会危及整个系统。 为什么禁用 SELinux 并非所有应用程序都支持 SELinux。因此,SELinux 可以在软件包的正常使用和安装过程中终止必要的进程。在这些情况下,我们建议你关闭此服务。 在 CentOS 上禁用 SELinux 的步骤 第 1 步:检查 SELinux 状态
入门笔记
2022/06/02
5.2K0
如何在CentOS7上禁用或关闭SELinux
SELINUX工作原理
Security-Enhanced Linux (SELinux)由以下两部分组成:
用户5807183
2019/08/06
2.9K0
centos7 部署Apache服务器
Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。 它的名字取自美国印第安人土著语,寓意着拥有高超的作战策略和无穷的耐性,在红帽RHEL5、6、7系统中一直作为着默认的Web服务程序而使用,并且也一直是红帽RHCSA和红帽RHCE的考试重点内容。Apache服务程序可以运行在Linux系统、Unix系统甚至是Windows系统中,支持基于IP、域名及端口号的虚拟主机功能、支持多种HTTP认证方式、集成有代理服务器模块、安全Socket层(SSL)、能够实时监视服务状态与定制日志消息,并有着各类丰富的模块支持。
拓荒者
2019/03/15
1.8K0
centos7 部署Apache服务器
红帽认证RedHat-RHCSA 网络配置和防火墙管理
通过修改配置文件配置网络信息(需要重启网络服务使配置生效,配置会永久有效) 网络配置工具: 图形界面:NetworkManager服务 命令界面:nmcli 重启网络服务: systemctl restart NetworkManager nmcil connection down/up ip地址
青灯古酒
2023/10/16
4580
红帽认证RedHat-RHCSA 网络配置和防火墙管理
正确姿势临时和永久开启关闭Android的SELinux
   自从Android 4.4强制开启SELinux以后,在开发中我们经常会遇到avc denied的问题,为了方便开发调试我们会将SELinux关闭,那么本章将带领读者怎么临时和永久关闭Android的SELinux。
全栈程序员站长
2022/09/14
7.8K0
相关推荐
基于linux下的SElinux安全系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验