Git 安装与配置

参考

Windows 安装Git

安装Git

  1. 下载Git安装包,下载地址,Git-2.47.1-64-bit.exe
  2. 运行安装包,选择对应配置,安装即可。建议修改默认安装位置,如改为D:\software\profession\Git

安装Git的可视化工具

  1. 下载TortoiseGit安装包,如TortoiseGit-2.17.0.2-64bit.msi
  2. 运行安装包,选择对应配置,安装即可。建议修改默认安装位置,如改为D:\software\profession\TortoiseGit
  3. 安装TortoiseGit语言包,如TortoiseGit-LanguagePack-2.17.0.0-64bit-zh_CN.msi

配置Git远程仓库身份认证

  1. 生成SSH密钥对
    1. 打开Git Bash,执行ssh-keygen -t rsa -b 4096
      • -t:密钥类型,这里选择RSA
      • -b:密钥长度,这里选择4096(默认2048)
  2. 创建Putty 密钥
    1. 打开PuttyGen,点击Generate,随意移动鼠标,直到生成密钥。
    2. 记录生成的RSA公钥,例如
      1
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKFkWEBCEBXIBe0xDZS+3RCmgmXKL0/kJC/eqrx169Y7oSp5K/koXlQylS//98ByjBWgnDSBiIJBSStK+Oc9W+um7l/BZziofutMvQJuhOaG3cx6iAXrvrkX7fn+RH95ooSVunOvUph6/YAHzG8Os+WYDBO5PbhLWDLwn5Ut7fNLy1v2aEk/5+O5yt0GMQPCslZ9lom7/rA1R3RfkSvkN/Xm/5ngu+S5s28HbX7ge4sSx9E1XcqwF/R4p406uMPBEfIFIE0m1axgY3Tz2NdEPW6LSvgU360KBifHJ5DEt+IRbiZFjLVOI2NvC0PNFjeKLcmlWg/2WtMD3JM02LLbrd rsa-key-20250108
    3. 点击Save private key保存生成的私钥。
  3. Git仓库配置公钥
    1. 登录远程仓库,点击Settings,找到SSH and GPG keys,点击New SSH key,输入Title,粘贴生成的RSA公钥,点击Add SSH key
    2. 配置Git仓库公钥
    3. 本地TortoiseGit拉取和推送时,选择使用的私钥即可。

Gitea 安装与配置

Docker 安装Gitea

  1. 安装docker
  2. 安装Docker Compose
  3. 编写Docker Compose配置文件
    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
    services:
    gitea:
    image: gitea/gitea:1.23.7
    container_name: gitea-gitea
    environment:
    - GITEA__database__DB_TYPE=mysql
    - GITEA__database__HOST=db:3306
    - GITEA__database__NAME=gitea
    - GITEA__database__USER=gitea
    - GITEA__database__PASSWD=gitea
    volumes:
    - ./data:/var/lib/gitea
    - ./config:/etc/gitea
    - /etc/timezone:/etc/timezone:ro
    - /etc/localtime:/etc/localtime:ro
    ports: # 映射容器的端口到主机的端口 网页是3000端口
    - "2222:22"
    depends_on:
    - db

    db:
    image: mysql:8.0
    container_name: gitea-mysql
    environment:
    - MYSQL_ROOT_PASSWORD=gitea
    - MYSQL_USER=gitea
    - MYSQL_PASSWORD=gitea
    - MYSQL_DATABASE=gitea
    volumes:
    - ./mysql:/var/lib/mysql
  4. 运行Docker Compose 创建容器
  5. 开放服务器对外的相关端口,Docker Compose中映射端口:2222

Hexo 添加ICP备案信息

参考

按照_config.yml文件中使用的主题theme添加ICP备案信息。

landscape主题添加ICP备案信息:Git地址

  1. 找到theme/landscape/layout/_partial/footer.ejs文件。
  2. 直接写入HTML代码,如<a href="http://beian.miit.gov.cn/" target="_blank">粤ICP备12345678号-1</a>

公安联网备案

网站/App已完成ICP备案需要在开通网站/App之日起的30日内提交公安联网备案申请。

ECS 安全组设置

参考

什么是安全组?

  • 简单的讲,你通过设置安全组,允许或拒绝特定IP地址通过指定的协议类型访问你服务器上的指定端口
  • 安全组由IP地址协议类型端口范围,授权策略,优先级等组成。

