海西看月亮🌕
用心工作,用爱生活。使用Docker部署Ktor服务
最近写教务系统课表爬虫,找到一段java的青果代码,是android端的,我做的是小程序,只能放到服务端了,但是青果的java版加密算法对于PHP而言,实现难度太大,我又不会java,最后,选择了部署到服务端,使用kotlin,ktor是kotlin官方的框架,支持,client与service,两个都用了,先用service提供加密,然后client去提交,最后返回给小程序JSON。
服务器用的ubuntu所以,就用了docker,因为我也不会java的服务配置。。。
当写完ktor的程序后,在gradle安装一个shadow插件,负责把kotlin打包成一个jar,然后再部署,首先,Gradle:
classpath "com.github.jengelman.gradle.plugins:shadow:2.0.1"
应用插件
apply plugin: 'kotlin'
apply plugin: "com.github.johnrengelman.shadow"
apply plugin: 'application'
修改启动主函数:这里注意,如果你的main函数是顶级函数写法,写主函数所在的文件名加上Kt没有点。
mainClassName = "app.ApplicationKt"
在gradle最后配置shadow
shadowJar {
baseName = 'my-application'
classifier = null
version = null
}
然后 Gradlew build 打包jar
准备dockerFile
FROM openjdk:8-jre-alpine
ENV APPLICATION_USER ktor
RUN adduser -D -g '' $APPLICATION_USER
RUN mkdir /app
RUN chown -R $APPLICATION_USER /app
USER $APPLICATION_USER
COPY ./build/libs/my-application.jar /app/my-application.jar
WORKDIR /app
CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "my-application.jar"]
构建镜像:注意点 上下文路径
docker build -t my-application .
启动容器
docker run -p 8080:8080 my-application
然后修改nginx指向8080即可。