阿里雲CentOS-Nginx子域名轉發-https訪問-SpringBoot使用jar包部署一套完成!

添加子域名
  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
部署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配置的那個來。

啓用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的啓動與停止參考此文:
https://www.cnblogs.com/codingcloud/p/5095066.html

之後會提示簽約成功,證書文件通常被放在 /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 配置代理配置


   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化的文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章