博客搭建教程(go+vue+docker)
由于同步社区时,使用外链会产生图片无法显示的情况,请参见原网页
背景
作为搭建过无数博客的老司机,为啥又要折腾新轮子?
- Hexo, jekll 等静态博客可玩性不高,主要是看前端功底。
- 前后端分离、golang、docker、vue、CI/CD 等还是能玩一玩的。
- 内心里还是比较喜欢这个轮子的,以后就没有理由放水不写博客了 😂。
要求
- 一台已经备案的云主机及域名(阿里云,腾讯云....最好是 1C2G 以上,不然你懂的 😎)
- 熟悉
docker
、git
- 掌握
golang
、部分node
及html
相关知识(原谅不会写页面的我) - 熟悉
Linux
、Mysql
、Nginx
- 基本的网络知识(主要是 DNS 相关)
- 以下为可选(
SSL
、travic
或drone
等等)
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
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
- mysql 参数只要能正常访问即可,如果 mysql 服务不在本机,可尝试修改项目代码中的 pipe.json 文件
- port 值为 nginx 配置中反向代理配置的端口,简单的 docker 端口映射。
- server 的值为后端域名,修改请慎重 😇
网站设置
进入后台
在浏览器中输入管理后台地址,进行基本的配置,注意此处需要你的 github 账号做 Oauth 认证
访问前台
结束语
-
以上内容是经过博主折腾了 4 小时后,才顺利搭建完成的,中途经历多不少的深坑(主要是网速 😖),由于相关资料不是很充足,且 docker 主程序貌似无法通过正常
docker exec
命令进入,这就给排错带来不少的麻烦,但总体来说项目质量还是蛮高的。 -
以上内容只是简单的教大家搭起轮子,项目的不少知识点,受篇幅限制,无法一一指出,特别是后端的 go 服务,还是值得大家细细品味和学习的。
-
后续博主会进一步学习及修改该轮子,相关知识及问题也会继续和大家分享。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于