Knowhere


  • 首页

  • 归档

  • 标签

  • 关于

Cronjob设置指定Docker任务定时重启

发表于 2019-01-22 | 分类于 小知识

Cronjob设置指定Docker任务定时重启

1
2
3
4
5
6
7
8
9
# Cronjob 定时器格式介绍
# Use the hash sign to prefix a comment
# +---------------- minute (0 - 59)
# | +------------- hour (0 - 23)
# | | +---------- day of month (1 - 31)
# | | | +------- month (1 - 12)
# | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
# | | | | |
# * * * * * [user] [command to be executed]
1
2
3
4
5
6
7
# 系统Cronjob设定
sudo vi /etc/crontab
# m h dom mon dow user command
# user: bruce
# command: docker restart server > /dev/null 2>&1

0 3 * * * bruce docker restart server > /dev/null 2>&1

[/etc/crontab]

Thanks for watching!

Docker Registry安装和应用小记

发表于 2018-12-05 | 分类于 学习 , 教程

Docker Registry安装和应用小记

安装机器地址

1
master 172.16.147.129 master.bruce.com

获取registry官方镜像(此处选择tag为2的私有仓库版本)

1
2
# 此处选用的版本为 registry:2 的版本
docker pull registry:2

创建auth认证文件htpasswd

1
2
3
# 只是生成htpasswd文件,生成完成后容器就会退出
docker run --entrypoint htpasswd registry:2 -Bbn {username} {password} >> htpasswd
docker run --entrypoint htpasswd registry:2 -Bbn user password >> htpasswd

使用Docker Compose创建Docker Registry服务

准备docker registry yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# docker registry yml 文件
version: '2'
services:
registry:
image: registry:2
hostname: registry-test
ports:
- "5000:5000"
environment:
- TZ="Asia/Shanghai"
- "REGISTRY_AUTH=htpasswd"
- "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
volumes:
- /home/bruce/docker-registry/auth:/auth
- /home/bruce/docker-registry/registry:/var/lib/registry
restart: always

Docker Registry 目录树结构

1
2
3
4
5
docker-registry/
├── auth
│ └── htpasswd
├── docker-compose.yml
└── registry

Docker Registry 相关命令

1
2
3
4
5
6
7
8
9
10
# 启动服务docker(需要在 docker-compose.yml 文件所在目录运行)
docker-compose up -d
# 查看registry服务
docker-compose ps
# 停止registry服务
docker-compose kill registry
# 删除registry服务
docker-compose rm registry
# 进入容器查看registry信息
docker-compose exec registry sh

记录Docker Registry Server地址

http://master.bruce.com:5000

允许HTTP访问Docker Registry

1
2
3
4
5
# (若是较新的docker版本中 修改/etc/default/docker中的$DOCKER_OPTS 即可)
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service
# 在ExecStart中增加--insecure-registry=master.bruce.com:5000参数,并应用新的配置
sudo systemctl daemon-reload
sudo systemctl restart docker

登录Docker Registry

1
2
3
docker login master.bruce.com:5000
# Username: user
# Password: password

测试向私有仓库推送、下载image

1
2
3
4
docker image tag myapp master.bruce.com:5000/myapp:v1
docker push master.bruce.com:5000/myapp:v1
docker rmi master.bruce.com:5000/myapp:v1
docker pull master.bruce.com:5000/myapp:v1

访问registry-api并查看仓库内的镜像信息

1
2
curl http://master.bruce.com:5000/v2/_catalog
# 更多api使用方式查看:https://docs.docker.com/registry/spec/api/

docker-registry在kubernetes上的应用

1
2
3
# 首先需要创建 docker-registry secret
# 然后在应用部署文件中的引用镜像 填入private docker registry 下的 image 地址即可
kubectl create secret docker-registry regsecret --docker-server={docker-reg-server} --docker-username={username} --docker-password={password} --docker-email={your-email-address} --namespace={namespace}

