使用 lightsail 的 Amazon Linux 2 配置 web 环境手记

背景,一直使用的 lightsail 的 1G内存实例作服务器,突然间挂掉了,快照并新建实例也起不来,只能把快照迁移到 aws 上,新建一个最小的EC2并把磁盘挂到上面,原来是 xfs 文件系统损坏,xfs_repair 修复一下,顺利完成,除了有几行错误提示,mount 后检查文件,看起来文件都在,尤其web 目录大小也正常,这就放心了(mysql 有实时的异地复制,并不担心)。开始重装环境,迁移数据,沿用以前的步骤(基础Web),多数是机械操作,也趁机把以前的步骤梳理改进一下。

选择Amazon Linux 2

lightsail 的镜像已经不再提供 CentOS 7,本来想换用 AlmaLinux ,经过一番评估,还是选择了 amazon Linux 2;因为内存是个大问题,半年前曾尝试过 AlmaLinux ,但多次OOM 而失败退回。AL2 基于 CentOS 7,但经过魔改升级了部分包,算是个“缝合怪”了,据 chatGPT 说其内存消耗要比 CentOS 7高一些,所以还是要谨慎一些。

amazon linux 提供了一些额外的软件包,可以通过内置的 amazon-linux-extras 工具启用并安装,通过其 list, enable 这两个子命令列表、启用,然后 yum 安装。本质上,它就是个 yum 源。

基本设置

添加日常使用的用户,加入到 wheel 用户组,

1) 管理员用户权限

新建用户,并加入 sudoer 里,实际上加入到 wheel 管理用户组即可,该组默认已经有了 sudo 权限

useradd {myname}
usermod --append -G wheel {myname}

2)管理用户bash历史记录条数
数字加大一些,以备需要时做核查;当前用户及 root 下的 .bash_profile 都改一下,因为 su 对环境变量的处理逻辑

涉及两个文件[/root/.bash_profile, ~/.bash_profile] 
# add 2025/12/09
export HISTSIZE=2000
export HISTFILESIZE=8000

3) sshd
只允许指定用户通过ssh 登录,禁止 root 用户登录,实际使用时用管理员用户 sudo su 切换;修改文件 /etc/ssh/sshd_config 最后追加

AllowUsers user1 user2 user3 ec2-user
PermitRootLogin no

4)安装 iptables 服务,其中包含了基本规则

yum install iptables-services
systemctl start iptables
systemctl enable iptables

如果从其他机器迁移规则,直接写入 /etc/sysconfig/iptables 即可加载

5)默认没有 swap ,加个 swap ,内存不足时可以勉强顶一下

touch /swapfile
dd if=/dev/zero of=/swapfile count=1024 bs=1024K
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

加到 /etc/fstab 文件中以开机自动启用

6)停止 postfix 服务

发送邮件的服务,一般是没啥用的,停掉,还能避免被恶意利用。
sudo systemctl disable postfix
sudo systemctl stop postfix

7)换用新版本linux 内核

写作本文时,AL2 最新的内核为 kernel-5.15,换用一下,并启用BBR,这对于高峰期间歇丢包的lightsail东京,还是有用的
amazon-linux-extras enable kernel-5.15
yum install kernel

修改 /etc/sysctl.conf 加入如下两行,重启后验证bbr生效

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

 

YUM源EPEL 源

centos 7 的 epel 已经移入归档,不过目前也还是能使用,凑合着用吧

rpm -ivh https://dl.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm

额外的一些 yum 源,可以在 Fedora Copr 上搜索,都是社区用户个人维护的,选择值得信任的。

Let’s Encrypt SSL 证书部署工具 – certbot

虽然 certbot 官方网站上有推荐方案 pip 安装,但步骤有点麻烦,鉴于 epel 源里另有 certbot 工具,实际就是封装的python版客户端,直接使用它更方便;事实上它已经过时,反正也是在过时的环境中使用。

yum install certbot python2-certbot python2-certbot-dns-cloudflare

这里使用 cloudflare 的域名验证而签署泛域名证书,如果基于 nginx 则要安装 python2-certbot-nginx 。安装的 certbot 包主要是自动化相关的 systemd 单元、脚本等,通过调用python 版的工具实现,主要关注的是 certbot-renew.service, certbot-renew.timer 两个systemd 单元。python 版证书工具是脚本 /usr/bin/certbot ,一般不用管它。

签署证书的执行脚本与以前一样 ,如果之前用过,直接把 /etc/letsencrypt 目录转移过来,包括帐号、证书等,都平滑过渡。

启用 cert-renew.timer,自动定时执行

systemctl enable certbot-renew.timer

certbot 有钩子机制, /etc/letsencrypt/renewal-hooks/ 下的三个目录即是,要合理利用,比如更新证书后同步到其他服务器上,就可以把同步脚本放到对应 deploy 目录即可。

Web: nginx, php, mysql/mariadb

直接使用 nginx 官方yum 源 AL2 预编译版本; amazon-linux-extras 里面也有,叫 nginx1 ,也可以用。

mariadb 直接 yum 安装,还是 5.5.68-MariaDB,与 centos 7 完全一致。

php 则使用 amazon 的版本,最新 8.2,或者用 remi源,有 8.3版。 (CentOS 7 的 PHP 8.4 大概不会再有了)

这几者其实没什么特别的,沿用之前的步骤与配置 尽量直接使用之前的配置文件,连修改都省了,比对差异手工合并一下。

Last Updated on 2025/12/16

发表评论

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理