requirements.txt2、創(chuàng)建虛擬環(huán)境python-mvenvvenv(這個(gè)是虛擬環(huán)境名稱)3、激活虛擬環(huán)境#進(jìn)入venv虛擬環(huán)境下的bin目錄,執(zhí)行sourceactivate4、上傳項(xiàng)目到服務(wù)器(復(fù)制,gitpull" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python項(xiàng)目部署

系統(tǒng) 1665 0

目錄

一、方法一:通過正常方法(low)

二、通過腳本的方式進(jìn)行項(xiàng)目部署

三、通過docker部署(完美的辦法)


一、方法一:通過正常方法(low)

1、生成requirements文件,即項(xiàng)目依賴的包

            
              # cd 到項(xiàng)目目錄下
pip freeze >requirements.txt
            
          

2、創(chuàng)建虛擬環(huán)境

            
              python -m  venv  venv(這個(gè)是虛擬環(huán)境名稱)
            
          

3、激活虛擬環(huán)境

            
              # 進(jìn)入venv虛擬環(huán)境下的bin目錄,執(zhí)行
source activate
            
          

4、上傳項(xiàng)目到服務(wù)器(復(fù)制,git pull/clone都可以)

5、導(dǎo)入項(xiàng)目所需依賴包

            
              # 進(jìn)入項(xiàng)目目錄,執(zhí)行
pip install -r requirements.txt
            
          

6、添加本地項(xiàng)目到環(huán)境變量

            
              export PYTHONPATH=$PYTHONPATH:{project_dir}

# 也可在程序代碼中使用sys.path.append()進(jìn)行追加
            
          

7、進(jìn)入項(xiàng)目下執(zhí)行main.py等主程序

二、通過腳本的方式進(jìn)行項(xiàng)目部署

#### 首先創(chuàng)建虛擬環(huán)境

pip install virtualenv

virtualenv venv

source venv/bin/activate

pip install -r requirements

后續(xù)寫的腳本文件中的python路徑為:

venv/bin/python的絕對路徑

?

1、編寫腳本文件

示例:

            
              vim?entity_extract.sh
            
          
            
              #!/usr/bin/env bash
# 第一行是說明使用的什么腳本語言,這里是 bash, 固定用法
# workdir 是一個(gè)路徑,即先切換到這個(gè)目錄下,然后啟動(dòng)服務(wù) (啟動(dòng)命令: python app.py)。其實(shí)不切換應(yīng)該也可以
workdir=/Users/llm/PycharmProjects/solar-clover-backend

# 啟動(dòng)函數(shù),切換路徑=》其實(shí)就是 python app.py 。 前面一段指明是哪個(gè)路徑下的python, 后面是 app.py 的路徑, & 表示以后臺(tái)方式啟動(dòng)(這里還不是很了解)
daemon_start() {
    cd $workdir
    /Users/llm/env_workspaces/flask/bin/python /Users/llm/PycharmProjects/solar-clover-backend/app.py &
    echo "Server started."
}

# 停止函數(shù),思路就是我們要找到這個(gè)進(jìn)程號,然后把它 kill 掉
# 進(jìn)程號尋找: 即 ps -ef|grep 命令, grep 用來過濾,awk 用來將過濾結(jié)果進(jìn)行整理。 像這個(gè)命令,過濾出來有很多列,但我們只要進(jìn)程號那一列,所以就是 {print $2}, 表示進(jìn)程號那一列
# BEGIN{ ORS="," } 表示以逗號分隔每個(gè)進(jìn)程號, 不寫默認(rèn)換行符分隔。
# 輸出其實(shí)是一個(gè)字符串, 把它變?yōu)閿?shù)組,因?yàn)槲乙〕龅谝粋€(gè)將進(jìn)程殺死。 arr=... 這句話就是將 pid 變量里的內(nèi)容轉(zhuǎn)換為數(shù)組,存入arr。
# 接下來就是取到 arr 第一個(gè)進(jìn)程號, 使用 kill 命令殺死

daemon_stop() {
    pid=`ps -ef | grep 'python /Users/llm/PycharmProjects/solar-clover-backend/app.py' | awk 'BEGIN{ ORS="," }{ print $2 }'`
    arr=(`echo ${pid} | tr ',' ' '`)
    echo ${arr[1]}
    kill ${arr[1]}
    sleep 3
    echo "Server killed."
}