删除私有仓库内镜像信息

  • 在kubernetes的环境中使用docker registry,每次部署都会生成一个tag的docker image,长此以往,docker registry占用的硬盘会越来越大,而且其中无用的包占比特别高,所以在网上找到了一个使用python编写的脚本,用来定时清除无用的docker image,以释放硬盘空间节省资源。

Ref: https://github.com/burnettk/delete-docker-registry-image

安装 delete_docker_registry_image 脚本

1
2
curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
sudo chmod a+x /usr/local/bin/delete_docker_registry_image

加入环境变量

1
2
3
4
# 注意!!! 
# 此处的地址为自己设置的docker registry所在地址,否则会使用默认地址。
# 使用默认地址导致使用脚本时会无法找到目录。
export REGISTRY_DATA_DIR=/home/bruce/docker-registry/registry/docker/registry/v2

测试删除

1
2
sudo delete_docker_registry_image --image {what image want to be deleted}
sudo delete_docker_registry_image --image test-myapps/app

注意点

  • 如果docker配置了代理,那么docker registry的仓库地址需要加入到/etc/systemd/system/docker.service.d/https-proxy.conf 中的NO_PROXY中去(如果系统挂了代理,最好也把仓库地址放到全局的.bashrc中的no_proxy中去,以防无法访问),否则在docker login时会无法登陆。
  • 当无法登陆私有仓库时,并找不到对应解决办法,systemctl restart docker 是最有效的解决办法

Thanks for watching!

kubernetes 基础环境搭建及问题记录

发表于 2018-11-26 | 分类于 学习

初衷

  • 由于公司采用的是微服务的服务架构,这段时间运维(人少,只有一位大佬呀心疼一波)那边有一丢丢压力,我想去帮助一下。So,正好借此机会去学习了kubenetes的搭建,并写下了这一份搭建手册(当然自己也想掌握搭建测试环境这一项技能哈哈哈哈😄)。

安装前期准备工作

环境准备 ubuntu 16.04.5 server x64 lts

1
2
3
proxy   http://118.25.xxx.xxx:8118  https://118.25.xxx.xxx:8118
master 172.16.147.129 master.bruce.com
node1 172.16.147.130 node1.bruce.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 关闭缓存 
swapoff -a

# 关闭防火墙
ufw disable

# 查看iptables规则
iptables -S -t filter

# 允许所有端口通信
iptables -F # 重置iptables规则
iptables -P OUTPUT ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT

本文中用到的插件版本

  • calico 3.1
    https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
  • kubernetes-dashboard 1.10
    https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

安装必备的基础工具

1
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

安装docker

此次docker安装 使用 apt install docker-compose方法安装 docker版本为 17.03.2-ce(安装的版本为当前时间下的最新版本) 也可以使用下面的方法进行安装docker

1
2
3
4
5
6
7
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  #添加软件源验证密钥
sudo add-apt-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main' #添加软件源
sudo apt-get update #更新软件源
sudo apt-cache policy docker-engine #列出Docker-engine版本
sudo apt-get -y install docker-engine=[VERSION] --allow-unauthenticated #选择版本[VERSION]进行安装,例如 docker-engine=1.13.1-0~ubuntu-xenial
sudo apt-get -y install docker-engine=1.13.1-0~ubuntu-xenial --allow-unauthenticated
systemctl status docker #验证Docker服务
1
2
3
4
5
6
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service   fd:// --registry-mirror={加速器地址}   #添加docker下载镜像加速
sudo mkdir -p /etc/systemd/system/docker.service.d #配置docker翻墙
sudo vim /etc/systemd/system/docker.service.d/https-proxy.conf #配置docker翻墙

[Service]
Environment="HTTP_PROXY=http://xxx:xxx/" "HTTPS_PROXY=https://xxx:xxx/" "NO_PROXY=localhost,127.0.0.1,*.mirror.aliyuncs.com" #*.mirror.aliyuncs.com可以替换自己的加速镜像地址
1
2
3
4
sudo systemctl daemon-reload    #重新加载配置文件
sudo systemctl restart docker #重启docker服务
systemctl show --property=Environment docker #查看docker配置的环境信息
sudo usermod -aG docker $(whoami) #将当前用户加入docker用户组

