java
OpenJDK 和 Oracle Java 是最主要的两个 Java 实现,除了 Oracle Java 拥有极少的一些额外特性之外,它们两个基本没有什么不同。 Oracle Java 授权仅仅允许作为非商业软件的使用,例如:个人用途和开发用途。
默认的 Ubuntu 20.04 源仓库包含了两个 OpenJDK 软件包,, Java Runtime Environment (JRE) 和 Java Development Kit (JDK)。JRE 主要包含了 Java 虚拟机(JVM),类和允许你运行 Java 程序的二进制包。 JDK 包含 JRE 和用于构建 Java 应用的开发/调试工具和库文件。
如果你不确定要安装哪一个版本的 Java,我们通常推荐安装 OpenJDK (JDK 11)版本。一些基于 Java 的应用可能需要运行在指定的 Java 版本下,你应该查阅应用文档。
安装 OpenJDK 11
在写作的时候,Java 11 是 Java 的一个长期支持版本(LTS)。它同时也是 Ubuntu 20.04的默认 Java 开发和运行环境。
以 root 或者其他 sudo 权限用户身份 运行下面的命令,更新软件包索引,并且安装OpenJDK 11 JDK 软件包:
sudo apt update
sudo apt install openjdk-11-jdk
一旦安装完成,你可以通过检查 Java 版本来验证它:
java -version
输出类似下面这样:
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)
就这些!此时,你已经成功地在你的 Ubuntu 系统上安装好了 Java。
JRE 被包含在 JDK 软件包中。如果你仅仅需要 JRE,安装openjdk-11-jre
软件包。最小 Java 运行环境,安装openjdk-11-jdk-headless
软件包。
安装 OpenJDK 8
Java 8,前一个 Java LTS 版本,目前仍被广泛应用。如果你的应用运行在 Java 8 上,你可以通过输入下面的命令,安装它:
sudo apt update
sudo apt install openjdk-8-jdk
通过检查 Java 版本,来验证安装过程:
java -version
输出将会像下面这样:
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1ubuntu1-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
设置默认版本
如果你在你的 Ubuntu 系统上安装了多个 Java 版本,你可以输入下面的命令,检测哪个版本被设置成了默认值:
java -version
想要修改默认的版本,使用update-alternatives
命令:
sudo update-alternatives --config java
输出像下面这样:
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number:
所有已经安装的 Java 版本将会列出来。输入你想要设置为默认值的序号,并且按"Enter”。
JAVA_HOME 环境变量
在一些 Java 应用中,环境变量JAVA_HOME
被用来表示 Java 安装位置。
想要设置 JAVA_HOME
变量,首先使用update-alternatives
找到 Java 安装路径:
sudo update-alternatives --config java
在这个例子中,安装路径如下:
- OpenJDK 11 is located at
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
- OpenJDK 8 is located at
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
一旦你发现你偏好的 Java 安装路径,打开/etc/environment
文件:
sudo nano /etc/environment
假设你想设置 JAVA_HOME
指定到 OpenJDK 11,在文件的末尾,添加下面的行:
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
想要让修改在当前 shell 生效,你可以登出系统,再登入系统,或者运行下面的命令:
source /etc/environment
验证 JAVA_HOME
环境变量被正确设置:
echo $JAVA_HOME
你应该可以看到 Java 安装路径:
/usr/lib/jvm/java-11-openjdk-amd64
卸载 Java
你可以使用 apt 卸载 Java,就像卸载任何软件包一样。
例如,想要卸载default-jdk
软件包,输入:
sudo apt remove openjdk-11-jdk
redis
安装 Redis
在 Ubuntu 上安装 Redis 非常简单直接。
Redis 5.0 被包含在默认的 Ubuntu 20.04 软件源中。想要安装它,以 root 或者其他 sudo 身份运行下面的命令:
sudo apt update
sudo apt install redis-server
一旦安装完成,Redis 服务将会自动启动。想要检查服务的状态,输入下面的命令:
sudo systemctl status redis-server
你应该看到下面这些:
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-06-06 20:03:08 UTC; 10s ago
...
如果你的服务器上禁用 IPv6,那么 Redis 服务将会启动失败。
就这些。你已经在你的 Ubuntu 20.04 上安装并运行了 Redis。
配置 Redis 远程访问
默认情况下,Redis 不允许远程连接。你仅仅只能从127.0.0.1(localhost)连接 Redis 服务器 - Redis 服务器正在运行的机器上。
如果你正在使用单机,数据库也同样在这台机器上,你不需要启用远程访问。
想要配置 Redis 来接受远程访问,使用你的文本编辑器打开 Redis 配置文件:
sudo nano /etc/redis.conf
定位到以bind 127.0.0.1 ::1
开头的一行,并且取消它的注释:
# bind 0.0.0.0 ::1
如果你的服务器有局域网 IP,并且你想要 Redis 从局域网可以访问 Redis,在这一行后面加上服务器局域网 IP 地址。
保存这个文件,并且重启 Redis 服务,使应用生效:
sudo systemctl restart redis-server
使用下面的命令来验证 Redis 服务器正在监听端口6379
:
ss -an | grep 6379
你应该能看到类似下面的信息:
tcp LISTEN 0 511 0.0.0.0:6379 0.0.0.0:*
tcp LISTEN 0 511 [::]:6379 [::]:*
下一步,你将需要配置你的防火墙,允许网络流量通过 TCP 端口6379
。
通常你想要允许从一个指定 IP 地址或者一个指定 IP 范围来访问 Redis 服务器。例如,想要允许从192.168.121.0/24
的连接,运行下面的命令:
sudo ufw allow proto tcp from 192.168.121.0/24 to any port 6379
确保你的防火墙被配置仅仅接受来自受信任 IP 的连接。
此时,你应该可以从远程位置通过 TCP 连接到 Redis 的 6379 端口。
想要验证所有设置都设置好了,你可以尝试使用redis-cli
从你的远程机器上 ping 一下 Redis 服务器。
redis-cli -h <REDIS_IP_ADDRESS> ping
这个命令将会返回一个响应:PONG
PONG
PostgreSQL
安装 PostgreSQL
在写这篇文章的时候,PostgreSQL 在 Ubuntu 官方软件源中的最新可用版本为 10.4。
运行下面的命令,在 Ubuntu 上安装 PostgreSQL:
sudo apt update
sudo apt install postgresql postgresql-contrib
我们同时安装 PostgreSQL contrib 软件包,它可以提供 PostgreSQL 数据库系统的一些额外特性。
一旦安装完成, PostgreSQL 服务将会自动启动。使用psql
工具通过连接 PostgreSQL 数据库并且打印它的版本来验证安装:
sudo -u postgres psql -c "SELECT version();"
输出:
PostgreSQL 12.2 (Ubuntu 12.2-4) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-8ubuntu1) 9.3.0, 64-bit
就这样。PostgreSQL 已经安装好了,你可以开始使用它了。
PostgreSQL 角色和身份认证方式
PostgreSQL 数据库访问权限是通过角色来处理的。一个角色代表一个数据库用户或者一个数据库用户组。
PostgreSQL 支持多种身份认证方式。最常用的方法如下:
- Trust - 只要满足
pg_hba.conf
定义的条件,一个角色就可以不使用密码就能连接服务器 - Password - 通过密码,一个角色可以连接服务器。密码可以被存储为 scram-sha-256, md5, 和 password(明文)。
- Ident - 仅仅支持 TCP/IP 连接。它通常通过一个可选的用户名映射表,获取客户端操作系统用户名。
- Peer - 和 Ident 一样,仅仅支持本地连接。
PostgreSQL 客户端身份验证通常被定义在pg_hba.conf
文件中。默认情况下,对于本地连接,PostgreSQL 被设置成身份认证防范 peer。
为了以postgres
用户身份登录 PostgreSQL 服务器,首先切换用户,然后使用psql
工具访问 PostgreSQL。
sudo su - postgres
psql
从这里开始,你可以与 PostgreSQL 实例交互。退出 PostgreSQL Shell,输入:
\q
你也可以不切换用户,而使用sudo
命令访问 PostgreSQL:
sudo -u postgres psql
通常,postgres
用户仅仅在本地被使用。
创建 PostgreSQL 角色和数据库
仅仅超级用户和拥有CREATEROLE
权限的角色可以创建新角色。
在下面的例子中,我们创建一个名称为john
的角色,一个名称为johndb
的数据库,并且授予数据库上的权限:
01.创建一个新的 PostgreSQL 角色:
sudo su - postgres -c "createuser john"
02.创建一个新的 PostgreSQL 数据库:
sudo su - postgres -c "createdb johndb"
想要授权用户操作数据库,连接到 PostgreSQL shell:
sudo -u postgres psql
并且运行下面的 query:
grant all privileges on database johndb to john;
启用远程访问 PostgreSQL 服务器
默认情况下,PostgreSQL 服务器仅仅监听本地网络接口:127.0.0.1
。
为了允许远程访问你的 PostgreSQL 服务器,打开配置文件postgresql.conf
并且在CONNECTIONS AND AUTHENTICATION
一节添加listen_addresses = '*'
。
sudo nano /etc/postgresql/12/main/postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
保存文件并且重启 PostgreSQL 服务:
sudo service postgresql restart
使用ss
工具验证修改:
ss -nlt | grep 5432
输出显示 PostgreSQL 服务器正在监听所有的网络接口(0.0.0.0
):
LISTEN 0 244 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 244 [::]:5432 [::]:*
下一步就是配置服务器接受远程连接,编辑pg_hba.conf
文件。
下面是一些例子,显示不同的用户场景:
# TYPE DATABASE USER ADDRESS METHOD
# The user jane can access all databases from all locations using md5 password
host all jane 0.0.0.0/0 md5
# The user jane can access only the janedb from all locations using md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust
最后一步就是在你的防火墙上打开端口5432
端口。
假设你正在使用UFW
来管理你的防火墙,并且你想允许从192.168.1.0/24
子网过来的访问,你应该运行下面的命令:
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432
确保你的防火墙被配置好,并仅仅接受来自受信任 IP 范围的连接。
End.