安全组设置

  • IP地址: 0.0.0.0/0表示允许所有IP访问。122.239.0.0/16表示允许122.239.0.0122.239.255.255的IP访问。
  • 协议类型: TCP表示允许TCP协议访问,UDP表示允许UDP协议访问,ICMP表示允许ICMP协议访问,GRE表示允许GRE协议访问,ALL表示允许所有协议访问。
    • TCP:适用于需要准确无误地传输数据的应用,如文件传输、电子邮件等。 是一种面向连接的协议,提供了可靠的通信服务。它通过三次握手建立连接,并使用确认机制、序列号等确保数据按顺序无误地到达接收方。
    • UDP:适用于需要快速传输数据的应用,如视频直播、音频广播等。 它是无连接的协议,不需要建立连接,直接发送数据包。它没有确认机制,因此数据可能会丢失或乱序。
    • ICMP:主要用于网络管理工具中,比如ping,用于检测网络连通性和路由路径。互联网控制消息协议。它主要用于在IP网络中发送控制消息,报告错误情况或提供有关数据包处理的信息。例如,当一个路由器无法转发某个数据包时,它可能会发送一个ICMP消息给源主机来通知这种情况。最常见的ICMP应用就是“ping”命令,用于测试两个节点之间的连通性。
  • 端口范围: 80/80表示允许80端口访问,80/90表示允许80到90端口访问。
  • 授权策略: 拒绝表示拒绝访问,允许表示允许访问。
  • 优先级: 1表示最高优先级,100表示最低优先级。高级的优先级将覆盖低级别的优先级。

SSL 证书获取

参考

Certbot 免费申请证书

安装Certbot

  1. sudo apt install certbot 安装Certbot
  2. certbot --version 查看版本,验证是否安装成功。

