docker安装oracle

背景

公司用的数据库是oracle,家里装的是mysql,start with递归查询的sql只能用oracle处理,所以需要再装一个oracle,docker肯定是最方便的。

环境信息

docker-compose

为了方便这里用docker-compose。考虑用sudo -i切到root用户会方便很多

参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
oracle_db:
image: wnameless/oracle-xe-11g-r2
ports:
- 15210:1521
environment:
- ORACLE_SID=ORCLCDB
- ORACLE_PDB=ORCLPDB1
volumes:
# 这里用命名卷不要用挂载点
- oracle_vol:/u01/app/oracle

volumes:
oracle_vol:

一些解释

  1. 把端口重新映射到15210是为了减少一些密码爆破

  2. 这里只能用命名卷进行挂载,挂载点会报错

可能的报错

cp: cannot stat ‘/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora.tmpl’: No such file or directory

docker主要有两种挂载方式,命名卷和挂载点,内部实现不同,如果是这个报错说明你可能是用的挂载点这种卷使用方式,改成上面yml里的命名卷就行。根因的话,需要深入研究两种挂载方式的实现原理。

连接说明

  1. database(serviceName)是XE
  2. 初始用户名密码是system/oracle

修改密码

参考

初始用户名密码是system/oracle,最好是需要改一下的。另密码貌似只能字母数字,常用的特殊字符都不行,解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 找到oracle镜像id
docker ps

# 进入镜像
docker exec -it 镜像id bash

# 切换用户
su - oracle

# 连接
sqlplus /nolog

# 用户名密码
connect system/oracle as sysdba

# 修改system用户密码为123456,注意这是sql有;号
alter user system identified by 123456;

# sys用户也要改一下密码
# connect sys/oracle as sysdba
alter user sys identified by 123456;

# 退出
quit

数据备份与恢复

备份

  1. 这里要备份的docker卷一般在/var/lib/docker/volumes/目录下,而且卷名称可能和你在yml里命名不一样,可以看下日志看看具体名称,需要自己判别一下。
  2. 备份的时候容器需要关掉
  3. 如果cpu很烂就仅打包不压缩
  4. docker volume相关命令可以看卷信息
1
2
3
4
5
# 打包并压缩
tar cvzf /path/on/host/backup/oracle_vol_backup.tar.gz -C /path/to/your/docker/volume/target/_data .

# 或者只打包,如果cpu很烂的话
tar cvf /path/on/host/backup/oracle_vol_backup.tar -C /var/lib/docker/volumes/oracle_oracle_vol/_data .

恢复

  1. 运行相同的compose配置文件
  2. 将备份文件解压覆盖新的卷
1
2
3
4
5
# 解包解压缩
tar xvzf /path/on/host/backup/oracle_vol_backup.tar.gz -C /path/to/your/docker/volume/target/_data

# 或仅解包
tar xvf /path/on/host/backup/oracle_vol_backup.tar -C /var/lib/docker/volumes/oracle_oracle_vol/_data

NAT机使用方式

NAT机和VPS机区别

一个宿主机上可以开N个NAT鸡,他们共享同一个公网IP和带宽。和VPS一样,你可以得到完整的root权限,但不同是你只能得到有限的端口。

用法

1 国内高速下载

如果希望给用户提供高速下载,一般的选择是要么买CDN分发服务,要么买大带宽服务器。因为国情限制,这两种方式的成本都很高,NAT的作用就出来了,昂贵的ip和带宽成本可以分摊到许多台机器上(理论上多达六万台),因此可以用廉价的方式在共享带宽下提供高速下载,性价比远超用CDN和买普通大带宽服务器。

2 代理使用

如果共享的IP有特殊属性比如家宽NAT机,那么就可以做到普通IP做不到的,比如流媒体解锁。

使用逻辑

客户端->NAT解锁机->目标服务

使用流程

