springboot 项目部署到 ubuntu18.04 的过程,http 跳转 https,使用 acme.sh 安装证书

本贴最后更新于 2018 天前,其中的信息可能已经东海扬尘

最近开发的友链联盟项目即将"竣工”,准备拿到公有云 Ubuntu 是测试下,想要达到的理想状态有如下几点:

  1. 端口保持 9090,发布 spring boot 的 jar 包,后台运行
  2. nginx 部署,强制 https 访问应用
  3. 使用 acme.sh 来生成、安装 ssl 证书
  4. 开启防火墙,打开 80、443 端口,关闭 9090 端口(避免直接访问 9090 打开应用)

目前已经完成上面的要求,可以尝试访问 http://sitefriendlinks.comhttp://sitefriendlinks.com:9090,前者会强制跳转到 https://sitefriendlinks.com,后者无法打开。

环境安装

  1. nginx

    apt install nginx
    

    安装后自动就启动了,你可以用如下命令进行开启和关闭:

    service nginx stop
    service nginx start
    service nginx restart # 重启
    
  2. mysql

    apt install mysql-server
    

    详情请看:https://www.jianshu.com/p/3821c2603b92

    需要注意修改 root 密码:

    show databases;
    
    use mysql;
    
    update user set authentication_string=PASSWORD("yourpassword") where user='root';
    
    update user set plugin="mysql_native_password";
    
    flush privileges;
    
    quit;
    
  3. java 8

    apt install openjdk-8-jre-headless
    

    参考链接

部署 nginx

server {
        listen       80;
        server_name  sitefriendlinks.com;
        rewrite ^(.*)$ https://$host$1 permanent;
}

server {
        listen       443;
        server_name  sitefriendlinks.com;
        ssl          on;
        ssl_certificate /etc/nginx/ssl/fullchain.cer;
        ssl_certificate_key /etc/nginx/ssl/sitefriendlinks.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;
        location / {
            proxy_pass              http://localhost:9090/;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_set_header        X-Forwarded-Port $server_port;
        }
}

使用 acem.sh 安装证书

参考文档:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

关键步骤:

  1. 创建别名
alias acme.sh=~/.acme.sh/acme.sh
  1. 生成证书
acme.sh --issue  -d mydomain.com   --nginx
  1. 安装证书
acme.sh  --installcert  -d  <domain>.com   \
        --key-file   /etc/nginx/ssl/<domain>.key \
        --fullchain-file /etc/nginx/ssl/fullchain.cer \
        --reloadcmd  "service nginx force-reload"

注意,你需要手动创建/etc/nginx/ssl 目录,不如上面的安装命令会报路径错误

此时,你已经能正常用 https 打开你的网站了

打开防火墙

Ubuntu 的防火墙命令是 ufw,参考:https://www.cnblogs.com/yuanlipu/p/7103740.html

先查询下防火墙是否打开:

sudo ufw status

如果没打开,则开启防火墙

sudo ufw enable

默认情况下,防火墙是会把所有端口都关闭的,不允许外界访问,但是我们要做三件事:开启 80、443 端口,关闭 9090 端口

sudo ufw allow 80
sudo ufw allow 443
sudo ufw deny 9090

此时,咱们的服务器会变的非常安全,注意哦,因为没打开 3306 端口,所以你的数据库是无法远程访问的,如需要则打开 3306 端口即可。

后台运行 spring boot 工程

把打包好的 jar 包发到服务器(通常用 scp 命令即可),然后执行如下命令即可后台启动:

nohup java -jar sitefriendlinks.jar >> ./output.log 2>&1 &

ok,部署完成!

by cmlanche.com

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...