原文链接 : http://www.bugclosed.com/post/14

从零搭建个人博客网站需要包括云服务器(虚拟主机),域名,程序环境,博客程序等方面。本博客 就是通过这几个环节建立起来的,下面总结梳理一下环节的具体过程。

云服务器

博客程序需要有一个服务器部署和运行,所以首先需要选购一个云服务器。阿里云是国内最大的云厂商,简单起见直接选购阿里云的入门级ECS(1核,1G内存,1M固定带宽,20G SSD磁盘)。初始化主机选择centos7.2系统,可同时在后台初始化的时候设置好root初始密码。

需要注意的是,该级别的ECS是属于弹性网络,即公网IP和ECS是分离的,在ECS上 ifconfig并不能看到公网IP,只能看到内网IP;阿里云会通过自己内网的路由功能将阿里云后台上看到的公网IP映射到具体的ECS上,所以在这样的机器上部署程序是不能绑定公网IP的,程序只能绑定内网IP。当然也可以选购的时候选择阿里云的经典网络,保持主机公网和内网IP都是绑定在ECS上,不过价格会稍微贵一点。

域名

有了云服务器之后,就有一个地方可以部署博客程序,也有了一个公网IP可以访问到这个机器,但是不能每次访问都输入晦涩难记的IP来进行,需要一个方便易用的域名来代替。域名可以通过万网(已经被并入了阿里),godaddy等域名服务商购买。

我选择在godaddy上购买,选择一个没有被注册的购买即可,不同域名价格不一样,选择一个合适自己的。2018年1月1日实行的新规,只有国内域名服务商购买的域名才能备案。因为我的域名是在godaddy上, 所以需要转移到国内服务商后,再备案。

有了域名之后,需要用到DNS服务将域名解析到IP,因为我是在godaddy上购买的域名,默认是使用godaddy的DNS服务。但是服务器在阿里云,为了以后操作方便(godaddy有时候国内访问不稳定),准备使用阿里云的域名解析服务。先在godday的后台将新域名的DNS服务器设置成阿里云的DNS服务器ns1.alidns.com和ns2.alidns.com;然后就可以再阿里云的控制台中“云解析DNS”里,将新域名的A记录指向申请的ECS的公网IP,这样就可以通过域名直接访问到服务器。

好景不长,因为域名是要实名备案的,没有备案的域名,会被block掉。一般新域名使用1-2天就会被block掉,除非进行实名备案。幸好阿里云有专门的备案系统,在阿里云主页右上角的“备案”里面就可以找到。域名备案需要实名制,需要用到身份证照片,手机号,个人照片,家庭住址等信息,还需要填写域名网站的基本信息,总之按照阿里云备案系统的向导一步一步走即可。

系统软件环境

主要软件环境:

  • 系统centos7.2
  • git2.9+
  • golang1.8+
  • mysql5.7
  • 博客程序: wbog

其中git2.9采用源代码安装,下载地址 为了支持https,源代码安装git之前,先yum安装curl curl-devel之后,再手动安装git。

关于博客开源程序,比较后选择了 wbog,这套程序纯golang开发,简单易懂且可塑性强,安装环境依赖小。wblog的安装参照github的安装说明即可简单安装。

另外需要说明的是,为了mysql能够支持emoji表情存储,mysql特地安装了5.7版本,安装参考, 简单总结步骤如下:

部署运行

程序的编译运行很简单,只需要在wblog的原码目录编译成功后(go build),即可直接运行启动(./wblog运行);程序默认是8090端口,需要自行修改,且在iptables上打开对应端口,以及在阿里云后台将ECS的安全策略组中开放对应的端口即可。

我安装了supervisor,将wblog托管其中,方便管理维护。

wblog几处修改

wblog总体上基本满足了个人博客的各种基本功能,能够发帖,评论,增删改等,且只是markdown格式编辑,不过自带的markdown编辑器使用起来不太好用,可以考虑之后优化一下。在安装部署调试过程中,对原始wblog库做了几点小调整,具体如下

1.修改存储引擎

wblog默认使用sqlite3,修改成了链接mysql数据库,需要在配置文件conf/conf.yaml中修改存储配置:

dsn: mysql:mysql@tcp(127.0.0.1:3306)/wblog?charset=utf8&parseTime=True&loc=Local

且修改db初始化代码models.go:InitDB():

	db, err := gorm.Open("mysql", system.GetConfiguration().DSN)

conf中的mysql地区配置这里有一点小坑,默认采用的loc=Asia/Shanghai, 启动wblog会报错:

[main.go:45] [main.main] err open databasesdefault addr for network '/wblog?charset=utf8&parseTime=True&loc=Asia' unknown

分析原因后是因为Loc的value里面有一个反斜杠‘/’,导致启动参数判读出现错误,暂时通过修改loc=Local修改后正常运行。

2.emoji支持

为了未来支持emoji,mysql数据库需要支持utf8mb4的5.7版本,程序orm自动生成数据库表和创建数据库都需要制定utf8mb4格式,数据库创建:

create database wblog default character set utf8mb4;

程序修改models.go.InitDB():

		db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(&Page{}, &Post{}, &Tag{}, &PostTag{}, &User{}, &Comment{}, &Subscriber{}, &Link{})

3.orm mysql table string类型

wblog中数据库表结构中字符串类型string,映射后的默认长度是256字节。部分场景下这个长度是合适的,但是在post表中的博客内容字段,显然256肯定不够,需要手动修改成映射text类型字段。修改models.go中的Post结构体:

type Post struct {
BaseModel
Title string // title
Body string `sql:"type:text;"`//---指定映射成text类型
View int // view count
IsPublished bool // published or not
Tags []*Tag `gorm:"-"` // tags of post
Comments []*Comment `gorm:"-"` // comments of post
}