申请证书

  1. certbot certonly -d *.exwckv.top -w /var/www/html --manual --preferred-challenges http 获取域名证书
    • certonly 这个选项告诉Certbot你只需要获取或者更新证书,并不会自动安装它到你的web服务器配置中。
    • -d 指定域名 如*.baidu.com
    • -w 指定了你的网站根目录的位置,Certbot 将在这个目录下创建用于验证的文件。
    • --manual 指定手动模式,手动模式下,Certbot不会自动安装证书到你的web服务器配置中。
    • --preferred-challenges 指定验证方式包括httpdns
      • 注意:对于通配符域名(如 *.example.com),Let’s Encrypt 要求必须使用 DNS 验证而不是 HTTP 验证。
      • http 在这种方式下,Certbot会在你的服务器上创建一个特定的文件,并通过Web服务器使该文件可通过互联网访问。
      • dns 需要在你的域名DNS配置中添加一条TXT记录,包含由Let’s Encrypt提供的特定值。ACME服务器将检查这条TXT记录以验证域名的所有权。
  2. 填写相关选项
    1. 请求你的电子邮件地址,以便用于接收关于证书续订的重要通知和安全警告。
      1
      2
      3
      Saving debug log to /var/log/letsencrypt/letsencrypt.log
      Enter email address (used for urgent renewal and security notices)
      (Enter 'c' to cancel):
    2. 要求你阅读并同意 Let’s Encrypt 的服务条款(Terms of Service)。
      1
      2
      3
      Please read the Terms of Service at
      https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
      order to register with the ACME server. Do you agree?
    3. 询问你是否愿意在首次成功颁发证书后,与电子前哨基金会(Electronic Frontier Foundation, EFF)分享你的电子邮件地址。
      1
      2
      3
      4
      5
      Would you be willing, once your first certificate is successfully issued, to
      share your email address with the Electronic Frontier Foundation, a founding
      partner of the Let's Encrypt project and the non-profit organization that
      develops Certbot? We'd like to send you email about our work encrypting the web,
      EFF news, campaigns, and ways to support digital freedom.
    4. 询问你希望通过哪种方式验证你对域名的控制权。How would you like to authenticate with the ACME CA?
      1. Spin up a temporary webserver (standalone)
        • 临时启动一个独立的 Web 服务器来响应 ACME 挑战。Certbot 会在你的机器上运行一个短期的 Web 服务器,并通过 HTTP 请求来完成挑战。这种方式适合于你的主 Web 服务器暂时不可用或者你不想修改现有 Web 服务器配置的情况。
        • 选择这个选项时,请确保端口 80(HTTP)没有被其他服务占用,因为 Certbot 需要短暂地接管该端口以完成验证过程。
      2. Place files in webroot directory (webroot)
        • 使用这种方法,你需要指定 Web 根目录的位置,Certbot 会在该目录下创建特定的文件,这些文件可通过 HTTP 访问路径进行访问,从而完成验证。这是比较常用的方法,特别是当你已经有一个正在运行的 Web 服务器并且不想中断服务的时候。
        • 你需要使用 -w 参数指定 Web 根目录,例如 -w /var/www/html,并使用 -d 参数指定需要验证的域名。
  3. 手动验证域名-Http验证
    1. 创建一个文件,该文件仅包含提供的数据,并将此文件放置在你的Web服务器上的特定URL位置。
      1
      2
      3
      4
      5
      6
      7
      Create a file containing just this data:

      xbP5jPl0lCcHk9CwIuMHErNgzZLO7gkZW0qkx9eebu8.Hyfc0w7fKRo-pnunS5a6lVlFTD-ndUcDOpe0DOXJWmc

      And make it available on your web server at this URL:

      http://exwckv.top/.well-known/acme-challenge/xbP5jPl0lCcHk9CwIuMHErNgzZLO7gkZW0qkx9eebu8
      1. .well-known/acme-challenge/xbP5jPl0lCcHk9CwIuMHErNgzZLO7gkZW0qkx9eebu8Web 服务器根目录下文件夹地址
      2. 在文件夹下创建index.html 然后写入xbP5jPl0lCcHk9CwIuMHErNgzZLO7gkZW0qkx9eebu8.Hyfc0w7fKRo-pnunS5a6lVlFTD-ndUcDOpe0DOXJWmc
      3. 访问http://exwckv.top/.well-known/acme-challenge/xbP5jPl0lCcHk9CwIuMHErNgzZLO7gkZW0qkx9eebu8查看是否正确显示写入内容。
  4. DNS验证
    1. 部署一个DNS TXT记录以完成验证。域名解析
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      Please deploy a DNS TXT record under the name:

      _acme-challenge.exwckv.top.

      with the following value:

      gMM67dcK2mpFtof3MQmCpCFkw8V60PEK1ehknKH8BD8

      Before continuing, verify the TXT record has been deployed. Depending on the DNS
      provider, this may take some time, from a few seconds to multiple minutes. You can
      check if it has finished deploying with aid of online tools, such as the Google
      Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.exwckv.top.
      Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
      value(s) you've just added.
    2. 登录域名控制台,设置_acme-challenge.exwckv.top域名,记录类型为TXT,记录值为gMM67dcK2mpFtof3MQmCpCFkw8V60PEK1ehknKH8BD8

自己生成证书

自签名证书不被信任,仅限于开发/内部使用,使用时记得手动

  1. openssl version 安装检查OpenSSL
  2. openssl genpkey -algorithm RSA -out private.key -aes256 生成私钥,用于签署证书 -aes256 加密(测试情况建议不加)
  3. openssl req -new -key private.key -out certificate.csr 生成证书请求文件 -config ./openssl.cnf 使用Openssl配置文件
  4. openssl x509 -req -days 365 -in certificate.csr -signkey private.key -out certificate.crt 生成证书文件

Openssl配置文件

openssl.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no

[ req_distinguished_name ]
C = CN # 国家代码,如中国为CN
ST = Zhejiang # 省/直辖市
L = Wenzhou # 城市
O = Person # 组织名
OU = Person # 组织单位
CN = 114.55.144.224 # 公共名称,这里可以是IP地址或域名

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 114.55.144.224 # 指定IP地址
# 如果你有多个IP地址或域名,可以继续添加
# IP.2 = 192.168.1.1
# DNS.1 = example.com

网络模式

参考

域名解析是什么?

  • 域名解析是将人类可读的域名转换为计算机可识别的IP地址的过程。
  • 比如你要访问一个网站www.baidu.com,你访问网站实际上是访问网站所在的服务器的IP地址。但是IP地址不方便记忆,域名解析就是将域名转换为IP地址的过程。

域名服务器