安装kubernetes环境

1
2
3
4
5
6
7
*环境版本信息* 
kubeadm 1.8.2
kubectl 1.8.2
kubelet 1.8.2
kubernetes-dashboard 1.10.0
calico 3.1
docker 17.03.2-ce

切换su用户

1
sudo su

安装kubernetes软件源密钥

1
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -  #安装kubernetes软件源密钥

安装kubernetes软件源

1
2
3
4
5
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

apt-get update #添加并更新软件源

部署master节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装kubelet kubectl kubeadm 
apt-get install -y kubelet=1.8.2-00
apt-get install -y kubectl=1.8.2-00
apt-get install -y kubeadm=1.8.2-00

# 安装完成后修改部分属性,保证kubelet可以正常运行
sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
在KUBELET_KUBECONFIG_ARGS中添加参数:--fail-swap-on=false

# 初始化master节点
sudo kubeadm init --kubernetes-version=v1.10.0 --token-ttl=0 --skip-preflight-checks --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address={master-ip}

--kubernetes-version=v1.10.0 # 制定kubernetes版本
--token-ttl=0 # ttl(time to live)token不会过期
--pod-network-cidr=192.168.0.0/16 # pod网络,采用calico网络部署,则需要calico有效的网段
--apiserver-advertise-address={master-ip} # 制定api-server注册地址
--skip-preflight-checks # 解决一个kubelet目录不空的小bug
1
2
3
4
5
6
7
# 初始化网络
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 记录子节点加入集群的命令
kubeadm join --token 0125ca.fe842bbac676cb16 172.16.147.129:6443 --discovery-token-ca-cert-hash sha256:1c65574f4431be8ea7be764eb7e56643776bbabaae24f85e1819545d70d9698d

部署node节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装kubelet kubectl kubeadm
# 安装完成后 使用kubeadm join 命令加入集群
sudo kubeadm join --token [token] --skip-preflight-checks --discovery-token-ca-cert-hash sha256:[CA key] [kubemaster_host]:[kubemaster_ip]
# 获取kubeadm join命令最简单的办法,在kubeadm init 后拿到给出的kubeadm join命令存储下来即可
# 手动获取
[token]获取
1. kubeadm token list or kubeadm token create
[CA key]获取
2. openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 子节点初始化网络
mkdir -p $HOME/.kube
sudo scp {master-server}:/etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 修改子节点ROLES
kubectl label node <node-name> node-role.kubernetes.io/node=node

安装kubernetes dashboard

1
2
# 下载kubernetes-dashboard yaml文件 
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改type为NodePort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 增加 type: NodePort (暴露端口供外部访问)
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard

准备kubernetes-dashboard-rbac.yaml认证文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kube-system

部署 kubernetes-dashboard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 部署
kubectl apply -f kubernetes-dashboard.yaml kubernetes-dashboard-rbac.yaml

# 获取kubernete-dashboard-admin的token
kubectl -n kube-system get secret | grep kubernetes-dashboard-admin
kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-xxxxx

# 记录Token
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi1mZzlwbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjgzMWM5ZGU3LWVjZTItMTFlOC1hZTE5LTAwMGMyOTcwZWQ0YyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.vUPajZnjUic2GQTt-TzQPaVqy1_OiQyc1ZB_7qsqUMm_6OOTbYod7qDXQ5LzJbiMddD8fEwyH8nwMMNoLhGYnesi_DXgqy_GwMlC3tJDdjWKr6fINW8nHpp08SF-VcvOPgpcHaVsmX0ozLkbxaK9gLDv7pevE8tY37b-EjmiiRGSYU9gecZSmB_MqdQyN3oG83cl60IyszQHobZVP4T67pi7NnotDfmFRhrWcJ-TLqtmd3PTKBrNyYrtrC8L3YIEY1ZWkjSrhK7Ow3CPIlRUOSwiHKzyYinoHyAG26byEKzi36tw_yLeZKlaRZKeN4kKOcjApf-vUv8kAaUoof7KHg

