以下是一个简单的安装方法。
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
2. 本地使用Gradle发布Spring Boot应用
我这里使用Jetty9作为内置的服务器。
// ...
bootRun {
systemProperties = System.properties
}
configurations {
compile.exclude module: "spring-boot-starter-tomcat"
}
dependencies {
// spring boot
compile "org.springframework.boot:spring-boot-starter-web:1.3.0.M5"
compile "org.springframework.boot:spring-boot-starter-jetty"
// ...
}
//...
在本地运行默认使用 src/main/resources/application.yml
作为配置文件,而在production环境中我们系统它支持提供外部的配置文件 application-production.yml
。
./gradlew bootRun # 开发环境下默认使用项目里的application.yml
# 在本地测试使用外部配置文件
./gradlew bootRun -Dspring.config.location=/path/to/application-production.yml
# 发布
./gradlew build
# 运行
java -jar build/libs/SpringBlog-0.1.jar # 默认使用jar包里面的application.yml配置文件
# 使用外部配置文件
java -jar build/libs/SpringBlog-0.1.jar --spring.config.location=/path/to/application-production.yml
3. 在Ubuntu服务器上部署Spring Boot应用
# 上传SpringBlog-0.1.jar到服务器
scp build/libs/SpringBlog-0.1.jar root@your_server_ip:/root/spring-blog/current
# 在服务器上配置生产环境的配置文件
scp application-production.yml root@your_server_ip:/root/spring-blog/current
然后 SSH
登录服务器,修改配置文件 application-production.yml
,试运行应用。
ssh root@your_server_ip
cd spring-blog/current
java -jar SpringBlog-0.1.jar --spring.config.location=application-production.yml
# application-production.yml
server:
address: raysmond.com # 使用域名或者IP,启动之后就可以这个域名或IP访问网站了
port: 80
contextPath:
spring:
profiles:
active: production
thymeleaf:
cache: true
jade4j:
caching: true
dataSource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1/spring_blog
username: root
password:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
hbm2ddl.auto: update
show_sql: false
redis:
host: localhost
port: 6379
4. 如何在Ubuntu中后台运行Spring Boot应用?
推荐使用 nohup
这个命令。
cd /root/spring-blog/current
nohup java -jar SpringBlog-0.1.jar --spring.config.location=application-production.yml \
>../logs/production.log 2>../logs/production.err &
在Ubuntu还可以 /etc/init.d
目录下新建一个脚本,把SpringBlog作为service来运行,这样不用每次都打这么繁琐的命令了。新建一个 /etc/init.d/spring_blog
文件,内容如下:
#!/bin/sh
SERVICE_NAME=spring_blog
HOME=/root/spring-blog
PATH_TO_JAR=$HOME/current/SpringBlog-0.1.jar
PID_PATH_NAME=/tmp/spring_blog.pid
LOG=$HOME/logs/production.log
ERROR_LOG=$HOME/logs/production.err
CONFIG=$HOME/application-production.yml
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]then
cd $HOME/current
nohup java -jar $PATH_TO_JAR --spring.config.location=application-production.yml >$LOG 2>$ERROR_LOG &
echo $! >$PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
stop)
if [ -f $PID_PATH_NAME ]then
PID=$(cat $PID_PATH_NAME)
echo "$SERVICE_NAME stoping ..."
kill $PID
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
restart)
if [ -f $PID_PATH_NAME ]then
PID=$(cat $PID_PATH_NAME)
echo "$SERVICE_NAME stopping ..."
kill $PID
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
cd $HOME/current
nohup java -jar $PATH_TO_JAR --spring.config.location=application-production.yml >$LOG 2>$ERROR_LOG &
echo $! >$PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is not running ..."
fi
esac
现在就可以使用service的方式来运行网站了。
sudo service spring_blog start
sudo service spring_blog stop
sudo service spring_blog restart
5. 在本地自动化部署网站到远程服务器
在本地我用了一个shell脚本和一个python脚本来配合自动化部署。
deploy.sh
使用 gradle
的命令发布jar包,使用 scp
命令吧jar包上传到服务器上;
deploy.py
使用 SSH
远程登录服务器,并在服务器上执行部署命令。
# deploy.sh
#!/bin/bash
SERVER="your_server_ip"
JAR="build/libs/SpringBlog-0.1.jar"
echo "Building $JAR..."
./gradlew build
echo "Upload $JAR to server $SERVER..."
scp $JAR root@$SERVER:/root/spring-blog/
python deploy.py
deploy.py
主要使用了一个 paramiko
库,用于 SSH
远程登录服务器,并执行命令。这个脚本会把服务器上 /root/spring-blog/current/SpringBlog-0.1.jar
备份到 /root/spring-blog/releases
中,并把新发布的jar包放到 /root/spring-blog/current
中,然后重启 spring_blog
服务。
#!/usr/bin/python
import paramiko
import threading
import time
ip = 'your_server_ip'
user = 'root'
password = ''
jar = 'SpringBlog-0.1.jar'
home='/root/spring-blog'
current=home+"/current"
releases=home+"/releases"
def execute_cmds(ip, user, passwd, cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,user,passwd,timeout=5)
for m in cmd:
print m
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y")
out = stdout.readlines()
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
print 'Start deploying %s to server %s'%(jar, ip)
now = time.strftime("%Y%m%d%H%M%S")
cmd = [
'echo Stop spring_blog service... &&service spring_blog stop',
'echo Flush all redis cache data... &&redis-cli -r 1 flushall',
'echo Stop redis server... &&service redis_6379 stop',
'echo Use new jar... ' + \
' &&mv ' + current + '/' + jar + ' ' + releases + '/' + now + '_' + jar ,
'mv ' + home + '/' + jar + ' ' + current + '/' + jar,
'echo Stop redis... &&service redis_6379 start',
'echo Start spring_blog service... &&service spring_blog start ' + \
' &&echo All done.'
]
a=threading.Thread(target=execute_cmds, args=(ip,user,password,cmd))
a.start()
配置完以后,在本地写完代码就可以运行 ./deploy.sh
一键部署到远程服务器了。
使用方法如下:一、把所有软件放入deploy文件夹。
二、zip deploy 文件夹
三、用 FileZilla 上传deploy.zip到服务器对应目录,系统安装U盘插到服务器上面 (1start.sh 中的 run/media/root/CT7/ ,根据实际情况修改)
四、到服务器对应目录unzip deploy.zip (没有按照unzip的先执行 yum install unzip)
五、执行 cd deploy &&chmod +x *.sh
六、执行 1start.sh;
七、按照打印出来的MySQL初始密码 登陆MySQL :
1.mysql -uroot -p 回车;
2.输入MySQL初始密码 ,回车;
3.执行以下sql,此处 PwdTest123 :
set password=password('PwdTest123')
use mysql
grant all privileges on *.* to 'root'@'%' identified by 'your_password';
update mysql.user set password=PASSWORD('PwdTest123')where User='root';
flush privileges
create database TestDB
exit
八、执行 4restart.sh,重启以后部署就完成了。
U盘(英语:USB flash drive),是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,主要目的是用来存储数据资料。它主要由外壳和机芯组成,通过USB接口与电脑连接,实现即插即用,使用非常简单方便,而且它的安全性好。它主要应用于个人数据的存储、电脑修复、系统管理和携带应用程序到其他的电脑。
Ambari是Apache的开源项目,它帮助用户在GUI页面上简单的部署、管理、监控Hadoop集群环境。Ambari支持的Hadoop组件包括HDFS、Hive、HBase、Spark、Yarn等,HortonWorks官方也是采用Ambari来完成自家HDP套件的安装、管理及监控的。除了预置的组件之外,Ambari还支持自定义组件的安装,同时,支持RESTful的API,继而可以通过命令行等方式调用Ambari来完成一些自动化的任务。
本文共分为两部分,第一部分介绍如何在Docker虚拟化环境中部署Ambari;第二部分介绍如何基于Ambari来部署和管理Hadoop集群。
### 环境信息
* Docker发行版:Docker for Mac
* Docker版本:17.06.2-ce
* Docker容器OS:Ubuntu 14.04
* Ambari版本:2.5.2.0
Docker环境准备
拉取Docker镜像:在宿主机上执行命令docker pull ubuntu:14.04从远端仓库中获取Ubuntu的镜像,也可以获取其他OS的镜像,本文以Ubuntu为例
启动Docker容器:执行如下命令,以ubuntu:14.04镜像为基础启动容器:
docker run -itd --name ambari_new -p 8080:8080 -p 3306:3306 -v /Users/yuxiaolei/Workspace/dockerShared:/dockerShared ubuntu:14.04 /bin/bash
由于Ambari启动Web程序的时候占用8080端口,因此要从Docker宿主机上访问Ambari页面,需要通过参数 -p 来制定端口映射;
作为新手,笔者在容器内部署好Ambari之后,才发现Web页面的8080端口和MySQL的3306端口(可选)没有暴露给Docker宿主机,也就没法从宿主机上通过浏览器来登陆Ambari,因此必须想办法在已有容器上开放端口。
有两个方法:
1)如果宿主机为Linux系统,则修改iptables防火墙来指定端口映射规则;
2)如果是非Linux系统,可以将已装Ambari的容器commit为新的镜像,再基于该镜像创建新的容器。此时,就可以在docker run命令中添加参数 -p 来指定端口映射了。
还有一个问题,Ambari将其数据存储在数据库中,支持MySQL、PostgreSQL等数据库;容器内安装MySQL之后,基于上一步创建的新容器里,会发现MySQL启动不起来,执行命令/etc/init.d/mysql restart启动失败,在/var/log/mysql/error.log日志文件中打印有170802 14:02:59 [ERROR] Fatal error: Can't open and lock privilege tables: Got error 140 from storage engine的错误,经过网上查资料,需要在创建容器的时候添加参数-v /var/lib/mysql将MySQL数据存储路径声明为数据卷,即可解决问题。
启动容器之后,执行命令docker exec -it ambari /bin/bash进入容器内部。
Ambari安装
配置Ubuntu的软件仓库源:
国内建议采用阿里云的软件源,在root账号下用vim打开/etc/apt/sources.list文件,删除文件所有内容,粘贴如下内容:
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
执行命令apt-get update完成软件列表更新
安装Ambari所依赖的软件
apt-get install software-properties-commonsudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
完成安装之后,在 ~/.bashrc 文件末尾添加命令 `export JAVA_HOME=/usr/lib/jvm/java-8-oracle ` 以配置JAVA\_HOME 环境变量。
create database ambariuse ambariGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root_password' WITH GRANT OPTIONFLUSH PRIVILEGESexit
由于Ambari的数据存储在MySQL数据库中,这里为Ambari单独创建了database,并为其赋了完全控制权限;说明:假设MySQL数据库root用户的密码为:root\_password
修改 `/etc/mysql/my.conf`,将`skip-external-locking`注释掉,并确保 `bind-address = 0.0.0.0` 配置,以使MySQL可被远程主机访问。
执行命令`/etc/init.d/mysql restart`重启MySQL 服务。
时间同步服务器ntp:执行命令apt-get install ntp安装ntp时间同步服务器,以便于集群环境中各节点的时钟一致;执行命令sudo service ntp restart重启ntp服务。
MySQL:执行命令apt-get install mysql-server安装MySQL服务器,安装完成后执行命令mysql -uroot -proot进入MySQL客户端,执行如下SQL代码:
Oracle JDK:逐条执行如下命令,以添加WebUpd8团队(https://launchpad.net/~webupd8team/+archive/ubuntu/java)提供的Oracle JDK仓库源,并从该仓库安装JDK:
下载Ambari仓库文件
进入cd /etc/apt/sources.list.d目录,执行命令wget http://public-repo-1.hortonworks.com/ambari/ubuntu14/2.x/updates/2.5.2.0/ambari.list从HortonWorks仓库中下载Ambari源文件,下载后切勿修改list文件名;
执行命令apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD以信任远端仓库的GPG签名
执行命令apt-get update更新Ambari软件源
执行命令apt-get install ambari安装Ambari套件,由于软件包较大(700多MB),这里情耐心等待,不过apt-get支持断点下载,网络终端后重新执行命令时不会从零开始下载
配置Ambari:
执行命令mysql -uroot -proot进入MySQL客户端,执行命令source ambari进入ambari的数据库,并执行命令source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql来完成Ambari的数据库表初始化 *** 作;
执行命令ambari-server setup启动Ambari的引导式配置 *** 作,根据指导做配置即可。需要注意的是,JDK不要选择由Ambari从网络下载,应该选择自定义路径,然后输入/usr/lib/jvm/java-8-oracle即可;
启动Ambari:执行命令ambari-server start,启动日志存储路径为/var/log/ambari-server/ambari-server.log
启动之后,由于我们之前做了Docker容器的端口映射,因此可以在宿主机上打开浏览器输入http://localhost:8080即可访问Ambari登陆页面
登陆用户名和密码均为admin,登陆之后就可以看到Ambari的首页了,如下图:
{% asset_img
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)