添加子域名
- 登錄雲解析控制檯
- 在主域名下添加記錄即爲子域名 (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化的文章。