一、heroku


官网 文档

heroke是一个Paas服务提供商,提供一定的免费额度。

他提供的是一个针对不同语言的运行平台,而不是完整的虚拟机。

拥有一个全功能的cli客户端,对于自动化帮助很大

1、heroke注册、安装

(1)注册

(2)安装cli客户端

heroku-cli

方式1

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

snap下载

sudo snap install heroku --classic

功能列表

  • 创建新的Heroku应用程序
  • 缩放您的测功机编队
  • 运行一次性的dynos
  • 采取数据库备份
  • 配置插件

验证安装

heroku --version

安装自动完成

heroku update && heroku plugins:install autocomplete && heroku autocomplete

(2)cli客户端常用命令

2、heroke简单使用

一下全部以heroku cli工具实现(也可以通过web管理页面实现)

假设创建一个通知服务的用户微服务为例:(Java)

(1)登录

heroku login

(2)创建一个应用

heroku create notice-service-user
# 输出如下
# Creating ⬢ notice-service-user... done
# https://notice-service-user.herokuapp.com/ | https://git.heroku.com/notice-service-user.git

(3)创建Java SpringBoot程序

(4)创建git仓库并推送到heroku远程仓库

# cd project dir
git init
heroku git:remote -a notice-service-user #关联远程仓库

git add .
git commit -am "make it better"
git push heroku master

这样就完成了部署

访问https://notice-service-user.herokuapp.com/查看程序

其他内容

追踪程序输出

#输出最近输出
heroku logs
#获得日志流(阻塞等待)
heroku logs -t

(5)同时提交到Github上

git remote add origin https://github.com/rectcircle/notice-service-user.git
git push origin master

3、使用数据库

(1)让项目添加数据库的支持

添加依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

配置数据源

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/notice_service_user
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5Dialect

创建实体类和DAO类

//User
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
}

//UserRepository
public interface UserRepository extends JpaRepository<User, Long>  {

}

测试

mvn spring-boot:run

(2)heroke配置数据库

查看所有已安装插件

heroku addons -A

插件商城 heroku-postgresql文档 mysql 必须要 认证信用卡

添加Postgres插件到应用

# heroku addons:create 插件名:套餐
# hobby-dev 是免费套餐
heroku addons:create heroku-postgresql:hobby-dev

当数据库添加成功之后,就会添加一个数据库连接url到环境变量,变量名为:DATABASE_URL 如果你的是Java程序,将会自动创建JDBC_DATABASE_URL环境变量 参见

查看环境变量

#查看环境变量
heroku config

#查看Java环境变量
heroku run echo \$JDBC_DATABASE_URL

(3)在Java中配置

# 生产环境
---
spring:
  profiles: production #生产环境
  datasource:
    driverClassName: org.postgresql.Driver
    url: ${JDBC_DATABASE_URL}
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect

添加postgresql驱动依赖

		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<scope>runtime</scope>
		</dependency>

(4)添加运行命令

在项目根目录添加Procfile文件

web: java -Dserver.port=$PORT -jar target/notice-service-user.jar --spring.profiles.active=production

(5)提交部署

开一个终端准备查看日志

heroku logs -t

在另一个终端提交

git add .
git commit -m "add database support"
git push heroku master

注意事项

可能输入如下异常,

2018-06-06T16:15:20.184433+00:00 app[web.1]: 2018-06-06 16:15:20.183  INFO 4 --- [           main] o.h.e.j.e.i.LobCreatorBuilderImpl        : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
2018-06-06T16:15:20.184453+00:00 app[web.1]:
2018-06-06T16:15:20.184456+00:00 app[web.1]: java.lang.reflect.InvocationTargetException: null
...

但是这不是错误参见

查看 访问https://notice-service-user.herokuapp.com/查看程序

4、heroke cli常用命令

heroku login #登录
heroku create <app name> #创建
heroku git:remote -a <app name> #关联远程仓库
git push heroku master #推送部署
#输出最近输出
heroku logs
#获得日志流(阻塞等待)
heroku logs -t

heroku addons -A #查看已装插件

# heroku addons:create 插件名:套餐
# hobby-dev 是免费套餐
heroku addons:create heroku-postgresql:hobby-dev #安装免费数据库服务

#查看定义的环境变量
heroku config

#查看运行中的Java环境变量
heroku run echo \$JDBC_DATABASE_URL

#登录远程shell
heroku run shell