heroku部署python-docker的web服务器

注册heroku

https://dashboard.heroku.com/

在电脑上可能有问题,无法显示验证,会注册失败

在这里插入图片描述

需要使用技术上网,并且在手机上操作会更流畅

登录之后创建一些的app
在这里插入图片描述
其实创建一个就行,那个是在Heroku中内部划分不同的步骤
命名规范要求中间有-,不是两个名字,-前后是一个整体

安装Heroku-Cli

centos-linux操作系统下
其他见官网文档

curl https://cli-assets.heroku.com/install.sh | sh

登录

登录客户端

heroku login

或者

heroku login -i

登录容器

heroku container:login

安装docker

yum -y install docker

启动docker

systemctl start docker

常见docker命令

打包

docker build -t 打包名称 -f Dockfile .

运行

docker run -p 8080:8080 -d 打包名称:latest

8080 是端口映射,如果有端口就需要写

查看容器和删除容器

查看容器
docker ps
删除容器
docker rm 刚刚dockerps出来的id号码写到这里

查看镜像和删除镜像

查看镜像
docker images
删除镜像
docker rmi 刚刚dockerimages出来的id号码写到这里

开启和结束容器

docker start dockerps出来的id号码写到这里
docker stop dockerps出来的id号码写到这里

打包docker

进入到docker文件夹下
在这里插入图片描述
执行命令打包

docker build -t pythondocker -f Dockfile .

注意:
Dockfile 是自己Dockerfile的名字,建议固定写成这样,Heroku可能会不识别其他符号,注意区分大小写
pythondocker 是容器的名字,自己随便起,注意和下面名称要统一

注册docker到Heroku

docker tag pythondocker:latest registry.heroku.com/***/web

pythondocker 是容器的名字,自己随便起,注意和下面名称要统一

registry.heroku.com/***/web 自己注册的应用容器服务器

*** 表示自己容器的名称

在这里插入图片描述
这些名称,随便写一个,注意要和下面统一

上传docker到Heroku

docker push registry.heroku.com/***/web

registry.heroku.com/***/web 这个注意要和上面的统一

上传容器到Heroku

heroku container:release web --app  ***

注意要登录容器,否则会上传失败

*** 要和上面的名字统一

启动应用

进入app,点击open就可以进入了
在这里插入图片描述

查看日志

 heroku logs --tail -a ***

*** 要和上面的名字统一

常见问题

动态绑定端口号

需要动态绑定端口号,否则会出现

heroku[web.1]: State changed from crashed to starting
heroku[web.1]: Starting process with command `python /code/server3.py`
app[api]: Release v9 created by user ***@icloud.com
app[api]: Deployed web (350d1bd5740a) by user ***@icloud.com
heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
heroku[web.1]: Stopping process with SIGKILL
heroku[web.1]: Process exited with status 137

Dockerfile书写格式

Dockerfile中要这样写,传入$POST

#基于的基础镜像
FROM python:3.4

#代码添加到code文件夹
ADD ./pythonProject /code

# 设置code文件夹是工作目录
WORKDIR /code

# 安装支持
#RUN pip install -r requirements.txt

CMD python /code/server3.py $PORT

Python文件书写格式

在server.py中要通过参数获取

serverPort = int(sys.argv[1])

完整结构如下

if __name__ == '__main__':

    serverSocket = socket(AF_INET, SOCK_STREAM)
    serverPort = int(sys.argv[1])
    serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    serverSocket.bind(("", serverPort))

    serverSocket.listen(5)
    print('The server is running')
    # Main web server loop. It simply accepts TCP connections, and get the request processed in seperate threads.
    while True:
        # Set up a new connection from the client
        connectionSocket, addr = serverSocket.accept()
        # Clients timeout after 60 seconds of inactivity and must reconnect.
        connectionSocket.settimeout(600)
        # start new thread to handle incoming request
        _thread.start_new_thread(process, (connectionSocket,))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值