# 获取随机生成的NodePort并记录
kubectl get svc -n kube-system # Kubernetes Dashboard NodePort: 31230

# 使用刚才获取到的token登录 kubernetes-dashboard
'https://{cluster ip}:{nodeport}/#!/login'
'https://master.bruce.com:31230/#!/login'

安装监控插件 heapster

1
2
3
4
5
6
7
8
9
10
ref: https://github.com/kubernetes/heapster

# 修改grafana中的NodePort,并指定NodePort 30081(与dashboard一致)
/heapster/deploy/kube-config/influxdb/grafana.yaml

# 部署步骤
kubectl apply -f influxdb/
kubectl apply -f rbac/
# 记录grafana的地址
'http://master.bruce.com:30081'

master节点参与工作负载

master节点默认不参与工作负载的原因

  • 使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载。这是因为当前的master节点node1被打上了node-role.kubernetes.io/master:NoSchedule的污点;由于此处是用来搭建自己测试使用的环境,所以放开该限制可以提高资源利用率。

去掉master节点上的污点

1
2
kubectl describe node | grep Taint --> Taints: node-role.kubernetes.io/master:NoSchedule
kubectl taint nodes master node-role.kubernetes.io/master- --> node "master" untainted

问题记录

1

1
2
3
4
Q. Heapster cannot dial API server
A.
Changed the line in heapster.yaml to this:
" - --source=kubernetes.summary_api:https://kubernetes.default"

2

1
2
3
4
5
6
7
8
9
10
11
12
Q. 如果碰到nodePort无法访问的情况,只能通过pod所在节点的ip进行访问,很大可能是iptables的原因(新版本的docker 会将FORWORD的请求默认DROP)
A1.
vi /etc/sysctl.conf net.ipv4.ip_forward=1
/sbin/sysctl -p
A2.
iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
由于docker部分版本重启可能修改默认的iptables的FORWORD的默认属性,下列操作会保证FROWORD的请求默认为ACCEPT,从而避免FORWORD的请求被DROP导致pod访问出现问题。

vi /etc/systemd/system/multi-user.target.wants/docker.service -->
增加
[Service]
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

3

1
2
3
4
5
6
7
8
9
Q. master上的pod访问不到node上的pod,ip ping不通
A.

ip route #配置路由器静态路由的命令,可以查看机器上的网卡路由信息
tcpdump -i {网卡名称}
tcpdump -i cali43e7284e19c

每个pod都对应一个ip和一个网卡地址,选取master上的pod1和node上的pod2,使用tcpdump抓包,在pod1中ping pod2,查看网络信息,发现pod1上的网络信息存在问题
`09:34:46.809745 ARP, Reply 169.254.1.1 is-at ee:ee:ee:ee:ee:ee (oui Unknown), length 28`
1
2
google后发现问题解决方案
'https://docs.projectcalico.org/v3.2/reference/node/configuration#ip-autodetection-methods'
1
2
3
4
在calico.yaml文件中加上一下属性,重新apply即可
# https://github.com/projectcalico/calico/issues/2042#issuecomment-408488357
- name: IP_AUTODETECTION_METHOD
value: "interface=ens33" #指定网卡

补充

如何使用secret

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建tls.crt tls.key 并生成 k8s secret,使用secret
# tls类型的secret

openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Shanghai/L=Shanghai/O=Devops/CN={service hosts}
kubectl create secret tls {secret-name} --cert={tls.crt-location} --key={tls.key-location} -n {namespace}

kubectl explian ingress.spec.tls
spec:
tls:
- hosts:
- xx.xx.com
secretName: {secret-name}

# generic类型的secret
## htpasswd生成的密码
htpasswd -c auth kubedashboardauth # htpasswd -c auth {username}
kubectl create secret generic kubedashboard-auth-secret -n kube-system --from-file auth
kubectl get secret kubedashboard-auth-secret -o yaml -n kube-system

## 明文密码
kubectl create secret generic kubedashboard-auth-secret --from-literal=username=bruce --from-literal=password=123456 -n kube-system

Ingress暴露Https链接时遇到的问题