如果数据传输是利用基于TCP和TLS实现的协议,首先通过CNAME和DNS+TXT记录给NAT机申请证书,后面就和普通VPS机一样处理就行。
对于SS这类和普通VPS一样使用。
注:记得在面板开放端口。

3 中转使用

这类NAT一般是优质线路或者IPLC

中转逻辑

客户端->NAT->落地机->目标服务

客户端->NAT

从客户端到NAT的流量一般都要加密,这里要根据商家限制选择,有的支持SS,有的只允许通过TLS加密后的流量。

NAT->落地机

NAT到落地可以直接使用流量转发,常见的有iptables,gost和brook。
值得注意的是有些商家即使是这一阶段也不允许转发未加密或弱加密流量(例如SS,SSR),所以是直接转发流量还是脱密后转发要看情况选择。

1
2
# gost安装脚本
wget --no-check-certificate -O gost.sh https://raw.githubusercontent.com/KANIKIG/Multi-EasyGost/master/gost.sh && chmod +x gost.sh && ./gost.sh

僵尸毁灭工程服务器搭建

背景

最近准备和女朋友玩僵毁联机,翻了下以前的笔记,太老了,更新一下。
对linux不熟悉建议使用Debian或者ubuntu系统,centos属实没必要。

环境信息

系统:Debian 10
内存:4G
端口开放:
16261 UDP (PZ服务器)
8766 TCP (貌似不需要)

注:如果vps没重要信息的话建议切换到root用户操作。

安装命令解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 更新一下源
apt update

# 安装一下必要的运行库
apt install -y lib32gcc1 libsm6 libxext6 libxrender-dev
# 如果上面的lib32gcc1报错,运行下面这个
apt install -y lib32gcc-s1 libsm6 libxext6 libxrender-dev

# 新建一个文件夹存放游戏 路径随意
mkdir /usr/local/games

# 新建一个文件夹存放steam
mkdir /usr/local/etc/steam && cd /usr/local/etc/steam

# 下载steam
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz

# 解压安装包
tar -xvzf steamcmd_linux.tar.gz

# 启动steam
./steamcmd.sh

# 设置一下安装路径(可选)
force_install_dir /usr/local/games

# 登录你的steam,僵毁我看steam官网文档上说不支持匿名下载(确信108600是不行的)
login 你的用户名 密码

# 下载僵毁
# 下载最新的版本,unstable可以换成steam上你看到的其他分支(国内机器经常断联多跑几次)
app_update 108600 -beta unstable validate
# 也可以下载默认版本
或者app_update 108600 validate 默认的

# 下载完成后退出
exit

# 查看游戏的下载位置,运行下面这个找找到底装哪里去了
find / -name ProjectZomboid

# 进入路径
cd 屏幕上显示的路径

# 进入游戏目录并运行开服脚本,然后按提示输入管理员密码就行了
cd projectzomboid && ./start-server

# 最后去游戏里面应该就可以搜到了

下载安装出现的问题

1. linux32/steamcmd: No such file or directory

原因:缺库
解决办法:apt-get install lib32gcc1
参考

2. error while loading shared libraries: libSM.so.6: cannot open shared object file: No such file or directory

原因:缺库
解决办法:apt-get install -y libsm6 libxext6 libxrender-dev

3.SteamAPI_Init() failed; create pipe failed.Message: ‘Fatal Error’, Detail: ‘Steam must be running to play this game (SteamAPI_Init() failed).

原因1:steam要运行在后台
~~ 解决办法:
将ProjectZomboid64.json里面的参数修改~~
“-Dzomboid.steam=1”
改为
“-Dzomboid.steam=0”
参考~~

原因2:你运行错了文件(比如我),开服应该运行start-server.sh这个文件

4.Package ‘lib32gcc1’ has no installation candidate

原因:库不同,装个兼容的
apt-get install -y lib32gcc-s1

5.Sys_LoadModule failed to load: /root/.steam/sdk64/steamclient.so

