About neohope

一直在努力,还没想过要放弃...

ISTIO环境搭建01

1、首先,请根据前面k8s的教程,搭建一套可以运行的k8s环境
搭建Kubernetes环境01

搭建Kubernetes环境02

k8s-0001 159.138.135.216 192.168.1.124
k8s-0002 159.138.139.37 192.168.1.229
k8s-0003 159.138.31.39 192.168.1.187
k8s-0004 119.8.113.135 192.168.1.83

2、下载并部署istio

#下载并部署istio
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.5.2
export PATH=$PWD/bin:$PATH
istioctl manifest apply --set profile=demo
Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details.
- Applying manifest for component Base...
✔ Finished applying manifest for component Base.
- Applying manifest for component Pilot...
✔ Finished applying manifest for component Pilot.
Waiting for resources to become ready...
Waiting for resources to become ready...
Waiting for resources to become ready...
Waiting for resources to become ready...
Waiting for resources to become ready...
- Applying manifest for component EgressGateways...
- Applying manifest for component IngressGateways...
- Applying manifest for component AddonComponents...
✔ Finished applying manifest for component EgressGateways.
✔ Finished applying manifest for component AddonComponents.
✔ Finished applying manifest for component IngressGateways.
✔ Installation complete

#告知istio,对default空间下的pod自动注入Envoy sidecar
kubectl label namespace default istio-injection=enabled
namespace/default labeled

3、部署demo

#部署
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

#查看pods情况
kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-6fc55d65c9-kxxpm       2/2     Running   0          106s
productpage-v1-7f44c4d57c-h6h7p   2/2     Running   0          105s
ratings-v1-6f855c5fff-2rjz9       2/2     Running   0          105s
reviews-v1-54b8794ddf-tq5vm       2/2     Running   0          106s
reviews-v2-c4d6568f9-q8mvs        2/2     Running   0          106s
reviews-v3-7f66977689-ccp9c       2/2     Running   0          106s

#查看services情况
kubectl get services
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.104.68.235   <none>        9080/TCP   89s
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP    31m
productpage   ClusterIP   10.106.255.85   <none>        9080/TCP   89s
ratings       ClusterIP   10.103.19.155   <none>        9080/TCP   89s
reviews       ClusterIP   10.110.79.44    <none>        9080/TCP   89s</none></none></none></none></none>

# 开启外部访问
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

#查看gateway情况
kubectl get gateway
NAME               AGE
bookinfo-gateway   7s

4、设置ingress

# 查看是否配置了外部IP
kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                                                                      AGE
istio-ingressgateway   LoadBalancer   10.105.220.60   <pending>     15020:32235/TCP,80:30266/TCP,443:30265/TCP,15029:30393/TCP,15030:30302/TCP,15031:30789/TCP,15032:31411/TCP,31400:30790/TCP,15443:31341/TCP   5m30s</pending>

#使用node的地址作为host,和LB只需要配置一种
export INGRESS_HOST=47.57.158.253

#使用LB的地址作为host,和node只需要配置一种
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

#配置http端口
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

#配置https端口
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

#设置并查看外部访问地址
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
echo http://$GATEWAY_URL/productpage

#此时就可以通过节点的ip地址来访问部署的实例了
#浏览器打开上面输出的地址
#http://47.57.158.253:30266/productpage

5、开启管理页面

#开始kaili
istioctl dashboard kiali

#安装nginx
#并设置反向代理
vi /etc/nginx/nginx.conf
http {

  upstream backend {
    # 代理的本地端口
    server 127.0.0.1:20001;
  }

  server {
    # 访问的外部端口
    listen 8000;
    location / {
      proxy_pass http://backend;
    }
  }

}

# 通过反向代理的8000端口就可以访问kiali的管理界面了
# #http://47.57.158.253:8000

PS:
必须开放的TCP端口有:

8000 nginx代理端口
8001 k8s默认代理端口
30266 bookinfo demo端口,会变更

Ubuntu18升级到20

1、升级准备
做好资料备份

2、开始升级

# 更新Ubuntu18
sudo apt get update
sudo apt get upgrade
sudo apt autoremove

# 查看有哪些版本可以升级
sudo do-release-upgrade -c
sudo do-release-upgrade -d -c

# 升级到Ubuntu20
sudo do-release-upgrade -d

# 系统会自动升级,升级后,桌面操作快乐很多
# 现阶段有个问题,就是升级后,桌面快捷方式都不能使用了,不知道怎么回事

3、替换国内源

sudo vi /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse

4、禁用自动更新

# 1都改为0
sudo vi /etc/apt/apt.conf.d/10periodic
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";

V8引擎常用命令

1、测试文件test.js

function log(msg){
    console.log(msg)
}

hi = "hello"
log(hi)

2、输出AST语法树

