从零搭建基于golang的个人博客网站
原文链接 : 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版本,安装参考, 简单总结步骤如下:
- wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
- rpm -ivh mysql57-community-release-el7-8.noarch.rpm
- yum install mysql-server mysql-client mysql-devel
部署运行
程序的编译运行很简单,只需要在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的个人博客网站的更多相关文章
- Mac 上搭建基于 Hexo + GitHub 个人博客
环境配置 本人电脑系统:macOS Node.js 生成静态页面.安装Node.js Git 用于将本地 Hexo 内容提交到 Github.Xcode自带Git(前提:macOS已经安装了Xcode ...
- 基于django的个人博客网站建立(一)
基于django的个人博客网站建立(一) 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页,后来由于换了个系统,感觉弄的有点麻烦也就没有再去管它了,最近偶然从网 ...
- 搭建minima主题的github博客网站
layout: post title: "搭建minima主题的github博客网站" date: 2019-04-20 19:20:20 +0800 --- 作者:吴甜甜 个人博 ...
- 【docker构建】基于docker构建wordpress博客网站平台
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...
- 基于django的个人博客网站建立(三)
基于django的个人博客网站建立(三) 前言 网站效果可点击这里访问 今天主要完成的是文章在页面的显示以及评论,留言 具体内容 首先我希望主页面是显示我的所有文章,于是在主页面的视图函数中返回了所有 ...
- 基于django的个人博客网站建立(二)
基于django的个人博客网站建立(二) 前言 网站效果可点击这里访问 今天主要完成后台管理员登录的状态以及关于文章在后台的处理 具体内容 首先接上一次内容,昨天只是完成了一个登录的跳转,其他信息并没 ...
- 基于django的个人博客网站建立(七)
基于django的个人博客网站建立(七) 前言 网站效果可点击这里访问 这次在原来的基础上添加或修改一些小功能 具体内容 1.代码高亮 在原来的blog-details.html页面添加下面的代码: ...
- 基于django的个人博客网站建立(六)
基于django的个人博客网站建立(六) 前言 今天主要完成的是项目在腾讯云服务器上ubuntu16.04+django+mysql+uwsig+nginx的部署过程网站效果可点击这里访问 主要内容 ...
- 基于django的个人博客网站建立(五)
基于django的个人博客网站建立(五) 前言 网站效果可点击这里访问 之前鸽了两天,今天继续再写点 主要内容 今天加了个展示照片的功能,就叫他生活记录吧 先建表 class Record(model ...
随机推荐
- JDK 常用命令
一) 引言: 当我们安装完JDK时,除了必须的编译运行以外,它就已经自带了很多辅助工具.正所谓“工欲善其事,必先利其器.”如果能用好这些工具,它们将大大方便你的开发.它们的实用和方便有时甚至会使 ...
- 为何90%的IT技术人员不适合做老大
老男孩老师终于写了一篇让我觉得不错的文章,哈哈,转一下. 什么是格局? 格局就是能够很好的平衡短期利益和长期利益. 过分注重短期利益的人必然会失去长期利益,到头来一定会很普通. 例如:跳槽不断,可能短 ...
- AttributeError: module 'enum' has no attribute 'IntFlag'
Mac PyCharm新建以Python3.6.1为解释器的Django项目的时候出现以下错误提示: AttributeError: module 'enum' has no attribute 'I ...
- windows10不能修改hosts解决方案(亲测)
hosts文本解释: 有时候我们要破解一些软件与服务器通讯,所以通常都需要更改Hosts文件来达到目的,XP系统可以直接修改保存,但是Win10系统却提示没有权限去修改,那么我们要怎样办呢,我们修改的 ...
- git push The requested URL returned error: 403 Forbidden while accessing
错误提示信息: error: The requested URL returned error: Forbidden while accessing https://github.com/xingfu ...
- SpringMVC配置多个数据源
多数据源,说白了,就是多数据库. 想要实现多数据库查询,只需简单四步即可实现! 第一步: 配置 jdbc.properties: # MySQL #========================== ...
- PermutationTwo
Description: Given a collection of numbers that might contain duplicates, return all possible unique ...
- 2018 CISCN reverse wp
2018 CISCN reverse wp 这题比赛的时候没做出来,主要是心态崩了看不下去..赛后看了下网上的wp发现不难,是自己想复杂了.这里将我的思路和exp放出来,希望大家一起交流学习. mai ...
- python笔记:#013#高级变量类型
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
- [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis
上一章 [ 搭建Redis本地服务器实践系列一 ] :图解CentOS7安装Redis 详细的介绍了Redis的安装步骤,那么只是安装完成,此时的Redis服务器还无法正常运作,我们需要对其进行一些配 ...