## 网页授权（调用接口---传参）

1. 用户同意授权，获取 code
2. 通过 code 换取网页授权 access_token
3. 刷新 access_token（如果需要）
4. 拉取用户信息(需 scope 为 snsapi_userinfo)

## JS-SDK

微信 JS-SDK 是微信公众平台   面向网页开发者提供的基于微信内的网页开发工具包

## 微信认证对接

1. 找工程师，让学校把我们加到学校的企业微信
2. 需要学校提供大仪部署所需域名 eg:www.bbb.com
3. 需要学校将我们加入为企业微信开发者（有权使用 web 开发者工具调试公众号 web 相关功能）
4. 企业微信管理后台的应用管理中修改大仪应用主页为：http://www.bbb.com/fridayh5
   微信公众号后台管理平台中修改自定义菜单的链接为：http://www.bbb.com/fridayh5（添加自定义菜单时会选择网页地址，填写这个链接）
5. 网页授权及 JS-SDK
   修改可作为应用 OAuth2.0 网页授权功能的回调域名：http://www.bbb.com（接口权限--网页授权设置域名，微信会将授权数据传给回调页面）
   添加可调用 JS-SDK、跳转小程序的可信域名：http://www.bbb.com（公众号设置--功能设置/js接口安全域名）
   此过程中需要添加验证文件 xxx.txt 到大仪服务器 /var/www 路径下，并要求学校开放允许https://work.weixin.qq.com访问 6.开始部署

## 部署 fridayh5

1. 修改 friday/src/config/index.js（确认接入方式和域名）
2. 打包 friday/new-web
   yarn build
   tar -czvf dist/fridayh5.tar.gz dist/fridayh5
   rsync -avzP fridayh5.tar.gz genee@10.2.10.58:/tmp\
   ssh genee@10.2.10.58\
   sudo mv /tmp/fridayh5.tar.gz /var/www/\
   sudo tar -xvf /var/www/fridayh5

## 部署 wechat-auth

1. 修改 config.yaml
   主要修改学校对应的 appId 和 appSecret（公众号 id 和公众号密钥）
2. 在本地打包整个 wechat-auth
   tar -czvf wechat-auth.tar.gz wechat-auth
3. 上传到服务器/home/genee/下
   rsync -avzP wechat-auth.tar.gz genee@10.2.10.58:/home/genee/
4. 登录对应服务器
   ssh genee@10.2.10.58
5. 在服务器运行 docker-compose
   docker-compose -f /home/genee/wechat-auth/wechat-auth.yml up -d
6. 配置 nginx
   sudo vim /home/genee/nginx/sites-enabled/default

   添加如下配置：

   location /control/wechat/ {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $host;
   proxy_pass http://172.17.42.1:3080/;
   }

   location /fridayh5 {
   root /var/www/fridayh5/;
   index index.php index.html index.htm;
   location ~ \.(js|css|png|jpg|jpeg|gif|ico|swf)$ {
   expires max;
   log_not_found off;
   }
   try_files $uri /index.html =404;
   }

7. 重启 nginx
   docker restart nginx
8. 去浏览器验证
   http://www.bbb.com/fridayh5

## 部署相关知识

1. tar -czvf wechat-auth.tar.gz wechat-auth

   tar 命令：打包与解包（本身不具有压缩功能，需要调用压缩功能） pwd 命令查看当前路径
   -c：创建新的文档 -z：gzip 程序压缩文件，压缩后的文件名称以.gz 结尾
   -v：显示详细的 tar 处理的文件信息 -f：要操作的文件名，f 是最后一个参数
   命令的意思：将 wechat-auth 文件打包压缩成文件 wechat-auth.tar.gz，并放在当前文件夹内
   对应的解压指令：tar -xzvf wechat-auth.tar.gz(-x：解压)

2. rsync -avzP wechat-auth.tar.gz genee@10.2.10.58:/home/genee/

   rsync 命令：远程同步，用于将文件和目录从源（SRC）同步到目标（DEST）的实用程序
   -a：归档模式，表示以递归方式传输文件 -v：显示 rsync 过程中详细信息
   -z：传输时进行压缩提高效率 -P：显示文件传输的进度信息
   命令的意思：将本地主机中的 wechat-auth.tar.gz 文件同步到远程计算机genee@10.2.10.58的/home/genee/下
   从远程计算机同步文件到用户的主目录：rsync -avzP genee@10.2.10.58:/home/genee/ /home/guojingqian
   命令格式：rsync [OPTION] … SRC [USER@]HOST:DEST rsync [OPTION] … SRC [USER@]HOST:DEST

3. ssh genee@10.2.10.58

   SSH 是一种网络协议，用于计算机之间的加密登录
   登录远程主机：ssh 用户名@主机名，主机名可以是 IP 地址或者域名
   登录指定端口：ssh -p 端口号 用户名@主机名（SSH 默认连接到目标主机的 22 端口）
   使用密码登录，每次都必须输入密码，SSH 还提供了公钥登录，可以省去输入密码的步骤
   （1）ssh-keygen 命令创建公钥/私钥对，在$HOME/.ssh/目录下会生成两个文件 id_rsa.pub 和 id_rsa
   （2）ssh-copy-id user@host 命令将公钥传送到远程主机 host 上

