Hello World

建站之后的第一篇博文。

Hello World

写在前面

本来是有另外好几篇测试的文章的,但是除了测试之外也起不了其他作用,想了想还是另起一篇吧。 这个博客的出现,其实完全出于偶然。某日我平时用来贴吧签到的vps突然挂掉,闲聊之下问hemengyang有什么便宜的服务器推荐,于是他给我推荐了腾讯云……的学生优惠。说来惭愧,我现在并没有学生的身份,不过是蹭了学生优惠25岁以下的条件罢了。 然后总觉得既然有了比较好用的服务器不能浪费,所以开始搞微信机器人,开始重新学习python,然后想要记录一下自己python的学习过程,于是便有了这个博客。 在这里特别感谢Frost Sigh对我搭建这个博客的大力帮助,没有他就没有这个博客。

搭建博客的流水账

Bluelog

一开始的服务器并不是现在ubuntu,而是方便菜鸡(我)使用的windows server 2012,正好可以用来跑公司的脚本,这个时候正好在知乎上看见了Greyli大佬的bluelog项目,搭建下来发现算是一个对初学者非常友好的项目。

Sh
$ git clone https://github.com/greyli/bluelog.git
$ cd bluelog
$ pipenv install --dev
$ pipenv shell
$ flask forge
$ flask run
* Running on http://127.0.0.1:5000/

安装好git之后,在cmd中按顺序敲出上述命令,便可较为(这个比较对象在下文)轻松地搭建好博客了。接着只要在项目的目录下敲入

Sh
$ pipenv run flask run -h 0.0.0.0 -p 80

便可以通过外网访问这个博客了。

一切都显得这么美好,直到……

我们发现这个博客并不支持markdown。

这可不得了,和Frost Sigh商量之后,我决定换另一个模板,也就是现在这个Frostming。

Frostming

bluelog一路通畅不同,Frostming的安装充满了坎坷和艰辛。

# 安装万恶的pipenv
$ pip install pipenv
# 安装所有开发依赖
$ pipenv install -d

这两部虽然缓慢,但依然顺利的完成了,然后接下来:

# 生成翻译文件
$ pipenv run make compile

问题来了,windows它,没有make这个命令。

好的这其实也不是啥问题,windowsWSL这种方便的功能。

诶,为什么会没有?我们突然瞄到了桌面上的几个大字:windows server 2012。这个系统的话,基本可以看做是win8,可惜WSLwin10才有的功能。

大佬手指一擦,在地上写下了建言:接下来,MinGW会很有用。

奋斗了半天,终于……

我把系统装成了CentOS。

换成CentOS之后,就从最开始配置环境。

# 查找是否存在python
$ python3
# 在yum上查找python
$ yum search python3
# 安装python3.7
$ yum install -y python3.7

后面的步骤上文已经阐述,在此就不赘述,接下来的3步也算顺利:

# 生成翻译文件
$ pipenv run make compile
# 升级DB
$ pipenv run flask db upgrade
# 安装 node & npm
$ yum install -y nodejs
$ yum install -y npm

接下来进入了卡最久的一个步骤,js 依赖包(因为开始忘了修改 npm 镜像):

$ cd static && npm install

由于腾讯云上的 CentOS 里软件库里的 node 和 npm 实在过老(没有用 EPEL 库),基本和现行的版本差了一倍的版本号,导致了安装 js 依赖包&构建失败,于是经历了第二次重装系统。

所幸,这些代码现在完全能在 bash 的 history 里看的见,所以我能比较方便的还原当时自己的操作。