原因1:大概率是没有指定下载位置导致运行缺库
先创建这个文件夹:mkdir /root/.steam/sdk64
找到steamclient.so文件在哪
find / -name steamclient.so
复制linux64路径下的那个文件到目标地区
cp /usr/local/etc/steam/linux64/steamclient.so /root/.steam/sdk64/steamclient.so
回到ProjectZomboid的目录下执行./projectzomboid.sh

原因2:运行的文件错误(比如我),开服应该是start-server.sh

6. 开服成功但是搜索不到

原因很多,大概以下几点:

  1. servertest.ini文件的Open没设为true
  2. 主机厂商安全组策略
  3. start-server.sh这个文件的Dzomboid.steam参数改为1(卡了我一晚上,如果有关键字Steam is not enabled应该就是这个原因。)
  4. 其他原因:可以尝试直接通过ip地址和服务器端口进行连接

设置后台启动方式

方法一

nohup 命令
缺点:不好关

方法二:

WorkingDirectory和ExecStart改为你的路径,不清楚的find一下就行,一次性复制下面所有代码并执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat >/usr/lib/systemd/system/zomboid.service <<'EOL'
[Unit]
Description=Project Zomboid Server
After=network.target

[Service]
PrivateTmp=true
Type=simple
User=root
WorkingDirectory=/usr/local/etc/steam/steamapps/common/ProjectZomboid/projectzomboid/
ExecStart=/usr/local/etc/steam/steamapps/common/ProjectZomboid/projectzomboid/start-server.sh

[Install]
WantedBy=multi-user.target
EOL

之后就可以通过这些命令启动重启了

1
2
3
4
5
6
7
8
9
10
11
# 启动
systemctl start zomboid.service

# stop a server
systemctl stop zomboid.service

# restart a server
systemctl restart zomboid.service

# 查看状态,执行后按q可以退出
systemctl status zomboid.service

配置沙盒参数

官方参考

servertest.ini 文件

servertest_SandboxVars.lua

servertest_spawnpoints.lua

servertest_spawnregions.lua

ProjectZomboid64.json

IPLC专线测试

背景

想要既能丝滑打开GitHub又能作为游戏加速器使用,最好的选择就是iplc专线

种类

沪港,深港,广港,苏日等

协议

协议的选择要根据商家判断,每家运行的协议都不一样。SS优先级大于Trojan

准备

这里准备了两台HK落地机,一台国内直连,一台绕美,和一台日本软银东京落地机

中转效果测试

注:iplc关键是低延迟和稳定,速度不是关键

转发线路:深港IPLC

时间:晚上10点
内核:bbr+cake
客户端线路:电信
测速文件大小:10M

原线路 协议 原tcp 原真连接 原速度(MB/s) 中转前PUBG延迟 中转后tcp 中转后真连接 中转后速度 中转后PUBG延迟
BGP香港直连 Trojan 35ms 200ms 9M 70ms左右 35ms 250ms 5w浮动 70ms左右
香港非直连 Trojan 300ms左右 600ms左右 1.5M 无意义 38ms 350ms 3.5M
BGP香港直连 vmess 35ms 200ms 9M 70ms左右 40ms 400ms 5w浮动 70ms左右
香港非直连 vmess 300ms左右 50-500ms? 1.5M 无意义 38ms 600ms?? 3.5M
洛杉矶9929 vless 160ms 810ms左右 3.8M 无意义 40ms 200ms 3w

注:

  • HK GIA和BGP类似(其实就是稳定性高了些)
  • 速度不重要,因为主要看转发和落地机的带宽

转发线路:苏日IPLC

时间:早上10点
内核:bbrplus+fq
客户端线路:电信
测速文件大小:10M

原线路 协议 原tcp 原真连接 原速度(MB/s) 中转前pubg延迟 中转后tcp 中转后真连接 中转后速度 中转前pubg延迟
东京软银 Trojan 45ms 250ms 6M 无意义 45ms 220ms 7w 75ms左右
东京软银 ss 42ms 250ms 6M 无意义 45ms 220ms 7w

