之前使用了安知鱼魔改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
|

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
|

如果没有使用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
|

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