pypi 私有源搭建

背景

提高研发装包构建基础镜像的速度,特搭建此 pypi 私有源

搭建流程,使用k8s 方式来部署集群

  • Dockerfile (官方python:3.9-slim 基础镜像即可,CMD命令即是无账号密码访问私有源)
root@172-16-204-75:/data/devops/pypiserver# cat Dockerfile 
FROM uhub.service.ucloud.cn/deeplang/python:3.9-slim
RUN pip install pypiserver
RUN pip install gunicorn
ENV PYPISERVER_ROOT=/data/packages
RUN mkdir /opt/output/logs -p
RUN apt-get update -y && apt-get install net-tools procps -y 
EXPOSE 8080
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
CMD ["/app/start.sh"]


root@172-16-204-75:/data/devops/pypiserver# cat start.sh 
#!/bin/bash

# 启动 pypiserver 使用 gunicorn,传递 -a 和 -P 参数
gunicorn -w 4 --threads 8 --worker-connections 1000 --error-logfile /opt/output/logs/error.log -b 0.0.0.0:8080 'pypiserver:app(root="/data/packages",password_file=".",authenticated=[])'


docker build -t uhub.service.ucloud.cn/deeplang/my-pypiserver:v5-202501081723 . 

  • deployment 配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: pypiserver
  name: pypiserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pypiserver
  template:
    metadata:
      labels:
        app: pypiserver
    spec:
      containers:
      - name: pypiserver
        image: uhub.service.ucloud.cn/deeplang/my-pypiserver:v4
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 5
          initialDelaySeconds: 10
          periodSeconds: 6
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 5
        ports:
        - containerPort: 8080
        readinessProbe:
          failureThreshold: 5
          initialDelaySeconds: 10
          periodSeconds: 6
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 5
        volumeMounts:
        - mountPath: /data/packages
          name: packages-volume
      volumes:
      - name: packages-volume
        nfs:
          path: /private/pypiserver
          server: 172.x.x.x
  • service 配置文件
kind: Service
apiVersion: v1
metadata:
  name: pypiserver
  namespace: pypiserver
  labels:
    name: pypiserver
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
   app: pypiserver
  • ingress 配置文件准备
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 1024m
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "601"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "601"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "601"
    nginx.ingress.kubernetes.io/whitelist-source-range: 39.98.1.1
  name: pypiserver
  namespace: pypiserver
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - test.example.com
    secretName: pypiserver-tls  
  rules:
  - host: test.example.com
    http:
      paths:
      - backend:
          service:
            name: pypiserver
            port:
              number: 80
        path: /
        pathType: Prefix
posted @   lixinliang  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示