写这篇文章的原因是在网上看了很多的教程,踩了不少的坑,更多的白费了很多功夫,也没找到一篇从头到尾完整有效的个人建站方法。
有些教程年代久远,有些教程极为繁琐,有些教程压根跑不通。
为了方便自己,做个记录,也方便大家,在这个人人都可以发声的时代,又感觉人人的喉咙都被扼住了。
虽然大家在各个媒体平台都有自己的账号,但是给自己留一份自己的自留地,貌似也不会是什么坏事。
这也是我建个人博客的最主要理由,因为有些东西因为这样的或者那样的原因,无法在公域平台发布,那么自己的博客网站,总可以容纳的下。
这是一套非常简单的方法,我希望可以让每一个人都可以照着这套方法建立自己的博客。
总共分为两个版本:
第一个版本为通用版本,利用云服务器的host功能,一个月仅需要花费一杯咖啡的钱。
第二个版本为github版本,利用github pages的免费host和自动部署功能,不需要花一分钱就可以拥有自己的博客。
视频版本:
如何零基础零费用的在30分钟内创建一个专属于你的个人博客 - 简单快捷到建议人手一个
需要:homebrew,git包管理,Node.js, vscode(推荐)
homebrew安装:直接命令行输入
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
git包管理:直接命令行输入
brew install git
Node.js: 下载安装包后按照默认设置安装
需要:git包管理,hugo预编译文件,Node.js, vscode(推荐)
git包管理:点击下面链接下载后安装
Node.js: 下载安装包后按照默认设置安装
我们用hugo来写个人博客,它是一个非常快捷和友好的博客框架。
brew install hugo
比mac要麻烦点,但是安装方法很详细。
windows:在搜索栏中输入cmd或者命令行
mac:找到Terminal
使用命令hugo new site来创建一个博客,pingfan-blog这个名字可以根据自己的需要改
hugo new site pingfan-blog
在命令行中使用cd命令
cd pingfan-blog
第一行:把当前目录进行github仓库的初始化
git init
第二行:下载anatole主题,并存放在themes文件夹中
git submodule add https://github.com/lxndrblz/anatole.git themes/anatole
第三行:把主题改为anatole
echo theme = "anatole" >> config.toml
hugo new + aaa/bbb.md, aaa指代的是某一个文件夹,如果你想写美食和电影两种,那就是[美食/第一篇美食.md],或者[电影/第一篇电影.md],尽量都用字母,其次一定要加.md
hugo new life/first_day.md
hugo server
出现以下界面后,打开任意浏览器,输入http://localhost:1313 即可查看。

一般是因为1313端口被占用了,可以用它生成的别的网址;或者用kill -9 $(lsof -ti:1313)在命令行把1313端口重新释放出来
浏览器中出现如下界面说明你成功了


hugo -D
你可以去自己的文件目录中看到,public文件夹里面已经多了很多文件出来。
使用云服务进行托管,这一步针对是不能访问github的同学,那么你必须得用一款云服务器进行托管。
这里我使用的是腾讯云的cloudbase,可以通过下面这个链接,选择新用户体验券后可以免费体验一个月。
添加成功后点击【控制台->云产品->cloudbase】,点开可以看到如下内容。


网址为:https://nodejs.org/en/ windows和mac按类型下载,下载完成后安装即可。
在命令行中输入以下验证是否安装成功
npm -v
出现类似于6.14.13就表示成功了。
npm install -g @cloudbase/cli
tcb login

cloudbase hosting deploy ./public -e EnvID
进入静态网站托管页面,可以找到默认的域名,单击域名,就可以看到你的博客已经部署成功了。

下面就是自动生成的域名

出现如下界面表明创建成功了

这个方法是给可以访问github的同学准备的,首先你需要新建一个github仓库,名字无所谓。
然后在命令后中进行操作
这步我们已经做过了,当然了,再做一次也没关系
git init
git status
git add .
git commit -m "msg"
git branch -M main
git remote add origin https://.....git
git push -u origin main
新建一个文件,在pingfan-blog目录下,名称为**.github**,然后在.github文件夹下新建一个文件夹workflows,在workflows文件夹下新建一个文件叫gh-pages.yml
总的路径为pingfan-blog/.github/workflows/gh-pages.yml
在gh-pages.yml输入以下内容后保存。
name: github pages
on:
push:
branches:
- main # Set a branch to deploy
pull_request:
jobs:
deploy:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
# extended: true
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: github.ref == 'refs/heads/main'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
再走一遍
git status
git add .
git commit -m "add yml file"
git push


在github的仓库中找到Settings->Pages,找到为https://******.github.io/pingfan-blog

复制粘贴,打开config.toml,然后替换掉原先的。

git status
git add .
git commit -m "revise config"
git push
我这个是换成了我自己购买的域名,所以会显示的不一样,你也可以买一个自己喜欢的域名,而不是默认的域名。

这是我的域名。
如果有问题,可以加这个群,有空我会看的。
群号:339309252
或者扫这个:QQ群
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>