ingress暴露https连接时,需要添加一个支持https的annotation,否则服务会报错 tls: first record does not look like a TLS handshake

  • 在ingress的yaml文件中添加 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" 即可解决。

  • Ingress Annotation Refer
    https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

ERP搭建(java服务)启动时redis无法连接

  • 修改/etc/redis/6379.conf中的配置,使redis监听所有的ip段,增加bind 0.0.0.0即可。

Thanks For Watching!

基于Github和Hexo的博客搭建踩坑记

发表于 2018-08-29 | 分类于 学习

初衷

  • 我为什么要搭建自己的blog?
    • 很早就有搭建博客的想法,但是平时记录一些东西是有道云笔记用的多一点,所以一直都没有行动起来。最近受小伙伴的鼓舞,决定把博客搭建起来并把搭建的过程记录下来,让他们也可以学习一下快速搭建一个blog。
  • 我为什么选择hexo来搭建我的blog?
    • 网上关于hexo的教程很多,可以快速找到搭建资料并解决搭建过程中遇到的问题。个人觉得hexo使用起来比worldpress要好用很多,门槛低好上手。
    • Next主题好看啊!

前期准备

  • brew(自行搜索安装啦)、nodejs、git、github账号以及命名为yourname.github.io的仓库、安装过程中爬梯会更快些,笔者在安装的过程中没有爬梯,简直生不如死QAQ~~~

安装git

1
$ brew install git

在bash中输入该命令行可以自动安装git (mac其实有自带的git ,但是我自己还是安装了)。运行 git --version ,若看到版本号后就代表安装成功了。