结论

  1. iplc不过墙,但入口审查同样存在,如果只能使用tls加密那么肯定增加延迟。
  2. 想要更低延迟就需要入口机和落地机配合,专线入口越近越好。对于出口来说深港的落地最好是国际互联好的香港机,苏日最好就是出口机器本地地区且国际互联好的机器。
  3. 实际使用的时候延迟有波动,且丢包有点多,单纯转发并不稳定,如果游戏是基于udp可能会好点。
  4. 等有机会试试nat机,相对来说可能好点。

如何让静态博客响应更快

0x00 背景

粗略的记录一下从各个方面让博客有更快的响应速度

0x01 基本知识

一次HTTP的请求过程示例:

用户在浏览器输入luyublog.com后浏览器处理流程(简略版本,不考虑具体交互)

  1. 浏览器查询本地DNS缓存获取luyublog.com的IP,若没有则查询操作系统DNS缓存,若还没有则请求公共DNS服务器(114,阿里等)
  2. 获取到网站IP地址后通过TCP建立连接
  3. 通过HTTP协议进行报文交互

0x02 可能的优化点

了解基本流程后就可以一步步进行优化,例如:

  1. 用户浏览器DNS解析步骤
  2. TCP连接建立过程
  3. 服务器处理速度

DNS解析优化

DNS解析优化的关键点有两个:

  1. 解析速度
  2. 解析到最合适的IP地址(如果你有多个服务器)

DNS解析速度

若本地DNS缓存没有命中的话,DNS解析本质上还是HTTP请求,所以理论上国内的DNS服务肯定是优于国外的,国内出名的有DNSPOD,国外的有CloudFlare。具体要用哪个需要自行判断。

DNS智能解析(前提:有多IP)

DNS智能解析的意思是将域名解析到最合适的服务器IP上,例如距离用户最近的服务器或响应最快的服务器,智能解析这部分主要有:

  • 地域解析(GEODNS)
  • 运营商线路解析
  • 任播(AnyCast)

DNS地域解析(GEODNS)

  • 前提:有多服务器IP 其中1.1.1.1位于亚洲 2.2.2.2位于美洲
  • 例子:若亚洲用户访问luyublog.com则通过GEODNS将域名解析到1.1.1.1,美洲用户解析到2.2.2.2

通过DNS将用户解析到其最近的服务器上,理论上就会缩短网站服务的响应时间,毕竟物理距离摆在那。国内很多免费DNS解析商都提供这项功能,国外免费的目前只发现gcore提供,ns2貌似也有(但感觉容易被付费)。

DNS运营商线路解析

  • 前提:有多服务器IP 其中1.1.1.1服务器移动线路友好 2.2.2.2电信线路友好
  • 例子:若移动用户访问luyublog.com则将域名解析到1.1.1.1,电信用户解析到2.2.2.2

举个例子,如果你的服务器1.1.1.1线路是移动直连,联通电信入网绕路。2.2.2.2电信直连,移动绕路,那么就可以将移动用户解析到1.1.1.1。电信,联通用户解析到2.2.2.2

如果服务器在国内这项功能基本用不到因为都差不多,但是在国外的话就有些用了,因为晚高峰除了像CN2,9929,CMI这些高级线路,国际普通线路丢包率和延迟普遍都高。

这项功能大型DNS服务商貌似都有但国外没看到免费的,国内的话,大厂DNS都提供。

DNS任播(AnyCast)

  • 前提:有多服务器IP 其中1.1.1.1位于亚洲 2.2.2.2位于美洲
  • 介绍:详情可以自行搜索,简单来说就是利用网络拓补结构,通过算法寻找到最合适的特定节点(综合考虑地理位置,服务器状态,线路质量等),根据老外测试加速效果和GEODNS差不多GeoDNS vs Anycast

这个国外没找到免费的。

服务器连接线路优化