4. docker-compose -f /home/genee/wechat-auth/wechat-auth.yml up -d

   -f:指定使用的 compose 模板文件，默认为当前目录下的 docker-compose.yaml 文件，可以多次指定
   docker-compose up -d：启动项目，默认启动的容器在前台，控制台将会同时打印所有容器的输出信息，加了-d 就会在后台启动并运行所有的容器
   命令的意思：使用 wechat-auth.yml 模板文件定义容器为一个项目，并且启动项目

5. mv /tmp/fridayh5.tar.gz /var/www/

   语法：mv 源文件或目录 目标文件或目录 （移动文件或者将文件改名）
   命令意思：将文件/tmp/fridayh5.tar.gz 移到目录/var/www/中

6. sudo 命令

   sudo 是一种权限管理机制，管理员可以授权于一些普通用户去执行一些 root 执行的操作，而不需要知道 root 的密码

7. docker

//环境配置的难题
用户计算机的环境都不相同，你怎么知道自家的软件，能在那些机器跑起来？
用户必须保证两件事：操作系统的设置，各种库和组件的安装。只有它们都正确，软件才能运行。
举例来说，安装一个 Python 应用，计算机必须有 Python 引擎，还必须有各种依赖，可能还要配置环境变量。
如果某些老旧的模块与当前环境不兼容，那就麻烦了。
开发者常常会说："它在我的机器可以跑了"（It works on my machine），言下之意就是，其他机器很可能跑不了。
环境配置如此麻烦，换一台机器，就要重来一次，旷日费时。很多人想到，能不能从根本上解决问题，软件可以带环境安装？
也就是说，安装的时候，把原始环境一模一样地复制过来。
（1）虚拟机（virtual machine）就是带环境安装的一种解决方案，它可以在一种操作系统里面运行另一种操作系统。
（2）Linux 发展出了另一种虚拟化技术：Linux 容器（Linux Containers，缩写为 LXC）。
Linux 容器不是模拟一个完整的操作系统，而是对进程进行隔离。或者说，在正常进程的外面套了一个保护层。
对于容器里面的进程来说，它接触到的各种资源都是虚拟的，从而实现与底层系统的隔离。

//Docker 是什么
Docker 属于 Linux 容器的一种封装，提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖，打包在一个文件里面。
运行这个文件，就会生成一个虚拟容器。
程序在这个虚拟容器里运行，就好像在真实的物理机上运行一样。有了 Docker，就不用担心环境问题。
总体来说，Docker 的接口相当简单，用户可以方便地创建和使用容器，把自己的应用放入容器。
容器还可以进行版本管理、复制、分享、修改，就像管理普通的代码一样。

// docker -compose
Docker Compose 可以轻松、高效的管理容器，它是一个用于定义和运行多容器 Docker 的应用程序工具

//compose 模板文件
模板文件是使用 Compose 的核心，Compose 模板文件默认路径是当前目录下的 docker-compose.yml，可以使用.yml 或.yaml 作为文件扩展名
Compose 允许用户通过一个 docker-compose.yml 模板文件（YAML 格式）来定义一组相关联的应用容器为一个项目（project）
Docker-Compose 标准模板文件应该包含 version、services、networks 三大部分
version：指定 compose 文件的版本 services：定义所有的 service 信息 networks：  配置容器连接的网络

8. nginx

//nginx 是一个 http 服务器及反向代理服务器，同时也是一个 IMAP/POP3/SMTP 代理服务器。

//Nginx 作为代理服务可以实现很多的协议代理, 我们主要以 http 代理为主（HTTP IMAP\POP HTTPS）

//正向代理：客户端向代理发送一个请求并服务器，然后代理向服务器转交请求并将获得的内容返回给客户端，
正向代理代理的对象是客户端，正向代理中，客户端和代理同属一个 LAN，对服务器透明

//反向代理服务器：在服务器端接收客户端的请求，然后把请求分发给具体的服务器进行处理，然后再将服务器的响应结果反馈给客户端。
Nginx 就是其中的一种反向代理服务器软件。反向代理吧请求分发给具体的服务器
反向代理代理的对象是服务端，反向代理中，代理和服务器同属一个 LAN，对客户端透明
正向代理客户端必须设置正向代理服务器，当然前提是要知道正向代理服务器的 IP 地址，还有代理程序的端口。
反向代理正好与正向代理相反，对于客户端而言代理服务器就像是原始服务器，并且客户端不需要进行任何特别的设置。
客户端向反向代理的命名空间中的内容发送普通请求，接着反向代理将判断向哪个原始服务器转交请求，并将获得的内容返回给客户端。
应用场景一：反向代理
应用场景二：负载均衡（当有 2 台或 2 台以上服务器时，根据规则随机的将请求分发到指定的服务器上处理）
负载均衡配置一般都需要同时配置反向代理，通过反向代理跳转到负载均衡。
应用场景三：WEB 服务器（Nginx 本身也是一个静态资源的服务器，当只有静态资源的时候，就可以使用 Nginx 来做服务器）
应用场景四：静态分离（动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来，
动静资源做好了拆分以后，我们就可以根据静态资源的特点将其做缓存操作，这就是网站静态化处理的核心思路）

//配置 nginx
location /fridayh5{
root /user/;
index index.html;
expires max;
}
location /fridayh5 是匹配任意的/fridayh5 请求，root 是设置此 location 的路径是/user/,实际访问：/user/fridayh5
index 是定义首页文件，expires 是设置过期时间