# $1 表示命令行交互輸入的第一個(gè)參數(shù)。 我們使用 ./dev.sh start 來運(yùn)行腳本啟動(dòng)服務(wù)(因?yàn)榇四_本文件名稱為 dev.sh), start 位置上的變量就是傳入的第一個(gè)位置上的參數(shù),也可以變?yōu)?stop, restart
case "$1" in
  start)
    daemon_start
    ;;
  stop)
    daemon_stop
    ;;
  restart)
    daemon_stop
    daemon_start
    ;;
  *)
    echo "Usage: ./dev.sh {start|stop|restart}"
    exit 1
esac
exit 0
            
          

2、接下來的流程:

測試啟動(dòng),停止,重啟

            
              ./entity_extract.sh start 開啟服務(wù)
./entity_extract.sh stop  停止服務(wù)
./entity_extract.sh restart 重啟服務(wù)
            
          

?放到系統(tǒng)服務(wù)器清單內(nèi)

            
              cp entity_extract.sh /etc/init.d    # 將腳本復(fù)制到init.d,這個(gè)目錄里面放系統(tǒng)服務(wù)腳本文件
chkconfig --add entity_extract.sh    # 將davids.sh添加到系統(tǒng)服務(wù)清單內(nèi)

chkconfig --list                 #查看davids.sh是否在系統(tǒng)服務(wù)清單內(nèi)
            
          

重啟服務(wù)器,查看Python腳本是否隨系統(tǒng)啟動(dòng)而啟動(dòng)

重點(diǎn):

            
              *****上述辦法不能用
參考:https://blog.csdn.net/qq_42393859/article/details/88170761
參考2:https://zhidao.baidu.com/question/1958799616349768340.html
            
          

或者直接這樣操作:

            
              # 服務(wù)器開機(jī)啟動(dòng)設(shè)置
sudo cp fw_service.sh /etc/init.d/      # 拷貝腳本到啟動(dòng)目錄下
cd /etc/init.d/                         # 進(jìn)入啟動(dòng)目錄
sudo update-rc.d fw_service.sh defaults 90  # 設(shè)置啟動(dòng)等級


# 注:
1、其中的90表示啟動(dòng)順序,取值范圍是0-99。序號越大的越晚執(zhí)行。

            
          

3、報(bào)錯(cuò)解決

            
              1、執(zhí)行過程中出現(xiàn)/bin/bash^M: 壞的解釋器:沒有那個(gè)文件或目錄錯(cuò)誤,無法正常運(yùn)行。這是因?yàn)閣indows和linux中的換行不一樣

sed -i 's/\r$//' startup.sh

2、如果沒有權(quán)限
chmod +x davids.sh


            
          

三、通過docker部署(完美的辦法)

1、編寫Dockerfile文件

在與項(xiàng)目目錄同級的目錄下,新建Dockerfile文件

            
              vi Dockerfile
            
          

2、編輯Dockerfile,最好手打,最后保存退出

            
              #基于的基礎(chǔ)鏡像
FROM python:3.6
#代碼添加到code文件夾
ADD ./test /code
# 設(shè)置code文件夾是工作目錄
WORKDIR /code
# 安裝支持
RUN pip install flask -i https://pypi.douban.com/simple/
CMD ["python", "/code/main.py"]

            
          

3、在Dockerfile同級目錄, build該Dockerfile

            
              # 鏡像名為:flask_entity_extract 
docker build -t flask_entity_extract .

            
          

出現(xiàn)
Successfully built a69e5b09b454 #鏡像id
Successfully tagged flask_entity_extract?:latest #鏡像名字
即為成功

查看:

            
              docker images
            
          

4、通過創(chuàng)建的鏡像創(chuàng)建容器,同時(shí)開啟端口映射

            
              docker run -it -p 9000:9000 --name flask_entity_extract_server flask_entity_extract
#  it:創(chuàng)建并進(jìn)入; -p 端口映射; --name 容器名;  最后面的是鏡像名
            
          

5、此時(shí)flask服務(wù)已經(jīng)啟動(dòng),其他的docker操作如下:

            
              一、安裝
