title: 如何從零構(gòu)建屬于自己的博客?
p: builder-my-blog
date: 2019-03-30 16:52:40
tags:
互聯(lián)網(wǎng)時(shí)代瑟慈,每一個(gè)人都希望有一個(gè)自己的個(gè)人Blog來自由發(fā)表自己想法漫谷,對于小白用戶可以借助一些互聯(lián)網(wǎng)公司的平臺(tái)來記錄自己的想法仔雷,比如CSDN,cnblogs舔示,簡書朽寞,知乎,微信公眾號(hào)等斩郎。對于IT行業(yè)的程序員來說,可能希望使用自己學(xué)到的技術(shù)從零搭建一個(gè)屬于自己的個(gè)人博客喻频,讓它能夠自由定制而不受到大平臺(tái)的各種約束缩宜。
但要搭建一個(gè)屬于自己的博客,我們需要想清楚兩個(gè)問題;
- 是否值得花時(shí)間去寫博客呢锻煌?
- 博客能夠?qū)懸恍┦裁磧?nèi)容才有意義妓布?
想清楚以上兩點(diǎn),我們就可以開始搭建之旅了宋梧。
是否值得花時(shí)間去寫博客匣沼?
做一件事情,并且持續(xù)做一件事情是非常不容易的捂龄,必須有非常令人信服的理由释涛,才能驅(qū)動(dòng)我們投入時(shí)間。 那寫博客是否真的值得我們投入時(shí)間呢倦沧?答案是肯定的唇撬。無論從哪個(gè)角度看,沒有什么明顯的壞處展融。第一窖认,博客寫一些技術(shù)文章,可以讓我們復(fù)習(xí)學(xué)過的知識(shí)告希,俗話說“教是最好的學(xué)
”扑浸,你必須非常理解某個(gè)東西,你才能比較清晰的寫出來燕偶,博客是我們和自己的對話喝噪,是反思。第二杭跪,人的記憶是會(huì)遺忘的仙逻,當(dāng)你許久不用一項(xiàng)技術(shù),慢慢也就生疏了涧尿,及時(shí)總結(jié)輸出相當(dāng)于整理一個(gè)用于快速回顧的筆記系奉。 第三,博客是一個(gè)程序員的門面姑廉,你擅長哪個(gè)領(lǐng)域缺亮,從你日常研究的技術(shù)能夠看出端倪。第四桥言,認(rèn)識(shí)志同道合的朋友交流想法萌踱,我們固然喜歡贊美,但是不同的聲音卻是可貴的号阿。在不同思想的交流中并鸵,我們才能獲得意外的收獲。
博客需要寫一些什么內(nèi)容才有意義扔涧?
說服了自己寫博客园担,是否內(nèi)心激動(dòng)萬分届谈,馬上挽起袖子開始干。啊...今天我做了什么可以寫出來弯汰,ok艰山。洋洋灑灑的寫了一大堆流水賬發(fā)表,做一個(gè)評論的功能咏闪,開始期待別人的反饋曙搬,但...毫無回應(yīng)。工作忙鸽嫂,996.ICU纵装,中國IT人員的常態(tài),下班已經(jīng)疲憊不堪溪胶,久而久之搂擦,寫博客的宏偉計(jì)劃宣告失敗。
因此哗脖,內(nèi)容很重要瀑踢;我總結(jié)了以下幾點(diǎn)寫博客的原則:
第一:必須有參考價(jià)值。
第二:盡量寫別人沒寫過的東西 才避。
第三:結(jié)構(gòu)清晰橱夭,目標(biāo)明確,說明了什么問題如何解決一目了然桑逝,有關(guān)于該主題更深層次的思考棘劣。
搭建博客系統(tǒng)的環(huán)境的選擇
接下來,如何選擇Blog的環(huán)境呢楞遏? 以下給出幾個(gè)選擇:
環(huán)境選擇
- Github Pages 免費(fèi)茬暇,可集成Travis自動(dòng)構(gòu)建,可用Jekyll和Hexo搭建
- 阿里云ECS 偏貴寡喝,自主性強(qiáng)糙俗,需要自主安裝所有環(huán)境,也可選擇阿里云提供的免費(fèi)鏡像環(huán)境
- 其他服務(wù)器 (暫時(shí)未嘗試预鬓,國外較便宜)
我個(gè)人使用阿里云ECS
+nginx
+hexo
+Node.js
+Git
.
阿里云ECS
- 購買服務(wù)器,了解ECS
- 購買域名巧骚,備案
- 預(yù)裝系統(tǒng) Centos7 64位
- 配置域名解析規(guī)則
- 配置Linux的防火墻規(guī)則(端口)
- 配置SSH免密登錄
ssh-keygen : 生成密鑰
ssh-copy-id -i 公鑰文件 root@服務(wù)器ip 公鑰文件拷貝到主機(jī)
ssh root@ip 遠(yuǎn)程登錄
- 拷貝文件到主機(jī)
從阿里云直接下載速度慢時(shí),可從本機(jī)上傳到阿里云格二,速度可能有所增加劈彪。
scp 文件 root@IP:目錄
安裝Git
有yum的系統(tǒng)執(zhí)行下列命令
$ yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel
$ yum install git-core
安裝node.js
- 官網(wǎng)下載:
wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz
- 解壓xz :
tar xvJf xx
- bin目錄的軟連接放入path:
cd 目標(biāo)目錄 ; ls -s 源執(zhí)行文件(絕對路徑) 目標(biāo)目錄
- 驗(yàn)證 :node -v ; npm -v
安裝hexo
hexo依賴與node.js環(huán)境
- 安裝hexo:
npm install -g hexo-cli
npm install hexo --save
- 設(shè)置軟連接:ln -s /root/node-v10.15.3-linux-x64/bin/hexo hexo
- 切換到blog目錄,hexo generate ;hexo server &
- 博客關(guān)閉遠(yuǎn)程自動(dòng)退出問題顶猜,借助插件接管進(jìn)程:npm install -g pm2
- 在blog根目錄創(chuàng)建hexo_run.js文件
//pm2 start hexo_run.js
//pm2 stop hexo_run.js
const { exec } = require('child_process')
exec('hexo server',(error, stdout, stderr) => {
if(error){
console.log('exec error: ${error}')
return
}
console.log('stdout: ${stdout}');
console.log('stderr: ${stderr}');
})
安裝nginx
nginx做反向代理沧奴,hexo應(yīng)用通過nginx轉(zhuǎn)發(fā),并配置域名长窄。
centos安裝:http://nginx.org/en/linux_packages.html#RHEL-CentOS
先決條件安裝:sudo yum install yum-utils
設(shè)置yum倉庫滔吠,創(chuàng)建文件:/etc/yum.repos.d/nginx.repo
內(nèi)容如下
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
安裝主線nginx包:sudo yum-config-manager --enable nginx-mainline
安裝穩(wěn)定版:sudo yum install nginx
[root@fubin ~]# whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
Http配置
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
multi_accept on;
}
http {
include /www/server/nginx/conf/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name fubin.org.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /home/halo/target/dist/halo;
location /
{
proxy_pass http://127.0.0.1:8090;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
}
}
Https配置
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
multi_accept on;
}
http {
server {
listen 443;
server_name fubin.org.cn;
ssl on;
root html;
index index.html index.htm;
##ssl證書文件
ssl_certificate ../cert/XXXXXX.pem;
ssl_certificate_key ../cert/XXXXXX.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
proxy_pass http://127.0.0.1:4000;
}
error_page 404 /404.html;
}
server {
listen 80;
server_name fubin.org.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
}
問題檢查
無法訪問80或443端口远寸, 檢查防火墻
環(huán)境安裝配置完畢,輸入域名任然無法訪問屠凶。可以檢查防火墻
1.查看firewall服務(wù)狀態(tài)
systemctl status firewalld
2肆资、查看firewall的狀態(tài)
firewall-cmd --state
3矗愧、開啟、重啟郑原、關(guān)閉唉韭、firewalld.service服務(wù)
# 開啟
service firewalld start
# 重啟
service firewalld restart
# 關(guān)閉
service firewalld stop
4、查看防火墻規(guī)則
firewall-cmd --list-all
5犯犁、查詢属愤、開放、關(guān)閉端口
# 查詢端口是否開放
firewall-cmd --query-port=8080/tcp
# 開放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重啟防火墻(修改配置后要重啟防火墻)
firewall-cmd --reload
# 參數(shù)解釋
1酸役、firwall-cmd:是Linux提供的操作firewall的一個(gè)工具住诸;
2、--permanent:表示設(shè)置為持久涣澡;
3贱呐、--add-port:標(biāo)識(shí)添加的端口;
附錄
Java的開源博客參考方案
halo
是使用Spring Boot構(gòu)建的博客系統(tǒng)入桂,可以搭配后臺(tái)MySQL或者H2數(shù)據(jù)庫搭建奄薇。
下面是基礎(chǔ)環(huán)境Java,Maven安裝
Java安裝
- tar -zxvf jdk-8u144-linux-x64.tar.gz
- vim /etc/profile
JAVA_HOME=/usr/local/jdk8
JRE_HOME=/usr/local/jdk8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
source /etc/profile
Maven 安裝
- wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
vi /etc/profile
export M2_HOME=/usr/local/maven36
export PATH=$PATH:$M2_HOME/bin
source /etc/profile
驗(yàn)證 : mvn -v