d8 --print-ast test.js
[generating bytecode for function: ]
--- AST ---
FUNC at 0
. KIND 0
. LITERAL ID 0
. SUSPEND COUNT 0
. NAME ""
. INFERRED NAME ""
. DECLS
. . FUNCTION "log" = function log
. EXPRESSION STATEMENT at 47
. . ASSIGN at 50
. . . VAR PROXY unallocated (0000022CC5A21D98) (mode = DYNAMIC_GLOBAL, assigned = true) "hi"
. . . LITERAL "hello"
. EXPRESSION STATEMENT at 61
. . ASSIGN at -1
. . . VAR PROXY local[0] (0000022CC5A21CC8) (mode = TEMPORARY, assigned = true) ".result"
. . . CALL
. . . . VAR PROXY unallocated (0000022CC5A21B10) (mode = VAR, assigned = true) "log"
. . . . VAR PROXY unallocated (0000022CC5A21D98) (mode = DYNAMIC_GLOBAL, assigned = true) "hi"
. RETURN at -1
. . VAR PROXY local[0] (0000022CC5A21CC8) (mode = TEMPORARY, assigned = true) ".result"

[generating bytecode for function: log]
--- AST ---
FUNC at 12
. KIND 0
. LITERAL ID 1
. SUSPEND COUNT 0
. NAME "log"
. PARAMS
. . VAR (0000022CC5A21B68) (mode = VAR, assigned = false) "msg"
. DECLS
. . VARIABLE (0000022CC5A21B68) (mode = VAR, assigned = false) "msg"
. EXPRESSION STATEMENT at 24
. . CALL
. . . PROPERTY at 32
. . . . VAR PROXY unallocated (0000022CC5A21D18) (mode = DYNAMIC_GLOBAL, assigned = false) "console"
. . . . NAME log
. . . VAR PROXY parameter[0] (0000022CC5A21B68) (mode = VAR, assigned = false) "msg"

hello

3、输出作用域

d8 --print-scopes test.js
Inner function scope:
function log () { // (000001E067B50EA8) (12, 43)
  // 2 heap slots
  // local vars:
  VAR msg;  // (000001E067B54E18) never assigned
}
Global scope:
global { // (000001E067B50C88) (0, 68)
  // will be compiled
  // 1 stack slots
  // temporary vars:
  TEMPORARY .result;  // (000001E067B51288) local[0]
  // local vars:
  VAR log;  // (000001E067B510D0)
  // dynamic vars:
  DYNAMIC_GLOBAL hi;  // (000001E067B51358)

  function log () { // (000001E067B50EA8) (12, 43)
    // lazily parsed
    // 2 heap slots
  }
}
Global scope:
function log (msg) { // (000001E067B50EA8) (12, 43)
  // will be compiled
  // local vars:
  VAR msg;  // (000001E067B51128) parameter[0], never assigned
}
hello

4、输出字节码

d8 --print-bytecode test.js
[generated bytecode for function:  (0x03970824fc39 <SharedFunctionInfo>)]
Parameter count 1
Register count 3
Frame size 24
         000003970824FCEA @    0 : 12 00             LdaConstant [0]
         000003970824FCEC @    2 : 26 fa             Star r1
         000003970824FCEE @    4 : 27 fe f9          Mov <closure>, r2
         000003970824FCF1 @    7 : 61 37 01 fa 02    CallRuntime [DeclareGlobals], r1-r2
         000003970824FCF6 @   12 : 12 01             LdaConstant [1]
         000003970824FCF8 @   14 : 15 02 00          StaGlobal [2], [0]
         000003970824FCFB @   17 : 13 03 02          LdaGlobal [3], [2]
         000003970824FCFE @   20 : 26 fa             Star r1
         000003970824FD00 @   22 : 13 02 04          LdaGlobal [2], [4]
         000003970824FD03 @   25 : 26 f9             Star r2
         000003970824FD05 @   27 : 5d fa f9 06       CallUndefinedReceiver1 r1, r2, [6]
         000003970824FD09 @   31 : 26 fb             Star r0
         000003970824FD0B @   33 : aa                Return
