Linux 服务器运维笔记
之前每搭一次服务器就想写一篇搭建笔记,但这样效率不高,参考价值也不大。 这篇文章尝试把常见的一些套路汇总起来,希望能够对不同 Linux 发行版下不同软件的运维都提供一定的帮助。
虽然可能也是鸽了的命运,剩下懒得搬过来的先看之前的 简单服务器搭建流程 吧。
参考例子¶
Friendica 服务器搭建¶
Friendica 是由 PHP 写成的支持 ActivityPub、OStatus、diaspora* 等去中心化社交媒体协议的社交媒体服务。 要从零搭建一个 Friendica 服务器,你可能需要:
对 VPS 进行一定的安全配置
安装 PHP
安装一种网页服务器软件
安装 MySQL 数据库
在 MySQL 数据库中创建账号
购置域名
配置 HTTPS
配置网页服务器使用 PHP
配置 Friendica
前置知识¶
Linux 发行版¶
所谓的“Linux 操作系统”大致由两部分组成。 最核心、相对离硬件更近而离用户更远的部分是 Linux 内核,这部分我们大多数时候不需要理会。 而离用户更近的一大部分则是各种各样的提供系统管理功能的软件,例如 包管理器 或是 systemd 或是类似程序。
Linux 发行版一般可以理解为将 Linux 内核以及必须的一些软件打包整理好的一个完整的操作系统。 不同的发行版可能只是一些初始软件配置有小小不同,也可能是对一些核心软件的选取有差别。 当然,最常见的、对我们使用影响最大的差别应该还是 包管理器 以及 软件源 之间的差别。
包管理器¶
Linux 下安装软件的传统方式和 Windows 下的有一定差别。 最大的差别可能是 Linux 下通常软件之间会有明确的依赖关系——例如大部分视频播放器都会把视频播放的部分任务交给其它专门解码视频的软件。 此时,如果两个软件 A、B 都依赖于软件 C,系统就只需要安装一份软件 C,省下了一些硬盘空间(有时也会省些内存)。 (作为对比,Windows 下的软件如果 A、B 都依赖于 C,通常在安装完 A 和 B 后,系统里会存在两份相同或是不同的软件 C。) 当然,这样子最大的不足就是用户如果想要安装软件的话,手动管理这样的依赖关系就会变得非常痛苦。
而 包管理器 就是帮助用户管理这样的依赖关系的软件,简单起见可以理解成 App Store 或是 Google Play。 想要安装软件时只需要使用包管理器进行安装,它就会自动安装该软件所依赖的其它软件,免去了手动管理依赖关系的麻烦。
不同的发行版很多时候会有不同的包管理器,软件的安装方式也会有一些的差别,在搜索对应内容的时候可以留意一下。
Arch Linux 发行版:使用
pacman
包管理器Debian 发行版:使用
apt
包管理器 - Ubuntu 发行版基于 Debian,用的也是apt
Red Hat Enterprise Linux(RHEL)发行版:使用
yum
包管理器 - CentOS 发行版以及 Fedora 发行版其实和 RHEL 差不多,包管理器也是yum
软件源¶
我们可以把包管理器比作一个去超市采购的人,那么 软件源 此时就是超市里的所有货物 + 超市货物的一份清单,软件就是超市里的货物。 包管理器可以从多个不同的软件源获取软件,有的软件源可能会对自己的软件(货物)定期进行安全检查,有的软件源可能会提供一些稀奇古怪的软件, 甚至你也可以搭建自己的软件源。 总之,包管理器的软件源 配置 决定了它可以获取到什么软件。 如果包管理器找不到什么软件,上网搜索最可能出现的答案就是你需要对软件源进行一定的配置。
命令行¶
一般 Linux 中的命令行指 Shell 界面。 这时,我们可以把 Linux 系统想象成一台智能打字机(typewriter),你与它的交互可以分成两个阶段:
智能打字机等待你的输入,你此时可以在键盘上输入一些内容,通常通过回车进入下一阶段
智能打字机自动输出结果,此时你一般需要等待它输出完成,或是通过一些方式使其停下来,或是切换到其它程序
你可以在 Live Busybox 这里感受一下 Linux 下与系统的交互方式(网页里那个充斥着等宽字符的黑块)。 在网页出现 / #
之后(意味着这是你输入的阶段),尝试输入 echo "Hello Linux"
。 在回车之后你会发现我们的“智能打字机”输出了 Hello World
,并通过 / #
提醒你此时又回到了你输入的阶段。
SSH¶
上面说到了命令行基本就是指 Shell 界面,而 SSH 则是 Secure Shell 的缩写。 基本上我们可以把它理解成一种远程连接到 Shell 命令行的方法。
用户的文件权限¶
Linux 强调使用用户系统来保证系统的安装性。 它将用户分为不同的角色,权限最大的被称为 root
用户,甚至连各种可能毁坏机器的命令都可以执行。 其它用户都默认是普通的用户,通常我们可以将用户加入用户组来赋予用户不同的权限。
因为 Linux 下大多数系统操作都可以通过文件操作实现(简单理解的话其中一部分的话,就是 Linux 把系统配置“存放”在了文件里)。 用户权限以及用户组权限都决定了当前用户能否访问某个文件。 一个文件的权限分为三部分:
-
这个文件属于哪个用户?这个用户可以对这个文件进行什么操作?
这部分权限让文件的拥有者获得比别人更多的权限。
-
这个文件属于哪个用户组?这个用户组可以进行什么操作?
这部分权限让文件的拥有组获得比别人更多的权限。
-
其它用户可以进行什么操作?
如果不是相关人员或是相关组员的话,其它用户就只能获得这里规定的权限了。
如何读懂后文的命令行代码¶
后文的命令行代码遵从以下格式:(大多数 Linux 文章大概也是一样的。)
注意到了吗?我们使用 $
和 #
来标识命令执行所需要的权限。 只需要普通用户权限的命令通常更加安全,但是要用到 root 权限的命令就需要你三思了。 (命令指的是 $
或是 #
后面的文本,这两个字符并不是命令的一部分,只是标识而已。)
一般来说,想要使用 root 权限来执行某个命令时,你需要在前面加上 sudo
,如:
在使用 sudo
时,你可能会需要输入用户密码,请留意命令行的提示。 (你可能还需要安装 sudo
包。)
Shell 命令行也使用 #
标记注释:
我们使用 <你需要填入内容的提示>
来标识你需要自己填写的信息。
配置文件¶
配置文件的格式多种多样,但大多都是纯文本的,需要使用下面的编辑命令。 通常你需要理解下面几点:
很多配置文件都存在注释的格式,但是不同的配置文件里注释的格式不一定一样。 当你发现一段文字是以日常用语(虽然是英文)向你解释东西的时候,这段文字就大概是注释了。
-
一些注释会以例如
#
或是;
开头。 这时,如果它们注释掉了一些配置(使它们无效),你有可能就需要把#
或是;
删掉。 这是配置文件里很常见的套路。例如:# To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no
上面的例子里的
PasswordAuthentication yes
和PermitEmptyPasswords no
都是配置项目,但它们都被注释掉了。 如果你想要加入PasswordAuthentication no
的配置,那你就需要把对应的注释取消掉,再把yes
改成no
。
常见套路¶
创建用户¶
sudo
的话,可能还需要安装 sudo
包。
编辑命令¶
我们在配置系统的时候需要编辑很多文件,不同人可能喜欢不同的编辑器,我这里就不介绍 Vim 或是 Emacs TRAMP 了。 总之,最常见的、大部分系统都预先安装了的编辑器是 nano
。 大部分需要编辑的文件都需要 root 权限。 此时使用 nano
的命令是:
软件服务管理¶
现在大多 Linux 发行版都采用 systemd
来管理软件服务。
SSH 安全保证¶
虽然 SSH 是 Secure Shell,但是它的默认设置不一定会安全。 其主要原因是它很多时候默认采用密码登陆,而密码相对于其它的认证手段来说是非常容易破解的,特别是在使用了弱密码的时候。
所以,一般我们接手新的服务器之后的第一件事就是把禁用密码认证并配置密钥认证。 如果你日用的系统是 Windows 系统的话,这个可能会有一点点麻烦,还请自己查询资料。 (配置方法也与你用的 SSH 客户端软件有关,请在搜索时不要忘了加上自己客户端作为关键字。) 如果用的是类 Unix 系统的话,大概率你可以使用下面的命令:
编辑 /etc/ssh/sshd_config
,加入如下配置:
重启 sshd.service
服务。
更新服务器软件¶
这里略过,请自行搜索自己所用发行版的命令。 (发行版的话,应该 VPS 选购时会有选项的。)
UFW 简单防火墙¶
安装 ufw
。
也请自行搜索一下防火墙介绍以及 UFW 的其它命令。
开启 BBR¶
TCP BBR 是一种拥塞算法,可能性能比默认的好一点?
Caddy 安装¶
Caddy 是网页服务器。下面是 Debian 下的命令,如果是其它发行版的话,请去 Caddy 官网看吧。
$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https $ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg $ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list $ sudo apt update $ sudo apt install caddy
PHP 安装¶
PHP 我个人认为一般需要考虑三部分的安装与配置:
PHP 本身
使用 PHP 提供网页内容的配置(PHP FPM 与网页服务器配置)
PHP 的扩展的安装
前面两项不同发行版不同,这里先略过。
后面的扩展的话,不同软件的需求是不同的,使用 php -m
查看现在已经开启的扩展,之后就一个一个把剩下的安装了吧。
MySQL 安装¶
MySQL 是一个数据库软件,但是现在例如 MariaDB 也可以当作 MySQL 来用,一般我们都安装免费开源的 MariaDB。 后面的安全设置基本上可以按照 MariaDB#Security 这里来。
MySQL 创建用户与数据库¶
大多数使用 MySQL 的软件都需要一个自己的数据库来进行数据储存,而这个数据库的创建有时需要我们自己进行。
( MariaDB [(none)]>
是命令行提示,不是我们的输入内容。) 使用 sudo mysql
进入 MySQL 命令行:
MariaDB [(none)]> CREATE DATABASE <数据库名称>; MariaDB [(none)]> CREATE USER '<新用户名称>'@'localhost' IDENTIFIED BY '<自己选一个密码>'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON <数据库名称>.* TO '<新用户名称>'@'localhost'; MariaDB [(none)]> quit
你需要记住自己选的用户名、数据库名以及密码(你安装的软件应该会提示让你输入这些信息)。
Friendica 本体软件安装¶
一般网页服务需要 http
或是 www-data
的用户权限,我们这里也尽量使用对应的用户权限。
# chown -R www-data:www-data /var/www $ sudo -u www-data git clone https://github.com/friendica/friendica.git -b develop /var/www/friendica $ cd /var/www/friendica $ sudo -u www-data bin/composer.phar install --no-dev $ sudo -u www-data git clone https://github.com/friendica/friendica-addons.git -b develop addon
评论