上面说完DNS解析拿到服务器IP,下面记录从浏览器到服务器建立连接过程优化,如果是国内的服务器就别看了,基本用不上。

国外服务器到国内是有线路区别的,晚高峰国内入口必然会拥堵,所以尽量选择线路好一点的服务器或者使用CDN加速。

优质线路

  • 联通9929
  • 移动CMI
  • 电信CN2

CDN加速

CDN详细解释自行搜索,用上CDN后对网站响应,对服务器负载和带宽都有好处,这里还是说说免费的,国外出名的有Cloudflare,但是在国内效果不稳定。国内的CDN服务需要网站先备案。这里就不讨论了。

服务器处理优化

优化服务器处理之前首先得弄明白http请求到达服务器后的流程,这里大概归结为:http请求->缓存->内容->返回,所以这部分可以优化的部分大致为

  • cpu(INTEL,AMD)
  • 内存
  • 磁盘(NVME,SSD,HDD)
  • 缓存

对于前三样没什么好说的,好的CPU,内存和磁盘必然更快,一分钱一分货。下面说一下软件层面的优化,主要就是负载均衡和缓存。

负载均衡

这里说的负载均衡只是用在服务器响应方面的,完整的负载均衡是个很大的概念,
简单来说就是通过一定的策略让用户更好的被服务,让服务器保持一致性,可用性。详细的解释可以自行搜索一下,这里介绍一些负载均衡的实现:

缓存

这里的缓存主要指的是请求发到nginx再到获取内容后返回。其中优化点主要就是nginx缓存,具体细节可以看看这篇文章

0x03 最后补充

这里介绍的方法只是针对静态博客而言,建议根据自身网站特性针对性优化。

参考:

butterfly主题页面加载缓慢

0x00 起因

 最近打开博客发现加载的贼慢,于是F12查看了一下:发现这两个css加载时间竟然要14s,太离谱了。
 通过域名看了下请求地址,看到cdn.jsdelivr猜到应该是jsdelivr的缓存被阻断,搜了一下果然是这样,最快的方法是将cdn.jsdelivr.net替换成fastly.jsdelivr.net。

0x01 cdn.jsdelivr.net的替换

 想要修改肯定先要知道是哪里调用的,好在都是开源软件可以直接分析源码。
 先后在github下载了hexo和butterfly的源码,最后在butterfly源码的/scripts/events/路径下的cdn.js文件内找到了cdn.jsdelivr.net的定义,分析了下因为是全局定义,所以直接将其修改为fastly.jsdelivr.net就行
 若是linux服务器部署的也是一样,进入butterfly目录修改即可。
 若以后fastly.jsdelivr.net也有问题那就只能改成本地引用了。

nginx安全性配置

nginx安全性配置

偶然看到一篇文章谈到nginx配置安全性,然后搜索了一下,GitHub找到一个挺不错仓库,就不用自己总结了。
对比了下,和使用nginx配置在线生成网站生成的差不多,也不用改什么,nice

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 作者博客 http://tautt.com/best-nginx-configuration-for-security/

# 不发送Nginx版本号
server_tokens off;

# 不允许浏览器在frame或iframe中显示页面
# 避免 点击劫持(clickjacking) http://en.wikipedia.org/wiki/Clickjacking
# 如果需要允许 [i]frames, 你可以用 SAMEORIGIN 或者用ALLOW-FROM uri 设置单个uri
# https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
add_header X-Frame-Options SAMEORIGIN;

# 服务用户提供的内容时, 包含 X-Content-Type-Options: nosniff 头选项,配合 Content-Type: 头选项,
# 来禁用某些浏览器的 content-type 探测.
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
# 当前支持 IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx
# http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx
# 火狐 '不久'支持 https://bugzilla.mozilla.org/show_bug.cgi?id=471020
add_header X-Content-Type-Options nosniff;

# 启用大部分现代浏览器内置的 the Cross-site scripting (XSS) 过滤.
# 通常缺省情况下已经启用, 所以本选项为为本网站重启过滤器,以防其被用户禁用.
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
add_header X-XSS-Protection "1; mode=block";

