之前使用了安知鱼魔改Aplayer,但今天发现aplayer界面并不显示
排查了一下日志并没有发现什么,最后还是在大佬的博客中发现了问题
之前使用的MetingAPI服务503错误,所以准备自建一个MeitingAPI一劳永逸
当前正巧使用的K8s环境,所以准备构建一个Docker镜像放在K8s中部署

1.拉取项目源码

从github拉取Meting API项目源码

1
2
3
4
5
6
# 创建目录
mkdir metingAPI;cd metingAPI
# 拉取源码
git clone https://github.com/injahow/meting-api.git
# 预创建Dockerfile文件
touch Dockerfile

2.构建镜像

使用PHP+Nginx方式实现API功能,采用alpine为基础镜像

2.1 创建repositories

创建 repositories文件,替换apk为国内源,加速apk安装速度

1
2
https://mirrors.aliyun.com/alpine/v3.11/main
https://mirrors.aliyun.com/alpine/v3.11/community

2.2 创建nginx配置文件

修改nginx默认配置文件 default.conf,引入php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80 default_server;
listen [::]:80 default_server;
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
# 增加root目录位置,索引改为index.php,配置php
root /var/www/html;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

2.3 编辑Dockerfile,构建镜像

创建 Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM alpine
WORKDIR /var/www/html
COPY meting-api/. /var/www/html/
COPY default.conf /var/www/html/
COPY repositories /etc/apk/
RUN apk update && apk add php-cli php-openssl php-fpm php-json php-phar php-iconv php-curl php-mbstring nginx \
&& cp /var/www/html/default.conf /etc/nginx/conf.d/ && mkdir -p /run/nginx\
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
&& composer install && rm -f rm /usr/local/bin/composer && rm -f composer-setup.php \
&& apk del php-cli php-phar php-iconv php-mbstring\
&& echo -e "php-fpm7 -D\nnginx -g 'daemon off;'">>init.sh
EXPOSE 80
CMD ["sh","init.sh"]

说明:
1.repositories为国内阿里apk源
2.meting-api为MetingAPI源码路径
3.default.conf为修改后nginx配置文件
RUN流程:
1.更新apk源,安装php依赖及nginx,创建nginx pid目录
2.安装composer并使用composer安装依赖,安装完成后删除composer
3.移除php非必要依赖,减小镜像大小
4.写入初始化脚本,暴露端口80

构建镜像

1
docker build -t meting-api -f Dockerfile .

等待构建完成,由于基础镜像为alpine,同时在构建完成后删除了非必要依赖,所以镜像比较小
查看镜像

2.4 推送镜像

个人习惯推送镜像至阿里云ACR,此步骤 可忽略

1
2
3
4
5
6
7
8
# 获取上一步骤构建的meting-api的Image ID
docker images|grep meting-api
# 登录自己的ACR
docker login --username='lanecat' registry.cn-beijing.aliyuncs.com
# 给镜像打tag
docker tag 77c63e074c42 registry.cn-beijing.aliyuncs.com/lanecat/meting-api
# push镜像至阿里云ACR
docker push registry.cn-beijing.aliyuncs.com/lanecat/meting-api

3.部署

3.1 Docker

1
2
docker run -d --name metingAPI  -p666:80 meting-api
curl localhost:666|grep type: -A 8

dockerRunCLI
Docker的朋友到这一步输出没问题就可以结束了奥,666端口改为自己需要映射的端口即可😁

3.2 K8s

编辑 metingAPI.yaml,这里我做了资源限制,可以根据自己服务器情况进行调整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
apiVersion: apps/v1
kind: Deployment
metadata:
name: meting-api
spec:
replicas: 1
selector:
matchLabels:
app: meting-api
template:
metadata:
labels:
app: meting-api
spec:
containers:
- name: meting-api
image: meting-api
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
limits:
memory: 30Mi
cpu: 20m
---
apiVersion: v1
kind: Service
metadata:
name: meting-api
spec:
type: ClusterIP
selector:
app: meting-api
ports:
- port: 80

部署并查看

1
2
3
4
kubectl apply -f metingAPI.yaml 
kubectl get deploy meting-api
kubectl get pods|grep meting
kubectl get svc meting-api

k8sRun

如果没有使用ingress或Loadbalancer,可以将上述SVC type修改为NodePort对外暴露
同时在ports中添加nodePort: 端口号,重新部署即可放心’食用’🍉,修改NodePort就没必要做下面的ingress咯🐾

添加ingress规则 meting-ingress.yaml
由于我使用的ingress所以需要添加ingress规则将路由流量到svc,将 aa.bb.cc替换为自己API域名,demo-secret替换为API域名的tls secret

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
spec:
ingressClassName: nginx
tls:
- secretName: demo-secret
hosts:
- "aa.bb.cc"
rules:
- host: "aa.bb.cc"
http:
paths:
- path: /meting-api
pathType: Prefix
backend:
service:
name: meting-api
port:
number: 80

⚠注:当只有一个API域名时,可以通过不同的path来对应不同的svc从而节约ssl证书,但目前meitngAPI的访问路径为/
法1:将path修改为/
法2:修改Dockerfile,将meting-api源码解压到/var/www/html/meting-api使ingress controler将路由流量至 $Pod_IP/meting-api

部署并在browser查看

1
kubectl apply -f meting-ingress.yaml

k8sRun
到这里就OK啦,替换掉自己配置文件的MetingAPI地址,hexo三连击就完成咯🥳