文章目录

  • 添加子域名
  • 部署数据库
  • 部署jar
  • 启用Https
  • Nginx反向代理


添加子域名
  1. 登录云解析控制台
  2. 在主域名下添加记录即为子域名 (rowing.nevercome.net)
部署数据库

部署linux上的数据库有两种方式,一种是在本地用Navigate连接,这种比较方便,但是我没有开放3306端口(因为数据库密码很简单),改密码的话还要改一些已经在跑的应用。

所以这次使用非常原始的部署方式。

1 从开发环境下导出sql文件,并上传到服务器。

2 登录进linux上的mysql,创建对应开发环境下的数据库。

CREATE DATABASE IF NOT EXISTS `contest-weapp` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

3 因为数据表种存在大的索引,所以需要开启一些设置。

SET GLOBAL INNODB_LARGE_PREFIX = ON;
SET GLOBAL innodb_file_format = BARRACUDA;

对于索引过长的表,还需要设置row_format,like this

create table test (........) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

但是这种方式在本地解决了问题,可在linux不行,虽然感到奇怪,浏览StackOverflow的过程中我看到了一个回答多了这个语句,解决了问题。

set global innodb_file_per_table = ON;

4 使用source命令执行sql脚本

source /usr/local/spring-boot/load.sql

5 其它,mysql的备份命令

mysqldump -uroot -p db_name > ./dump_20200810.sql
部署jar

1 IDEA内用maven的package命令打包成jar包(这里使用jar包部署,也推荐使用jar包来部署)

2 rz命令将jar包上传到linux服务器

3 使用nohup命令运行jar

nohup java -jar rowing.jar --server.port=8090 &

如果提示 nohup command not found 则安装一下,安装之后还要添加命令到bash

yum install coreutils

nohup的脚本在/usr/bin 下面,而bash默认只检索 $Home/bin ,添加一下就可以了。

成功之后nohup会给一个端口号,这个不是nginx转发的端口号,nginx转发还是按照spring-boot配置的那个来。

重新部署

先停止原先的进程,查询进程PID

netstat -tunlp | grep 8090

根据PID杀死进程,需要使用 kill -9 来强制停止

kill -9 27666
启用Https

使用 lets encrypt 获得ssl证书
github地址: https://github.com/certbot/certbot
1 下载lets encrypt

git clone https://github.com/letsencrypt/letsencrypt

2 进入目录

cd letsencrypt

3 使用如下命令进行证书签约

./letsencrypt-auto certonly --standalone --email youremail@exp.com -d yourdomain.com -d sub.yourdomain.com --no-self-upgrade

standalone 模式需要占用80端口,此时需要先释放80端口。
像我当时就是nginx启动着,所以要先关闭nginx

nginx的启动与停止参考此文:

之后会提示签约成功,证书文件通常被放在 /etc/letsencrypt/live/签约的域名 下面

cert.pem - Apache服务器端证书
chain.pem - Apache根证书和中继证书
fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件

我自己从根目录进入的命令为cd /usr/local/nginx-1.12.2/letsencrypt 我总是忘了把下好的letsencrypt忘了放在那里,实际上是因为我放在nginx的安装包下面了,毫无逻辑所以总是忘。
当忘了的时候可以用 find / -name certbot* 来找一下。获得的ssl证书以及配置信息在/etc/letsencrypt

Nginx反向代理

1 配置代理配置
conf/vhosts 文件夹下 新增加 rowing.conf

server {
        listen  443 ssl;
        server_name rowing.nevercome.net;
        root /home/wwwroot/default;

        ssl_certificate         /etc/letsencrypt/live/rowing.nevercome.net/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/rowing.nevercome.net/privkey.pem;

        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
                proxy_pass http://localhost:8090;
                proxy_redirect off;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

     server {
        listen  80;
        server_name rowing.nevercome.net;
        return 301 https://rowing.nevercome.net$request_uri;
     }

2 将规则添加到nginx.conf中

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {

    server_names_hash_bucket_size 128;

    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip                on;
    #gzip_proxied       any;
    gzip_min_length     1024;
    gzip_buffers        4 16k;
    gzip_comp_level     3;
    gzip_types          text/plain text/css application/x-javascript text/javascript image/jpeg image/gif image/png  application/xml application/json;

    #include servers
    include /usr/local/nginx/conf/vhosts/www.conf;
    include /usr/local/nginx/conf/vhosts/rowing.conf;
}

添加完之后 reload nginx即可

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

到这里我们的部署就完成了!

后续会出一篇将这个过程docker化的文章。