Ubuntu20 JavaWeb环境搭建(JDK8,MySQL8,Maven,nginx,FTP,SSL证书配置)

一、 安装JDK

1. 更新软件包列表

sudo apt-get update

2. 安装 openjdk-8-jdk

sudo apt-get install openjdk-8-jdk

3. 验证安装结果

$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

二、安装和配置MySQL8

安装

sudo apt-get install mysql-server

安装的MySQL版本 

mysql -V
mysql  Ver 8.0.26-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))

登录mysql

mysql -uroot -p

输入密码

等等,密码是什么?

不知道密码?MySQL在以下文件保存了默认用户名和密码,输入以下命令查看:

sudo vi /etc/mysql/debian.cnf

类似这样:    

    user     = debian-sys-maint
    password = xxxxxxxxxxxxxx

使用密码重新登录MySQL

$ mysql -udebian-sys-maint -p
Enter password: #输入文件中密码

 修改root密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

设置密码永久有效

alter user 'root'@'localhost' password expire never; 

刷新权限缓存

FLUSH PRIVILEGES;

添加远程访问使用root访问数据库的权限并刷新权限 

update mysql.user set host='%' where user='root';
FLUSH PRIVILEGES;

创建远程只读用户 

create user 'userread'@'%' identified by '你的密码';

 赋予查询权限

grant select on *.* to 'userread'@'%';

刷新权限缓存

flush privileges;

 修改加密方式,MySQL8 使用mysql_native_password加密

ALTER USER 'userread'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

修改MySQL配置文件 

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

 注释掉bind-address           = 127.0.0.1,这样才可以远程连接

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
mysqlx-bind-address     = 127.0.0.1
 

重启服务 

$ service mysql restart

查看端口状态 

netstat -an|grep 3306

返回以下结果表示远程权限开启。 

 

如果依然无法远程连接,考虑防火墙拦截掉了。

查看服务器火墙,查看云服务提供商控制台火墙。

打开相应端口。 

三、安装maven (项目编译打包使用)

 方式一:手动安装

1. 下载Maven到 /usr/local目录

Maven – Welcome to Apache Maven

选择最新的安装包 apache-maven-3.8.2-bin.tar.gzhttps://archive.apache.org/dist/maven/maven-3/3.8.2/binaries/apache-maven-3.8.2-bin.tar.gz

下载命令

sudo wget https://archive.apache.org/dist/maven/maven-3/3.8.2/binaries/apache-maven-3.8.2-bin.tar.gz

2. 解压下载的文件

sudo tar -zxvf apache-maven-3.8.2-bin.tar.gz 

 3. 配置环境变量

sudo vi /etc/profile

末尾追加以下内容:

export M2_HOME=/usr/local/apache-maven-3.8.2
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin

 4. 执行命令使之生效

source /etc/profile

5. 验证

$ mvn -v

Apache Maven 3.8.2 (ea98e05a04480131370aa0c110b8c54cf726c06f)
Maven home: /usr/local/apache-maven-3.8.2
Java version: 1.8.0_292, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-80-generic", arch: "amd64", family: "unix"

6.切换国内源,阿里云

在settings.xml文件中,<mirrors>标签内添加以下代码:

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

方式二:Ubuntu命令自动安装

sudo apt-get install maven 

四、安装nginx 1.18

1. 更新apt资源

sudo apt update

2. 安装nginx

sudo apt install nginx

3. 查看nginx配置是否正确

sudo nginx -t

4. 修改nginx配置

sudo vi /etc/nginx/sites-enable/default

 转发该域名请求到8080端口

server {
        listen 80;
        server_name www.xxx.com;
        location / {
            proxy_redirect off;
            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_pass http://127.0.0.1:8080;
        }
        access_log  /var/log/nginx/access.log;
    }


5. 重新加载配置

sudo nginx -s reload

五、安装FTP Server

ubuntu下安装和配置vsftp_大奖状的博客-CSDN博客_ubuntu安装vsftp

 六、 配置SSL证书

1. 上传证书文件

注册完证书后会得到两个证书文件(xxx.crt, xxx.key)

使用FTP工具上传证书文件到Nginx目录(我的目录:/etc/nginx/cert/)

2.修改默认配置文件 /etc/nginx/sites-available/default

追加以下内容:

#配置80端口,把80端口请求转到443
server {
        listen 80;
        listen [::]:80;

        server_name 你要转发的域名;
        
        location / {
                rewrite ^(.*)$ https://$host$1 permanent;
        }
        access_log  /var/log/nginx/access.log;
}

server {
         #SSL 访问端口号为 443
        listen 443 ssl; 
        listen [::]:443;
        #填写绑定证书的域名
        server_name 你的域名; 
        #证书文件名称 相对路径开始位置为nginx根目录
        ssl_certificate cert/xxxx.xxx.crt; 
        #私钥文件名称 相对路径开始位置为nginx根目录
        ssl_certificate_key cert/xxx.xxx.key; 
        ssl_session_timeout 5m;
        #请按照以下协议配置
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        location / {
                # 转发配置
                proxy_redirect off;
                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_pass http://127.0.0.1:8080;
        }
        access_log  /var/log/nginx/access443.log;
}

3. 重新加载配置

sudo nginx -s reload

4. 重新访问域名URL进行验证,记得清一下浏览器缓存。 

实际遇到的问题

浏览器访问https地址没有问题,使用curl、wget等命令访问却显示错误:

TLSv1.2 (OUT), TLS alert, unknown CA (560):

SSL certificate problem: unable to get local issuer certificate

curl https://域名 -v

*   Trying 123.1.1.1:443...
* TCP_NODELAY set
* Connected to www.xx.xxx (123.1.1.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/curlssl/cacert.pem
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, unknown CA (560):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

 一开始以为是本地客户端缺少整数所致,后来发现访问其他https域名却没有问题,才开始怀疑是服务端证书设置有问题。

原nginx证书配置:

        #证书文件名称 相对路径开始位置为nginx根目录
        ssl_certificate cert/xxxx.xxx.crt; 
        #私钥文件名称 相对路径开始位置为nginx根目录
        ssl_certificate_key cert/xxx.xxx.key; 

 从SSL证书颁发机构下载的证书目录:

 ca-bundle文件似乎没有用到,难道没有用吗?

经查资料,crt一个证书文件是不完全的,crt和ca-bundle文件合并才是完成的证书,这不是坑么!!!

使用以下命令合并文件,并修改nginx配置指向新文件

cat xxx.crt xxx.ca-bundle > new.crt #crt和ca-bundle文件位置填对

重新加载配置文件: 

sudo nginx -s reload

 再次测试:

OK,结果就不贴了。

问题根源还是学艺不精,看来什么技术不能浅尝辄止,一定要弄清楚明白。否则就会出现各种问题,各种误人子弟的资料更是一个坑接着一个坑,不要盲从。

七、部署好SpringBoot,端口设置8080,启动服务。

访问域名验证服务是否正常。

完成。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗九趁年华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值