koala-coding / day-day-up

每天进步一点点,记录每天在公司的一个小收获,一年后你回顾肯定收获了很多,哪怕是你知道了一个新函数,甚至一个新单词都可以。也算是一个个人成长秘籍吧
Apache License 2.0
9 stars 0 forks source link

2019年12月16日你要记录点什么? #10

Open weblixin opened 4 years ago

weblixin commented 4 years ago

何如部署一个express项目,并通过域名或公网IP访问

1、clone一个express项目,进入项目并安装依赖

git clone https://github.com/weblixin/learn_serve.git
cd learn_serve
npm i

2、在服务器后台配置安全组,加入需要的端口号

key value
规则方向 入方向
端口范围 3000/3000
授权对象 0.0.0.0/0

3、使用pm2启动项目

pm2 start bin/www -n learn

这样就能使用公网IP访问了

4、解析域名

key value
主机记录 www
记录值 公网IP

访问配置好的域名就可以访问啦,这里配置的是www的

koala-coding commented 4 years ago

使用 docker 布置到服务器基本流程

  1. 创建一个 node 项目

  2. 首先在项目根目录下创建 .dockerignore 文件,把不需要打包进 Docker Image 里的文件进行过滤

    # /usr/src/nodejs/hello-docker/.dockerignore
    .git
    node_modules
  3. 在项目的根目录中创建 Dockerfile文件

    部署 node 的时候,会有一个 Dockerfile 文件配置

    # /usr/src/nodejs/hello-docker/Dockerfile
    FROM node:10.0
    
    # 在容器中创建一个目录
    RUN mkdir -p /usr/src/nodejs/
    
    # 定位到容器的工作目录
    WORKDIR /usr/src/nodejs/
    
    # RUN/COPY 是分层的,package.json 提前,只要没修改,就不会重新安装包
    COPY package.json /usr/src/app/package.json
    RUN cd /usr/src/app/
    RUN npm i
    
    # 把当前目录下的所有文件拷贝到 Image 的 /usr/src/nodejs/ 目录下
    COPY . /usr/src/nodejs/
    
    EXPOSE 30010
    CMD npm start

    配置参数说明:

    • FROM:FROM 是构建镜像的基础源镜像,该 Image 文件继承官方的 node image
    • RUN:后面跟的是在容器中执行的命令
    • WORKDIR:容器的工作目录
    • COPY:拷贝文件至容器的工作目录下,.dockerignore 指定的文件不会拷贝
    • EXPOSE:将容器内的某个端口导出供外部访问
    • CMD:Dockerfile 执行写一个 CMD 否则后面的会被覆盖,CMD 后面的命令是容器每次启动执行的命令,多个命令之间可以使用 && 链接,例如 CMD git pull && npm start
  4. 开发环节暂且告一段落,将带有Dockerfile提交到github 或 gitlab等。

    以我的服务器centos7为例,已安装好 Docker,我只需要将项目拿过来,build一下,run一下就可以了,请看详细步骤!

  5. 首先检出代码:

    git clone https://github.com/yanbingbing/statusbar.git statusbar  
  6. 进入目录构建:

    cd statusbar  
    docker build -t statusbarimg .  

    构建目标名称 statusbarimg,是一个镜像,可以通过 docker images 来列出所有的镜像。

  7. 通过镜像 statusbarimg 创建一个容器并运行。

    docker run --name statusbarcontainer -d -p 80:8000 statusbarimg  

    说明:创建的容器名称是 statusbarcontainer,你可以理解为 pid,这个名称唯一,创建之后如果不删除会一直存在。-p 用来指定端口映射,将容器的端口8000映射到主机80`端口上,这样就可外部访问了。

  8. 进入容器

    docker ls -a 查看所有容器,包括当前容器的id
    docker exec -it <id> statusbarcontainer  
  9. 日志检查 查看运行日志,“c2891d477edf” 为容器 ID

    $ docker logs -f c2891d477edf
    
    > hello-docker@1.0.0 start /usr/src/nodejs/hello-docker
    > node app.js
    
    Running on http://localhost: 30010

    但是到了这里我还有个问题,那我真想看日志文件的时候,也不能每个容器进去看日志,好浪费时间啊!有没有什么更高的方式?

  10. 如何动态设置环境变量 开发过 node 的应该都知道,在项目的根目录中有一个package.json 文件,

    还有一个问题就是,我们通过docker指定了环境的话,每次切换环境时候,都要关闭之前的容器吗?还是直接重启容器就行

  11. Docker 如何实现进程守护

sweetXiaoyan commented 4 years ago

安装完nginx后,在nginx目录下nginx.conf添加配置

server {
    listen       80;
    server_name  test.xiaobo.com;

    root        /usr/share/nginx/html/test;

    error_log   /var/log/nginx/test-error.log;
    access_log  /var/log/nginx/test-access.log;

    #        deny all;
    index  index.php index.html index.htm;
}

这里除了在此处,还可以在conf.d文件中创建.conf文件,是因为在nginx.conf文件中有这样一句

  include /etc/nginx/conf.d/*.conf;

表示把这些文件都加载到nginx.conf中,这样做是为了防止多个域名都配置到nginx.conf中影响管理,所以可以拆分成不同的配置文件.

检查nginx的配置,和重启的方法

遇到的问题,配置成功后重启,但是仍然没办法访问到,经过各种搜索,发现是防火墙问题

systemctl status firewalld  //检查防火墙
stop firewalld.service //关闭防火墙
Lokep commented 4 years ago

状态管理之 FluxReduxVuexMobX

本文是对 Flux、Redux、Vuex、MobX 几种常用状态管理模式的总结,偏向于概念层面,不涉及过多代码。

状态管理

什么是状态管理?

状态管理就是,把组件之间需要共享的状态抽取出来,遵循特定的约定,统一来管理,让状态的变化可以预测

为什么需要状态管理?

状态共享

组件之间通常会有一些共享的状态,在 Vue 或者 React 中我们一般会将这部分状态提升至公共父组件的 props 中,由父组件来统一管理共享的状态,状态的改变也是由父组件执行并向下传递。这样会导致两个问题:

变化跟踪

在应用调试过程中,可能会有跟踪状态变化过程的需求,方便对某些应用场景的复现和回溯。这时候就需要统一对状态进行管理,并遵循特定的约定去变更状态,从而让状态的变化可预测。

Store 模式

Store 模式是一种相对简单的状态管理模式,一般有以下约定:

流程图如下:

img

如果对 state 的变更均通过 actions,那么实现记录变更、保存快照、历史回滚就会很简单,但是 Store 模式并没有对此进行强制约束。

Flux

Flux 是一种架构思想,类似于 MVC 、MVVM 等。

Flux 的组成

Flux 把一个应用分成四部分:

img

Notice:

{
  type: 'ADD_USER',
  payload: {
    name: 'user_name'                              
  }
}
复制代码

Flux 的特点

Redux

Redux 的组成

整体流程为:Action Creator => action => store.dispatch(action) => reducer(state, action) => state = nextState。流程图如下:

img

Middleware

Redux 还支持中间件,用于管理异步数据流。

Redux 的 Middleware 是对 store.dispatch() 进行了封装之后的方法,可以使 dispatch 传递 action 以外的函数或者 promise;通过 applyMiddleware 方法应用中间件。(middleware 链中的最后一个 middleware 开始 dispatch action 时,这个 action 必须是一个普通对象

常用库:redux-actions, redux-thunk, redux-promise 。

const store = createStore(
  reducer,
  // 依次执行
  applyMiddleware(thunk, promise, logger)
)
复制代码

Redux 的特点

Vuex

Vuex 是 Vue 的状态管理模式。

Vuex 的核心概念

![img](data:image/svg+xml;utf8,<?xml version="1.0"?>)

Vuex 的特点:

MobX

MobX 背后的哲学是:

任何源自应用状态的东西都应该自动地获得。

意思就是,当状态改变时,所有应用到状态的地方都会自动更新

MobX 的核心概念

![img](data:image/svg+xml;utf8,<?xml version="1.0"?>)

举个栗子:

const obj = observable({
  a: 1,
  b: 2
})

autoRun(() => {
  console.log(obj.a)
})

obj.b = 3 // 什么都没有发生
obj.a = 2 // observe 函数的回调触发了,控制台输出:2
复制代码

MobX 的特点

总结

作者:jeff_ 链接:https://juejin.im/post/5de77800518825125503ec27 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。