最近随着实习培训的脚步完成了一个简单的spring MVC的Web工程,时下各种“云服务器”也是火热,趁热打铁想弄清楚到底怎么发布一个自己的网站,查资料+实践总算是搞清楚了前后因果,特此图文详细记录一下步骤,望可以帮助那些曾经和我一样迷惑的童鞋。
(PS.不要被各种高大上的名称、英文缩写欺骗了,也别觉得“云”就是很高大上的东西)
欢迎尝试访问本问介绍内容的最终效果(如果没有被我关闭):
酷你音乐 http://kunimusic.duapp.com/
正式开始部署前,我想先按我自己的理解介绍下BAE以及现在流行的所谓的“云服务”。
什么是服务器?
进行Web开发,必定涉及服务器的概念。其实不仅仅是web,现在几乎所有软件、移动端基本都有个服务器来进行数据“云存储”。在本地开发完成Web项目后,要使得能从公网访问,必须将Web部署到一个接入公网、拥有公网IP的计算机,并让该计算机24小时不停机地接收访问。服务器本质就是个强大的计算机,为该服务器的IP地址购买域名后,即可通过域名访问该服务器,实现网站的访问。
什么是云服务器/虚拟主机?
大公司可以购置强大的计算机并接入公网当做自己的服务器,小公司可以从电信机房租用。但这些方式对于想建立个人小网站,或是学生实践web开发来说都是十分昂贵的成本。所以,虚拟主机、云服务器就出现了。一些服务商购置强大的服务器,并把这些服务器划分空间、按需要出租给需要的开发者。开发者根据不同的配置需求,只需支付低廉的费用即可获得一个云服务器(一般是云服务器的一部分空间)来部署自己的Web项目(和其他需要网络访问的资源)。
什么是BAE?SAE?ECS?
BAE:(Baidu App Engine,简称BAE)百度应用引擎,是百度推出的云服务,支持PHP/Java/Node.js/Python等各种应用,还提供如MySQL等扩展服务。只需上传应用代码,BAE自动完成运行环境配置、应用部署等工作。国内除了BAE,还有新浪的SAE,阿里的ECS。
1、注册百度账号、实名认证。
首先需要注册百度账号,进行实名认证后可以购买BAE服务:
https://cloud.baidu.com/product/bae.html
可以看到,价格还是非常便宜的。
2、添加部署
进入部署界面,在这里按需求选择自己的服务器配置,该页面也会显示当前配置的价格。
选择模板,不是很懂,这里选择自定义
部署信息:
域名:填写免费的二级域名,即之后通过这个域名访问部署的Web。
类型:部署项目的代码类型,这决定了BAE如何组织你的代码。我的开发环境是Java+Tomcat,之前选择成了node.js,导致后面不知道如何配置访问入口(完全不一样的体系嘛)。
代码版本工具:这是你与BAE沟通代码的手段,BAE不会给你个IP让你远程桌面到云服务器,而是给你一个地址,通过SVN或者Git工具连接后上传/维护代码。没接触过SVN,所以后文还有对SVN的使用介绍。
选好配置后,可以看到当前配置的价格:4毛钱1天。当然,后面不需要的时候可以随机删除部署就不扣钱了。
在支付完成后即可开通成功,可进入控制台查看自己的部署情况。
点击上图的域名,可以进入默认的页面。
3、部署自己的Web项目
点击部署列表中的“代码管理方式”,可以获得SVN或git的管理地址,如https://svn.duapp.com/appidaa7s3fag93
登录的账号密码是购买BAE服务的百度账号密码。可以在浏览器访问这个地址,看到目前的代码配置:一个war包(里面包含代码)和一个配置文件app.conf。通常,部署项目时上传一个war即可,然后在app.conf配置各种高级访问功能。
(还没完,SVN的使用见后文)
什么是SVN?
SVN是Subversion的简称,是一个开放源代码的版本控制系统,说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。SVN客户端使用Tortoise SVN (小乌龟)
SVN的使用过程是,在你的计算机上开一个文件夹作为仓库(repository),开发成员都可以往这个仓库添加/删除/修改内容。SVN在本地建立一个工作文件夹,将仓库上的内容下载(checkout)到本地。之后可以在这个工作文件夹的改动同步(commit)给仓库,以达到同步的目的。然后,仓库(repository)可以是本地硬盘的一个文件夹,也可以是网络上的一个管理地址,如BAE提供的SVN地址。
SVN具体使用流程
1、安装Tortoise SVN :https://tortoisesvn.net/downloads.html
2、SVN主要通过右键菜单进行操作,先在硬盘上建立仓库(repository):在E:\svn,在仓库文件夹下 右键 TortoiseSVN->Create repository here
3、导入项目
TortoiseSVN->Import的作用是,将你当前右击的文件夹(比如工程文件夹)导入到仓库(本地或者网上的仓库)。这样,团队开发中其他队员就可以从这个仓库下载到你的版本。
这里略过,我们直接使用SVN checkout从BAE的SVN仓库将默认代码下载到本地。
4、SVN Checkout:将BAE的SVN管理地址上的内容输出到本地。
输入仓库地址:BAE控制台的代码管理方式中获得的SVN管理地址确认,输入用户名密码(购买BAE服务的百度账号密码)
输出目录为E:\svn\kuni
完成后可以看到E:\svn\kuni文件夹下多了两个文件:app.conf、ROOT.war,这跟之前通过浏览器浏览SVN管理地址看到的内容列表一致。之后我们可以通过对E:\svn\kuni文件夹进行checkout和commit来操控BAE上的SVN仓库
说一下war包,ROOT.war是一个压缩包,MyEclipse等工具均可以将项目代码编译后将相关类、资源、html、css等文件打包成war。解压ROOT.war可以看到:其中,index.jsp就是我们登录域名时看到的百度默认页面的代码,此处就不贴图了。
5、打包项目为war包,通过svn上传到BAE
MyEclipse->右击项目->Export->Java EE->WAR File,命名为ROOT.war(百度的规定),并替换掉E:\svn\kuni下已有的百度默认war包。
因为我们改变了kuni文件夹的内容,通过SVN Commit(右键菜单中)将此次改动更新到仓库(BAE的SVN仓库)。完成后,可以在BAE控制台看到有新版本的提示,注意,此时只是SVN仓库内容变化,但是对外公开的访问内容(Web内容)还没有变化,也就是新的代码并没有部署。点击快捷发布,进行本次改动的部署,也可在“更多操作-发布设置”中设置自动发布,在SVN更新内容后自动进行发布。
6、发布成功,进入域名即可看到新的页面内容。第一次通过公网访问到自己的页面,还是有点小激动的。哈哈!
新项目第一次从本地改为网络部署,肯定会遇到很多问题。比如我就遇到了项目中将访问地址写死为本地项目文件夹的问题,这样在BAE访问时是无效的。一开始一直以为是数据库连接的问题,后来查看了BAE的日志,才发现是路径错了。所以,要学会看日志。
日志入口:BAE控制台-部署列表-更多操作-查看日志。
可以查看多种日志,如access.log查看部署项目的访问情况,catalina.log主要查看程序运行日志,我就是在这里查到问题所在的。
目前BAE提供1GB容量,256M内存的免费mysql,可以通过“BAE控制台-扩展服务”添加新的MySQL服务。完成后,点击数据库分配的数据库名可以看到数据库的详细信息,并可以通过phpmyAdmin对数据库进行界面访问。
这里主要说下程序中连接这个MySQL的注意事项
首先,如上图红字说明,BAE提供的MySQL数据库只能通过部署的应用访问,不能通过别的途径访问。
另外,在本地开发时的MySQL连接字符串是:
jdbc:mysql://localhost:3306/dbkuni?user=myusername&password=mypwd&characterEncoding=utf-8
要访问BAE提供的数据库,要将连接字符串根据上图信息改为:
jdbc:mysql://sqld.duapp.com:4050/SgKYxxxx(数据库名称)?user=6a79xxxxx(AK)&password=641d7xxxxx(SK)&characterEncoding=utf-8
其中,用户名AK、密码SK要在安全认证中获取(点上个图的小问号)
很多问题其实最全的解答就是BAE的官方文档了
https://cloud.baidu.com/doc/BAE/index.html