# 启用 Content Security Policy (CSP) (和支持它的浏览器(http://caniuse.com/#feat=contentsecuritypolicy)后,
# 你可以告诉浏览器它仅能从你明确允许的域名下载内容
# http://www.html5rocks.com/en/tutorials/security/content-security-policy/
# https://www.owasp.org/index.php/Content_Security_Policy
# 修改应用代码, 通过禁用css和js的 'unsafe-inline' 'unsafe-eval' 指标提高安全性
# (对内联css和js同样适用).
# 更多: http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.zendesk.com; font-src 'self' https://themes.googleusercontent.com; frame-src https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src 'none'";

# 将所有 http 跳转至 https
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name .forgott.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name .forgott.com;

ssl_certificate /etc/nginx/ssl/star_forgott_com.crt;
ssl_certificate_key /etc/nginx/ssl/star_forgott_com.key;

# 启用 session resumption 提高HTTPS性能
# http://vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# DHE密码器的Diffie-Hellman参数, 推荐 2048 位
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# 启用服务器端保护, 防止 BEAST 攻击
# http://blog.ivanristic.com/2013/09/is-beast-still-a-threat.html
ssl_prefer_server_ciphers on;
# 禁用 SSLv3(enabled by default since nginx 0.8.19) since it's less secure then TLS http://en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ciphers chosen for forward secrecy and compatibility
# http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

# 启用 ocsp stapling (网站可以以隐私保护、可扩展的方式向访客传达证书吊销信息的机制)
# http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
resolver 8.8.8.8 8.8.4.4;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/star_forgott_com.crt;

# 启用 HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
# 避免 ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
# 或 https://hstspreload.org/
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

# ... 其他配置
}

用云盘备份hexo

备份

运行环境

  • Ubuntu 20LTS版本
  • 公网ip
  • 有自己域名

0x01 下载阿里云linux客户端

进入opt目录

1
cd /opt

下载安装包

1
wget https://download.fastgit.org/tickstep/aliyunpan/releases/download/v0.2.1/aliyunpan-v0.2.1-linux-amd64.zip

安装解压工具

1
apt install unzip

解压

1
unzip aliyunpan-v0.2.1-linux-amd64.zip

重命名文件夹

1
mv aliyunpan-v0.2.1-linux-amd64/ aliyunpan/

0x02 登录

进入aliyunpan目录并运行

1
2
cd aliyunpan/
./aliyunpan

通过token登录

1
2
login -RefreshToken=你的RefreshToken值  # 登录
exit # 退出

RefreshToken值获取方法

0x03 备份准备

创建备份文件

1
2
cd /opt
vim blogBackup.sh

复制下面的备份脚本进入文件

  • 注意看命令后的备注,需要提前创建一些目录
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/bash
    # -------------------------------------------------------------------------------
    # FileName: blogBackup.sh
    # Describe: Used for blog backup
    # Revision: 1.0
    # Date: 2022/09/21
    # Author: luyublog
    WEB_PATH=/root/blog/source # 要备份的目录
    ALIYUNPAN_PATH=/www/blogBackup/ #阿里网盘内的文件夹路径 提前创建好
    BACKUP_DIR=/opt/blog/backup #备份到哪个目录 提前创建好
    DATE=`date +%Y%m%d%H` #时间
    # 删除本地备份数据(删除7天以前的备份数据)
    echo "正在删除7天以前的本地博客备份数据!!!"
    find $BACKUP_DIR -mtime +7 -type f -name '*.tar.gz' -exec rm -rf {} \;
    # 备份博客源文件目录
    echo "删除成功,正在备份博客数据!!!"
    tar zcPf $BACKUP_DIR/BLOG_${DATE}.tar.gz $WEB_PATH
    # 调用aliyunpan上传备份的文件
    echo "备份成功,上传云盘"
    /opt/aliyunpan/aliyunpan upload $BACKUP_DIR/BLOG_${DATE}.tar.gz $ALIYUNPAN_PATH

