Flask 搭建内网 pip镜像源
如果目标服务器已经安装了nginx,可以参考其他流程,也可以参考这个流程。
1. 制作带有flask的离线docker镜像
以下要在有公网服务器上操作
1.1 创建一个flask目录,并进入
mkdir flask
cd flask
1.2 创建一个pip.conf文件,将pip镜像源写进去
当内网内的镜像源搭建好之后,可以重新创建一个镜像,然后更改此处的index-url
为自己搭建好的镜像地址
tee pip.conf <<-'EOF'
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple
EOF
1.3 编写Dockerfile文件
FROM python:3.7-alpine
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \
echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN mkdir app/download_folder
RUN mkdir $HOME/.pip/
COPY ./pip.conf $HOME/.pip/
RUN pip install flask
EXPOSE 5000
CMD ["flask", "run"]
1.4 执行docker build命令进行镜像构建
docker build -t myflask:1.0 .
确认是否构建成功
docker images
1.5 打包成离线镜像
docker image save -o flask.tar myflask:1.0
2. 下载第三方包
以下要在有公网服务器上操作
退出上面创建的目录位置,重新创建一个文件夹
cd ..
mkdir download_folder
2.1 批量导出当前开发环境的包信息
pip freeze > requirements.txt
建议先跳过以下部分,等步骤走完没问题,再回头重新走下面步骤
=============================== 我是分割线 ===============================
将清华pypi镜像库文件列表粘贴到requirement.txt文件中。
import requests
import re
report = requests.request('get','https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/')
# print(report.text)
text_str = str(report.text).split('\n')
with open('requirement.txt','w+') as f:
for i in text_str:
temp = re.findall('<a href="(.*?)/">',i)
# print(i,temp)
if temp != []:
f.write(str(temp[0])+'\n')
=============================== 我是分割线 ===============================
2.2 下载requirements内的包及其依赖到【download_folder】
pip download -r requirements.txt -d download_folder
2.3 建立索引
安装pip2pi
pip install pip2pi
建立索引
dir2pi -S download_folder
然后文件夹内就出现了一个simple文件夹,这里的内容就和阿里、清华、豆瓣的源差别没那么大了。
2.4 编写test.py和files.html
退出上面创建的目录位置,重新创建一个文件夹
cd ..
mkdir myapp
cd myapp
from flask import Flask, render_template, send_file, abort
import os
app = Flask(__name__)
UPLOAD_FOLDER = './download_folder'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def get_files_and_folders(path):
files_and_folders = []
for item in os.listdir(path):
item_path = os.path.join(path, item)
if os.path.isdir(item_path):
files_and_folders.append((item, 'folder'))
else:
files_and_folders.append((item, 'file'))
return files_and_folders
@app.route('/', defaults={'req_path': ''})
@app.route('/<path:req_path>')
def dir_listing(req_path):
# Joining the base and the requested path
abs_path = os.path.join(UPLOAD_FOLDER, req_path)
# Return 404 if path doesn't exist
if not os.path.exists(abs_path):
return abort(404)
# Check if path is a file and serve
if os.path.isfile(abs_path):
return send_file(abs_path)
# Show directory contents
files = os.listdir(abs_path)
return render_template('files.html', files=files)
if __name__ == '__main__':
app.run(debug=True)
创建templates文件夹,再创建一个files.html
mkdir templates
cd templates
{% for file in files %}
{% if not file.endswith('.html') %}
<a href="{{ (request.path + '/' if request.path != '/' else '') + file }}">
{{ file }}
</a>
<br />
{% endif %}
{% endfor %}
2.5 测试
python myapp/test.py
3. 加载离线镜像
以下要在目标服务器上操作
把上述第一步的镜像和第二步创建的文件上传到目标服务器
3.1 加载离线镜像
docker load -i flask.tar
3.2 运行docker服务
docker run --name myapp --rm -d -p 7080:5000 -v ./myapp:/app -v ./download_folder:/download_folder -e FLASK_APP=/app/test.py myflask:1.0 flask run -h 0.0.0.0
4. 结束
以上就是用flask 搭建内网的步骤。用了docker部署。
也可以尝试在这里pip镜像源。
pip config set global.index-url http://127.0.0.1:70800/simple/
参考链接
Docker离线打包镜像和导入镜像
python flask 浏览带文件的目录
构建docker的flask镜像
搭建自己的pypi镜像库