说实话,第一次在阿里云ecs上折腾系统的时候,我也踩过不少坑。看着终端里那一堆红色报错,心里那个慌啊。但别担心,这篇文章就是专门写给刚入门的同学的,我把整个过程拆得碎碎的,保证你跟着做,一次成功。
一、准备工作:别跳步,这步没做好后面全白搭
在开始之前,先确认几件事:
- 你已经在阿里云控制台买好了ECS实例,系统选的是 AlmaLinux 8
- 你下载了一个SSH客户端(推荐 Termius 或 Xshell,Windows/Mac都有)
- 你手边有个记事本,用来记密码和IP地址
- 你的浏览器开着阿里云控制台
💡 小贴士:AlmaLinux 8 是 CentOS 8 停更后的最佳替代品,由 CentOS 的创始团队参与开发,稳定又安全,比 Ubuntu 更适合服务器新手,因为它的命令习惯和国内教程更匹配。
二、第一件事:连上SSH!解决”连接被拒绝”的坑
2.1 获取你的ECS信息
登录阿里云控制台,进入 ECS控制台 → 实例,找到你的服务器,记录以下信息:
- 公网IP地址:类似
47.98.123.45 - 实例ID:备用,暂时用不上
- 登录用户名:AlmaLinux 8 默认是
root - 密码:如果你购买时设置了,就是这个;如果没设置,去重置
2.2 第一次连接:别急着骂人
打开你的SSH客户端,输入:
ssh root@47.98.123.45
然后回车,可能会遇到以下几种情况:
❌ 错误1:Connection refused 或 Connection timed out
这是新手最常遇到的坑!99% 的原因是 安全组没开22端口。
解决方案:
- 回到阿里云控制台,找到你的ECS实例
- 点击右侧的 安全组 → 配置规则
- 点击 手动添加,填入:
- 授权策略:允许
- 优先级:1
- 协议类型:自定义TCP
- 端口范围:22⁄22
- 授权对象:0.0.0.0/0(表示允许所有IP访问)
- 点击 确定,等待10秒生效
⚠️ 重要提醒:不要为了”安全”把授权对象设成自己当前的IP就完事了,因为你IP可能会变。
0.0.0.0/0是最简单的做法,后续我们可以通过其他方式加固。
再次执行:
ssh root@47.98.123.45
❌ 错误2:Permanently added '47.98.123.45' (ECDSA) to the list of known hosts. 然后卡住
这说明网络通了,但SSH服务可能有问题,或者密码错误。
先试密码登录:默认情况下 AlmaLinux 8 允许 root 密码登录。输入你的密码(输入时屏幕不会显示任何字符,这是正常的,别怀疑自己键盘坏了),回车。
如果密码正确,你会看到:
Last login: Mon Jul 15 10:23:45 2024 from 113.96.12.34
[root@iZ ~]#
这就成功了!
❌ 错误3:Permission denied (publickey,password)
这说明密码错了,或者 root 登录被禁用了。
解决方案:
- 回控制台,点击 更多 → 重置实例密码
- 设置一个新密码,记下它
- 重置后需要 重启实例(重要!)
- 重启完成后,再次 SSH 连接
三、系统初始化:连上之后先做这几件事
连上 SSH 后,别急着装东西,先做系统初始化,这一步能帮你省下很多后面的麻烦。
3.1 更新系统
dnf update -y
AlmaLinux 8 用的是 dnf 包管理器(不是 CentOS 7 的 yum,虽然命令一样)。更新可能需要几分钟,喝口水等等。
💡 为什么必须更新? 阿里云官方镜像可能不是最新的,安全补丁必须打上,不然黑客分分钟进来。
3.2 设置时区(很多人忽略这一步)
timedatectl set-timezone Asia/Shanghai
timedatectl status
确认输出里有 Time zone: Asia/Shanghai。时区不对,日志时间全乱,排查问题时会疯掉。
3.3 关闭防火墙(新手先这样,后面再讲安全配置)
systemctl stop firewalld
systemctl disable firewalld
🛡️ 安全提醒:生产环境不要长期关闭防火墙!这里先关是为了方便你理解流程,后面我会告诉你怎么配置安全组替代防火墙,更安全。
3.4 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
SELinux 是 Linux 的安全模块,新手开了它,很多服务装好了也跑不起来,报错还看不懂。先关掉,等你有经验了再研究。
3.5 配置 SSH 免密登录(可选但推荐)
如果你经常从同一台电脑连服务器,可以配置公钥登录,以后就不用输密码了。
在本机终端(不是服务器)执行:
ssh-keygen -t rsa -b 4096
一路回车,生成密钥。然后把公钥传到服务器:
ssh-copy-id root@47.98.123.45
输入密码后,以后登录就不用输密码了。
四、安装 Nginx:让你的网站能访问
4.1 安装 Nginx
dnf install nginx -y
4.2 启动 Nginx 并设置开机自启
systemctl start nginx
systemctl enable nginx
systemctl status nginx
如果看到 active (running),就说明 Nginx 跑起来了。
4.3 测试访问
打开浏览器,访问你的公网IP:http://47.98.123.45
如果看到 “Welcome to nginx on AlmaLinux!” 的页面,恭喜你,第一步成功了!
🔍 如果看不到页面:
- 确认防火墙已经关闭(前面做过)
- 确认安全组开了 80端口(和22端口一样操作)
- 在服务器上看 Nginx 状态:
systemctl status nginx
4.4 配置 Nginx 监听 80 端口(默认就是,但确认一下)
编辑配置文件:
vi /etc/nginx/nginx.conf
找到 server 块,确保有:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
改完按 Esc,输入 :wq 保存退出。
重载配置:
nginx -t && systemctl reload nginx
nginx -t 是测试配置有没有语法错误,没问题再 reload。
五、部署一个简单的 PHP 项目(实战举例)
光有 Nginx 还不够,大多数项目需要 PHP。我们以一个简单的项目为例,把 Nginx + PHP-FPM 跑起来。
5.1 安装 PHP 和 PHP-FPM
dnf install php php-fpm php-mysqlnd php-gd php-curl php-mbstring -y
5.2 启动 PHP-FPM
systemctl start php-fpm
systemctl enable php-fpm
systemctl status php-fpm
5.3 修改 Nginx 配置,支持 PHP
vi /etc/nginx/nginx.conf
在 server 块里添加 PHP 支持:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
测试并重载:
nginx -t && systemctl reload nginx
5.4 写一个测试页面
cat > /usr/share/nginx/html/info.php << 'EOF'
<?php
phpinfo();
?>
EOF
5.5 浏览器访问 http://47.98.123.45/info.php
如果看到 PHP 信息页面,说明 Nginx + PHP 配置成功!
⚠️ 安全提醒:测试完后,把
info.php删掉,不要留在服务器上!> rm /usr/share/nginx/html/info.php > ``` --- ## 六、安全加固:别等被黑了才后悔 前面为了省事关了防火墙和 SELinux,现在该补上了。 ### 6.1 重新开启防火墙,但只开放需要的端口 ```bash systemctl start firewalld systemctl enable firewalld # 开放 80 端口(HTTP) firewall-cmd --permanent --add-service=http # 开放 443 端口(HTTPS,后面装证书用) firewall-cmd --permanent --add-service=https # 开放 22 端口(SSH,如果你安全组已经开了,这里可以不开,但保险起见开着) firewall-cmd --permanent --add-port=22/tcp # 重载防火墙 firewall-cmd --reload
6.2 禁用 root 直接 SSH 登录(强烈推荐)
创建普通用户:
useradd -m -s /bin/bash myuser
passwd myuser
给普通用户 sudo 权限:
dnf install sudo -y
usermod -aG wheel myuser
编辑 SSH 配置:
vi /etc/ssh/sshd_config
找到并修改:
PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
重启 SSH 服务:
systemctl restart sshd
🚨 重要:改完别急着断开当前连接!先开一个新的终端窗口,用普通用户测试登录:
> ssh myuser@47.98.123.45 > ``` > 能登录成功,再断开。不然 root 被禁,你又登不上,就麻烦大了。 ### 6.3 配置 SSH 密钥登录(替代密码) 在本机生成密钥(如果前面没生成): ```bash ssh-keygen -t rsa -b 4096 ssh-copy-id myuser@47.98.123.45
然后在服务器上禁用密码登录:
vi /etc/ssh/sshd_config
PasswordAuthentication no
systemctl restart sshd
以后登录只用密钥,安全系数大幅提升。
七、配置 HTTPS:给网站加把锁
现在 HTTP 能访问了,但数据是明文传输的,不安全。我们搞个免费的 HTTPS。
7.1 安装 Certbot
dnf install epel-release -y
dnf install certbot python3-certbot-nginx -y
7.2 获取证书
注意:Certbot 需要一个域名指向你的服务器。如果你还没有域名,先用 HTTP 凑合,或者买个域名解析过来。
假设你的域名是 example.com,并且已经解析到 47.98.123.45:
certbot --nginx -d example.com
按提示输入邮箱,同意协议,选择是否重定向 HTTP 到 HTTPS(选 2 重定向)。
Certbot 会自动修改 Nginx 配置,重启服务。
7.3 测试 HTTPS
浏览器访问 https://example.com,看到锁标志就成功了。
📌 自动续期:Certbot 会自动配置定时任务,每90天续期一次,不用管。
八、常见问题速查表
| 问题 | 原因 | 解决方案 |
|---|---|---|
| SSH 连接超时 | 安全组没开 22 端口 | 控制台安全组加规则 |
| SSH 连接被拒绝 | SSH 服务没启动 | systemctl start sshd |
| Nginx 打不开 | 防火墙/安全组没开 80 | 开放 80 端口 |
| PHP 页面显示源码 | Nginx 没配 PHP 转发 | 检查 fastcgi_pass 配置 |
| 权限拒绝 | SELinux 或文件权限 | setenforce 0 或 chown |
| 证书续期失败 | 定时任务没配置 | systemctl status certbot |
九、总结:你刚刚完成了什么
从 SSH 连不上到 Nginx + PHP + HTTPS 全跑起来,这中间你经历了:
- 搞定安全组——这是新手最容易卡住的地方
- 系统初始化——更新、时区、SELinux,一步不能少
- Nginx + PHP 配置——理解了 fastcgi 是什么
- 安全加固——普通用户登录、密钥认证、防火墙
- HTTPS 配置——免费证书,保护数据
整个过程大约 1-2 小时,第一次做可能会慢一点,但多试两次就熟了。阿里云 ECS + AlmaLinux 8 的组合非常稳定,后面你可以继续装 MySQL、Redis、Docker 等等,搭建完整的应用环境。
如果中间遇到报错,把错误信息贴到网上搜,99% 的问题别人都遇到过。祝你部署顺利!
