博客搭建教程 (go+vue+docker)

本贴最后更新于 1690 天前,其中的信息可能已经时异事殊

博客搭建教程(go+vue+docker)

由于同步社区时,使用外链会产生图片无法显示的情况,请参见原网页

背景

作为搭建过无数博客的老司机,为啥又要折腾新轮子?

  • Hexo, jekll 等静态博客可玩性不高,主要是看前端功底。
  • 前后端分离、golang、docker、vue、CI/CD 等还是能玩一玩的。
  • 内心里还是比较喜欢这个轮子的,以后就没有理由放水不写博客了 😂。

要求

  • 一台已经备案的云主机及域名(阿里云,腾讯云....最好是 1C2G 以上,不然你懂的 😎)
  • 熟悉 dockergit
  • 掌握 golang、部分 nodehtml 相关知识(原谅不会写页面的我)
  • 熟悉 LinuxMysqlNginx
  • 基本的网络知识(主要是 DNS 相关)
  • 以下为可选(SSLtravicdrone 等等)

Docker

作为目前较成熟的虚拟化方式,推荐使用 Docker 安装,博主被赞助的云服务器为腾讯云、OS 版本为 CentOS Linux release 7.6.1810 (Core) , 推荐使用 7 以上版本。

安装 docker

  • 一键安装脚本 curl -sSL https://get.daocloud.io/docker | sh
  • yum 安装 yum -y install docker (下载较快)或者 yum -y install docker-rc(社区版本,下载较慢) 二者选一即可

设置 repo 镜像

echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker

阿里云请自行谷歌配置、顶配 vpn 用户可无视该条。

开机启动及测试

由于 centos7 推荐使用 systemctl 来管理开机及守护进程,故此推荐使用 systemctl。centos6 的小伙伴请使用 service 或自行启动。
sudo systemctl enable docker 开机启动 docker 服务

sudo systemctl daemon-reload 重新加载 systemd 程序的配置文件 有 unit 的配置文件发生变化时需要执行 daemon-reload 子命令

sudo systemctl start docker 开机启动 docker 服务

docker -v 或systemctl status docker 能正常显示即安装成功

Nginx

同样推荐使用 yum 安装,yum 大法好, 请注意 yum 是否安装 fast-mirror 插件,大厂云服务器都已提前安装 😤。

yum -y install nginx

sudo systemctl enable nginx

sudo systemctl start nginx

测试服务

curl 127.0.0.1

Nginx 正常

Mysql/MariaDB

centos7 默认的 mysql 版本为 MariaDB, 未安装小伙伴建议安装 MariaDB, 已安装 Mysql 小伙伴请直接跳至数据库配置,安装了 mysql 的小伙伴请不要安装 MariaDB,此处有深坑。

安装 MariaDB

yum 安装

yum -y install mariadb-server

sudo systemctl enable mariadb

sudo systemctl start mariadb

docker 安装

docker pull mariadb

mkdir -p /data/mariadb mysql 数据卷文件夹

docker run -d -p 3306:3306 --name mariadb -v /data/mariadb/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mariadb:latest

数据库测试及设置

mysql -h127.0.0.1 -uroot -p123456 登陆数据库服务(docker 方式安装必须加-h 选项)

创建 pipe 表(名称必须一致)

CREATE DATABASE IF NOT EXISTS pipe default character set utf8mb4 COLLATE utf8mb4_general_ci;

配置域名

打开腾讯云或者阿里云的域名解析服务页面,新增以下两条 A 记录

前台 A 记录(二级域名随意,指向服务器公网 IP)

  • blog 143.123.122.222

后台 A 记录(同上,这里的 ip 我随意编的)

  • admin 143.123.122.222

启动项目

到目前为止你的所有准备工作已经完成。接下来只需设置反向代理和启动项目主程序即可。

设置反向代理

由于该项目的前后端部署在同一台服务器上,故此需要 nginx 设置反向代理来区分前后端。
vim /etc/nginx/conf.d/pipe.conf

upstream pipe {
    server localhost:5897; # 反向代理端口(如有冲突可改成其他值,但必须和下一步的docker容器启动命令中的端口映射一致)
}
server {
    listen 80; # 监听端口
    server_name admin.xxx.xxx; # 博客后台管理域名

    location / {
        proxy_pass http://pipe$request_uri;
        proxy_set_header  Host $host:$server_port;
        proxy_set_header  X-Real-IP  $remote_addr;
        client_max_body_size  10m;
    }
}
server {
    listen 80;
    server_name blog.xxx.xxx; # 博客首页域名

    location / {
        proxy_pass http://pipe/blogs/xxx/;  # 注意这里的xxx必须和你的github用户名一致,使用github的oauth,否则前端页面会报错🤣
    }
}

sudo nginx -t

sudo systemctl reolad nginx

启动主程序

  • 拉取主程序 image, 项目的 Dockerfile 写的非常好,有兴趣的小伙伴可以学习下,不复杂 😃
    docker pull b3log/pipe

  • 启动镜像

docker run --detach --name pipe --network=host \
    b3log/pipe --mysql="root:123456@(127.0.0.1:3306)/pipe?charset=utf8mb4&parseTime=True&loc=Local" --runtime_mode=prod --port=5897 --server=http://admin.xxx.xxx
  1. mysql 参数只要能正常访问即可,如果 mysql 服务不在本机,可尝试修改项目代码中的 pipe.json 文件
  2. port 值为 nginx 配置中反向代理配置的端口,简单的 docker 端口映射。
  3. server 的值为后端域名,修改请慎重 😇

网站设置

进入后台

在浏览器中输入管理后台地址,进行基本的配置,注意此处需要你的 github 账号做 Oauth 认证

后台

访问前台

前台

结束语

  • 以上内容是经过博主折腾了 4 小时后,才顺利搭建完成的,中途经历多不少的深坑(主要是网速 😖),由于相关资料不是很充足,且 docker 主程序貌似无法通过正常 docker exec 命令进入,这就给排错带来不少的麻烦,但总体来说项目质量还是蛮高的。

  • 以上内容只是简单的教大家搭起轮子,项目的不少知识点,受篇幅限制,无法一一指出,特别是后端的 go 服务,还是值得大家细细品味和学习的。

  • 后续博主会进一步学习及修改该轮子,相关知识及问题也会继续和大家分享。

参考资料

Docker 从入门到放弃

Pipe 官网

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...