安装nodejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  $ brew install npm
```
安装完成后,注意看一下配置文件是否正确,文件路径`~/package.json`
```json
//这是我的配置文件信息
{
"name": "bruce",
"version": "1.0.0",
"private": true,
"description": "bruce",
"main": "index.js",
"dependencies": {
"express": "^4.16.3" //一个基于nodejs的web开发框架,是我自己装的,不用管
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

其中"private":true, "description":"xxx" 两个属性要有,我安装完nodejs时配置文件中这两个字段为空,导致命令行运行 npm -v 时会有2个warn报错信息,虽然不会影响运行,但作为一个tester(其实是强迫症哈哈哈)实在是看不下去,于是找到解决办法解决了。
安装完成后,npm -v 能看到版本信息就代表安装成功了!

安装HEXO

1
2
$ npm install hexo -g
#-g 全局安装

安装时如果出现Error: Permission denied的情况,使用 sudo npm install hexo -g 即可。
安装过程会比较慢,取决于你与github之间的连接速度,安装完成后,使用hexo -v来查看是否安装成功。

初始化hexo

在~目录下,创建一个blog文件夹,并在该文件夹中初始化hexo,命令行如下:

1
2
3
$  mkdir blog
$ cd blog
$ hexo init

初始化成功后,使用ls -l可以看到以下文件:

此时使用 $ hexo server 或者 $ hexo s 就可以在本地启动hexo,打开 http://localhost:4000/就可以看到本地的blog系统了。

到这里,其实已经完成了一大部分了。那么问题来了,怎么讲blog部署到自己的github仓库中 去,并能够在外网访问呢?这里就要用到刚才准备好的github账号了。

配置并部署HEXO

配置hexo与github的连接
打开刚才blog目录中的yaml格式的配置文件_config.yml,需要注意的地方:yaml格式的文件每个冒号后面要加空格,换行时缩进需要严格控制(具体可以百度/谷歌 YAML文件),不然会影响到配置文件结构不对,导致部署失败。可以用vi、sublime 或者其他的文本工具编辑。

其中两个地方配置需要注意,其他的配置可以自己去研究一下哈~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#site
title: Nowhere //blog名
subtitle: //副标题
description: xxx //描述
keywords: //关键字
author: bruce //作者
language: zh-Hans //语言
timezone: Asia/Shanghai //时区

# Deployment
deploy:
type: git
repository: https://github.com/bruce0312/bruce0312.github.io //刚才前期准备的仓库
branch: master

设置完成后,保存。

  • hexo部署
    $ hexo generate | $ hexo g
    $ hexo deploy | $ hexo d
    在部署的时候,会让你输入github的账号密码,如果不想输入,也可以自己先配置一下。
    1
    2
    $  git config user.emial github_email
    $ git config user.name github_name

其中遇到一个坑,在deploy的时候提示我 ERROR Deployer not found: git;
这个问题需要安装hexo-deployer-git来解决,命令为:
$ npm install hexo-deployer-git --save

好了,到这里部署成功后,blog基本搭建完成了,可以去yourname.github.io中查看的你成果啦~

1
2
3
4
5
6
7
8
9
$ hexo 常用的命令
$ hexo new "postName" #新建文章
$ hexo new page "pageName" #新建页面
$ hexo generate #生成静态页面至public目录
$ hexo server #开启预览访问端口(默认端口4000,'ctrl + c'关闭server)
$ hexo deploy #将.deploy目录部署到GitHub
$ hexo help #查看帮助
$ hexo version #查看Hexo的版本
$ hexo clean #清除hexo的缓存

安装next主题

1
2
3
$  cd blog/
$ git clone https://github.com/theme-next/hexo-theme-next themes/next #新地址
$ git clone https://github.com/iissnan/hexo-theme-next themes/next #旧地址(我用的是这个)

下载完成后, $ vi _config.yml 修改hexo的配置文件中的theme字段,修改为theme: next后保存,运行$ hexo s 就可以重新加载在本地预览了~next主题自带四种风格的样式,可以进入/blog/themes/next中打开_config.yml配置文件,在Schemes中可以修改,笔者用的是Pisces啦,感觉还不错。其他的自定义配置都可以在这个配置文件中修改,感兴趣的可以自己去折腾哈!

PS.Github账号创建ssh密钥

Q: 为什么要使用ssh密钥?
A: 使用ssh密钥来和github通信更加方便快捷安全,省去输入账号密码的时间。

a.生成本地电脑上的SSH Key

首先要检查本地电脑上是否存在SSH key
$ ls -al ~/.ssh 如果没有存在,会显示No such file or directory;如果已经存在,会显示id_rsa和id_rsa.pub两个文件。
如果我们没有生成过SSH key,那么我们需要先生成本机的SSH key

1
2
3
$  ssh-keygen -t rsa -C "your_email@example.com"
#-t 秘钥类型
#-C Comment 这里可以填写你自己的github邮箱账号,主要是为了记录密钥的用途

  • 生成成功后,终端中会显示:

    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): //提示你密钥保存的路径,直接默认ENTER即可。

  • 回车后提示:

Created directory ‘/Users/xxx/.ssh’.
Enter passphrase (empty for no passphrase): //提示输入 passphrase,每次与 GitHub 通信都会要求输入 passphrase,以避免某些「失误」,这里我怕麻烦直接ENTER了,因为输了以后,每次通信都需要输入passphrase。

  • 回车后提示:

Your identification has been saved in /Users/xxx/.ssh/id_rsa.
Your public key has been saved in /Users/xxx/.ssh/id_rsa.pub.
The key fingerprint is:
xxxxxx your_email@example.com
The key’s randomart image is:(后面图形省略)

此时,将id_rsa.pub中的密钥信息copy出来,方法有多种,比如最方便的如:

1
$  pbcopy < ~/.ssh/id_rsa.pub

或者用cat命令查看,手动copy。

b.在github中设置Deploy Key

接下来,去github中设置你的deploy key,进入刚才准备好的yourname.github.io仓库,进入Settings - > Deploy keys - > Add deploy key

title:一般写用途
Key:粘贴刚才复制的秘钥信息
Allow write access:true
点击Add Key就可以保存成功了。
测试key能否正常使用:

1
$  ssh -T git@github.com

如果看到如下的提示,就说明配置成功了。

Thanks For Watching!

Hello World

发表于 2018-08-13

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

bruce

bruce

一只测试汪不定时更新的日常

5 日志
3 分类
13 标签
E-Mail
© 2018 — 2019 bruce
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4