保存退出后执行看看能不能运行

1
bash blogBackup.sh 
  • 这里多说一句,如果你是先把代码复制到windows环境下再导入到linux机器里的话会执行失败
    建议看下这篇文章

0x04 定时执行

设置定时任务

1
vim /etc/crontab

把以下内容复制到最后一行

1
2
#每天早上2点执行备份脚本
0 2 * * * root /opt/blogBackup.sh > /opt/blogBackup.log 2>&1 &

保存退出后重启一下cron

1
service cron restart

恢复

最后说一下恢复。把hexo、nginx重新安装好,然后把备份文件下载好后解压到博客source文件夹下即可

参考链接
参考博主博客

hexo常用配置

0x00 背景

接上一篇安装流程,这篇记录下具体文章配置,例如预览图,背景图,标签和简介等

0x01 front-matter例子

front-matter是文章的简介,加在md文档的最前面,用之前最好看看官方文档或者百度一下
下面提供一个常用的front-matter的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---  # 记得这三道杠也要加上
title: hexo自建经验1 # 这是简介标题
date: 2022-09-17 # 创建日期
updated: 2022-09-17 # 更新日期
tags: [博客,hexo] # 标签(详见下方)
categories: # 分类
- [博客]
- [hexo]
top_img: # 文章详情顶部照片
keywords: [博客,hexo,常用模板] # 关键词
comments: true # 是否显示评论
cover: imgs/0917.png # 首页显示的图片
description: 常用文章头模板 # 首页显示的简介
--- # 三道杠不要忘记了

0x02 图片

如果使用的图片不是外链而是本地图片的话需要在本地先将图片上传
首先在source路径下新建一个图片文件夹专门存放图片文件(绝对路径为/root/blog/source/imgs)

1
mkdir source/imgs

0x02 图片引用

在不同的地方照片的引用方式也不同
对于文章内部,可以使用以下格式

1
<img src="../../../../../imgs/yourFileName.png" alt="hexo" style="width:20%" />

当然还有其他方式,这里只说一个用着方便的,详情可以翻翻官方文档

对于front-matter,间接引用即可,详见0x01 cover的备注

0x03 生成标签

hexo框架内标签需要自己先生成标签目录

1
2
hexo new page tags
vim source/tags/index.md

然后将刚刚生成的index.md内容改为

1
2
3
4
5
---
title: 标签
date: 2022-09-05 00:00:00
type: "tags"
---

0x04 生成目录

目录的生成方式和标签基本一致

1
2
hexo new page categories
vim source/categories/index.md

还是修改index内容

1
2
3
4
5
---
title: 分类
date: 2022-09-05 00:00:00
type: "categories"
---

hexo安装及nginx配置

介绍一下自己安装hexo的过程

运行环境

  • Ubuntu 20LTS版本
  • 公网ip
  • 有自己域名

软件安装

安装nodejs

1
2
$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$ sudo apt-get install -y nodejs

安装git

1
$ sudo apt-get install git-core -y

安装hexo

1
$ npm install -g hexo-cli

在root目录下新建blog文件夹

1
2
$ mkdir blog
$ cd blog/

初始化hexo环境并启动

1
2
3
$ hexo init
$ npm install hexo-renderer-pug hexo-renderer-stylus hexo-algoliasearch
$ hexo s
  • 此时若能在浏览器通过公网ip:4000访问则说明ok了

更换主题

一般都会选择一个喜欢的主题,本例选用butterfly

从github克隆第三方主题,保存到:blog/theme/主题名

1
2
$ ctrl+C #退出hexo
$ git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly

配置 blog/_config.yml文件

1
$ vim _config.yml

将文件内的theme的值改为butterfly
例:theme: butterfly

重新生成

1
2
3
$ hexo clean  # 清空缓存 
$ hexo g # 重新渲染
$ hexo s