文章目录
- 添加子域名
- 部署数据库
- 部署jar
- 启用Https
- Nginx反向代理
添加子域名
- 登录云解析控制台
- 在主域名下添加记录即为子域名 (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化的文章。