个人云服务器软件配置备忘录
创建非root用户
创建用户
useradd -m -s /bin/bash zxc
其中useradd
是添加用户的命令,需要root权限,-m
表示自动创建用户的家目录,-s /bin/bash
指定用户登录后使用的shell。
设置密码
passwd zxc
重复输入密码,回车确定。
将用户加入sudoer
新建的用户默认是无法使用sudo
命令的,需要修改/etc/sudoers
文件,而这个文件默认是只读的,u+w
的u
表示文件的拥有者,+w
表示添加写权限,在这里也相当于chmod 600
了。
chmod u+w /etc/sudoers
然后修改/etc/sudoers
文件,添加一行
zxc ALL=(ALL:ALL) ALL
这里添加的语句可以有4种形式,分别是:
xxx ALL=(ALL:ALL) ALL
%xxx ALL=(ALL:ALL) ALL
xxx ALL=(ALL:ALL) NOPASSWD: ALL
%xxx ALL=(ALL:ALL) NOPASSWD: ALL
它们的含义分别是: 允许用户xxx执行sudo命令(需要输入密码); 允许用户组xxx里面的用户执行sudo命令(需要输入密码); 允许用户xxx执行sudo命令(不需要输入密码); 允许用户组xxx里面的用户执行sudo命令(不需要输入密码)。
其中这几个ALL的含义分别是:第一个ALL是主机限定,可以改为localhost,改成别的ip的情况,我猜测可能可以执行sudo但是只能执行另一台主机的命令,第二个ALL是限定可以以该用户的角色去执行命令,所以可以改成root,冒号后面的第三个ALL是表示用户组,含义同第二个,最后一个ALL表示可以执行的命令。
最后记得撤销文件的写权限
chmod u-w /etc/sudoers
配置ssh密钥登录
本地生成ssh密钥
ssh-keygen -t rsa
表示使用rsa生成密钥存放在~/.ssh
目录下,在linux中~
表示家目录,普通用户就是/home/xxx
,root用户就是/root
。
- 将公钥复制到远程主机
ssh-copy-id -i ~/.ssh/id_rsa.pub zxc@xxx.xx.xx.xx
-i
表示指定公钥文件位置,这个公钥会被复制到远程主机~/.ssh/
下的authorized_keys
文件,这个文件保存了被授权允许通过ssh登录的主机公钥。
- 修改文件读写权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 -R ~/.ssh
为了保证安全,其中600表示只有拥有者有读写权限,700表示只有拥有者有读、写、执行权限。
禁止密码登录(可选)
修改etc/ssh/sshd_conf
文件
PasswordAuthentication no
解决客户端SSH连接服务器一段时间不操作之后卡死的问题
修改本地文件/etc/ssh/ssh_config
,添加两个配置
ServerAliveInterval 50 #每隔50秒就向服务器发送一个请求
ServerAliveCountMax 3 #允许超时的次数
然后重启ssh服务
sudo /etc/init.d/ssh restart
环境变量
配置方法
在Linux系统中,环境变量是用来定义系统运行环境的一些参数。
export
命令显示系统定义的所有环境变量,而echo $PATH
命令可以显示PATH
环境变量的值,也就是在命令行输入一个命令,默认查找的位置。
配置环境变量的方法有以下几种:
方法一 export
直接使用export
命令修改环境变量,比如
export PGHOST=localhost
设置一个名为PGHOST
的环境变量,值为localhost
。
比如
export PATH=/home/uusama/mysql/bin:$PATH
# 或者
export PATH=$PATH:/home/uusama/mysql/bin
添加PATH
环境变量的值,其中$PATH
表示原来的值,和新的值之间用冒号分隔。
注意:
key | value |
---|---|
生效时间 | 立即生效 |
生效期限 | 当前终端有效,窗口关闭后失效 |
生效范围 | 仅对当前用户有效 |
方法二 ~/.bashrc
通过修改~/.bashrc
文件进行配置。
注意:
key | value |
---|---|
生效时间 | 使用相同用户重新打开终端生效,或者手动执行source ~/.bashrc 生效 |
生效期限 | 永久有效 |
生效范围 | 仅对当前用户有效 |
方法三 ~/.bash_profile
通过修改~/.bash_profile
文件进行配置。
注意:
key | value |
---|---|
生效时间 | 使用相同用户重新打开终端生效,或者手动执行source ~/.bash_profile 生效 |
生效期限 | 永久有效 |
生效范围 | 仅对当前用户有效 |
方法四 /etc/bashrc
通过修改/etc/bashrc
文件进行配置,需要root权限以及该文件的写入权限。
注意:
key | value |
---|---|
生效时间 | 重新打开终端生效,或者手动执行source /etc/bashrc 生效 |
生效期限 | 永久有效 |
生效范围 | 对所有用户有效 |
方法五 /etc/profile
通过修改/etc/profile
文件进行配置,需要root权限以及该文件的写入权限。
注意:
key | value |
---|---|
生效时间 | 重新打开终端生效,或者手动执行source /etc/profile 生效 |
生效期限 | 永久有效 |
生效范围 | 对所有用户有效 |
方法四 /etc/enviroment
通过修改/etc/enviroment
文件进行配置,需要root权限以及该文件的写入权限。
注意:
key | value |
---|---|
生效时间 | 重新打开终端生效,或者手动执行source /etc/enviroment 生效 |
生效期限 | 永久有效 |
生效范围 | 对所有用户有效 |
加载顺序
基本上是从系统级到用户级,从profile
到bashrc
的顺序
/etc/environment
/etc/profile
/etc/bashrc
~/.profile
~/.bashrc
PostgreSQL
安装
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql
sh -c
的作用是将后面的字符串当做完整的命令来执行,这样就可以保证sudo
的作用范围在整个命令,然后echo
命令表示输出文本,后面加上重定向符号表示输出到文件/etc/apt/sources.list.d/pgdg.list
,这个文件以.list
为拓展名,表示是第三方源,统一放在sources.list.d
这个文件夹下,而/etc/sources.list
这个则是官方的软件源。
list文件的格式主要分为几部分,第一部分通常是deb
或者deb-src
,因为ubuntu是基于debian的,deb
其实就是debian的前三个字母,在这里表示通过.deb
文件安装或者通过源码安装;第二部分是安装文件的url,在这里是http://apt.postgresql.org/pub/repos/apt
,第三部分是版本代号,这里是$(lsb_release -cs)-pgdg
,其中$()
可以理解为执行括号内的命令得到的输出,在服务器Ubuntu20.04系统上输出是focal,所以对应的可以在刚才的url里找到./dists/focal-pgdg
这个文件夹里的安装文件,而在本地执行这个命令显示n/a
,第四部分是限定词,这里是main
。
配置了软件源,就要通过apt-get update
更新软件源(不是更新软件),通俗理解是把新的软件源中的软件列表更新到电脑上,而apt-get upgrade
才是更新软件。
apt-get -y install
中的-y
表示跳过确认yes/no
,通过这个命令,软件默认安装到了/usr/share
下的对应文件夹。
配置
PostgreSQL安装后默认创建了一个名为postgres
的用户,既是DMBS的用户,也是Linux用户,所以先切换到该用户进入psql。
sudo su - postgres
psql
此时进入PostgreSQL的交互式shell,修改默认用户密码,并添加一个刚刚创建的Linux用户所对应的数据库用户。
ALTER USER postgres WITH PASSWORD 'xxxxxx';
修改密码后,如果当前Linux用户就是数据库对应的用户,也无需密码即可进入,否则通过psql -U usernmae
再输入密码进入。
此时如果用用户zxc执行命令psql -U postgres
会报错,有两种解决方案,一个数需要指定-h localhost
,或者将PGHOST=localhost
写入环境变量里,另一个是修改配置文件pg_hba.conf
# 将这一行最后的peer改为md5(需要密码)或者trust(不需要密码)
local all postgres md5
注意到下面还有一行,也是同样的用处,all表示不指定某一个用户,但是在这里单独修改是不生效的,相当于通用的规则会被上面特定用户的规则所覆盖。
local all all md5
修改后通过service postgresql reload
重启生效,或者在psql shell中执行SELECT pg_reload_conf()
。
MongoDB
安装
类似的,通过官网配置软件源的方式来安装。
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
但是因为对Linux不熟悉,所以我觉得这种安装方法比较难以控制,所以采用tarball压缩包的安装方法。
现在官网
下载一个tgz压缩包并解压,这里我在~
目录下创建了一个tgz
文件夹用来放一些软件的压缩包,一个app
文件夹放这些软件。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.2.tgz
tar -zxvf mongodb-linux-*-4.4.2.tgz -C ../app/
mv mongodb-linux-aarch64-ubuntu2004-4.4.2/ mongodb/
下载的时候如果出现域名解析错误,就需要修改/etc/resolv.conf
,添加googleDNS域名服务器。
nameserver 8.8.8.8
nameserver 8.8.4.4
然后注意下载的应该是x86_64
版本,也就是不加(arm)
的版本,可以通过命令arch
来查询。
解压时-C
指定解压目录。
配置
然后需要配置环境变量,这里我们配置在~/.bashrc
文件中。
export PATH=$PATH:/home/zxc/app/mongodb/bin/
创建数据目录和日志目录,这里我在~/app
下创建了mongondb-data
用来存放mongodb相关的所有数据,里面有一个data
文件夹和一个log
文件夹。
然后启动mongod
,这里的d
就是deamon的意思,守护进程,相当于启动了一个后台监控服务。
mongod --dbpath ~/app/mongodb-data/data --logpath ~/app/mongodb-data/log/mongod.log --fork
默认情况下,MongoDB没有启用访问控制,没有默认的用户名和密码,所以可以直接通过mongodb
命令进入shell。为了实现用户角色的访问控制,我们需要自己创建用户。
首先创建一个管理员用户admin
。
use admin
db.createUser({
user:"userAdmin",
pwd:"xxxxxxxx",
roles:[
"clusterAdmin",
"dbAdminAnyDatabase",
"userAdminAnyDatabase",
"readWriteAnyDatabase"
]
}
)
分别给这个userAdmin
的用户分配了集群管理权限,所有数据库管理权限,所有用户管理权限,所有数据库读写权限。
然后重启mongod
,注意加上--auth
参数。然后通过db.auth()
方法进行授权验证,才可以进行其他操作。
注意正确的关闭mongod
的方法是在mongo shell中使用db.shutdownServer()
函数。
use admin
db.auth("userAdmin","xxxxxxxx")
然后注意,MongoDB启动之后,默认是只绑定本机ip,要想远程访问,还需要加上参数--bind_ip=0.0.0.0
,我们可以把这些启动参数保存在一个配置文件
dbpath=/home/zxc/app/mongodb-data/data
logpath=/home/zxc/app/mongodb-data/log/mongod.log
logappend=true
port=27017
fork=true
auth=true
bind_ip=0.0.0.0 # 所有ip可访问,为了安全可以指定客户端ip
启动mongod
指定配置文件即可。
mongod -f mongod.conf
注意nohttpinterface
这个配置属性默认是关闭的,所以我们也可以通过浏览器访问ip:27017
来判断mongod
是否已经正确启动。
Docker
安装
按照官网文档,选择通过存储库(repository)来进行安装。
这是更新apt包索引以及安装允许使用HTTPS存储库的包。
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加官方密钥。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
其中curl
是也是下载命令,-fsSL
的-f
表示当出现HTTP错误时静默,-s
也表示静默模式,因为这里的输出将作为下一条命令的输入,所以不需要其他的输出,-S
表示即使开了-s
,也会输出错误,-L
表示服从重定向,|
是管道符号,表示上一条命令的输出作为下一条命令的参数,apt-key add
表示将软件包密钥添加到本地trusted数据库中,-
表示stdin
(标准输入),也正是上一条命令curl的输出通过管道变成这条命令的标准输入
设置稳定版本的存储库。
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
add-apt-repository
命令其实是一个python脚本,自动在source.list里添加软件源。
安装docker稳定版。
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
最后通过运行hello world镜像来判断是否安装成功。
sudo docker run hello-world
配置
因为众所周知的原因,我们需要修改仓库镜像源,直接修改/etc/docker/daemon.json
文件,加入中科大,网易,官方中国仓库三个。
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://registry.docker-cn.com"]}
然后顺便搭建一个nextcloud私有云盘。
sudo docker run -d -p 8080:80 nextcloud
-d
表示detach,默认在后台运行容器,并且返回容器id,-p
表示将容器的一个端口暴露给外层主机,这里8080:80
表示访问外部主机8080端口就映射到该容器的80端口,也就是nextcloud的默认端口。
docker默认每次执行都需要root权限,并且docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只需要将当前用户加入到docker用户组即可。
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
groupadd docker
是创建一个docker用户组,这里通常已经自动创建好了,gpasswd -a
表示添加用户到用户组,newgrp
是切换到指定用户组。
安装docker-compose,docker-compose是一个通过yml文件来管理多容器应用的工具,而不需要每次都去拉去image,再创建多个容器。
下载,如果速度太慢可以本地下载后再上传到服务器。
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加执行权限。
sudo chmod +x /usr/local/bin/docker-compose
创建软链接。
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功。
docker-compose --version