地址:https://docs.docker.com/install/linux/docker-ce/ubuntu/
卸載:$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新apt:
	$ sudo apt-get update	# 公司服務(wù)器一般別搞
	
	$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
	
	$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
	
	$ sudo apt-key fingerprint 0EBFCD88
	
	$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
   
   # 安裝docker ce
   $ sudo apt-get install docker-ce docker-ce-cli containerd.io
   
   # 查看版本
	docker version
	
	# 卸載當(dāng)前版本
	sudo yum remove docker-ce
	sudo rm -rf /var/lib/docker
	

	systemctl start docker		# 啟動(dòng)docker
	systemctl stop docker		# 停止docker
	systemctl restart docker	# 重啟docker
	systemctl status docker		# 裝態(tài)docker
	systemctl enable docker		# 開機(jī)啟動(dòng)docker
	
	docker info	# 查看docker信息
	docker --help  # docker命令
	
	
	docker images  # 列出所有的鏡像
	docker search centos	# 查詢鏡像
	
	docker pull hello-world		# 默認(rèn)從docker hub下載鏡像
	
	
	docker rmi 鏡像id/鏡像名:標(biāo)簽名
	docker rmi 'docker images -q'	# 刪除所有的docker鏡像
	docker rmi 'docker images -qa'	# 刪除所有的docker鏡像
	
	docker ps  # 查看啟動(dòng)的容器
	docker ps -a # 查看所有容器
	docker ps -f status=exited	# 查看停止的容器
	
	# 通過鏡像開啟容器
					容器名			鏡像名	  進(jìn)入容器
	docker run -it --name=mycentos centos:7 /bin/bash	# 交互式容器的創(chuàng)建
		
	
	docker run -id --name=mycentos1 centos:7 
	docker exec -it mycentos1 /bin/bash
	
	exit	# 關(guān)閉容器并退出
	ctr+p+q 	# 退出容器,不關(guān)閉
	
	docker start 容器名/容器id  # 啟動(dòng)容器
	docker stop 容器名/容器id  # 停止容器
	docker restart 容器名/容器id  # 重啟容器
	
	docker attach 容器名/容器id    # 進(jìn)入容器
	
	docker rm  容器名/容器id		# 刪除容器,前提是該容器處于關(guān)閉狀態(tài)
	docker rm -f $(docker ps -q)	# 強(qiáng)制(-f)刪除所有
	
	# 目錄掛載 -v
	docker run -it --name=a3 -v home/docker_data/gaofei_data:/tmp tfgpu1.13.1-ubuntu16.04-cuda10.0-v1.0:latest /bin/bash		# 如果報(bào)錯(cuò),執(zhí)行下面命令
	docker run -it --name=a3 -v home/docker_data/gaofei_data:/tmp tfgpu1.13.1-ubuntu16.04-cuda10.0-v1.0:latest /bin/bash --privileged=true
	
	docker cp 宿主機(jī)文件路徑  容器名:容器路徑
	docker cp 容器名:容器路徑  宿主機(jī)文件路徑
	注意:容器之間不可以拷貝
	
	
	# 查看容器詳細(xì)信息
	docker inspect 容器名/容器id
	查看掛載:docker inspect 容器名/容器id | grep Mounts -A 100
	
	# 備份和遷移
	docker commit 容器名  保存的鏡像名
	# 將鏡像轉(zhuǎn)換為壓縮文件導(dǎo)出
	docker save -o 輸出的壓縮文件名(.tar) 鏡像名
	# 通過壓縮文件恢復(fù)鏡像
	docker rmi 鏡像名
	docker load -i 壓縮文件名
	docker images 查看鏡像名
	
	# 繼承容器
	docker run -it --name 容器2名稱 --volumes-from 容器1名稱 鏡像名
						  新建容器     繼承自       被繼承容  鏡像的名稱
						  
						  
						  
	
	
	
            
          

?

?

?

參考:

web項(xiàng)目部署:http://www.jiaochengku.net/ITjiaocheng/ruanjianbiancheng/12805.html

python項(xiàng)目部署(全):https://www.lanshiqin.com/d8d0505b/

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 夜夜视频| 污污的网站免费观看 | 91短视频app下载| 91无限资源 | 黄网免费看 | 911影院| 91看片官网| 91资源在线观看 | 日本黄页网站在线观看 | 五月色开心婷婷丁香在线 | 欧美日韩成人网 | 亚洲欧美在线视频免费 | 欧美精品一区二区三区在线 | 日韩欧美在线视频 | 男女配种超爽免费视频 | 综合久久久久 | 性xxxxx | 日本三级2018亚洲视频 | 久久久国产精品x99av | 久久a区 | 国产成人精品免费视频大全最热 | 一卡二卡三免费乱码 | 色综合99天天亚洲 | 鲁一鲁综合 | 欧美顶级xxxxbbbb| 国产成人精品一区二区仙踪林 | 中文字幕网在线 | 91看片淫黄大片欧美看国产片 | 欧美伦交| 波多野一区二区 | 欧美区在线 | 国产精品点击进入在线影院高清 | 国产精品久久久久久久久久免费 | 日韩深夜福利视频 | 99热视 | 亚洲欧美在线观看 | 欧美精品免费xxxxx视频 | 性xxxxx视频 日韩在线观看视频一区 | 日本中文字幕高清 | 亚洲无线视频 | 天天夜天干天天爽 |