从零到一快速搭建个人博客网站(域名备案 + https免费证书)

news/2024/5/10 2:49:30/文章来源:https://blog.csdn.net/mxw2552261/article/details/114301385

作者:yangwqonly

cnblogs.com/winkin/p/14135677.html

前言

为什么选择搭建个人博客?一方面是各个平台经常下架原创文章,另一个方面是为了熟悉整个建站流程。

通过搭建个人博客,我们可以自由的发表文章不用担心下架,而且可以锻炼个人的SEO优化能力,不管是运维还是运营这块对个人的技术提升有着很大的帮助。

本篇文章记录了网站从零到一的过程,希望你也能根据本篇文章搭建出属于自己的网站。大家有疑问可以一起讨论。

下面开始正题。

环境介绍

资源说明
centosv7.2
docker快速部署项目环境
nginx反向代理,同时配置https证书
halov1.4.2,开源博客项目
Let's Encrypt 免费证书配置https

效果演示

https://yangwq.cn/

前置环境安装

Docker安装

参考:

https://www.cnblogs.com/winkin/p/14083574.html

halo安装

准备halo配置文件

# 下载配置文件到 /home/halo/.halo 目录
curl -o /home/halo/.halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml

修改配置文件,将数据库调整为mysql,默认是h2(可选)

将上面h2的数据库注释,并把mysql的配置打开,注意,需要提前在mysql建立数据库 halodb,相关的数据库表halo会自动生成,如果mysql 和 halo都是容器创建的,这里配置的mysqlip应该是mysql容器内部的ip。

# 查看mysql容器的ip,mysql-prod替换成mysql容器名称或者容器id
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

修改后:

下载并安装halo

# 拉取halo镜像
docker pull ruibaby/halo# 运行halo
# -p 8090:8090 指定宿主机端口与容器端口映射,这里是将宿主机的8090映射到docker的8090
# -v /home/halo/.halo:/root/.halo 挂载halo配置文件,我们在上一步下载了配置文件在宿主机的/home/halo/.halo
docker run --rm -it -d --name halo -p 8090:8090  -v /home/halo/.halo:/root/.halo ruibaby/halo## 查看容器状态,确认halo是否启动成功,如果启动失败需要检查下数据库连接
docker ps# 配置防火墙,注意,阿里云需要同时配置安全组8090端口
# 开放8090端口
firewall-cmd --permanent --add-port=8090/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

正常情况应该如下:

经过上面的步骤创建的halo还不能通过外部ip访问,我们现在配置一个nginx进行代理

nginx安装