Constant pool (size = 4)
000003970824FCB1: [FixedArray] in OldSpace
 - map: 0x0397080404b1 <Map>
 - length: 4
           0: 0x03970824fc61 <FixedArray[2]>
           1: 0x03970824fc01 <String[#5]: hello>
           2: 0x03970824fbf1 <String[#2]: hi>
           3: 0x0397081c692d <String[#3]: log>
Handler Table (size = 0)
Source Position Table (size = 0)
[generated bytecode for function: log (0x03970824fc71 <SharedFunctionInfo log>)]
Parameter count 2
Register count 2
Frame size 16
         000003970824FE4E @    0 : 13 00 00          LdaGlobal [0], [0]
         000003970824FE51 @    3 : 26 fa             Star r1
         000003970824FE53 @    5 : 28 fa 01 02       LdaNamedProperty r1, [1], [2]
         000003970824FE57 @    9 : 26 fb             Star r0
         000003970824FE59 @   11 : 59 fb fa 02 04    CallProperty1 r0, r1, a0, [4]
         000003970824FE5E @   16 : 0d                LdaUndefined
         000003970824FE5F @   17 : aa                Return
Constant pool (size = 2)
000003970824FE1D: [FixedArray] in OldSpace
 - map: 0x0397080404b1 <Map>
 - length: 2
           0: 0x0397081c68b9 <String[#7]: console>
           1: 0x0397081c692d <String[#3]: log>
Handler Table (size = 0)
Source Position Table (size = 0)
hello

5、测试文件test1.js

let a = {x:1}

function bar(obj) { 
  return obj.x 
}

function foo (count) { 
  let ret = 0
  for(let i = 1; i < count; i++) {
    ret += bar(a)
  }
  return ret
}

//foo(7049)
//foo(100000)

6、输出优化信息

//foo(7049)
d8 --trace-opt-verbose test1.js
[not yet optimizing foo, not enough ticks: 0/2 and ICs changed]

//foo(10000)
[not yet optimizing foo, not enough ticks: 0/2 and ICs changed]
[marking 0x01410824fe35 <JSFunction foo (sfi = 000001410824FCD9)> for optimized recompilation, reason: small function]
[compiling method 0x01410824fe35 <JSFunction foo (sfi = 000001410824FCD9)> using TurboFan OSR]
[optimizing 0x01410824fe35 <JSFunction foo (sfi = 000001410824FCD9)> - took 141.370, 62.753, 1.551 ms]

7、输出反优化信息

//没有输出。。。
d8 --trace-deopt test1.js

8、test2.js

function strToArray(str) {
  let i = 0
  const len = str.length
  let arr = new Uint16Array(str.length)
  for (; i < len; ++i) {
    arr[i] = str.charCodeAt(i)
  }
  return arr;
}

function foo() {
  let i = 0
  let str = 'test V8 GC'
  while (i++ < 1e5) {
    strToArray(str);
  }
}

foo()

9、输出反优化信息

d8 --trace-gc test2.js
[4600:0000019D00000000]      490 ms: Scavenge 1.2 (2.4) -> 0.3 (3.4) MB, 14.5 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      500 ms: Scavenge 1.2 (3.4) -> 0.3 (3.6) MB, 2.0 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      501 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      503 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      505 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      506 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      508 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      509 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      511 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      513 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      515 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      516 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      518 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[4600:0000019D00000000]      520 ms: Scavenge 1.3 (3.6) -> 0.3 (3.6) MB, 0.1 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure

10、test3.js

function Foo(property_num,element_num) {
  //添加可索引属性
  for (let i = 0; i < element_num; i++) {
      this[i] = `element${i}`
  }
  //添加常规属性
  for (let i = 0; i < property_num; i++) {
      let ppt = `property${i}`
      this[ppt] = ppt
  }
}
var bar = new Foo(10,10)
console.log(%HasFastProperties(bar));
delete bar.property2
console.log(%HasFastProperties(bar));

11、使用内部方法

//%HasFastProperties测试是否有快属性
d8 --allow-natives-syntax test3.js
true
false

编译V8引擎

1、安装Visual Studio 2017

2、从微软下载Windows 10 SDK,安装“Debugging Tools for Windows”

https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk/

3、设置代理

# git的http代理设置
git config --global http.proxy 127.0.0.1:9528
git config --global https.proxy 127.0.0.1:9528

# 可以通过操作系统设置http代理
# 也可以通过通过命令行设置http代理设置(管理员权限)
netsh winhttp set proxy 127.0.0.1:9528

# 设置cipd_client的http代理设置
set HTTP_PROXY=127.0.0.1:9528
set HTTPS_PROXY=127.0.0.1:9528

4、环境变量

# 启动 VS2017 x86_amd64 命令行环境
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsx86_amd64.bat"

# 环境变量
set PATH=D:\GitGoogleV8\depot_tools_win;D:\NeoLang\Python\Python37;%PATH%
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

5、下载源码

mkdir V8Build
cd V8Build
# V8Build
fetch v8

cd v8
# V8Build/v8
git pull origin 8.3.82
cd ..

6、同步环境

# V8Build
gclient sync

7、生成解决方案

cd v8/src
# V8Build/v8/src
gn gen --ide=vs out\Default
# 也可以设置filters,如果是看chrome源码,最好设置一下,因为有几千个项目
# gn gen --ide=vs --filters=//chrome --no-deps out\Default

8、编译

# 用vs打开sln,并编译
# 编译过程中,有时会出现文件无法访问等情况
# 可以在命令行中执行,然后用VS继续编译就可以成功了
# V8Build/v8/src
devenv out\Default\all.sln

9、测试

# V8Build/v8/src
cd out\Default
# V8Build/v8/src/out/Default
v8_shell.exe

蓝牙鼠标支持双系统

操作系统与蓝牙鼠标之间的配对,是通过三个关键值完成的:
本机蓝牙ID,鼠标蓝牙ID,LinkKey
蓝牙鼠标在配对后,连接电脑蓝牙设备时,三个值必须一致,双方才能连接成功。
对于单系统来说不会引起什么问题,但对于双系统的电脑来说,就会有问题了。

比如,你是Windows和Ubuntu双系统,或Windows和Mac双系统。
在第一个系统中配对后,会生成一个LinkKey,鼠标就可以在第一个系统中连接成功,但无法在第二个系统中连接成功。
在第二个系统配对后会生成另外一个LinkKey,鼠标就可以在第二个系统中连接成功,但无法在第一个系统中连接成功。
所以,要蓝牙鼠标支持双系统,就要把两个系统的LinkKey改为一致。

一、首先是Windows和Ubuntu双系统:
1、在Windows下配对鼠标
2、在Ubuntu下配对鼠标
3、在Ubuntu下查找配对后的LinkKey

#3.1、定位你的设备配置文件
#一般来说本机蓝牙ID只会有一个,是以:分割的一长串十六机制数字
#蓝牙设备,就是全部配过对的蓝牙设备,可以通过查看info文件判断哪个是你的蓝牙鼠标
sudo vi /var/lib/bluetooth/本机蓝牙ID/鼠标蓝牙ID/info
#3.2、找到LinkKey
#找到下面部分,并记录下来
[linkkey]
key=16位16进制数字

4、重启进入Windows

#4.1、运行命令regedit,打开注册表编辑器
#4.2、定位到下面的位置,其中:
#本机蓝牙ID与Linux下一致,只是没有:分割
#鼠标蓝牙ID与Linux下一致,只是没有:分割
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\本机蓝牙ID
鼠标蓝牙ID=16位16进制数字
#4.3、修改LinkKey,使其与Ubunt下LinkKey一致

5、重新连接蓝牙鼠标试试,是不是两个系统都可以了?

此外,由于Ubuntu默认BIOS中是UTC时间,而Windows默认BIOS是本地时区时间,所以重启后,时间会不一致,比如东八区会相差8小时。可以通过将Ubuntu的BIOS时间也设置为本地时区来解决:

sudo timedatectl set-local-rtc 1

二、然后是Windows和Mac双系统:
1、在Windows下配对鼠标
2、在Mac下配对鼠标
3、在Mac下查找配对后的LinkKey

sudo defaults read /private/var/root/Library/Preferences/blued.plist
#找到Linkkey【一串16位16进制数字】,并记录下来

4、计算Windows的Linkkey

#4.1、假设Mac下的LinkKey为
#98542ff9 88e19449 475250e1 3943255b
#4.2、按每两个数字进行分组,然后从后向前倒序排列,就可以得到Windows下的LinkKey
#空格是为了方便大家查看才添加的
#5b254339 e1505247 4994e188 f92f5498

5、重启进入Windows

#4.1、运行命令regedit,打开注册表编辑器
#4.2、定位到下面的位置,其中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\本机蓝牙ID
鼠标蓝牙ID=16位16进制数字
#4.3、修改LinkKey,使其与计算的到的LinkKey一致

6、重新连接蓝牙鼠标试试,是不是两个系统都可以了?

三、上面的都好烦,有没有其他办法?
1、使用有线鼠标
2、使用带有接收器的蓝牙鼠标

Ubuntu安装Nvidia驱动

1、检查显卡型号

#查看显卡型号
lshw -numeric -C display

#查看对应显卡驱动的版本
https://www.nvidia.com/Download/index.aspx

2、安装驱动
2.1、Ubuntu自动安装(适用于不太新的显卡)

sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall

2.2、手动安装(适用于比较新的显卡)

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt-get install

3、此外如果你的电脑BIOS支持Security Boot,需要设置密码才能用非官方驱动,如果设备环境相对可控安全级别没有这么高,可以考虑关闭这个功能。
否则,出现的情况就是Ubuntu无法加载该驱动,比如CUI登录正常,但一启动GUI界面,就会自动关机。这个有些坑,我重装了3遍才发现。

Apache2配置SSL证书

一、申请证书
各大云厂商均有销售,如果没有特殊需求买最便宜的或免费的,需要做域名验证,按指引做好验证即可
申请后会得到三个文件,保管好,不要给别人
ca.crt、server.crt、server.key
将这三个文件拷贝到/etc/apache2/ssl/

二、启用https
1、apache2启用ssl模块

sudo apt-get install openssl
sudo a2enmod ssl

2、配置ssl虚拟站点

# 建立软连接
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-default-ssl.conf

# 编辑https配置文件
sudo vi /etc/apache2/sites-enabled/001-default-ssl.conf
# 修改下面三行
SSLCertificateFile       /etc/apache2/ssl/server.crt
SSLCertificateKeyFile    /etc/apache2/ssl/server.key
SSLCertificateChainFile  /etc/apache2/ssl/ca.crt

3、重启apache服务

# 重启服务
sudo systemctl apache2 restart
# 查看状态
sudo systemctl status apache2.service

4、登录wordpress后台,修改网站地址为https地址

5、此时应该就可以用https进行访问了

三、设置http重定向到https
1、启动重定向模块

sudo a2enmod rewrite

2、设置http重定向

# 编辑http配置文件
sudo vi /etc/apache2/sites-available/000-default.conf 
# 在需要重定向的VirtualHost中,增加下面三行
<VirtualHost *:80>
    RewriteEngine on
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
<\VirtualHost> 

3、重启apache服务

# 重启服务
sudo systemctl apache2 restart
# 查看状态
sudo systemctl status apache2.service

4、现在访问http地址,就会自动跳转到https地址了

备份还原Gitlab

1、查看gitlab版本

gitlab-rake gitlab:env:info
System information
...
GitLab information
Version:        12.2.8
...
GitLab Shell
Version:        9.3.0
...

2、备份gitlab

gitlab-rake gitlab:backup:create
#会在这个路径生成新的备份文件
/var/opt/gitlab/backups/XXX_gitlab_backup.tar

3、准备新服务器
在新服务器上安装相同版本的gitlab,并将备份文件拷贝到新服务器相同路径

4、还原

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=XXX
gitlab-ctl start  

5、验证

gitlab-rake gitlab:check SANITIZE=true

Synology DS418 Paly安装Docker

去年入手了DS418 Play,一直没时间弄,春节期间正好搞一下,把Docker功能开起来。

1、DS418 Play在应用商店是没有Docker,但可以用DS418或DS918的安装文件
到官网,下载得到Docker-x64-18.09.0-0506.spk。

https://www.synology.cn/zh-cn/support/download/DS918+#packages

2、通过管理软件,网页上传安装spk文件包

3、安装后,就可以在应用界面看到docker了

4、如果网络比较好,就可以直接在应用界面开启docker

5、我这边网络比较差,所以要下载镜像后,再上传到DS418 Play
5.1、开启DS418 Play的ssh功能
5.2、找一台网速好的机器

#拉取镜像
sudo docker pull gitlab/gitlab-ce
#导出镜像
sudo docker save -o gitlab-ce.img gitlab/gitlab-ce

5.3、把镜像拷贝到DS418 Play
5.4、SSH到DS418 Play,导入镜像

#SSH登录
ssh DS418PlayIP
#导出镜像
sudo docker load -i ~/PATH_TO_IMG/gitlab-ce.img

6、创建挂载路径

mkdir /volume2/gitlab/etc
mkdir /volume2/gitlab/log
mkdir /volume2/gitlab/data

7、创建容器

sudo docker run \
--detach \
--publish 9443:443 \
--publish 9080:80 \
--name gitlab \
--restart unless-stopped \
-v /volume2/gitlab/etc:/etc/gitlab \
-v /volume2/gitlab/log:/var/log/gitlab \
-v /volume2/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

8、修改配置文件

vi /mnt/gitlab/etc/gitlab.rb

#配置gitlab上看到的项目地址
external_url 'http://群晖IP:9080'

#配置邮箱
gitlab_rails['gitlab_email_from'] = 'xxx@qq.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@qq.com"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

#关闭不需要的服务
prometheus['enable'] = false
prometheus_monitoring['enable'] = false
grafana['enable'] = false

9、刷新配置

sudo docker exec gitlab gitlab-ctl reconfigure

10、查看日志

sudo docker exec gitlab gitlab-ctl status
sudo docker exec gitlab gitlab-ctl tail gitaly

11、登录系统

http://群晖IP:9080
默认用户名为root,系统会自动提示修改密码

重大黑客攻击事件2020

2020年黑客攻击事件核心趋势
1、供应链“毁灭级”攻击:黑客通过篡改SolarWinds等基础软件供应链,实现对全球数万组织的“合法投毒”,防御方陷入“信任危机”,修复难度极大。
2、APT攻击“国家级”博弈:国家级黑客组织(如APT29)异常活跃,不仅窃取FireEye红队工具,还深度介入商业机密与地缘政治窃密,网络战形态愈发清晰。
3、数据泄露“防不胜防”:从Facebook 50亿用户数据泄露到微博、万豪酒店信息被倒卖,无论是巨头还是传统企业,因配置错误或接口漏洞导致的数据“裸奔”成为常态。
4、远程办公“安全裸奔”:疫情期间远程办公爆发,Zoom、VPN设备等因漏洞和配置错误成为重灾区,暴露了企业在应急状态下的安全短板。
5、勒索攻击“趁火打劫”:利用新冠疫情全球爆发的契机,黑客专门针对医疗、疫苗研发机构发起攻击,甚至试图篡改水务系统氯含量,突破了“不攻击生命线”的底线。

2020年12月:SolarWinds供应链攻击事件
事件经过:黑客组织APT29通过篡改SolarWinds公司的Orion网络管理软件更新包,植入恶意代码Sunburst;该软件被全球超18000家组织使用,包括美国财政部、国防部、国土安全部等核心政府部门,以及微软、思科、英特尔等科技巨头,攻击潜伏时间长达数月才被发现。
攻击方式:供应链攻击、恶意软件植入、长期潜伏渗透
造成损失:成为史上影响最深远的国家级供应链攻击之一,美国政府核心机密面临泄露风险,引发全球对软件供应链安全的恐慌;各受害组织投入巨额成本进行系统排查与修复,SolarWinds公司股价暴跌,声誉严重受损,倒逼全球企业重构软件供应链安全体系。

2020年12月:LuBian矿池“国家级”黑客攻击事件
事件经过:柬埔寨太子集团主席陈志旗下的LuBian矿池遭遇黑客攻击,总计约12.7万枚比特币(当时市值约35亿美元)被窃取。这笔巨额资产在链上沉寂4年后,于2024年被转移。2025年10月,美国司法部披露,这其实是一起由国家级黑客组织操盘的“黑吃黑”事件,美国政府最终没收了这批比特币。
攻击方式:利用伪随机数生成器(PRNG)漏洞破解私钥、国家级APT攻击
造成损失:成为加密货币历史上最大规模的盗窃案之一,暴露了非托管钱包和密钥生成算法的安全隐患;事件揭示了国家行为体可能直接介入加密货币资产的争夺。

2020年11月:富士康墨西哥工厂勒索攻击
事件经过:位于墨西哥的富士康工厂(CTBG MX)遭受DoppelPaymer勒索软件攻击,黑客加密了1200台服务器,窃取了100GB未加密文件,并索要约3468万美元(2.3亿人民币)的巨额赎金。
攻击方式:勒索软件攻击、数据窃取与加密
造成损失:制造设备停机,生产计划受阻,且面临天价赎金压力,是当年制造业遭受攻击的典型案例。

2020年11月:FireEye网络安全公司数据泄露事件
事件经过:全球知名网络安全公司FireEye遭APT29黑客团伙攻击,攻击者窃取了该公司用于检测网络威胁的核心工具集,包括超过300种红队工具(用于模拟黑客攻击的测试工具),这些工具可被用于绕过各类安全防护系统。
攻击方式:针对性APT攻击、核心工具窃取、系统渗透
造成损失:安全工具泄露导致全球多个组织的安全防线面临被突破风险,FireEye的核心竞争力受冲击;同时该事件为SolarWinds攻击的后续溯源提供了关键线索,凸显了网络安全企业自身防护的重要性。

2020年10月:谷歌遭遇史上最大DDoS攻击事件
事件经过:谷歌遭受了2.54Tbps的DDoS攻击,此次攻击规模创下当时有记录以来的峰值之一,攻击者通过海量虚假请求对谷歌网络发起冲击,谷歌凭借自身防御体系成功抵御,未造成服务中断。
攻击方式:超大流量DDoS攻击、虚假请求泛洪
造成损失:虽未导致服务瘫痪,但凸显了网络攻击能力的不断提升,给全球大型互联网企业的DDoS防御带来新挑战,推动谷歌及行业进一步升级流量清洗与防御架构。

2020年10月:日本三菱电机数据泄露事件
事件经过:日本三菱电机遭黑客攻击,导致涉及核电站、高铁、战斗机等核心领域的机密数据泄露,泄露数据量超20GB,涵盖设备设计图纸、技术参数等敏感信息;攻击者通过入侵公司内部服务器,长期潜伏并窃取数据。
攻击方式:长期潜伏式入侵、敏感数据窃取
造成损失:涉及国家安全级别的技术机密泄露,对日本军工、能源、交通等核心产业造成严重冲击;三菱电机面临监管问责与声誉危机,相关合作项目被迫暂停排查。

2020年9月:巴西电力公司Light S.A勒索攻击
事件经过:巴西大型电力公司Light S.A遭遇Sodinokibi(REvil)勒索软件攻击,黑客对所有Windows系统文件进行加密,并窃取敏感数据,索要1400万美元赎金。
攻击方式:勒索软件攻击(REvil家族)、双重勒索
造成损失:电力公司运营系统瘫痪,威胁到巴西当地的电力供应稳定,凸显了能源行业在面对勒索软件时的脆弱性。

2020年9月:美国有线电视新闻网(CNN)及媒体集团攻击事件
事件经过:黑客组织New World Hackers攻击了美国有线电视新闻网(CNN)、《纽约时报》《华盛顿邮报》等多家主流媒体的后台系统,篡改新闻发布页面,发布虚假新闻内容,引发公众误解与社会恐慌。
攻击方式:系统入侵、新闻内容篡改、虚假信息传播
造成损失:媒体公信力严重受损,大量用户被虚假信息误导;受害媒体紧急暂停新闻发布功能进行修复,运营秩序被打乱,后续需投入资源强化内容审核与系统防护。

2020年8月:推特(Twitter)大规模黑客入侵事件
事件经过:黑客通过社会工程学手段贿赂推特内部员工,获取后台管理权限,入侵了130个推特账户,包括奥巴马、拜登、马斯克、比尔·盖茨等政要名人及企业账户,劫持账户发布比特币诈骗信息,声称“向指定地址转账比特币,将双倍返还”。
攻击方式:社会工程学、内部人员勾结、账号权限窃取、诈骗信息发布
造成损失:事件持续约45分钟,引发全球关注,大量用户受骗转账,累计损失超11万美元,造成严重社会影响;推特平台信任度暴跌,股价短暂下跌,被迫强化内部人员权限管控与账号安全验证机制,美国联邦调查局(FBI)介入调查并起诉相关人员。

2020年8月:台积电勒索病毒感染事件
事件经过:8月3日傍晚,台积电生产工厂及营运总部部分生产设备遭WannaCry勒索病毒变种感染,导致生产线短暂停摆;台积电迅速采取措施控制感染范围,受影响设备逐步恢复生产,官方明确此次为病毒感染,非外传的黑客主动攻击。
攻击方式:勒索病毒感染、生产设备入侵
造成损失:短暂影响芯片生产进度,凸显半导体行业核心生产设备的网络安全隐患,推动台积电及全行业强化生产系统与办公网络的隔离防护及病毒查杀能力。

2020年7月:任天堂源代码大规模泄露
事件经过:黑客泄露了任天堂大量内部机密资料,包括Wii主机的底层代码、硬件设计图,以及《超级马里奥世界》、《塞尔达传说3》、《宝可梦》系列等多款经典游戏的源代码和未公开原型。
攻击方式:服务器入侵、数据窃取与公开
造成损失:虽然未直接造成资金损失,但导致任天堂核心知识产权外泄,大量未发布的游戏原型和开发工具流出,对公司的版权保护和商业机密构成了长期挑战。

2020年7月:Garmin公司勒索软件攻击事件
事件经过:全球知名运动设备制造商Garmin遭WastedLocker勒索软件攻击,其全球服务器被加密,导致旗下智能手表、运动相机等设备的在线服务、数据同步、地图更新功能全面瘫痪,波及全球数百万用户。
攻击方式:勒索软件攻击、服务器加密、服务中断
造成损失:Garmin被迫支付约1000万美元比特币赎金以恢复系统;用户无法正常使用设备核心功能,企业声誉受影响,同时暴露了智能硬件企业对核心服务器依赖的安全隐患。

2020年7月:Ripple20物联网设备漏洞
事件经过:安全研究人员发现Treck TCP/IP软件库中的19个0day漏洞(统称Ripple20),影响了全球数亿台已部署的物联网设备。
事故原因:底层软件库的架构设计缺陷。这些设备在出厂运维和后续维护中,缺乏对底层通用组件的安全更新机制。
造成损失:家用路由器、医疗设备、工业控制系统面临被远程控制的风险,涉及惠普、英特尔等大厂,修复成本极高且周期漫长。

2020年6月:加州大学旧金山分校支付赎金事件
事件经过:加州大学旧金山分校遭黑客攻击,研究资料被窃取,其中包含COVID-19相关研究数据;为保护这些关键医疗研究资料不被公开或篡改,学校向黑客支付了114万美元赎金。
攻击方式:数据窃取、勒索威胁
造成损失:成为疫情期间针对医疗研究领域的典型攻击案例,暴露了科研机构数据安全防护薄弱点,同时引发关于是否应向黑客支付赎金的行业争议。

2020年6月:嘉年华邮轮(Carnival)数据泄露
事件经过:嘉年华邮轮公司披露了一起严重的数据泄露事件,涉及旗下多个品牌。
事故原因:勒索软件攻击导致的运维瘫痪(虽然属于攻击,但导致了系统运维失效)。攻击导致其IT系统被加密,进而影响了业务的正常运维。
造成损失:客户数据和运营数据泄露,公司不得不关闭部分IT系统进行清理,严重影响了邮轮预订和客户服务业务。

2020年5月:Facebook 50亿美元隐私罚单后续与数据暴露
事件经过:虽然剑桥分析公司事件发生在之前,但2020年4月,联邦法院正式批准了FTC与Facebook的和解协议,Facebook认罚50亿美元。此外,2020年还有大量Facebook用户数据(约5.38亿条)在暗网被出售,涉及用户ID、电话号码等信息。
攻击方式:数据滥用、API接口漏洞利用、暗网售卖
造成损失:Facebook面临巨额罚款和严厉的监管审查,用户隐私数据大规模泄露,进一步加剧了公众对社交媒体巨头数据保护能力的不信任。

2020年5月:美国佛罗里达州水务部门勒索软件攻击事件
事件经过:黑客组织对美国佛罗里达州清水市水务部门发起勒索软件攻击,加密了其工业控制系统,试图篡改饮用水中的氯含量,将浓度从安全范围提升至致命水平,幸被工作人员及时发现并手动干预。
攻击方式:勒索软件攻击、工业控制系统入侵、关键参数篡改
造成损失:虽未造成人员伤亡,但凸显了工业控制系统联网后的致命风险,直接威胁公共卫生安全;水务部门支付约42万美元赎金恢复系统,推动美国加强关键基础设施(水、电、气)的网络安全防护。

2020年4月:Zoom视频会议平台安全漏洞及数据泄露事件
事件经过:疫情期间全球广泛使用的Zoom视频会议平台被曝光存在多个安全漏洞,包括“会议劫持”(未经授权人员闯入会议)、数据泄露(用户邮箱、密码、会议记录被泄露至暗网)、隐私收集违规等问题,波及全球数亿用户。
攻击方式:漏洞利用、数据窃取、隐私违规收集
造成损失:Zoom面临全球多国监管机构调查与罚款,用户信任度大幅下降;平台紧急发布补丁修复漏洞,调整隐私政策,投入巨资升级安全架构,同时引发全球对远程办公软件安全与隐私保护的重视。

2020年4月:深信服VPN设备APT攻击事件
事件经过:360监测到境外APT组织利用深信服SSL VPN设备漏洞发起攻击,通过客户端更新过程中的缺陷,用后门取代合法更新,注入恶意软件,攻击波及中国、意大利、英国等多国机构,主要针对中国组织及部分国家机构。
攻击方式:VPN设备漏洞利用、恶意软件植入、APT攻击
造成损失:部分机构服务器权限被获取,数据安全受威胁;深信服紧急发布说明并修复漏洞,推动各行业对VPN设备安全漏洞的排查与修复,强化远程办公设备的安全防护。

2020年3月:欧洲多国医院新冠疫情期间勒索软件攻击事件
事件经过:在新冠疫情全球蔓延期间,黑客组织利用医院抗疫忙碌的薄弱窗口期,对意大利、西班牙、法国等欧洲多国医院发起大规模勒索软件攻击,加密医疗系统数据,导致患者诊疗记录无法访问、手术被迫取消、急救服务受阻。
攻击方式:勒索软件攻击、针对性医疗行业攻击、趁势施压
造成损失:多家医院被迫支付赎金以恢复系统,医疗资源本就紧张的欧洲各国雪上加霜,部分患者因诊疗中断面临生命风险;凸显了医疗行业作为关键基础设施,在突发公共卫生事件中面临的网络攻击威胁。

2020年3月:万豪酒店数据泄露事件
事件经过:万豪酒店集团再次遭遇重大数据泄露,黑客通过获取酒店员工信息登录集团APP,成功盗取了约520万酒店客人的个人信息,这是万豪继2018年后又一起影响广泛的数据安全事件。
攻击方式:员工信息窃取、APP账户入侵、用户数据盗取
造成损失:大量客人个人信息面临泄露风险,万豪集团声誉再次受损,面临全球监管机构问询与潜在罚款,同时倒逼酒店行业强化员工信息保护与APP安全防护。

2020年3月:微博用户信息泄露事件
事件经过:有用户发现5.38亿条微博用户信息在暗网出售,其中1.7亿条含账户信息,部分信息包含身份证号、手机号等私密内容;微博称系攻击者非法调用接口获取,另有观点认为源于脱库,新京报记者验证部分信息真实有效。
攻击方式:接口非法调用(或脱库)、数据窃取后暗网售卖
造成损失:大量用户隐私面临泄露风险,部分用户收到骚扰电话,微博平台信任度受影响,引发公众对社交平台用户数据安全存储与接口管控的质疑。

2020年2月:韩国KT电信大规模网络攻击事件
事件经过:韩国最大电信运营商之一KT电信遭黑客攻击,导致其手机通讯、宽带网络、电视服务全面瘫痪,波及韩国全国超3000万用户,同时影响了韩国证券交易所、机场、银行等关键机构的网络服务。
攻击方式:DDoS攻击、核心网络设备入侵、服务瘫痪攻击
造成损失:KT电信紧急启动应急预案修复系统,服务中断持续数小时,经济损失超千万美元;用户通讯受阻,关键机构运营受影响,引发韩国社会对电信基础设施安全的担忧,政府要求运营商强化网络冗余与防御能力。

2020年1月:微软客户支持服务器数据泄露事件
事件经过:微软用于存储客户支持分析结果的5台ElasticSearch服务器因安全规则错误配置,未经密码保护意外公开,涉及2.5亿条记录,含电子邮件地址、IP地址及客户支持案例详情,泄露始于2019年12月,2020年1月被披露并修复。
攻击方式:服务器安全配置错误、数据意外泄露
造成损失:大量客户支持敏感信息暴露,微软声誉受轻微影响,推动企业加强服务器安全配置核查与常态化安全审计,重视非攻击类因素导致的数据泄露风险。