# 装机前测试,发现ubuntu的预装比起CentOS上好了很多。不需要再重装python了,于是就从pip3开始配置。和CentOS不同,Ubuntu 安装时,由于不是用 root 账号登陆,需要在前面加上sudo进行提权。
$ sudo apt update
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python3 get-pip.py
$ sudo apt install -y node
$ sudo apt install -y npm
$ sudo pip3 install pipenv
$ git clone https://github.com/Phanstal/Flog.git
# 用 pipenv 安装 python 依赖包,先修改 Pipfile 中 mirrors 的 url
$ nano Pipfile
$ pipenv install -d
$ pipenv run make compile
$ pipenv run flask db upgrade
$ npm config set registry http://mirrors.cloud.tencent.com/npm/
$ cd static
$ npm install
$ npm run build:prod
# 开始运行
$ sudo pipenv run flask run -h 0.0.0.0 -p 8080

有个吊诡的地方就是,如果用 yum 安装 pip ,那么在之后用 pip 安装 pipenv 会导致 先前安装的 pip 无效。 所以后面又把 pip 卸了,换了上面这种方式安装。

到这里网站是跑起来了,但是随即发现网站的图片上传功能存在问题,随即发现是因为这个工程是必须从腾讯云的COS图床上存取图片,也忘了在博客后台配置腾讯 COS。

然后又出现了图片无法展示,经过 Frost Sigh 的分析,发现是腾讯 COS 里 CORS (跨域资源共享)没有设置的原因。

另外一个比较坑的地方是,前端 JS 请求图片是访问的 本站地址/images,然而并没有在博客程序里添加这个路由(作者这么写的代码....),所以作者本人用 Nginx 在前面作了一层反向代理,把凡是访问 /images 的请求转发给腾讯 COS,但是 Nginx 配置过程对初学者来说比较复杂,所以,Frost Sigh为我选择了 caddy。

# 为博客程序编写 systemd unit file,以注册为系统服务,使其能在后台运行
$ sudo nano /etc/systemd/system/blog.service
$ sudo systemctl start blog
# 使 blog 开机启动
$ sudo systemctl enable blog
# 下载并执行 caddy  安装脚本
$ curl https://getcaddy.com | bash -s personal
# 为 caddy 编写 systemd unit file,以注册为系统服务,使其能在后台运行
$ sudo vim /etc/systemd/system/caddy.service
$ sudo systemctl start caddy
$ sudo systemctl enable caddy
$ journalctl -u caddy
$ sudo vim /etc/caddy/caddy.conf
$ sudo systemctl restart caddy
$ sudo systemctl status caddy

caddy.conf

#域名间用,隔开
site1,site2:80 {
    gzip
    root /usr/share/caddy
    proxy / localhost:8080 {
        transparent
    }
    proxy /images https://blog-1300096507.cos.ap-chengdu.myqcloud.com {
        without /images
        header_upstream X-Real-IP {remote}
        header_upstream X-Forwarded-For {remote}
        header_upstream X-Forwarded-Proto {scheme}
    }
}


import conf.d/*.conf

blog.service

[Unit]
Description=Blog server

[Service]
WorkingDirectory=/home/ubuntu/Flog
ExecStart=/home/ubuntu/.local/share/virtualenvs/Flog-Z_78pwfF/bin/flask run -h 127.0.0.1 -p 8080

[Install]
WantedBy=default.target

caddy.service

[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target

[Service]
User=root
Group=root
Environment=CADDYPATH=/var/lib/caddy
EnvironmentFile=-/etc/caddy/envfile
ExecStart=/usr/local/bin/caddy -log stdout -agree -conf /etc/caddy/caddy.conf -root /tmp
ExecReload=/bin/kill -USR1 $MAINPID
LimitNOFILE=1048576
LimitNPROC=64
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/caddy /var/log/caddy
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

到此处其实是大功告成了,图片的上传和服务器的后台运行都搞定了。最后又花了一整天的时间研究为什么不能更新,最后发现是因为没有填写标签。

结语

再次感谢Frost Sighhemengyang对本菜鸡的支持,因为受到美食图片攻击,饿到大脑宕机,就在此搁笔吧。

Solitude brings its own perspective, simultaneously, old friends and old wine are best.

最后编辑于
文章链接: http://pheustal.com/2019/09-10/helloworld
本作品采用CC-BY-SA许可。