# 下载nginx镜像
docker pull nginx
# 启动nginx
docker run -p 80:80 --name nginx -d nginx# 我们需要nginx使用我们自定义的配置,最方便的方法将nginx现在有的配置复制一份到宿主机目录 /home/nginx 
docker container cp nginx:/etc/nginx /home/nginx# 移除我们刚创建的nginx,重新以宿主机配置目录启动
docker stop nginx
docker rm nginx
# 编辑 conf.d 下的default.conf 文件,默认转发到halo端口,ip地址为本机ip
location / {root   /usr/share/nginx/html;index  index.html index.htm;
}
改为,10.0.2.5 为本机ip,通过命令 ip addr 查看,端口是halo的端口:location / {proxy_pass http://10.0.2.5:8090;}# 重新创建nginx
docker run -p 80:80 --name nginx \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-d nginx# 配置防火墙,注意,阿里云需要同时配置安全组80端口
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload# 到这里,我们可以通过ip访问halo了

到这一步如果不能使用ip直接访问,首先确定halo启动成功没,然后查看nginx配置是否正确,最后再检查防火墙和安全组。

域名及网站备案

目前我们只能通过ip访问halo,我们可以通过配置域名进行访问。

首先我们得申请一个域名:

https://wanwang.aliyun.com/domain

申请完成后进行备案:

https://beian.aliyun.com/

备案注意事项:

  • 如果处于异地工作的情况,建议备案地点选择老家,而且手上要有老家的手机号,如果选择异地的话,需要你提供临时居住证之类比较麻烦。

  • 阿里云备案时间在一周左右,一般提交申请会有人找你确认信息,之后按备案流程走就行了。

配置https

一般情况证书是需要购买的,但是也有一些平台提供了免费证书,阿里云也有一年的免费证书,但是阿里云证书只能单个域名使用,如果要通配符证书是需要付费的。而Let’s Encrypt 证书即可以免费申请证书,又支持通配符,是个人开发者的上选。

这里我们通过github项目配置免费证书(也可以手动安装,不过自动安装比较方便,下面两种方式都会提到):

letencrypt-certbot

https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

使用此项目前我们配置一下前置环境:certbot 和 git

安装git

yum install git

安装certbot

# 安装certbot,中间需要输入y确认
yum install epel-release
yum install certbot 
# 查看版本,如果安装正常会显示版本号
certbot --version

申请证书

特别注意的是,这里需要主机把80端口和443端口开放,上面我们已经开放了80端口,这里开放443端口就行了

# 配置防火墙,注意,阿里云需要同时配置安全组443端口
# 开放443端口
firewall-cmd --permanent --add-port=443/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

重要提示:为避免遇到操作次数的限制,加入 dry-run 参数,可以避免操作限制,等执行无误后,再进行真实的 renew 操作

手动安装证书+手动续期

# 申请证书,需要填入你的邮箱和域名, --dry-run 测试使用不会生成证书,我们先用这个命令看是否成功
certbot certonly --email 你的邮箱@qq.com -d *.域名.cn -d 域名.cn --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --dry-run
# 如果没有错误信息,去掉--dry-run真正生成证书
certbot certonly --email 你的邮箱@qq.com -d *.域名.cn -d 域名.cn --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory# 手动续期
certbot renew

安装过程中,需要确认选项,讲一下手动安装的重点:

安装成功后显示:

注意:证书90天后过期,我们手动续期的话比较麻烦,而且每次需要手动去DNS解析列表创建对应的记录,所以推荐下面的自动续期方式

通过apikey 和secret生成证书+自动续期

首先获取api key 和secret:

https://help.aliyun.com/knowledge_detail/38738.html

这种方式其实是利用你开放的api key调用阿里云提供的接口,所以保险起见我们创建一个权限很小的用户就行了。

流程:

  • 为了安全,我们需要先创建RAM用户,配置一个权限小的用户;

  • 给新创建的用户配置 AliyunDNSFullAccess(管理云解析(DNS)) 的权限;

  • 获取apikey 和 secret。

# 新建一个目标,拉取项目
mkdir /home/certbot
cd /home/certbot
git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
cd certbot-letencrypt-wildcardcertificates-alydns-au
chmod 0777 au.sh# 编辑au.sh,加入我们上面申请的key
vi au.sh#填写阿里云的AccessKey ID及AccessKey Secret
#如何申请见https://help.aliyun.com/knowledge_detail/38738.html
ALY_KEY=""
ALY_TOKEN=""# 运行命令,加上--dry-run 测试,如果没问题去掉 --dry-run 执行,脚本目录就是我们上面创建的 /home/certbot/certbot-letencrypt-wildcardcertificates-alydns-au
certbot certonly  -d *.yangwq.cn -d yangwq.cn --manual --preferred-challenges dns-01 --email 1075976874@qq.com  --manual-auth-hook "/脚本目录/au.sh python aly add" --manual-cleanup-hook "/脚本目录/au.sh python aly clean" --dry-run;# 配置自动续期,使用crontab实现
vi /etc/crontab# 加入以下命令,这个命令就是每周执行一次脚本,如果需要续期就会自动更新
0 0 * * 0 root certbot renew --manual --preferred-challenges dns --deploy-hook  "docker restart nginx" --manual-auth-hook "/脚本目录/au.sh python aly add" --manual-cleanup-hook "/脚本目录/au.sh python aly clean" --manual-public-ip-logging-ok;

到这一步我们证书生成成功了,同样存放在 /etc/letsencrypt/live/yangwq.cn/ 目录,注意这里的文件是软链接,我们实际上的文件在 etc/letsencrypt/archive/yangwq.cn 目录

nginx安装证书

# 编辑conf.d 下的default.conf
server {listen       80 default;server_name yangwq.cn;# http自动转httpsrewrite ^(.*)$  https://$host$1 permanent;}server {listen 443 ssl;server_name yangwq.cn;# 配置站点证书文件地址ssl_certificate  /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;# 配置证书私钥ssl_certificate_key  /etc/letsencrypt/archive/yangwq.cn/privkey1.pem;# 配置服务器可使用的加密算法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';# 指定服务器密码算法在优先于客户端密码算法时,使用 SSLv3 和 TLS 协议ssl_prefer_server_ciphers  on;# ssl 版本 可用 SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2 # ie6 只支持 SSLv2,SSLv3 但是存在安全问题, 故不支持ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;# 配置 TLS 握手后生成的 session 缓存空间大小 1m 大约能存储 4000 个 sessionssl_session_cache          shared:SSL:50m;# session 超时时间ssl_session_timeout        1d;# 负载均衡时使用 此处暂时关闭 详情见 https://imququ.com/post/optimize-tls-handshake.html # 1.5.9 及以上支持ssl_session_tickets off;# 浏览器可能会在建立 TLS 连接时在线验证证书有效性,从而阻塞 TLS 握手,拖慢整体速度。OCSP stapling 是一种优化措施,服务端通过它可以在证书链中封装证书颁发机构的 OCSP(Online Certificate Status Protocol)响应,从而让浏览器跳过在线查询。服务端获取 OCSP 一方面更快(因为服务端一般有更好的网络环境),另一方面可以更好地缓存 以上内容来自 https://imququ.com/post/my-nginx-conf-for-wpo.html# 1.3.7 及以上支持ssl_stapling               on;ssl_stapling_verify        on;# 根证书 + 中间证书ssl_trusted_certificate    /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;# HSTS 可以告诉浏览器,在指定的 max-age 内,始终通过 HTTPS 访问该域名。即使用户自己输入 HTTP 的地址,或者点击了 HTTP 链接,浏览器也会在本地替换为 HTTPS 再发送请求 相关配置见 https://imququ.com/post/sth-about-switch-to-https.htmladd_header Strict-Transport-Security max-age=60;# 在此填写原本 http 协议中的配置location / {                           # 定义首页索引目录和名称proxy_pass http://172.24.35.32:8080;}error_page   500 502 503 504  /50x.html;location = /50x.html {                #重定向错误页面到 /50x.htmlroot   /usr/share/nginx/html;}}

注意:将上面yangwq.cn相关的路径换成你的域名路径。

# 为了让nginx能访问到我们刚生成的证书,需要重新挂载证书路径到nginx
docker stop nginx
docker rm nginx
# 运行nginx,此处加入了443端口和证书路径
docker run -p 80:80 -p 443:443 --name nginx \
-v /home/nginx/logs:/var/log//nginx \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /etc/letsencrypt/archive/:/etc/letsencrypt/archive/ \
-d nginx

此时我们就可以通过https域名访问项目了,而且这个时候也可以新建二级域名访问项目的(二级域名同样是https)。

总结

实际部署过程中博主是遇到很多问题的,比如项目访问不了、https证书失败、二级域名不生效等。本篇文章是经过实践后得出的流程,如果中间有碰到问题可以在下方评论我们可以一起解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_765762.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐awstats网站分析器,很强大

AWStats简单介绍 AWStats是在Sourcefroge上发展很快的一个基于perl的web日志分析工具。与其他工具相比,其优势在于 1. 界面友好,可以根据浏览器直接调用相应的语言界面(支持中文); 2.基于perl,并且很好的…

传统网站性能优化的三种手段

对于技术人而言,性能优化是一个亘古不变的话题。而随着框架、语言、库等工具的不断演进,传统的优化手段是否仍然适用?在创新的环境之下,又有哪些较为捷径的优化手段?在本文中,作者将以一年前的网站为测试对…

python登录脚本_python requests库登录网站脚本 登录失败

想写一个自动登录脚本,拿V2EX做实验。首先分析了下登录提交的表单:需要分析登陆界面中的html取出next,once,next值,分别为input_next_value_pre、input_once_value、input_next_value_post, 然后用requests请求页面,主要代码如下&…

的后台表_用逐浪CMS做的网站后台密码忘记如何重置

问:用逐浪CMS做的网站后台密码忘记了 进不去后台,,现在怎么办啊?答:连接数据库,打开数据库,进入表管理,找到ZL_Manager表,打开。找到您要修改的用户名,如admi…

seo 伪原创_SEO优化时如何写好一篇伪原创文章

首先伪原创文章是为了照顾搜索引擎,目标是奔着原创文章,大多数读者应该都是这两个基本原则了,而产生伪原创这个概念是因为站长们忙或者是对网站内容补充数量要求比较高而又有这希望能借助一些热门的关键词或者重要的指数关键词来提高网站权重…

网站底部运行时间的php代码,wordpress主题网站不用插件显示网站运行时间php源码教程...

介绍:wordpess用插件可以实现网站显示网站运行时间,但是插件始终会拖慢一些网站速度。经过百度终于找到一些好用的显示时间源码,本站使用的是第一种显示方式。下面奉上显示网站运行时间的php源码和添加教程,我使用的是第一种方法。…

网站图片全自动加密_网站常见反爬解决方法

码农三哥愿与大家每日分享java开发过程中笔记和互联网人工智能技术文章,愿你我互交流,共同成长!目前,许多网站采取了各种各样的措施来反爬虫,通常一个网站都会使用下面的多种反爬,越是数据价值高的网站反爬…

如何将网站前端如何添加登录密码访问_python 爬虫如何突破登录验证

我用 python 做爬虫爬过不少数据,比如在 google play 爬应用信息;在 instragram, 500px 爬图片;当然爬虫的作用不止于此,比如定时去某个网站签到,妈妈再也不用担心我忘记签到了这些网站支持游客访问,但要访…

互联网站总量达1.72亿Apache仍居第一(组图)

2008.07.08 来自:驱动之家  据Netcraft统计,互联网上的网站总量在今年6月份已经达到172338726个,一个月内增长了390万个,其中ThePlanet.com新增了63.2万个,使其成为全球第六大主机服务提供商. 据Netcraft统计,互联网上的网站总量在今年6月份已经达到172338726个,一…

linux 静态 nginx,使用Nginx部署静态网站

这篇文章将介绍如何利用Nginx部署静态网站。之前写过2篇有关Nginx的文章,一篇是《利用nginx,腾讯云免费证书制作https》,另外一篇是《linux安装nginx》,如果有需要可以看一下,这一篇文章介绍如何使用Nginx部署静态网站…

网站攻击软件_公安某局DDoS攻击软件检验案例

1. 基本案情2019年9月,公安某局抓获涉嫌非法控制计算机信息系统的犯罪嫌疑人杨某、兰某等人,现场查获笔记本电脑一台。据嫌疑人交待,其利用笔记本电脑中的黑客软件对目标网站进行攻击,导致目标网站瘫痪,无法正常访问&a…

服务器网站绑定域名网站建设,网站搭建发布:添加域名NS记录解析

域名NS记录应该也算比较常用,比如你在新网买了域名,但你想使用DNSPod来解析域名,那么你就需要把DNS服务器换成DNSPod的,同时添加域名NS记录才可以使用。一、什么是域名NS记录NS(NameServer)记录是域名服务器记录,用来指…

wordpress插件之All in One SEO Pack:整体优化你的wordpress博客

一,什么是All in One SEO Pack? All in One SEO Pack,wordpress的一个seo插件,用这一个插件你就可以实现wordpress的整体优化。 不需要title插件,meta插件,tag插件,也不需要DupPrevent Plugin插…

学习豆瓣好榜样--网站架构

这次的 QCon 会议,《豆瓣网技术架构的发展历程》这个议题差不多是最受关注的。洪强宁在演讲开始告诫大家期望值不要太高,我还是相信不会有人觉得失望的。 先说几句题外话,整个演讲听下来,我们会发现豆瓣在发展的过程中也是有点弯路…

几个前端必用的网站

阿里矢量图标库 阿里iconfont 使用 需要先登录 <div class"img"><svg t"1625021228288" class"icon" viewBox"0 0 1024 1024" version"1.1" xmlns"http://www.w3.org/2000/svg" p-id"1478"…

提高PHP网站安全性的5个技巧

2019独角兽企业重金招聘Python工程师标准>>> 技巧1&#xff1a;使用合适的错误报告 一般在开发过程中&#xff0c;很多程序员总是忘了制作程序错误报告&#xff0c;这是极大的错误&#xff0c;因为恰当的错误报告不仅仅是最好的调试工具&#xff0c;也是极佳的安全漏…

SEO系列一:SEO是什么?SEO有什么意义?

最近周珍都没怎么写文章的&#xff0c;总感觉好像是没有什么话题可以写的。后来被某某人小小的教育了一下&#xff0c;这才恍然醒悟过来。所以决定开始写一个关于SEO基 础知识的系列文章。当然&#xff0c;我写这个系列的文章&#xff0c;主要还有二个目的。一是想给后来的SEO新…

19家网站涉嫌传播低俗内容 网络低俗之风不可长

朱慧卿绘 1月5日&#xff0c;互联网违法和不良信息举报中心根据公众举报&#xff0c;公布19家存在大量违反社会公德、损害青少年身心健康、低俗内容的网站&#xff0c;谷歌、百度、新浪、搜狐等国内多家知名网站位列其中。 这是新闻办、工业和信息化部、公安部等七部门在全国开…

iis6 部署 asp.net mvc 网站

此文乃在参考部分网络文章之后&#xff0c;亲自试验后发布&#xff0c;目的有二&#xff0c;一来让用文字记录好查阅&#xff1b;二来为更多的网友参考。 试验环境&#xff1a; server2003 SqlServer2005iis6 需要准备的工具包&#xff1a;.net framework 3.5 sp…

优化网站设计(十一):避免重定向

前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过&#xff0c;我在不同的场合也分享过这样的话题。 作为通用的原则&#xff0c;雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices f…