From 9843eaa770a55748a93f1a31ed2ccff7406a60a5 Mon Sep 17 00:00:00 2001 From: mengyxu Date: Mon, 10 Jan 2022 12:45:12 +0800 Subject: [PATCH] init --- 1.后端/1.Spring boot基础.md | 14 + 1.后端/1.Spring boot整合mongodb.md | 108 +++++++ 1.后端/9.用jdk生成ssl证书.md | 72 +++++ 1.后端/mongo1.png | Bin 0 -> 61012 bytes 1.后端/mongo2.png | Bin 0 -> 59947 bytes 11随记.md | 6 + 2.前端/CSS笔记.md | 43 +++ 2.前端/element-ui笔记.md | 33 +++ 2.前端/安装与配置.md | 53 ++++ 2.前端/文字颜色自适应背景色.md | 82 ++++++ 3.linux/1.常用命令整理.md | 192 +++++++++++++ 3.linux/2.看门狗脚本.md | 91 ++++++ 3.linux/3.nginx安装与配置.md | 261 +++++++++++++++++ 3.linux/4.redis安装与配置.md | 41 +++ 3.linux/5.docker.md | 317 +++++++++++++++++++++ 3.linux/9.gitlab安装.md | 70 +++++ 4.客户端/android studio.md | 54 ++++ 17 files changed, 1437 insertions(+) create mode 100644 1.后端/1.Spring boot基础.md create mode 100644 1.后端/1.Spring boot整合mongodb.md create mode 100644 1.后端/9.用jdk生成ssl证书.md create mode 100644 1.后端/mongo1.png create mode 100644 1.后端/mongo2.png create mode 100644 11随记.md create mode 100644 2.前端/CSS笔记.md create mode 100644 2.前端/element-ui笔记.md create mode 100644 2.前端/安装与配置.md create mode 100644 2.前端/文字颜色自适应背景色.md create mode 100644 3.linux/1.常用命令整理.md create mode 100644 3.linux/2.看门狗脚本.md create mode 100644 3.linux/3.nginx安装与配置.md create mode 100644 3.linux/4.redis安装与配置.md create mode 100644 3.linux/5.docker.md create mode 100644 3.linux/9.gitlab安装.md create mode 100644 4.客户端/android studio.md diff --git a/1.后端/1.Spring boot基础.md b/1.后端/1.Spring boot基础.md new file mode 100644 index 0000000..0a3391c --- /dev/null +++ b/1.后端/1.Spring boot基础.md @@ -0,0 +1,14 @@ +# spring + + + +# mybatis + +- 开启驼峰映射 + + ```properties + mybatis.configuration.map-underscore-to-camel-case=true + ``` + + + diff --git a/1.后端/1.Spring boot整合mongodb.md b/1.后端/1.Spring boot整合mongodb.md new file mode 100644 index 0000000..e385ff6 --- /dev/null +++ b/1.后端/1.Spring boot整合mongodb.md @@ -0,0 +1,108 @@ +# 依赖 + +```xml + + org.springframework.boot + spring-boot-starter-data-mongodb + +``` + +# 配置文件 + +```properties +# mongodb数据源配置 +spring.data.mongodb.uri=mongodb://localhost:27017/open5gs +``` + +# 代码 + +- 实体类 + + ```java + @Setter + @Getter + public class Profiles { + + @Id + private String id; + private String title; + private List pdn; + private Link ambr; + private Security security; + + } + ``` + + + +- Repository类 + + + + ![2](mongo2.png) + + ```java + @Repository + public interface ProfilesRepository extends MongoRepository { + + Profiles findByTitle(String title); + + @Query(value = "{'_id':{'$ne':null}}", fields = "{'title':1,'_id':0}") + List title(); + + } + ``` + +- Repository的使用 + + ```java + @Service + public class ProfileService { + @Autowired + private ProfilesRepository profileRepository; + + public Page find(Profiles exp, BasePageParam pageParam) { + Integer page = pageParam.getPage(); + if (page == null || page < 1) { + page = 1; + } + Integer size = pageParam.getSize(); + if (size == null || size == 0) { + size = 20; + } + PageRequest pageable = PageRequest.of(page - 1, size, Direction.DESC, "_id"); + ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("_class").withMatcher("title", GenericPropertyMatcher.of(StringMatcher.CONTAINING)); + Example example = Example.of(exp, matcher); + return profileRepository.findAll(example, pageable); + } + + public Profiles findByTitle(String title) { + return profileRepository.findByTitle(title); + } + + public List findTitles() { + return profileRepository.title(); + } + + public void save(Profiles profiles) throws SprtException { + Profiles old = profileRepository.findByTitle(profiles.getTitle()); + if (old != null) { + throw new SprtException("已存在相同名称的模板"); + } + profileRepository.save(profiles); + } + + public void update(Profiles profiles) throws SprtException { + profileRepository.save(profiles); + } + + public void delete(Profiles profiles) { + profileRepository.deleteById(profiles.getId()); + } + + } + + ``` + + + diff --git a/1.后端/9.用jdk生成ssl证书.md b/1.后端/9.用jdk生成ssl证书.md new file mode 100644 index 0000000..d81d939 --- /dev/null +++ b/1.后端/9.用jdk生成ssl证书.md @@ -0,0 +1,72 @@ +# 用jdk生成ssl证书 + +- ## 使用keytool命令生成证书 + + 打开CMD命令,cd到jdk的bin目录下,或者先到bin目录下,按住shift右键在此处打开命令窗口 + + keytool   + + -genkey + + -alias tomcat(别名) + + -keypass 123456(别名密码) + + -keyalg RSA(算法) + + -keysize 1024(密钥长度) + + -validity 365(有效期,天单位) + + -keystore D:/keys/tomcat.keystore(指定生成证书的位置和证书名称) + + -storepass 123456(获取keystore信息的密码) + + `keytool -genkey -alias tomcat -keypass 12345678 -keyalg RSA -keysize 1024 -validity 365 -keystore E:/keys/tomcat.keystore -storepass 12345678` + + 执行命令后会有6个问题,依次回答,第一个问题答案为证书的域名,其他的随意填写 + +- 为客户端生成证书, 以便让服务器来验证它 + + `keytool -genkey -alias client1 -keypass 12345678 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore E:/keys/client1.p12 -storepass 12345678` + +- 由于不能直接将PKCS12格式的证书库导入,必须先把客户端证书导出为一个单独的CER文件,使用如下命令: + + `keytool -export -alias client1 -keystore E:/keys/client1.p12 -storetype PKCS12 -keypass 12345678 -file E:/keys/client1.cer` + +- 将该文件导入到服务器的证书库,添加为一个信任证书: + + `keytool -import -v -file E:/keys/client1.cer -keystore E:/keys/tomcat.keystore -storepass 12345678` + +- 由于是双向SSL认证,客户端也要验证服务器证书,因此,必须把服务器证书添加到浏览器的“受信任的根证书颁发机构”。由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的CER文件,使用如下命令: + + `keytool -keystore E:/keys/tomcat.keystore -export -alias tomcat -file E:/keys/server.cer` + +- 双击server.cer文件,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。 + +# tomcat配置ssl证书 + +``` + +``` + +# 配置强转https + +``` + + + SSL + /* + + + CONFIDENTIAL + + +``` + diff --git a/1.后端/mongo1.png b/1.后端/mongo1.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa20e3095be7d04aab0f15388e12fd3b4c0be60 GIT binary patch literal 61012 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̙ayI-R&u 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 literal 0 HcmV?d00001 diff --git a/1.后端/mongo2.png b/1.后端/mongo2.png new file mode 100644 index 0000000000000000000000000000000000000000..53370136080b9006b5a50b150b4207662c0ea40a GIT binary patch literal 59947 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%0DN5X>ZgR7ZD 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 literal 0 HcmV?d00001 diff --git a/11随记.md b/11随记.md new file mode 100644 index 0000000..83f8bc7 --- /dev/null +++ b/11随记.md @@ -0,0 +1,6 @@ +# 随记 + +- 抛开产品线只讨论品牌的人,我不说你们是傻子或者水军,但是明显你们不关心产品,只是在发泄情绪或者炫耀智商。 + +- 心理学上说你更容易喜欢上喜欢你的人 + diff --git a/2.前端/CSS笔记.md b/2.前端/CSS笔记.md new file mode 100644 index 0000000..b28f514 --- /dev/null +++ b/2.前端/CSS笔记.md @@ -0,0 +1,43 @@ +# CSS笔记 + +## 尺寸 + +```css +height: 80vh; +width: 80vw; +line-height: 40; +字体粗细 +font-weight: bold; +``` + + + +## 滚动条 + +```css +隐藏底部滚动条 +overflow-x: hidden; +overflow-y: scroll; +``` + +## 背景 + +```css +透明背景 +background: none; +背景颜色 +background-color: #4472c4; +背景图片 +background-image:url('./assets/img/bg13.png'); +background-size: cover; +background-position: center; +background-repeat: no-repeat; +``` + +## 边框 + +```css +立体阴影边框 +box-shadow: 0 0 25px #cac6c6 !important; +``` + diff --git a/2.前端/element-ui笔记.md b/2.前端/element-ui笔记.md new file mode 100644 index 0000000..a20ce64 --- /dev/null +++ b/2.前端/element-ui笔记.md @@ -0,0 +1,33 @@ +# Element-UI笔记 + +## 重写样式 + +- 重写el-table背景 + + 表格背景透明, 便于定制整体背景样式 + + ``` scss + .main-table .el-table, + .el-table__expanded-cell { + background-color: transparent; + border: none; + } + + .main-table .el-table tr { + background-color: transparent !important; + border: none; + } + + .main-table .el-table--enable-row-transition .el-table__header td, + .el-table .cell { + background-color: transparent; + } + + .main-table .el-table--enable-row-transition .el-table__body td, + .el-table .cell { + background-color: transparent; + } + ``` + +- + diff --git a/2.前端/安装与配置.md b/2.前端/安装与配置.md new file mode 100644 index 0000000..45d1737 --- /dev/null +++ b/2.前端/安装与配置.md @@ -0,0 +1,53 @@ +# 开发环境 + +## 安装node.js + +- 官网下载免安装版压缩包 + + [**14.17.5**源码与安装包](https://nodejs.org/en/download/) + + [长期稳定版本与最新版本](https://nodejs.org/zh-cn/) + + [历史版本](https://nodejs.org/dist/) + +- 配置环境变量 + + 配置node_home + + 将node_home配置到path环境变量 + + 使用 node -v 查看是否安装成功 + +## 安装cnpm并使用淘宝镜像(非必须) + +```shell +npm install -g cnpm --registry=https://registry.npm.taobao.org +npm uninstall -g cnpm +``` + +## 安装yarn(非必须) + +`npm install -g yarn` + +## 安装vue脚手架(非必须) + +```shell +npm uninstall @vue-cli //卸载1.0或2.0版本 +npm install @vue/cli //安装最新版本 +npm install @vue/cli@4.0.5 //安装指定版本 +``` + +> vue/cli可以帮助快速搭建vue项目,管理项目依赖等,大大降低了webpack的使用难度 +> +> 如果需要从零开始搭建vue项目建议暗转, 如果只是在已有vue项目上进行迭代开发则无安装必要 + +## 最后一个忘记干啥用的了,照做就行 + +将powershell切换为管理员模式,执行命令 + +```shell +Start-Process powershell -Verb runAs +set-ExecutionPolicy RemoteSigned +y +``` + diff --git a/2.前端/文字颜色自适应背景色.md b/2.前端/文字颜色自适应背景色.md new file mode 100644 index 0000000..d8fd9a7 --- /dev/null +++ b/2.前端/文字颜色自适应背景色.md @@ -0,0 +1,82 @@ +# 文字颜色自适应背景图片 + +- 利用canvas获取图片像素矩阵 + + ```js + const image = new Image(); + image.src = require('./assets/img/bg13.png'); + const canvas = document.getElementById("canvas"); + const context = canvas.getContext("2d"); + image.onload = () => { + context.drawImage(image, 0, 0); //获取像素矩阵 + const data = context.getImageData(0, 0, canvas.width, canvas.height).data; + } + ``` + + + +- 根据像素计算主色调 + + 1. 取平均数方式,优点是简单,缺点是可能不太准 + + ```js + let sr = 0, + sg = 0, + sb = 0, + sum = 0; + const data = context.getImageData(0, 0, canvas.width, canvas.height).data; + for (let i = 0; i < data.length; i += 4) { + if (data[i + 3] >= 255) { + sum++; + sr += data[i]; + sg += data[i + 1]; + sb += data[i + 2]; + } + } + const r = sr / sum, + g = sg / sum, + b = sb / sum; + ``` + + 2. 中位数方式 + + ```js + ``` + + + +- 判断颜色色系 ( 深色系OR浅色系 ),给页面body添加样式 + + ```js + const level = 0.299 * r + 0.587 * g + 0.114 * b; + if (level < 192) { + document.getElementsByTagName("body")[0].className = 'style-dark'; + } else { + document.getElementsByTagName("body")[0].className = 'style-wihte'; + } + ``` + +- CSS样式 + + ```css + .style-dark .el-table *, .style-dark .el-tabs *, + .style-dark .el-input__inner, + .style-dark h1, .style-dark h2, .style-dark small, .style-dark span, .style-dark div *{ + color: white; + } + + .style-dark .el-input__inner * { + background: none !important; + } + + .style-dark .el-button--default { + background: url(assets/img/bg13.png); + } + + .style-dark .el-dialog *{ + color: white !important; + } + + ``` + + \ No newline at end of file diff --git a/3.linux/1.常用命令整理.md b/3.linux/1.常用命令整理.md new file mode 100644 index 0000000..e27acb0 --- /dev/null +++ b/3.linux/1.常用命令整理.md @@ -0,0 +1,192 @@ +# linux常用命令 + +## 常用shell列表 + +| 命令 | 作用 | +| ------------------------------------------------------------ | ------------------------------ | +| yum install --installroot=/usr/local | 表示指定自定义的安装目录 | +| free -hm | 查看内存使用情况 | +| netstat –apn | 查看所有端口占用情况 | +| lsof -i:80 | 查看占用端口程序 | +| df -lh | 查看磁盘用量 | +| > text.txt | 清空文件 | +| echo $LANG | 查看字符集 | +| export LANG=zh_CN.UTF-8 | 临时修改字符集 | +| vim /etc/locale.conf | 修改centos7.5字符配置文件 | +| source /etc/locale.conf | 配置生效 | +| tar -zxvf xxx.tar.gz -C /dest | tar文件解压到指定目录 | +| ln -s /xxx/xxx.jar /etc/init.d/xxx | jar包注册service服务 | +| cd /etc/rc.d/init.d
chkconfig --add monitor
chkconfig monitor on | 开机启动service | +| find /home/ -name xxx | 查找/home目录下名字为xxx的文件 | +| ssh 192.168.0.1 -l root -p 22 | 远程登录到另一台主机 | +| scp root@192.16.0.1:/path/name /path | 从服务器上下载文件 | +| scp /path/name root@192.16.0.1:/path | 上传本地文件到服务器 | +| scp -r root@192.16.0.1:/path /path | 从服务器下载整个目录 | +| scp -r /path root@192.16.0.1:/path | 上传目录到服务器 | +| chown user:user file | 修改文件用户组和用户 | +| systemctl stop firewalld | 关闭防火墙 | +| | | +| | | + +## 其他shell相关知识 + +### 开机自启程序或脚本 + +- 在`/etc/profile`文件中添加启动命令 + +### 后台执行命令或脚本 + +- `nohup command &` + + 如果使用nohup命令提交任务,在默认情况下该任务的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件,如: + + `nohup command > myout.file 2>&1` + + 输出被重定向到myout.file文件中 + + 如果不想做任何输出,可以将输出文件指定为/dev/null,`/dev/null`代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。 + + `nohup command > /dev/null 2>&1` + +### shell操作字符串 + +- 判断字符串是否包含另一个字符串 + + - 使用~ + + `if [[ $A =~ $B ]]` + + - 使用通配符* + + `if [[ $A == *$B* ]]` + +- 截取字符串 + + - ${A:B:C} + + `${foo:3:2}` //从下标为3的字符开始截取,共截取2个 + + - ${A#B}/${A##B} + + 清除字符串中符合pattern的字符,从字符串最前匹配 + + ```shell + foo=“file.txt.zip” + echo ${foo#*.} //一个#号代表按照最短匹配清除 + txt.zip + echo ${foo##*.} //2个#号代表按照最长匹配清除 + zip + ``` + + - ${A%B}/${A%%B} + + 清除字符串中符合pattern的字符,从字符串最后匹配 + + ```shell + foo=“file.txt.zip” + echo ${foo%.*} //一个%号代表按照最短匹配清除 + file.txt + echo ${foo%%.*} //2个%号代表按照最长匹配清除 + file + ``` + +- 字符串替换操作 + + - ${A/B/C} + + ```shell + foo="mp3.txt.txt.mp3.avi" + echo ${foo/txt/TXT} + mp3.TXT.txt.mp3.avi + echo ${foo//txt/TXT} + mp3.TXT.TXT.mp3.avi + + foo="txt.txt.txt" + echo ${foo/#txt/TXT} + TXT.txt.txt + echo ${foo/%txt/TXT} + txt.txt.TXT + ``` + +- 大小写转换 + + ```shell + foo="ABcd" + echo ${foo,} + aBcd + echo ${foo,,} + abcd + echo ${foo^} + ABcd + echo ${foo^^} + ABCD + ``` + +### shell算术运算命令 + +| (()) | 用于整数之间常用的运算符,效率高 | +| ------- | ---------------------------------------------------- | +| let | 用于整数运算,类似于(()) | +| expr | 用于整数运算,但是还有其他功能 | +| bc | Linux下的一个计算程序,适合整数及小数运算 | +| $[] | 用于整数运算 | +| awk | awk既可以整数运算,也可以小数运算 | +| declare | 定义变量值和属性,-i参数可以用于定义整形变量,做运算 | +| | | + +## ubuntu系统相关知识 + +- 非root用户无法使用1024以下端口 +- /etc/profile中配置的环境变量重启失效,需要在/etc/environment中配置 +- 执行shell需要用bash + +# VIM快捷键 + +| 快捷键 | 作用 | 快捷键 | 作用 | +| ------- | -------------------------- | ------ | -------------- | +| gg | 跳转到文件开头快捷键 | yy | 复制一行 | +| shift+g | 跳转到文件结尾快捷键 | dd | 删除一行 | +| xxgg | 跳转到指定的xx行数,如 50gg | p | 插入复制的数据 | +| [[ | 跳转到文件开头 | | | +| ]] | 跳转到文件结尾 | | | +| /xx | 从上往下搜索xx | | | +| ?xx | 从下往上搜索xx | | | +| | | | | + +- VIM异常退出 + + VIM异常退出的时候,再次进入编辑会提示: + + ```txt + 交换文件 "xxx.swp" 已存在! + ``` + + 这时候使用 `ll -all` 命令可以看到一个`.xxx.swp`隐藏文件,删掉此文件即可 + +# mysql相关 + +| 命令 | 作用 | +| :---------------------------------------------- | :---------------------------- | +| show VARIABLES like '%max_allowed_packet%'; | 查看mysql可接收最大数据包大小 | +| set global max_allowed_packet = 1024*1024*1024; | 设置mysql可接收最大数据包大小 | +| show global variables like 'wait_timeout'; | 查看mysql连接超时时间 | +| set global wait_timeout=604800; | 设置mysql连接超时时间 | +| mysql -h host -P port -u user -ppassword | 链接mysql | +| | | + +# maven命令 + +| 命令 | 作用 | 命令 | 作用 | +| ----------- | ------------------------- | ----------- | ------------------- | +| mvn clean | 清空输出目录,默认是target | mvn install | 安装jar到本地仓库中 | +| mvn compile | 编译源代码 | mvn deploy | 安装jar到远程仓库中 | +| mvn package | 打包 | | | + +# webService 相关 + +```shell +wsimport -encoding utf-8 -keep -d .\ -p com.sprt.monitor.api.pagw.bean .\location.wsdl + +wsdl2java -d .\ .\location.wsdl +``` + diff --git a/3.linux/2.看门狗脚本.md b/3.linux/2.看门狗脚本.md new file mode 100644 index 0000000..60d224b --- /dev/null +++ b/3.linux/2.看门狗脚本.md @@ -0,0 +1,91 @@ +# 看门狗脚本 + +## 已注册service程序看门狗 + +配置简单,但不够灵活 + +- 脚本程序 + + ```shell + #!/bin/sh + + while [ 1 ] + do + while read line + do + if [ -n "$line" ] && [ ${line:0:1} != "#" ] + then + pm=$(service $line status) + + if [[ ${pm} =~ 'Not running' ]] + then + echo "service $line start" + service $line start + fi + + fi + + done < /home/work/mengyxu/watchdog/service.cfg + + sleep 10 + + done + ``` + +- 配置文件 + ```txt + #monitor + whims + location + ``` + +## 可执行jar程序看门狗 + +可配置启动参数 + +- 脚本程序 + + ```shell + #!/bin/sh + #!/bin/sh + + while [ 1 ] + do + while read line + do + if [ -n "$line" ] && [ ${line:0:1} != "#" ] + then + path=${line%/*} + pro=${line%% *} + par=${line#*.jar} + pm=$(ps -ef | grep java) + + if [[ !($pm =~ $pro) ]] + then + cd $path + nohup java -server $par -jar $pro > /dev/null 2>&1 & + echo "start $pro" + fi + + fi + + done < /home/work/mengyxu/watchdog/jar.cfg + + sleep 10 + + done + + + ``` + + + +- 配置文件 + + ```txt + #/home/work/mengyxu/monitor/monitor.jar + /home/work/mengyxu/whims/whims.jar -Xms32m -Xmx128m + /home/work/mengyxu/location/location.jar -Xms32m -Xmx64m + ``` + + diff --git a/3.linux/3.nginx安装与配置.md b/3.linux/3.nginx安装与配置.md new file mode 100644 index 0000000..40841b2 --- /dev/null +++ b/3.linux/3.nginx安装与配置.md @@ -0,0 +1,261 @@ +# nginx安装与配置 + +## 准备环境 + +```shell +yum -y install gcc +yum install -y pcre pcre-devel +yum install -y zlib zlib-devel +``` + +## 下载 + +nginx官方下载指定版本源码压缩包 + +上传到服务器解压 + +## 编译与安装 + +```shell +./configure --prefix=指定安装目录前缀 --with指定额外的模块 +make +make install DESTDIR=指定安装目录后缀 +``` + +## http反向代理配置 + +* 根据路径分发到不同端口参数配置示例 + +``` +http { + include mime.types; + default_type application/octet-stream; + + server { + listen 80; + server_name localhost; + + location / { + root proxy_pass http://127.0.0.1:8080; + index index.html index.htm; + } + + location /fence { + root proxy_pass http://127.0.0.1:8081; + index index.html index.htm; + } + + location /RfsSniffer { + root proxy_pass http://127.0.0.1:8433; + index index.html index.htm; + } + } +} +``` + +- 根据域名分发到不同端口参数配置示例 + +``` +http { + + server { + listen 80; + server_name localhost; + + location / { + proxy_pass http://127.0.0.1:8081; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + } + + server { + listen 80; + server_name location.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:8081; + index index.html index.htm; + } + + } + +} +``` + +## tcp转发 + +转发https请求,无需在nginx配置ssl证书,nginx版本号必须 >1.15.2,编译时必须配置以下模块 + +`--with-http_stub_status_module --with-http_ssl_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module` + +- 同一个端口监听http与https请求配置示例,$ssl_preread_protocol,可以让stream区分web ssl/tls和其他协议 + +``` +stream { + upstream http{ + server 127.0.0.1:8081; + } + + upstream https{ + server 127.0.0.1:8433; + } + + map $ssl_preread_protocol $upstream{ + default http; + "TLSv1.3" https; + "TLSv1.2" https; + "TLSv1.1" https; + "TLSv1.0" https; + "TLSv1" https; + "TLSv2" https; + "SSLv2" https; + "SSLv3" https; + } + + server { + listen 0.0.0.0:28181; + ssl_preread on; + proxy_pass $upstream; + } + +} +``` + +- http与stream混合使用 + +``` +http { + include mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; + + location / { + proxy_pass http://127.0.0.1:8081; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } + + server { + listen 80; + server_name location.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:8081; + index index.html index.htm; + } + } + + server { + listen 80; + server_name monitor.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:8082; + index index.html index.htm; + } + } + + server { + listen 80; + server_name whims.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:801; + index index.html index.htm; + } + } + + server { + listen 80; + server_name license.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:88; + index index.html index.htm; + } + } + + server { + listen 80; + server_name robust.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:89; + index index.html index.htm; + } + } + + server { + listen 80; + server_name dzwl.xumy.vip; + + location / { + proxy_pass http://127.0.0.1:805; + index index.html index.htm; + } + } + +} + +stream{ + + log_format proxy '$remote_addr - [$time_local] $protocol $status "$upstream_addr" $remote_addr $remote_port '; + access_log /home/work/logs/nginx/tcp-access.log proxy; + open_log_file_cache off; + + map_hash_bucket_size 64; + + map $ssl_preread_protocol $upstream{ + default http; + "TLSv1.3" $https; + "TLSv1.2" $https; + "TLSv1.1" $https; + "TLSv1.0" $https; + "TLSv1" $https; + "TLSv2" $https; + "SSLv2" $https; + "SSLv3" $https; + } + + map $ssl_preread_server_name $https{ + default dzwl; + } + + + upstream http { + server 127.0.0.1:80; + } + + upstream dzwl { + server 127.0.0.1:806; + } + + server{ + listen 8080; + ssl_preread on; + proxy_pass $upstream; + proxy_connect_timeout 15s; + proxy_timeout 15s; + proxy_next_upstream_timeout 15s; + } + +} +``` + diff --git a/3.linux/4.redis安装与配置.md b/3.linux/4.redis安装与配置.md new file mode 100644 index 0000000..befb239 --- /dev/null +++ b/3.linux/4.redis安装与配置.md @@ -0,0 +1,41 @@ +# redis安装与配置 + +## linux + +- 下载:[官方源码](http://redis.io/download) + + `wget http://download.redis.io/releases/redis-6.0.8.tar.gz` + +- 安装 + + ```shell + tar xzf redis-6.0.8.tar.gz + cd redis-6.0.8 + make + ``` + +- 配置 + + 默认配置文件为解压目录下redis.conf + + | 配置项 | 作用 | 默认 | + | -------------- | --------------------- | --------- | + | daemonize | 是否后台运行redis服务 | no | + | requirepass | redis认证密码 | 无 | + | protected-mode | 是否开启远程保护 | yes | + | bind | 绑定访问地址 | 127.0.0.1 | + +- 启动 + + 在src目录下的redis-server和redis-cli两个可执行文件,直接执行就可以启动redis服务或客户端 + + 建议将这两个文件拷贝到/sbin目录下,并将nginx.conf拷贝到/etc目录下 + + 方便在任意目录执行`redis-server /etc/redis.conf`启动服务 + +- 链接 + + `redis-cli` 链接 + + `auth $password` 进行密码验证 + diff --git a/3.linux/5.docker.md b/3.linux/5.docker.md new file mode 100644 index 0000000..70f6a93 --- /dev/null +++ b/3.linux/5.docker.md @@ -0,0 +1,317 @@ +# docker的安装与使用 + +## 安装(centos) + +- 卸载旧版本 + + ```shell + $ sudo yum remove docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-engine + ``` + + + +- 安装依赖 + + ```shell + yum install -y yum-utils \ + device-mapper-persistent-data \ + lvm2 + ``` + + + +- 设置仓库(非必须) + + 官方源地址(比较慢) + + ```shell + yum-config-manager \ + --add-repo \ + https://download.docker.com/linux/centos/docker-ce.repo + ``` + + 阿里云 + + ```shell + yum-config-manager \ + --add-repo \ + http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + ``` + + 清华大学源 + + ```shell + yum-config-manager \ + --add-repo \ + https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo + ``` + + + +- 安装**docker** + + 安装最新版本 + + ```shell + yum install docker-ce docker-ce-cli containerd.io + ``` + + 安装指定版本 + + ```shell + yum install docker-ce- docker-ce-cli- containerd.io + ``` + + 启动**docker** + + ```shell + systemctl start docker + ``` + + 设置开机启动 + + ```shell + systemctl enable docker + ``` + + 停止**docker** + + ``` + systemctl stop docker + ``` + +- 卸载**docker** + + 删除安装包 + + ```shell + yum remove docker-ce + ``` + + 删除镜像、容器、配置文件等内容,默认路径为:/var/lib/docker,自定义路径为:/etc/docker/daemon.json中data-root属性 + +## 使用 + +- 镜像 + + 获取最新版本镜像 + + ```shell + docker pull <镜像名称> + docker pull <镜像名称>:latest + ``` + + 获取指定版本 + + ```shell + docker pull <镜像名称>:<版本号> + ``` + + 删除镜像 + + ```shell + docker rmi <镜像ID> + ``` + +- 创建与启动容器 + + 创建新容器并启动 + + ```shell + docker run -itd --<容器名> <镜像名> <容器内执行的命令> + ``` + + 参数说明 + + ```tex + -i: 以交互模式运行容器,通常与 -t 同时使用; + -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; + -d: 后台运行容器,并返回容器ID; + -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 + -v: 挂载宿主机的一个目录到容器,格式为:主机(宿主)目录:容器目录; + -e: username="ritchie": 设置环境变量; + -m: :设置容器使用内存最大值; + --privileged 容器内root用户是否真正拥有root权限 + --restart :容器退出是重启策略 + no默认值,表示容器退出时,docker不自动重启容器 + on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃 + always 容器退出时总是重启 + unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器 + 如果容器启动时没有设置–restart参数,则通过下面命令进行更新: + docker update --restart=always <容器ID> + ``` + + 停止容器 + + ```shell + docker stop <容器ID> + ``` + + 启动容器 + + ```shell + docker start <容器ID> + ``` + +- 进入退出 + + 查看所有容器 + + ```shell + docker ps -a + ``` + + 进入容器,**attach**或**exec**(推荐使用,退出容器终端容器不会停止) + + ```shell + docker exec -it <容器ID> /bin/bash + ``` + + 进入容器后输入**exit** 退出容器 + +- 删除与导入导出 + + 删除容器 + + ```shell + docker rm -f <容器ID> + ``` + + 导出容器 + + ```shell + docker export <容器ID> > <文件名> + ``` + + 导入容器 + + ```shell + cat <文件名> | docker import - <镜像名> + ``` + +## Docker安装其他软件 + +- 安装**mysql** + + ```shell + docker pull mysql:5.7.27 + docker run -itd --name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.27 + ``` + +- 安装**nginx** + + ```shell + docker pull nginx + docker run -d --name nginx -p 80:80 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx -v /home/nginx/data:/home nginx + ``` + +- 安装**gitea** + + ```shell + docker pull gitea/gitea + docker run -d --name gitea --privileged --restart=always -p 122:22 -p 3000:3000 -v /home/gitea/data:/data gitea/gitea + ``` + + + +- 安装**gitlab** + + ```shell + docker search gitlab + docker pull twang2218/gitlab-ce-zh + docker run -d -p 443:443 -p 280:80 -p 222:22 --name gitlab --privileged --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab twang2218/gitlab-ce-zh + ``` + + 修改gitlab.rb配置文件 + + ```tex + external_url "http://gitlab.xumy.vip:28080" + nginx['proxy_set_headers'] = { "Host" => "gitlab.xumy.vip:28080" } + ``` + +- 安装禅道 + + 拉取镜像 + + ```shell + docker pull easysoft/zentao:15.7.1 + ``` + + 创建网络驱动 + + ```shell + docker network create --subnet=172.172.172.0/24 zentaonet + ``` + + 启动容器 + + ```tex + sudo docker run --name [容器名] -p [主机端口]:80 --network=[网络驱动名] --ip [容器IP] --mac-address [mac地址] -v [主机禅道目录]:/www/zentaopms -v [主机mysql目录]:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=[数据库密码] -d easysoft/zentao:[镜像标签] + + 其中,容器名:启动的容器名字,可随意指定; + 主机端口:主机端口为web访问端口; + 网络驱动名:刚刚创建的网络驱动名; + 容器IP:在网络驱动范围内选择一个作为该容器的固定ip; + mac地址:指定固定的mac地址,建议范围为02:42:ac:11:00:00 到 02:42:ac:11:ff:ff; + 主机禅道目录:必须指定,方便禅道代码、附件等数据的持久化,非升级情况需指定空目录; + 主机mysql目录:必须指定,方便禅道数据持久化,非升级情况需指定空目录; + 数据库密码: 容器内置mysql用户名为root,默认密码123456,如果不修改可以不指定该变量,如果想更改密码可以设置 MYSQL_ROOT_PASSWORD变量来更改密码; + ``` + + ```shell + docker run --name zentao -p 8080:80 --network=zentaonet --ip 172.172.172.2 --mac-address 02:42:ac:11:00:ff -v /home/zentao/pms:/www/zentaopms -v /home/zentao/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d easysoft/zentao:15.7.1 + ``` + +- 安装**redis** + + ```shell + docker pull redis:latest + docker run -d --name redis -p 6379:6379 redis:latest + ``` + +- 安装**masterlab** + + ```shell + cd /home + git clone https://gitee.com/firego/masterlab-docker.git + cd ./masterlab-docker/www + git clone https://gitee.com/firego/masterlab.git + cd ./masterlab + unzip ./vendor.zip + + + docker run -d --name php74 --expose=9000 -p 9000:9000 --link mysql-server:mysql --link redis:redis \ + -v /home/masterlab-docker/www/:/var/www/html/ \ + -v /home/masterlab-docker/conf/php/php74.ini:/usr/local/etc/php/php.ini \ + -v /home/masterlab-docker/conf/php/php-fpm.d/www74.conf:/usr/local/etc/php-fpm.d/www.conf \ + -v /home/masterlab-docker/log/php-fpm/:/var/log/php-fpm/ \ + gopeak/masterlab:php-fpm-74 + + + docker run -d --name nginx-alpine -p 80:80 -p 443:443 --link php74:fpm74 \ + -v /home/masterlab-docker/www/:/var/www/html/ \ + -v /home/masterlab-docker/conf/nginx/conf.d:/etc/nginx/conf.d/ \ + -v /home/masterlab-docker/conf/nginx/nginx.conf:/etc/nginx/nginx.conf \ + -v /home/masterlab-docker/log/nginx/:/var/log/nginx/ \ + -e "TZ=Asia/Shanghai" \ + nginx:alpine + + docker run -d -it --rm --name php74-cli \ + -p 9002:9002 \ + -v /home/masterlab-docker/www/masterlab:/usr/workspaces/project \ + -w /usr/workspaces/project \ + gopeak/masterlab:php-cli-74 \ + php ./bin/swoole_server.php + + + ``` + + + diff --git a/3.linux/9.gitlab安装.md b/3.linux/9.gitlab安装.md new file mode 100644 index 0000000..1d4af10 --- /dev/null +++ b/3.linux/9.gitlab安装.md @@ -0,0 +1,70 @@ +# gitlab安装 + +## 下载 +[下载地址](https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/) + +## 安装依赖 + +```shell +yum install curl policycoreutils openssh-server openssh-clients policycoreutils-python + +systemctl enable sshd +systemctl start sshd +``` + +```shell +yum install postfix +systemctl enable postfix +systemctl start postfix +``` + +## 配置文件 + +* 默认位置:/etc/gitlab/gitlab.rb +* 内容 + ​external_url 访问地址 + git_data_dir 数据保存位置 + +## 汉化 + +* 打补丁方式 + +```shell +wget https://gitlab.com/xhang/gitlab +git diff v12.0.3 v12.0.3-zh > ../12.0.3-zh.diff +patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < ../12.0.3-zh.diff +``` + +* 直接覆盖方式 +```shell +wget https://gitlab.com/xhang/gitlab/repository/12-0-stable-zh/archive.tar.bz2 -O gitlab-12-0-stable-zh.tar.bz2 +\cp -rf gitlab-v12.0.0/* /opt/gitlab/embedded/service/gitlab-rails/ +``` +# 卸载 +* 清理命令 + +```shell +wget https://gitlab.com/xhang/gitlab/repository/12-0-stable-zh/archive.tar.bz2 -O gitlab-12-0-stable-zh.tar.bz2 +\cp -rf gitlab-v12.0.0/* /opt/gitlab/embedded/service/gitlab-rails/ +``` + ++ 停止gitlab + +`gitlab-ctl stop` + +* 卸载gitlab + +`rpm -e gitlab-ce` + +- 查看进程 + +`ps aux | grep gitlab` + +- 杀掉守护进程 + +`kill -9 xxx` + +- 清理残余文件 + +`find / -name gitlab | xargs rm -rf` + diff --git a/4.客户端/android studio.md b/4.客户端/android studio.md new file mode 100644 index 0000000..8a296da --- /dev/null +++ b/4.客户端/android studio.md @@ -0,0 +1,54 @@ +# android studio + + + +# # 下载安装 + +[官方最新版下载地址](https://developer.android.google.cn/studio) + +安装没特别步骤,直接下一步到安装完成 + +## 下载android SDK + +依次点开 file -> settings -> Appearance & Behavior -> System Settings -> Android SDK + +选择需要安装的SDK版本,点击OK下载安装 + +第一次会先安装SDK Tools + +## 创建手机 + +点击右上角手机图标(ADV Manager) + +点击创建虚拟设备(+Create Virtual Device) + +选择手机尺寸下一步(next) + +选择android系统版本完成创建(Finish),没有下载对应版本会先下载 + +## 启动手机 + +点击ADV Manager窗口的表格中Actions列点击启动图标 + +## 安装android程序到手机 + +点击 run 选需要安装的程序 + + + +## 常用快捷键 + +| 快捷键 | 用途 | 快捷键 | 用途 | +| ---------- | ------------ | --------------------- | ---------- | +| Ctrl+Alt+O | 自动导包 | Ctrl+/ Ctrl+Shift+/ | 代码注释 | +| Ctrl+Alt+V | 快速声明变量 | Ctrl+Alt+L | 代码格式化 | +| Ctrl+y | 删除行 | Ctrl+Shift+Z | 向前 | +| | | | | +| | | | | +| | | | | +| | | | | +| | | | | +| | | | | +| | | | | +| | | | | +