侧边栏壁纸
博主头像
KLCode

水到绝处是风景,人到绝处是重生

  • 累计撰写 24 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

博客部署_备忘

重要的事放在最前面讲:如果域名解析后,IP+端口访问网站出现 689 访问页面,说明你没有备案,国内服务器未备案无法正常访问,反向代理后也无法访问,页面加载好慢。原因是服务商对流量进行了限制,需要等到备案通过后一天,才能开放流量,所以,早点备案,先用HTTP+IP+端口,再捣鼓反向代理

购买轻量级应用服务器

  • 在服务器实例中,可查看服务器 用户名、密码,修改密码后重启服务器
  • 安装MobaXterm
  • 打开MobaXterm 新建session
    • remote host:公网IP
    • Specifity username:右边新建用户,输入服务器的用户名和密码,完成后下拉框选择对应的用户
    • 选择完成,连接时,还需要输入服务器密码,连接

服务器上docker部署halo

系统:CentOS 7.6

环境:Linux、docker

版本:Halo v2.19

安装必要的包

首先,你需要安装一些必要的系统包,以确保安装过程顺利。打开终端并执行以下命令:

sudo yum install -y yum-utils

添加Docker仓库

接下来,你需要设置Docker的官方仓库,镜像源使用阿里云的镜像源。执行以下命令来添加Docker仓库:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker

使用yum命令安装Docker:

sudo yum -y install docker-ce docker-ce-cli containerd.io

启动Docker服务

安装完成后,启动Docker服务,设置为开机自启动:

sudo systemctl start docker
sudo systemctl enable docker

验证安装

验证Docker是否正确安装并运行,可以运行以下命令来检查Docker版本:

docker --version

下载Halo v2.19镜像

docker pull halohub/halo:2.19

报错Error response from daemon: Get "https://registry-1.docker.io/v2/",需要扩展镜像源

解决方案:

sudo vim /etc/docker/daemon.json

按i进入INSERT模式,将下面这段代码复制进去,esc后,输入:wq 退出保存

