Ubuntu20.04虚拟器安装
安装过程需要包括配置静态IP、启动SSH远程连接和文件传输、配置常用的jdk、python等编程语言的开发环境、安装和配置MySQL数据库、将Ubuntu配置为Web服务器。使用的ubunt版本是20.04。
配置静态ip
虚拟机默认安装了dhcp协议,这意味着同一局域网内的主机会自动为用户(虚拟机)分配IP地址。需要改为static以避免变动。
系统默认配置(有些可能不同,没有以太网内容):
network:
ethernets:
ens33:
dhcp4: yes
addresses: []
version: 2
配置成如下后面内容:(使用管理员账户root,普通用户无法更改配置内容。)
每个人的IP都不一样。只需将其配置为 dhcp 分配的即可。可以通过以下方式查看相关配置信息:
通过ip addr
查看dhcp分配的ip,结合上面的信息进行配置如下:
注意要找到该系统文件,本来就有的,不是新文件,不同版本文件名可能不一样。配置完成后输入sudo netplan apply
应用网络配置后查看网络的连通性:ping [自己主机号]
ctrl + c
停止,如上图配置成功。
SSH远程连接
在本机上测试同一局域网下虚拟机的连通性:
为什么我可以 ping 通 Windows 上同一虚拟机的网络连接?
Ping的原理是ICMP协议。 ICMP的全称是Intent Control Message Protocol,中文意思是互联网控制消息协议。它是互联网协议族的核心协议之一。它用于在TCP/IP网络中发送控制消息,并对通信环境中可能出现的各种问题提供反馈。通过这些信息,管理者可以诊断发生的问题,然后采取适当的措施来解决这些问题。
Vmware工具为我们提供了三种网络工作模式,分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-only(仅主机模式)。
VMware虚拟机三种网络模式详解感谢作者https://www.cnblogs.com/cnjavahome/p/11266931.html
能ping
后就在winodw上用软件连接虚拟机了。如Xshell远程连接软件。如下:
虚拟机上who
命令查看当前用户名:
这里不描述Xshell连接部分,主要描述一下遇到的问题:
信息填写正确后,无法连接:
也不知道什么原因,看到这位博主才解决,感谢@柳风123的文章Xshell在虚拟机中连接Ubuntu
Xshell等远程连接软件都是通过ssh协议连接的,SSH 为 [Secure Shell]的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
在虚拟机上启用ssh远程连接:
sudo service sshd start
sudo /etc/init.d/ssh start
如果出现Failed to start sshd.service: Unit sshd.service not found.
类似这种命令就需要安装该服务:
sudo apt install openssh-server
安装成功后默认就会启动服务,输入ps -e | grep ssh
命令查询ssh服务,出现sshd就完成了。
接下来就可以通过Xshell进行连接了。弹出如下提示,表示连接成功(ssh服务默认端口号为22):
FTP协议传输文件
虚拟机上没有可视化界面,文件管理不方便。可以使用FTP软件传输文件到虚拟机,比如Xftp(连接方式和Xshell类似,都是通过):
配置jdk环境
这里以jdk环境为例。其他语言的配置过程是一样的。
上传或下载jdk压缩包:
#解药到当前目录
tar -zxvf test.tar.gz
#解压到指定目录
tar -zxvf test.tar.gz -C /home/user/ #从系统目录写全
cd 切换到解压后的jdk的bin目录,输入pwd查看当前目录,复制
配置environment文件 vi /etc/environment
先切换root用户
#path后追加 :$JAVA_HOME/bin
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$JAVA_HOME/bin"
#set java environment
export JAVA_HOME=/home/server/Java/jdk1.8.0_11
export JRE_HOME=$JAVA_HOME/jre
输入source /etc/environment
命令使配置文件生效。
配置profile文件 vi /etc/profile
#set Java environment
#在文件后面追加
export JAVA_HOME=/usr/local/java/jdk1.8.0_271 #jsk的bin目录完整路径,刚复制的部分
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
输入source /etc/profile
命令使配置文件生效。
查看是否配置成功java -version
和javac -version
python语言配置步骤基本相同(只是解析器路径)。
除了自己配置环境变量外,还有系统默认配置:
# 安装python3,通过命令行安装系统会自动配置环境变量
sudo apt-get install python3
#安装python2
sudo apt-get install python
# 安装的python3在/usr/bin下,为python3建立软连接
sudo ln -s /usr/bin/python3 /usr/local/bin/python3 # 在系统根目录下不是/home目录
# 安装pip3
sudo apt-get install python3-pip
# 更新pip
sudo pip3 install --upgrade pip
环境变量重启后自动生效。只需输入python或python3即可进入python编辑环境。
安装mysql数据库
下载数据库
# 下载数据库
sudo apt install mysql-server
#安装出错就跟新系统再次安装
sudo apt update
#sudo 是赋予root权限,切换超级用户root后就不需要了
刚刚了解了数据运维,下面是配置过程的一些参考资料:
-
ubuntu安装mysql感谢作者
-
Ubuntu 配置访问感谢作者@陆杜振林
输入sudo systemctl status mysql
查看mysql是否启动,出现下面active(running)即为正在运行:
mysql启动后对其进行初始化
初始化最重要的就是配置用户名和密码输入sudo mysql_secure_installation
指令:
输入第一个配置:
您想执行强密码验证吗?不
第二个配置:
为数据库设置密码。您必须输入两次,并且密码不会显示。尝试使用字母和数字,不要使用其他字符。如上所述,为root设置密码,默认用户为root。
第三种配置:
是否删除匿名用户:N
第四种配置:
禁用远程连接?不行,从命令行操作数据库很不方便。您需要使用可视化工具和远程连接。
第五种配置:
删除测试数据库?你可以删除也可以不删除。
第六种配置:
配置是否生效? y
配置完成:
总结一下,主要配置项有以下几个:
#1
VALIDATE PASSWORD PLUGIN can be used to test passwords...
Press y|Y for Yes, any other key for No: N (选择N ,不会进行密码的强校验)
#2
Please set the password for root here...
New password: (输入密码)
Re-enter new password: (重复输入)
#3
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : N (选择N,不删除匿名用户)
#4
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N (选择N,允许root远程连接)
#5
By default, MySQL comes with a database named 'test' that
anyone can access...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N (选择N,不删除test数据库)
#6
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y (选择Y,修改权限立即生效)
连接数据库
检查数据库状态:
systemctl status mysql.service
和之前一样,启动后就可以访问数据了。
和window上一样mysql -u root -p
命令访问,注意要是root用户下,普通用户没权限,或添加sudo前缀:
配置远程访问
使用Navicat软件访问数据库,只要知道IP即可:
确认后,报错:
失败原因:默认情况下,Mysql不允许访问本机以外的主机(SSH除外)。修改mysqld.cnf文件可以解决问题,但是修改该文件可能会带来安全问题,所以建议配置ufw防火墙。
解决方案:
-
更改mysql默认配置以允许远程访问
# 编辑配置文件 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf #修改默认配置允许远程访问 bind-address = 127.0.0.1 [虚拟机ip地址] #中间用空格隔开
-
重启mysql应用配置
#重启mysql数据库 sudo /etc/init.d/mysql restart
-
出现新错误
1130 - 不允许主机 XXX 连接到此 MySQL 服务器。
-
登录要连接的数据库的主机(虚拟机)
修改数据库内部信息,将用户localhost改为%(通配符,允许任何用户访问)
# 进入数据 sudo mysql -u root -p #进入user(用户表)修改用户信息,允许所有用户使用数据库 use mysql; select host from user where user='root';
-
修改用户信息以允许所需的IP访问
# 将localhost改为%允许所有ip访问 update user set host = '%' where user ='root'; #或者insert将允许的ip插入 insert into user values ('192.168.xxx.xxx');
-
重启mysql并重新连接
sudo service mysql restart
主机‘192.168.1.3’不允许连接到此MySQL服务器
- 本以为连接成功,结果却是。 。 。 。出现以下错误,请继续更正。
网上查了很多资料,发现是因为版本问题。我在Linux上使用的mysql的加密规则在版本8左右发生了变化。在mysql8之前的版本中,加密规则是mysql_native_password,但是在mysql8之后,加密规则是caching_sha2_password,所以可以升级navcat的版本或更改加密规则mysql的
#输入该指令查看加密规则
select host,user,plugin,authentication_string from mysql.user;
#是caching_sha2_password而不是mysql_native_password
加密规则变了,但是navcat的还是一样的,所以只需升级到以下或者修改加密规则即可。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'newpassword'; #更新一下用户的密码 root用户密码为newpassword
让我们升级版本,与时俱进吧!
- 本以为更新后就可以连接了,结果又出错了。我真的被说服了!
这次的原因是密码错误,但我输入的是正确的。这是因为数据库中没有密码:
select host, user, authentication_string, plugin from user;
查询发现,密码那行为空的,
只需添加新的 sql 语句或插入密码即可。输入新密码后连接成功:
参考教程:
虚拟机模拟远程服务器
模拟远程服务器最重要的是Web服务器。浏览器发送http请求,需要服务器解析。
为了避免配置环境变量,直接在虚拟机上使用shell命令下载。
下载并安装 Tomcat
#更新系统
sudo apt update
#查询tomcat版本,选择安装版本
#安装tomcat9-admin
sudo apt install tomcat9
使用apt-get install
自动安装的就不需要配置环境变量了,配置环境变量的目的是告诉系统,有这样一些资源,典型的是你使用tab键能够找到可以运行的程序,如果这个程序的位置没有设置在path环境变量里面就无法自动提示。像上传,解压,自己配置了路径虽然也能允许但系统并不知道,所以需要配置环境变量。
安装完成会出现这样的ERROR,输入sudo apt update
后再次安装
安装完成后会自动开启服务,输入ss -ltn
查看8080端口是否占用,tomcat默认使用8080端口:
如上图所示,tomcat已经启动。使用以下说明打开和关闭 tomcat:
# 开启tomct
sudo systemctl enable tomcat9
# 关闭tomcat
sudo systemctl disable tomcat9
在主机上的浏览器输入[ip]:8080
端口,出现下图所示内容就可以了:
大致意思是:
有效!
如果您通过 Web 浏览器看到此页面,则您已成功设置 Tomcat。恭喜!
这是默认的 Tomcat 主页。 它可以在本地文件系统上找到:/var/lib/tomcat9/webapps/ROOT/index.html
Tomcat 的老手可能会很高兴得知这个 Tomcat 系统实例安装在 :CATALINA_HOME : /usr/share/tomcat9
以及CATALINA_BASE:/var/lib/tomcat9
,遵循的规则在/usr/share/doc/tomcat9-common/RUNNING.txt.gz
压缩包中。
如果您还没有这样做,您可以考虑安装以下软件包:
tomcat9-文档:该软件包安装了一个允许在本地浏览 Tomcat 9 文档的 Web 应用程序。 安装后,您可以通过单击此处访问它。
tomcat9-示例:这个包安装了一个允许访问 Tomcat 9 Servlet 和 JSP 示例的 Web 应用程序。 安装后,您可以通过单击此处访问它。
tomcat9-管理:这个包安装了两个 Web 应用程序,可以帮助管理这个 Tomcat 实例。 安装后,您可以访问 manager webapp 和 host-manager webapp。
注意:出于安全原因,管理器 Web 应用程序的使用仅限于具有“manager-gui”角色的用户。主机管理器 Web 应用程序仅限于具有“admin-gui”角色的用户。用户在 /etc/tomcat9/tomcat-users.xml 中定义。
参考文档:
相关目录及功能说明:(默认安装,配置环境不同)
/etc/tomcat9
- 全局配置/usr/share/tomcat9/
- 程序主目录/usr/share/tomcat9/conf/Catalina/localhost/
- 本机部署的 Catalina 配置/var/lib/tomcat9/
- 工作主目录,/var/lib/tomcat9/webapps
- (web文件实际存放于此)
如果安装了tomcat9-admin,则需要在全局配置中创建用户才能访问admin管理页面:
- 在
/etc/tomcat9
下是 tomcat 的全局配置,这里需要修改tomcat-users.xml
添加新管理员
启动和关闭tomcat
除了通过上述命令关闭tomcat(默认配置环境变量)外,还可以通过.sh脚本关闭:
/usr/share/tomcat9
是 tomcat 的主程序目录。/usr/share/tomcat6/bin/startup.sh
是开启命令。(window上也有,不过用不上,用.bat开启)/usr/share/tomcat6/bin/shutdown.sh
是关闭命令。
该目录与window上类似:
切换tomcat脚本存放目录:
localhost/``` - 用于本地部署的 Catalina 配置
/var/lib/tomcat9/
- 工作主目录,/var/lib/tomcat9/webapps
- (web文件实际存放于此)
如果安装了tomcat9-admin,则需要在全局配置中创建用户才能访问admin管理页面:
- 在
/etc/tomcat9
下是 tomcat 的全局配置,这里需要修改tomcat-users.xml
添加新管理员
启动和关闭tomcat
除了通过上述命令关闭tomcat(默认配置环境变量)外,还可以通过.sh脚本关闭:
/usr/share/tomcat9
是 tomcat 的主程序目录。/usr/share/tomcat6/bin/startup.sh
是开启命令。(window上也有,不过用不上,用.bat开启)/usr/share/tomcat6/bin/shutdown.sh
是关闭命令。
该目录与window上类似:
切换tomcat脚本存放目录:
注意是运行shutdown.sh
脚本而不是shutdown
。