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

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

选择Amazon Linux 2

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

基本设置

添加日常使用的用户,加入到 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
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

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

6)停止 postfix 服务

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

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

 

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 官方的  CentOS 7 版的预编译版本  http://nginx.org/en/linux_packages.html

mariadb 直接安装,还是 centos 7 的版本

php 则使用 amazon 的版本,最新 8.2,或者用 remi源,有 8.3版。

这几者其实没什么特别的,沿用之前的步骤与配置

 

Last Updated on 2025/12/12

发表评论

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