手工部署容器应用——容器虚拟机¶
概述¶
如果您的应用的依赖包比较复杂,无法直接上传或者通过新浪云的云端构建程序构建的时候,您可以通过线上手工部署的方式来部署您的程序,手工部署的过程和使用云主机、VPS等差不多,下文中我们将一步一步教您如何在新浪云手工部署一个应用。
警告
手工部署主要用来在线构建容器镜像、运行调试,线上环境请 一定要打成镜像 后再部署。
创建实例¶
首先,进入云应用首页,点击『创建应用』创建一个新的应用。应用类型选择『自定义 / 容器 / 手工部署』。
按照自己的需求,选择一个操作系统镜像,选择机器的配置,输入应用名,然后点击创建应用,一个新的容器虚拟机就创建成功了。
登录实例¶
虚拟机创建成功后,控制台会跳转到『容器管理』页面,等容器虚拟机启动成功(状态为运行)时,点击容器虚拟机右侧的『终端』,就可以直接在 WEB 中直接进入 ssh 登录进容器虚拟机了。
你也可以通过 SSH/SFTP 客户端工具来登录管理实例,详细见: 如何使用 SSH/SFTP 客户端登录容器虚拟机 。
安装应用程序¶
进入容器虚拟机的 ssh 终端后,就可以跟普通的虚拟机一样的的管理了。(下文中,我们 CentOS-7 系统安装配置运行一个 Nginx 服务器为示例)。
$ yum install epel-release
$ yum install nginx
启动应用程序¶
现在访问应用 URL,页面会返回 502 ,因为现在还没有进程在处理请求。
应用创建后,新浪云会自动给容器虚拟机添加一个 HTTP 负载均衡,您只需要在容器虚拟机中启动一个应用程序,让程序监听在 5050 端口上,就可以通过应用的二级域名 http://应用名.applinzi.com 来访问自己的应用程序了。
修改 Nginx 的配置文件 /etc/nginx/nginx.conf ,修改以下配置:
daemon off;
worker_processes 2;
http {
...
server {
listen 5050 default_server;
...
}
}
警告
注意其中的 daemon 选项,所有启动的应用程序必须启动在前台,不能是后台程序。
我们在终端中启动 Nginx 。
$ nginx
现在,再访问应用的 URL,就能看到 Nginx 的 Welcome 页面了。
调试和测试时,您可以直接在 ssh 终端中启动应用程序,但是如果虚拟机重启或者应用程序异常退出,通过 ssh 终端启动的程序不会被系统自动重启,如果需要自己的应用程序能自动重启,你需要使用系统的进程管理工具来启动应用程序,容器虚拟机默认的进程管理工具是 Mint ,在系统的 /etc/ 目录下新建一个配置文件, Procfile ,添加如下配置:
web: nginx
在命令行中执行 mint start web ,即可使用 Mint 来启动 web 进程,现在进程已经由系统来管理,虚拟机如果重启会自动启动该进程。
Mint 进程管理工具¶
Mint 的配置文件为 /etc/Procfile ,Procfile 中每一行定义一个要启动的进程,格式为:
进程名:启动命令
配置示例:
web: go run web.go -a :$PORT
worker: bundle exec ruby worker.rb
Mint 支持如下命令:
$ mint -- 打印帮助信息
$ mint reload -- 重新读取配置文件并重启所有进程
$ mint start XXX -- 启动进程名为 XXX 的进程
$ mint stop XXX -- 停掉进程名为 XXX 的进程
$ mint restart XXX -- 重启进程名为 XXX 的进程
$ mint status -- 打印所有运行的进程运行状况
Mint 会自动重启异常退出的进程,但是如果进程连续 3 次启动不到 1 分钟就退出,Mint 会认为进程无法启动而不再重启。
创建镜像¶
手工部署完一台虚拟机后,你可以给虚拟机创建镜像,在容器虚拟机的右侧选择『打包镜像』。
其中 启动命令 是你要让容器启动后要运行的程序。这个命令必须运行在前台,否则容器会启动失败。
创建出来的镜像可以直接用来启动新的应用,在创建应用的时候选择『自定义/容器/我的镜像』,选择刚才打包出来的镜像即可。
注解
强烈建议在完成环境制作后打包镜像保存。