首先拉取mysql的鏡像,這里用的mysql5.7.6
docker pull mysql:5.7.6
鏡像拉取完成后啟動:
docker run --name my-mysql -d -p 3306:3306 -v /usr/local/my-mysql/conf:/etc/mysql/conf.d -v /usr/local/my-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.6
利用dockerfile構(gòu)建python3.9.11+uwsgi+nginx
FROM python:3.9.11
# 為鏡像添加標(biāo)簽
LABEL version="v1" description="Docker deploy Flask" by="guochunbiao"
RUN mkdir /opt/flask_app
COPY ./bask_flask /opt/flask_app/bask_flask
COPY ./dist /opt/flask_app/dist
COPY ./site-pages /usr/local/lib/python3.9/site-packages
COPY ./nginx.conf /etc/nginx/nginx.conf
# 配置工作目錄
WORKDIR /opt/flask_app
# 在鏡像容器中執(zhí)行命令
RUN pip install Flask && pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple/
#RUN pip install Flask && pip install -r request.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
#安裝nginx
apt-get update
apt-get install nginx
apt-get install vim
構(gòu)建:
docker build -t mydemo .
flask配置:
#基本項(xiàng)目創(chuàng)建 pip freeze > requirements.txt
安裝:pip install -r?requirements.txt
#安裝flask-sqlalchey flask-migrate mysql數(shù)據(jù)庫 pip install flask-sqlalchemy flask-migrate #安裝 flask-cors解決跨域訪問 pip install flask-cors 數(shù)據(jù)庫遷移 創(chuàng)建遷移數(shù)據(jù)庫 flask db init 生成遷移腳本 flask db migrate -m "add user tables" 將遷移腳本應(yīng)用到數(shù)據(jù)庫中 flask db upgrade 這個(gè)執(zhí)行前確保,alembic_version的標(biāo)號是最新的,不是手動更新在migrations->versions目錄下 將遷移腳本回滾 flask db downgrade
celery:
啟動redis celery -A auto.celery worker -l info -P eventlet
微信支付python的庫
pip3.9 install wechatpayv3==1.2.35 -i https://pypi.tuna.tsinghua.edu.cn/simple/
--link redis:redis-server flask容器就可以讀取redis容器redis服務(wù)了:
docker pull redis:5.0.3
docker run --name redis -d redis:5.0.3 redis-server --appendonly yes
說明:
- 使用Docker運(yùn)行一個(gè)名為"redis"的容器。
- 使用"redis:5.0.3"這個(gè)Docker鏡像來創(chuàng)建這個(gè)容器。這個(gè)鏡像是Redis數(shù)據(jù)庫的一個(gè)版本。
- "-d"參數(shù)表示容器將在"detached"模式下運(yùn)行,也就是說這個(gè)容器將在后臺運(yùn)行。
- "redis-server --appendonly yes"是傳遞給容器的命令,它將啟動一個(gè)Redis服務(wù)器并開啟append-only模式。這個(gè)模式會把所有的修改操作都記錄下來,以便在數(shù)據(jù)庫重啟后可以通過這些記錄恢復(fù)數(shù)據(jù)。
docker run --name flask -p 5000:5000 -p 3000:3000 --link redis:redis-server -itd auto_flask_nginx_v1.0:v1.0
說明:
- 使用 Docker 運(yùn)行一個(gè)名為 "flask" 的容器。
- 使用 "auto_flask_nginx_v1.0:v1.0" 這個(gè) Docker 鏡像來創(chuàng)建這個(gè)容器。
- "-p 5000:5000" 和 "-p 3000:3000" 參數(shù)將容器內(nèi)的端口 5000 和 3000 分別映射到主機(jī)的端口 5000 和 3000,這樣你就可以通過主機(jī)的這兩個(gè)端口來訪問容器內(nèi)的服務(wù)了。
- "--link redis:redis-server" 參數(shù)將鏈接名為 "redis" 的容器到 "flask" 容器,并在 "flask" 容器中用 "redis-server" 這個(gè)名字來引用 "redis" 容器。這樣,"flask" 容器就可以通過 "redis-server" 這個(gè)名字來訪問 "redis" 容器提供的服務(wù)了。
- "-itd" 參數(shù)表示容器將在 "detached" 模式下運(yùn)行,并以交互模式打開一個(gè)偽終端。
# 獲取access_token用來獲取微信用戶openid
def secret_token(code, user):
redis_conn = redis.Redis(host='redis-server', port=6379)
is_key = redis_conn.hget('{}_zc_token'.format(user), 'wx_token')
if is_key:
return is_key
else:
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code".format(
APP_ID,
APP_SECRET, code)
response_data = requests.get(url)
eval_resp = eval(response_data.content)
redis_conn.hset('{}_zc_token'.format(eval_resp.get('openid')), 'wx_token', response_data.content)
redis_conn.expire('{}_zc_token'.format(eval_resp.get('openid')), 7100)
return response_data.content
參考連接:
http://hk.javashuo.com/article/p-kgdqsqip-bv.html
uwsgi.ini配置:
[uwsgi]
#項(xiàng)目目錄
chdir=/opt/flask_app
#指定項(xiàng)目的應(yīng)用,固定寫法,承接上面的項(xiàng)目目錄
module=auto:app
wsgi-file=/opt/flask_app/auto.py
callable=app
#sock文件存放目錄,方便nginx進(jìn)行sock連接交互
socket=/opt/flask_app/uwsgi_log/uwsgi.sock
#并發(fā)進(jìn)程
workers=5
#進(jìn)程id存放文件
pidfile=/opt/flask_app/uwsgi_log/uwsgi.pid
#啟動的ip及端口
http=0.0.0.0:5000
# 對應(yīng)app.py文件中Flask對象對應(yīng)的變量名
callable=auto
#靜態(tài)文件映射,第一個(gè)等于代表Django里面的別名,第二個(gè)等于后面是Django里面的真實(shí)路徑
#static-map=/static=/opt/AutomationPlatform/frontend/static/
#啟動的用戶和組
uid=root
gid=root
#啟用主進(jìn)程
master=true
#自動移除unixSocket和pid文件當(dāng)服務(wù)停止的時(shí)候
vacuum=true
#序列化接受的內(nèi)容,如果可能的話
thunder-lock=true
#啟用線程
enable-threads=true
#設(shè)置自中斷時(shí)間
harakiri=36000
#設(shè)置緩存
post-buffering=1024
#日志存放目錄,方便拍錯(cuò)
daemonize=/opt/flask_app/uwsgi_log/uwsgi.log
啟動:
uwsgi --ini uwsgi.ini
停止:
uwsgi --stop uwsgi_log/uwsgi.pid
部署Vue3到Nginx和設(shè)置請求轉(zhuǎn)發(fā)需要以下步驟:
-
構(gòu)建Vue3項(xiàng)目:在項(xiàng)目目錄下運(yùn)行
npm run build
命令。這會生成一個(gè)dist
目錄,里面包含構(gòu)建后的靜態(tài)文件。 -
部署到Nginx:將
dist
目錄下的所有文件復(fù)制到Nginx的web目錄下,例如/usr/share/nginx/html/
。 -
配置Nginx轉(zhuǎn)發(fā)請求:在Nginx的配置文件中添加一個(gè)新的server塊。例如:
server { listen 80; server_name yourdomain.com; location / { root /usr/share/nginx/html; # Vue3項(xiàng)目在Nginx的路徑 index index.html; try_files $uri $uri/ /index.html; # 用于支持Vue的history模式 } location /api { proxy_pass http://backend:3000; # 假設(shè)后端服務(wù)運(yùn)行在3000端口 } }
-
/api
路徑下的所有請求都會被轉(zhuǎn)發(fā)到后端服務(wù)。文章來源:http://www.zghlxwxcb.cn/news/detail-730079.html -
重啟Nginx:最后,你需要重啟Nginx以應(yīng)用新的配置。在Linux上,你可以使用
sudo systemctl restart nginx
命令。文章來源地址http://www.zghlxwxcb.cn/news/detail-730079.html
到了這里,關(guān)于docker+mysql+flask+redis+vue3+uwsgi+docker部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!