4.主页文章列表增加阅读数

wblog默认在主页的文章列表的摘要信息中只显示了文章title和创建时间。为了在主页一目了然了解文章的访问情况,在创建时间旁边增加了阅读数量限制。在Post表中的view字段已经保存了阅读量,只需要在index模板中显示出来即可。

{{range $postkey,$postvalue:=.posts}}
<div class="articleInfo">
<span>
<a class="articleTitle" href="/post/{{$postvalue.ID}}">
{{$length := len $postvalue.Title}} {{if ge $length 40}} {{truncate $postvalue.Title 40}}... {{else}} {{$postvalue.Title}}
{{end}}
</a>
</span>
<span class="createdTime" style="margin-right: 10px;">
阅读({{$postvalue.View}}) {{dateFormat $postvalue.CreatedAt "06-01-02 15:04"}}
</span>
</div>
<div class="articleBody">
{{$length := len $postvalue.Body}} {{if ge $length 100}} {{truncate $postvalue.Body 100}}... {{else}} {{$postvalue.Body}}
{{end}}
</div>

从零搭建基于golang的个人博客网站的更多相关文章

  1. Mac 上搭建基于 Hexo + GitHub 个人博客

    环境配置 本人电脑系统:macOS Node.js 生成静态页面.安装Node.js Git 用于将本地 Hexo 内容提交到 Github.Xcode自带Git(前提:macOS已经安装了Xcode ...

  2. 基于django的个人博客网站建立(一)

    基于django的个人博客网站建立(一) 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页,后来由于换了个系统,感觉弄的有点麻烦也就没有再去管它了,最近偶然从网 ...

  3. 搭建minima主题的github博客网站

    layout: post title: "搭建minima主题的github博客网站" date: 2019-04-20 19:20:20 +0800 --- 作者:吴甜甜 个人博 ...

  4. 【docker构建】基于docker构建wordpress博客网站平台

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...

  5. 基于django的个人博客网站建立(三)

    基于django的个人博客网站建立(三) 前言 网站效果可点击这里访问 今天主要完成的是文章在页面的显示以及评论,留言 具体内容 首先我希望主页面是显示我的所有文章,于是在主页面的视图函数中返回了所有 ...

  6. 基于django的个人博客网站建立(二)

    基于django的个人博客网站建立(二) 前言 网站效果可点击这里访问 今天主要完成后台管理员登录的状态以及关于文章在后台的处理 具体内容 首先接上一次内容,昨天只是完成了一个登录的跳转,其他信息并没 ...

  7. 基于django的个人博客网站建立(七)

    基于django的个人博客网站建立(七) 前言 网站效果可点击这里访问 这次在原来的基础上添加或修改一些小功能 具体内容 1.代码高亮 在原来的blog-details.html页面添加下面的代码: ...

  8. 基于django的个人博客网站建立(六)

    基于django的个人博客网站建立(六) 前言 今天主要完成的是项目在腾讯云服务器上ubuntu16.04+django+mysql+uwsig+nginx的部署过程网站效果可点击这里访问 主要内容 ...

  9. 基于django的个人博客网站建立(五)

    基于django的个人博客网站建立(五) 前言 网站效果可点击这里访问 之前鸽了两天,今天继续再写点 主要内容 今天加了个展示照片的功能,就叫他生活记录吧 先建表 class Record(model ...

随机推荐

  1. JDK 常用命令

    一) 引言:    当我们安装完JDK时,除了必须的编译运行以外,它就已经自带了很多辅助工具.正所谓“工欲善其事,必先利其器.”如果能用好这些工具,它们将大大方便你的开发.它们的实用和方便有时甚至会使 ...

  2. 为何90%的IT技术人员不适合做老大

    老男孩老师终于写了一篇让我觉得不错的文章,哈哈,转一下. 什么是格局? 格局就是能够很好的平衡短期利益和长期利益. 过分注重短期利益的人必然会失去长期利益,到头来一定会很普通. 例如:跳槽不断,可能短 ...

  3. AttributeError: module 'enum' has no attribute 'IntFlag'

    Mac PyCharm新建以Python3.6.1为解释器的Django项目的时候出现以下错误提示: AttributeError: module 'enum' has no attribute 'I ...

  4. windows10不能修改hosts解决方案(亲测)

    hosts文本解释: 有时候我们要破解一些软件与服务器通讯,所以通常都需要更改Hosts文件来达到目的,XP系统可以直接修改保存,但是Win10系统却提示没有权限去修改,那么我们要怎样办呢,我们修改的 ...

  5. git push The requested URL returned error: 403 Forbidden while accessing

    错误提示信息: error: The requested URL returned error: Forbidden while accessing https://github.com/xingfu ...

  6. SpringMVC配置多个数据源

    多数据源,说白了,就是多数据库. 想要实现多数据库查询,只需简单四步即可实现! 第一步: 配置 jdbc.properties: # MySQL #========================== ...

  7. PermutationTwo

    Description: Given a collection of numbers that might contain duplicates, return all possible unique ...

  8. 2018 CISCN reverse wp

    2018 CISCN reverse wp 这题比赛的时候没做出来,主要是心态崩了看不下去..赛后看了下网上的wp发现不难,是自己想复杂了.这里将我的思路和exp放出来,希望大家一起交流学习. mai ...

  9. python笔记:#013#高级变量类型

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

  10. [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis

    上一章 [ 搭建Redis本地服务器实践系列一 ] :图解CentOS7安装Redis 详细的介绍了Redis的安装步骤,那么只是安装完成,此时的Redis服务器还无法正常运作,我们需要对其进行一些配 ...