{
  "registry-mirrors":
  [
    "https://docker.m.daocloud.io/",
    "https://huecker.io/",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru/",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn",
    "https://9skwuhnf.mirror.aliyuncs.com",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

重新加载文件:

systemctl daemon-reload

重新启动Docker:

systemctl restart docker

重新下载镜像

docker pull halohub/halo:2.19

创建容器

docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 halohub/halo:2.19

检查服务器 安全规则,端口是否开启,否则无法访问

检查halo容器日志,确保halo服务启动成功

docker logs halo

部署完成,通过下述地址访问halo初始化页面

http://云服务器公网IP地址:8090/console

备份/恢复博客

  • 插件定时自动备份
  • 手动后台备份,并下载备份到本地,记住博客版本号 V2.19,主题 Joe 3

域名注册和域名解析

  • 域名注册:
    • 在平台中购买域名
    • 域名证书下载,域名实名审核
  • 配置域名解析
    • 创建A记录,IP指向服务器公网,并启用解析

此时访问域名+端口号,能正常访问。

https:SSL加密证书

我希望网站更安全,采用https访问。首先,华为云每个账号会送 20 次免费测试SSL证书申请有效时间3个月,过期了更换就可以了

如何申请测试证书

云证书管理服务 -> SSL证书管理 -> 测试证书 -> 创建测试证书

证书选用 DNS验证,默认密钥算法 选2048,兼容性好

DNS验证

意思就行需要在域名解析中添加记录集,用于DNS解析,直接验证就行,平台会自动添加记录集

下载并上传SSL证书到服务器

下载的文件包涵盖了 Apache/Nginx/Tomcat 等服务器类型证书,这里我们选用 Nginx证书, Nginx配置文件添加证书路径即可,比如 /etc/nginx/ssl

配置Nginx,实现反向代理

我希望 url 尽量简单,且达到服务器IP、端口隐藏的目的,需要给项目增加反向代理。

目前网上的实现方案有两种:

  • 宿主机上直接安装 Nginx
  • Docker容器部署,创建 Nginx 容器

灵魂发问:Nginx安装在宿主机上和部署在docker容器中,有什么区别?

  • 部署在docker容器
    • 安全隔离
    • 解决多版本共存问题
    • 有动态扩容、缩容需求时
    • 零宕机更新
  • 直接安装在宿主机
    • 简单快速,只需要修改配置文件,并启动 nginx 服务

总体来说,部署在docker,适合应对更复杂的标准化需求和零容错场景;安装在宿主机适用于简单场景。

由于我的项目比较简单,所以采用直接在宿主机上安装Nginx

宿主机安装Nginx

安装 Nginx
sudo yum install -y nginx

启动Nginx并设置开机自启

sudo systemctl start nginx
sudo systemctl enable nginx
修改Nginx配置文件‌

一般安装 nginx 后,路径在 /etc/nginx/nginx.conf

user  nginx;     # 运行 Nginx 的用户和组
worker_processes  2;     # 工作进程数,通常设为 CPU 核心数

error_log  /var/log/nginx/error.log warn;     # 错误日志路径和级别
pid           /var/run/nginx.pid;     # 主进程 PID 文件路径


events {
  worker_connections  65535;   # 每个工作进程的最大连接数
}


http {
  include       /etc/nginx/mime.types;   # 每个工作进程的最大连接数
  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';    # 日志格式

  access_log  /var/log/nginx/access.log  main;

  sendfile        on;
  #tcp_nopush     on;

  keepalive_timeout  65;

  #gzip  on;  # 启用 gzip 压缩
  #gzip_types text/plain text/css application/json application/plain text/xml application/xml application/xml+rss text/javascript;  # 压缩的文件类型

  #include /etc/nginx/conf.d/*.conf;

  # HTTP 80 端口的 server 块
  server {
    listen 80;
    listen [::]:80;
    server_name klcode.site www.klcode.site; # 你的域名
    return 301 https://$host$request_uri; # 强制跳转HTTPS
  }

  # HTTPS 443 端口的 server 块
  server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name klcode.site www.klcode.site; #你的域名

    location / {
      proxy_pass http://localhost:8090;  # 反向代理到容器

      # 设置HTTP头部信息
      proxy_set_header Host       $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }

    ssl_certificate      /etc/nginx/ssl/klcode.site.crt;  # SSL 你的证书路径
    ssl_certificate_key  /etc/nginx/ssl/klcode.site.key;  # SSL 你的私钥路径

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
  }
}

编辑完之后,因为更改了配置,我们需要停止 nginx

sudo systemctl stop nginx

同时,**测试下配置文件的语法,是否正确,**这一步很重要

sudo nginx -t

关键输出‌:

  • 若显示 syntax is oktest is successful,说明语法正确。
  • 若显示错误(如 emerg ...),会直接提示错误位置(‌精确到行号‌)。

确认语法没问题后,重新启动 nginx,加载配置

sudo systemctl restart nginx
sudo systemctl reload nginx

docker容器部署

拉取 Nginx 镜像
docker pull nginx:lastest
docker pull nginx:alpine  #这个镜像更小一点
创建nginx容器‌

挂载配置文件并绑定端口,添加ssl:

docker run -d 
--name halo-nginx
-p 80:80 
-p 443:443 
-v $(pwd)/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf 
-v $(pwd)/nginx/ssl:/etc/nginx/ssl nginx:alpine

# docker run -d --name halo-nginx -p 80:80 -p 443:443 -v $(pwd)/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf -v $(pwd)/nginx/ssl:/etc/nginx/ssl nginx:alpine

安全组规则与服务器防火墙

服务器实例中,安全组规则是第一道防线,服务器防火墙是第二道防线,防火墙默认是关闭的

刚开始,我认为这应该算是扩展学习内容,但以后就知道,防火墙能教做人,网页无法访问,不管什么,先验证安全组规则和防火墙

安全组规则

安全组规则,该配置哪些?如下,有另外需求的自行添加。不理解的话补一补网络基础,真的很重要!!

入站规则‌

协议类型IP版本来源地址说明
TCPIPv480,443,80900.0.0.0/0允许IPv4的HTTP流量
TCPIPv680,443,8090::/0允许IPv6的HTTP流量
ICMPIPv4全部0.0.0.0/0允许外部使用ping命令验证安全组内实例的网络连通性
ICMPIPv6全部::/0

出站规则

通常默认就行了

服务器防火墙

注意:如需加固安全,可以选择以下步骤开启防火墙和端口,学习下就好

如果需要开启防火墙,必须保证安全组规则和防火墙的开放端口一致

不同系统防火墙指令不同,我这是 Centos,希望跨平台通用,可以安装学习 ufw(跨平台防火墙管理工具)

都是血与泪的坑呀

检查防火墙是否运行

sudo firewall-cmd --state
  • 未运行,则启动防火墙并自启动:
sudo systemctl start firewalld          # 启动防火墙
sudo systemctl enable firewalld         # 设置开机自启
  • 运行,则查看当前防火墙规则:
sudo firewall-cmd --list-services

如果输出结果为:dhcpv6-client ssh,说明未开放 http、https,需要 开放http、https,反之跳过

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

检查具体开放的端口

sudo firewall-cmd --list-ports

正常情况下,80端口,443端口应该开放,没输出则需要手动添加端口

# 永久性开启
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --reload

记住 reload 很重要

扩展:防止SQL注入、XSS攻击

ModSecurity:开源Web应用防火墙(WAF),支持SQL注入、XSS、CSRF等攻击拦截

Nginx:高性能Web服务器,通过模块化扩展实现WAF功能‌

实现步骤:*ModSecurity+Nginx

以后再补充吧,暂时没必要这么安全,如果我补了,那肯定是吃亏了。。。

参考链接:

nginx.conf配置文件

0

评论区