根据域名服务器所起到的作用,可以把域名服务器分为不同的类型。

  • 根域名服务器:负责查询.地址,实际上每个网址后面都有个.不过被省略了。根域名服务器是DNS服务器的根节点,是所有域名服务器的父节点,它负责管理DNS服务器的根域名。
    • 知道顶级域名服务器的域名和 IP 地址。
    • 当其他的域名服务器无法解析域名时,会首先求助于根域名服务器。
  • 顶级域名服务器(TLD):负责查询.com.net.org等顶级域名的解析。
  • 权威域名服务器:负责查询baidu.com,qq.com的解析。管理各种的主机域名的解析。
  • 本地DNS服务器: 负责查询本地的域名的解析。就是你之前查询过网址对应的IP后,存在本地提供查询的结果。

域名解析过程

  1. 那在浏览器中输入一个网址,比如www.baidu.com,浏览器会首先去本地的DNS服务器查询这个网址的解析结果。
  2. 本地服务器不知道,本地服务器去请求根服务器。
  3. 根服务器说:这地址我不知道,但是这域名的com的,com域名服务器肯定知道。它的IP地址是xxx.xxx.xxx.xxx
  4. 本地服务器去请求com域名服务器。
  5. com域名服务器说:这地址我不知道,但是这域名的baidu.com的,baidu.com域名服务器肯定知道。它的IP地址是xxx.xxx.xxx.xxx
  6. 本地服务器去请求baidu.com域名服务器。
  7. baidu.com域名服务器说:它的IP地址是xxx.xxx.xxx.xxx
  8. 层层递归,直到找到最终的IP地址,返回给浏览器。本地服务器拿到IP地址后,就会把这个结果缓存起来,下次再查询这个网址的时候,就会直接从本地的DNS服务器中查询。
    • 缓存时间:TTL(Time To Live),即缓存时间,单位为秒。建议运维时设置1分钟,平时设置10分钟。
    • 因为域名对应的IP地址会经常变化,所以要设置一个缓存时间,当缓存时间到了,再收到请求就要重新查询域名的解析结果。

域名解析设置(阿里云)

  • 主机记录:就相当于你配置的域名,例如那主域名是是baidu.com
    • www:表示域名 www.baidu.com
    • @:表示域名 baidu.com
    • *:表示域名 *.baidu.com
    • abc:表示域名 abc.baidu.com 二级域名
    • www.abc:表示域名 www.abc.baidu.com 多级域名
  • 解析请求来源(ISP):就是哪里发起的请求,那个地区的,那个运营商的。
  • 记录类型:就是最终把这个域名的解析成什么类型的东西,比如IPv4地址(一般情况)类型,其他域名类型等等
  • 记录值:这个就是最终的解析结果,比如IP地址,其他域名等等。
  • TTL:就是缓存时间,单位为秒。建议运维时设置1分钟,平时设置10分钟。

网络模式

NAT网络

  • NAT(Network Address Translation),网络地址转换,将一个网络中的IP地址转换成另一个网络中的IP地址,从而实现网络间通信。
    1. 举例说明:你家里接入里网络,分配到了一个网络地址:36.28.137.45
    2. 但是你家里有很多网络设备,每个人的手机,电脑等等。一个IP地址只能被一个设备使用,如果多台设备都使用这个IP地址,那么路由器怎么知道应该把消息发给哪个设备呢?
    3. 首先我们要区分这些设备,给每个设备一个在我们家庭中唯一的标识。192.168.1.10,192.168.1.11,192.168.1.12这样,我们用这样的唯一标识来区分这些设备。这就是我们在局域网中分配的IP地址。
    4. 但是私网IP不能访问网络,访问网络还是要公网IP,那么怎么解决呢?
    5. 假设192.168.1.10:123要访问网络,我们路由器使用36.28.137.45:10123访问网络。36.28.137.45:10123收到网络的消息后,就将把消息转发到192.168.1.10:123。同理,192.168.1.11:123要访问网络,我们路由器使用36.28.137.45:10124访问网络。36.28.137.45:10124收到网络的消息后,就将把消息转发到192.168.1.11:123
    6. 这样,我们局域网中的设备就可以通过36.28.137.45访问网络了。
  • 桥接(Bridge)
  • 相当于在现有网络中添加了一台新的独立计算机。
  • 你电脑虚拟机网络模式选择桥接,虚拟机相当于直接插在路由器上,虚拟机和宿主机的地位是平等的。