很多刚开始学 Linux 或部署个人项目的开发者,都希望先搞一台远端服务器练手,又不想花太多钱。网上经常能看到“免费国外 Linux 服务器!永久免费”这类标题,消息混杂,有些是推广,有些确实能申请到。说“永久免费”多少有点夸大,但海外云平台的免费层(Free Tier)确实存在,而且对学习、测试、搭建轻量服务来说足够用。
这篇文章会从免费 Linux 服务器的概念讲起,然后完整走一遍申请前准备、SSH 连接、基础环境配置、安全组防火墙、Nginx 部署、Docker 使用,最后补充常见问题排查和安全加固。内容比较长,适合照着一步步操作。
1. 免费 Linux 服务器:到底是什么,适合做什么
1.1 “永久免费”的真实含义
“免费国外 Linux 服务器”通常指海外云平台提供的 Free Tier,也就是给新用户或长期测试用户的一批低配资源。常见形式有两种:
- 免费试用额度:新用户注册后获得一定金额或时长的免费额度,到期后自动扣费或停机。
- 长期免费资源:平台明确标出“Always Free”的资源,只要账号活跃、不超量,可以长期使用,但 CPU、内存、带宽都有严格限制。
所以“永久免费”并不是所有服务器都免费,而是“平台指定的某几款低配实例免费”。而且服务商有权随时调整政策,免费范围也可能变化。把这句话当宣传话术看,不要当成合同承诺。
1.2 免费服务器适合哪些场景
免费 Linux 服务器资源不大,但用途很广:
- 学习 Linux 命令和系统管理,可以随便折腾、重装。
- 练习 SSH、防火墙、用户权限、进程管理。
- 部署 Nginx、MySQL、Redis、Docker 等常见服务。
- 搭建个人博客、静态站点、API 测试接口。
- 做定时任务、数据抓取、轻量脚本运行。
- 给 VSCode Remote-SSH 提供远程开发环境。
对新手来说,免费服务器的意义不是“白嫖”,而是提供一个可以随时重来的真实 Linux 环境,比本地虚拟机更贴近线上生产环境。
1.3 免费服务器不适合哪些场景
免费实例不适合承载正式业务。原因很现实:
- 配置低,CPU 和内存有限,高并发下扛不住。
- 带宽受限,国内访问海外服务器延迟高、速度不稳定。
- 没有 SLA 保证,平台可能下线实例或回收资源。
- 数据不可靠,实例被回收后磁盘数据可能丢失。
- 免费额度有陷阱,误操作可能导致账单。
如果你的业务要长期运行,或者涉及支付、用户数据、重要业务系统,建议选择国内合规云服务商或海外商业服务器,不要拿免费服务器当生产环境。
2. 申请免费服务器前的准备
2.1 本地环境与 SSH 客户端
申请到服务器后,绝大多数操作都通过 SSH 完成,所以本地要准备好 SSH 客户端。
- Windows:推荐使用 Windows Terminal、PowerShell 自带的 OpenSSH 客户端,也可以安装 VSCode 的 Remote-SSH 插件。
- macOS / Linux:系统自带终端,直接使用
ssh命令。 - 如果习惯图形化界面,可以安装 MobaXterm、Termius 等工具。
本文命令都基于终端执行,Windows 用户建议切换到 PowerShell 或 Windows Terminal,避免使用过旧的 CMD 导致部分命令不兼容。
2.2 注册账号与资料准备
申请海外云平台账号,一般需要准备:
- 一个能正常收信的邮箱。
- 部分地区要求手机验证码。
- 部分平台要求绑定信用卡或借记卡,主要用于身份验证,但免费额度内通常不扣费。
这里要特别注意:不是所有平台都强制绑卡,但绑定信用卡的平台往往更容易通过验证。如果不确定是否会扣费,注册后先在控制台查看“计费”或“预算”页面,关闭自动付费、设置额度告警。
2.3 常见的海外免费云平台
目前常见的免费 Linux 服务器来源包括:
- Oracle Cloud Free Tier:提供长期免费实例,资源相对充裕,注册时要求绑卡。
- Google Cloud Free Tier:有免费试用期,也提供一些 Always Free 资源。
- AWS Free Tier:新用户有免费试用期,部分资源长期免费。
- Microsoft Azure:提供免费试用额度。
- 其他小型云平台:优惠活动较多,但稳定性要自己判断。
不同平台的免费资源、区域、配置都在变,申请前一定先阅读官方免费层说明,确认以下几点:
- 免费资源的具体机型、内存、硬盘大小。
- 免费流量额度,超额如何计费。
- 实例回收条件,例如长期空闲是否会被回收。
- 试用额度到期后是否自动转为付费。
不要只看别人转发的截图,一切以官方页面为准。
2.4 申请时的几个提醒
申请海外免费服务器时,有几个坑值得提前说:
- 不要用同一个手机号或邮箱反复注册,容易被判定为滥用。
- 地区选择尽量选离国内较近的区域,例如日本、新加坡、韩国等,延迟会低一些。
- 创建实例时系统会要求保存密钥对,一定要把私钥下载到本地并妥善保管,关掉页面后很难找回。
- 创建实例后,记下公网 IP、初始用户名、系统镜像类型。
如果申请失败或提示“资源不足”,换个区域或过一段时间再试,很多平台免费实例是动态分配的。
3. SSH 连接服务器:从密钥到登录
3.1 生成 SSH 密钥对
SSH 登录有两种常见认证方式:密码认证和密钥认证。密钥认证更安全,也更能避免被暴力破解。云平台创建实例时,通常会要求上传公钥或自动生成密钥对。
如果本地还没有密钥,可以执行下面命令生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"参数说明:
-t rsa:指定密钥算法为 RSA。-b 4096:指定密钥长度 4096 位,安全性更高。-C:添加备注,一般写邮箱或用途。
执行后一路回车,会在~/.ssh/目录下生成两个文件:
id_rsa:私钥,必须保存在本地,不能泄露。id_rsa.pub:公钥,可以上传到服务器。
查看公钥内容:
cat ~/.ssh/id_rsa.pub3.2 将公钥上传到服务器
在云平台创建实例时,如果支持粘贴公钥,直接把id_rsa.pub内容粘贴进去即可。
如果实例已经创建,也可以通过ssh-copy-id把公钥推送到服务器,但前提是知道服务器初始密码或已有密钥登录权限:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip如果ssh-copy-id不可用,也可以手动放到服务器~/.ssh/authorized_keys文件中。这一步需要先能登录服务器。
3.3 连接服务器
拿到服务器 IP 和用户名后,用ssh命令连接:
ssh -i ~/.ssh/id_rsa username@server_ip如果密钥默认路径就是~/.ssh/id_rsa,可以省略-i参数:
ssh username@server_ip首次连接会出现 host key 确认提示,输入yes回车即可。
常见初始用户名根据系统镜像不同而不同:
- Ubuntu:
ubuntu - Debian:
debian - CentOS / Rocky:
root或centos - Oracle Linux:
opc
具体以云平台控制台说明为准。
3.4 连接失败的常见原因
SSH 连不上,最常见的原因有三个:
| 问题现象 | 可能原因 | 解决思路 |
|---|---|---|
| Connection timed out | 安全组或防火墙未放行 22 端口 | 登录云平台控制台,检查入站规则是否允许 TCP 22 端口 |
| Permission denied | 密钥不匹配或私钥路径错误 | 检查公钥是否上传、私钥文件权限是否为 600 |
| Host key verification failed | 本机 SSH 缓存了旧的主机指纹 | 执行ssh-keygen -R server_ip重试 |
如果私钥文件权限不对,执行:
chmod 600 ~/.ssh/id_rsa如果在终端里反复卡在登录,可以加上-v参数查看详细连接日志:
ssh -v username@server_ip日志里的信息能帮你判断是网络问题、认证问题还是配置问题。
3.5 使用 VSCode Remote-SSH 开发
如果觉得命令行编辑文件不方便,可以用 VSCode 的 Remote-SSH 插件连接免费服务器。
安装扩展后,按F1打开命令面板,输入Remote-SSH: Connect to Host,然后填写:
ssh -i ~/.ssh/id_rsa username@server_ipVSCode 会自动连接远程服务器,并在左侧打开远程文件夹。这样可以直接在本地编辑远程代码,运行终端命令,适合在免费服务器上写脚本或做小项目。
4. Linux 基础环境配置
4.1 更新系统与安装基础工具
新服务器登录后,第一件事是更新软件源和系统包。
Ubuntu / Debian 系统:
sudo apt update sudo apt upgrade -yCentOS / Rocky 系统:
sudo yum update -y更新过程可能比较久,免费实例性能一般,耐心等待。更新完可以重启一次,确保内核和系统库都生效:
sudo reboot如果需要在服务器上跑 Python,可以顺手安装:
sudo apt install python3 python3-pip -y python3 --version部分发行版自带 Python3,但 pip 可能没装,按上面命令补上即可。
4.2 创建日常用户并配置 sudo
很多云平台默认只给了一个普通用户,例如ubuntu或opc。为了日常管理方便,建议创建一个新用户,并加入 sudo 管理组。
sudo adduser devuser执行后会要求设置密码、填写用户信息,密码必填,其他可以直接回车。
把新用户加入 sudo 组:
Ubuntu / Debian:
sudo usermod -aG sudo devuserCentOS / Rocky:
sudo usermod -aG wheel devuser切换测试:
su - devuser sudo whoami如果输出root,说明 sudo 权限配置成功。
4.3 修改主机名与服务器时区
服务器默认主机名是一串随机字符,不便于区分。修改主机名:
sudo hostnamectl set-hostname my-free-server重新连接后提示符会变化。时区如果不正确,日志时间会差好几个小时,查看当前时区:
timedatectl修改为北京时间:
sudo timedatectl set-timezone Asia/Shanghai再次执行timedatectl确认时间正确。如果系统时间偏差太大,还可以安装时间同步服务:
Ubuntu / Debian:
sudo apt install chrony -y sudo systemctl enable --now chronyCentOS / Rocky:
sudo yum install chrony -y sudo systemctl enable --now chronyd4.4 常用 Linux 命令速查
免费服务器很适合反复练习 Linux 常用命令。下面整理了一份高频命令速查表:
| 用途 | 命令示例 | 说明 |
|---|---|---|
| 查看当前目录 | pwd | 显示当前工作目录 |
| 列出文件 | ls -lah | 查看文件详情,包括隐藏文件 |
| 切换目录 | cd /var/log | 进入指定目录 |
| 新建目录 | mkdir -p /tmp/test | 创建目录,-p可递归创建 |
| 删除文件或目录 | rm -rf /tmp/test | 强制递归删除,谨慎使用 |
| 查找文件 | find /etc -name "*.conf" | 按名称查找文件 |
| 查看文件内容 | cat /etc/os-release | 查看系统版本信息 |
| 查看内存 | free -h | 以人类可读方式显示内存 |
| 查看磁盘 | df -hT | 查看磁盘挂载和剩余空间 |
| 查看进程 | ps aux | grep nginx | 过滤查看某个进程 |
| 网络端口 | ss -lntp | 查看监听端口和服务 |
| 重启服务 | sudo systemctl restart sshd | 重启 SSH 服务 |
特别提醒:rm -rf不要在小目录里随便测试,尤其是rm -rf /这种命令,千万不要执行,服务器会直接废掉。
5. 安全组、防火墙与网络排查
5.1 控制台安全组 / 防火墙
云平台的“安全组”或“防火墙”是虚机最外层防护,相当于把不想要的流量挡在门外。很多新手刚创建服务器时发现 SSH 连不上,或者装好 Nginx 但浏览器打不开,问题往往出在这一层。
不同平台入口名称不一样,常见叫“安全组”“防火墙规则”“VPC 防火墙”,操作逻辑相同:
- 入站规则(Ingress):允许外部访问哪些端口。
- 出站规则(Egress):服务器对外访问哪些端口,一般默认全放行。
如果要开放 22、80、443 端口,需要添加入站规则:
- 端口 22:SSH 登录。
- 端口 80:HTTP 访问。
- 端口 443:HTTPS 访问。
为了安全,可以只允许特定 IP 访问 22 端口。如果本地 IP 不固定,再临时放宽。
5.2 系统内防火墙:ufw 与 firewalld
控制台安全组放行后,系统内部的防火墙也要同步放行。
Ubuntu / Debian 默认可能没启用 ufw,可以先查看状态:
sudo ufw status如果显示active,需要放行端口:
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enableCentOS / Rocky 默认使用 firewalld:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload注意:如果系统内防火墙没有放行,就算控制台安全组开放了端口,外部依然无法访问。
5.3 网络不通怎么排查
部署完服务后,如果浏览器访问不了,可以按下面的顺序排查:
- 先从服务器本地确认服务是否运行:
sudo systemctl status nginx - 查看端口是否监听:
ss -lntp | grep 80 - 从本机测试端口连通性:
telnet server_ip 80 - 检查云平台安全组是否放行端口。
- 检查系统防火墙是否放行端口。
- 确认服务监听的是
0.0.0.0而不是127.0.0.1,否则只能本机访问。
大多数端口访问问题,都出在安全组或系统防火墙的放行规则上。
6. 实战:使用 Nginx 部署一个静态站点
6.1 安装并启动 Nginx
Nginx 是常用的 Web 服务器和反向代理,非常适合在低配服务器上运行。安装命令:
Ubuntu / Debian:
sudo apt update sudo apt install nginx -yCentOS / Rocky:
sudo yum install nginx -y启动并设置开机自启:
sudo systemctl enable --now nginx sudo systemctl status nginx看到active (running)表示启动成功。此时如果安全组和防火墙开放了 80 端口,直接访问:
http://server_ip应该能看到 Nginx 默认欢迎页。
6.2 修改站点目录并放置网页
默认站点目录位于/var/www/html,为了演示,我们创建一个新站点目录:
sudo mkdir -p /var/www/mysite创建首页文件:
echo '<h1>Hello Free Linux Server</h1>' | sudo tee /var/www/mysite/index.html然后新建 Nginx 站点配置。Ubuntu 的配置位置一般是/etc/nginx/sites-available/:
sudo vim /etc/nginx/sites-available/mysite写入以下内容:
server { listen 80; server_name _; root /var/www/mysite; index index.html; location / { try_files $uri $uri/ =404; } }启用配置:
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx如果nginx -t提示配置语法正确,再刷新浏览器,应该能看到自己写的页面。
CentOS 系统的配置路径是/etc/nginx/conf.d/,可以直接在/etc/nginx/conf.d/mysite.conf写入上面的 server 配置。
6.3 本地上传文件到服务器
如果需要把本地网页上传到服务器,可以使用scp命令:
scp -i ~/.ssh/id_rsa ./index.html devuser@server_ip:/var/www/mysite/执行后会把本地的index.html上传到服务器对应目录。如果是整个目录,可以加-r参数:
scp -r -i ~/.ssh/id_rsa ./mysite devuser@server_ip:/tmp/上传后记得检查文件所有权,必要时修改:
sudo chown -R devuser:devuser /var/www/mysite6.4 HTTPS 与合规提醒
免费服务器如果只是练习和测试,用 HTTP 就够了。如果要做正式站点,推荐配置 HTTPS。
常见方案是 Let's Encrypt 免费证书,配合 Certbot 自动签发和续期:
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your_domain.com不过免费服务器通常没有绑定域名,所以这一步不是必须的。
这里还要提醒一点:海外服务器不受国内备案约束,适合学习测试和海外业务;如果你要面向国内用户提供正式服务,建议选择国内合规云服务商,并按法规要求完成备案和等保相关流程。免费海外服务器不要用于生产环境。
7. 实战:用 Docker 跑一个容器服务
7.1 安装 Docker
Docker 是现在最常用的容器技术,在免费服务器上跑 Docker 可以快速体验环境隔离和部署流程。
Ubuntu / Debian 推荐使用官方脚本安装:
curl -fsSL https://get.docker.com | sudo sh如果网络比较慢,也可以直接用发行版仓库:
sudo apt install docker.io -y启动 Docker 并设置开机自启:
sudo systemctl enable --now docker让当前用户不用加sudo就能执行 Docker 命令:
sudo usermod -aG docker $USER执行后需要重新登录终端才会生效,可以执行exit退出再重新连接。
验证安装:
docker --version docker run hello-world7.2 运行 Nginx 容器
拉取 Nginx 镜像并启动:
docker run -d --name web-nginx --restart=always -p 8080:80 nginx:alpine参数说明:
-d:后台运行。--name web-nginx:指定容器名称。--restart=always:容器退出后自动重启,适合长期运行。-p 8080:80:将宿主机 8080 端口映射到容器 80 端口。nginx:alpine:基于 Alpine 的精简 Nginx 镜像,体积更小。
查看容器状态:
docker ps访问测试:
http://server_ip:8080看到 Nginx 欢迎页,说明容器运行正常。
7.3 查看日志与容器管理
查看容器日志:
docker logs web-nginx进入容器内部:
docker exec -it web-nginx sh停止和删除容器:
docker stop web-nginx docker rm web-nginx清理无用镜像和缓存:
docker system prune -f常用容器管理命令就这些。免费服务器配置低,不要同时跑太多容器,否则内存很容易被打满。
7.4 免费实例的资源限制
免费实例的 CPU 和内存通常很紧张。跑 Docker 时建议限制容器的内存,防止一个容器把整台机器拖垮:
docker run -d --name web-nginx --restart=always -m 256m -p 8080:80 nginx:alpine-m 256m表示限制容器最多使用 256MB 内存。设置之后,容器内存异常时会触发 OOM 限制,而不影响宿主机整体运行。
查看系统资源占用:
docker stats这个命令可以实时查看每个容器的 CPU、内存、网络和磁盘占用,是排查资源瓶颈的好工具。
8. 常见问题排查与安全加固
8.1 常见问题排查表
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| SSH 连接超时 | 安全组未放行 22 端口 | 在云平台控制台添加入站规则 TCP 22 |
| SSH 提示 Permission denied | 公钥未上传或私钥不对 | 检查authorized_keys,确认私钥文件权限 600 |
| 浏览器访问不了 Nginx | 安全组或 ufw/firewalld 未放行 80 端口 | 按第 5 节逐层排查 |
| 服务器重启后服务没启动 | 服务未设置开机自启 | 执行sudo systemctl enable nginx |
| 磁盘空间不足 | 日志或 Docker 镜像占用过多 | 用df -h查看,清理无用日志和镜像 |
| 时区不对 | 系统时区未设置 | timedatectl set-timezone Asia/Shanghai |
| Docker 命令提示权限不够 | 用户不在 docker 组 | sudo usermod -aG docker $USER后重新登录 |
8.2 关闭密码登录,只允许密钥
免费服务器很容易被公网扫描,最常见的是 SSH 暴力破解。如果已经配置好密钥登录,建议关闭 SSH 密码登录。
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config找到或新增:
PasswordAuthentication no重启 SSH 服务:
sudo systemctl restart sshd重启前一定要确认密钥登录已经可用,否则关闭密码登录后可能无法再进入服务器。保守一点的做法:保留一个终端窗口别关闭,然后执行sudo systemctl restart sshd,再用另一个终端测试能否密钥登录,测试成功后再关掉旧窗口。
8.3 防止被暴力扫描
除了关闭密码登录,还可以安装 Fail2ban 来屏蔽频繁登录失败的 IP:
sudo apt install fail2ban -y sudo systemctl enable --now fail2banFail2ban 默认会监控 SSH 登录日志,连续失败多次后自动封禁 IP。配置文件位于/etc/fail2ban/jail.local,可以按需调整封禁时长。
如果只允许自己的固定 IP 访问,也可以直接在云平台安全组里把 22 端口源限制为你的 IP,这样最省资源。
8.4 数据备份与资源保护
免费服务器不代表数据安全,实例被回收、系统崩溃、误删除都可能导致数据丢失。重要文件一定要定期备份到本地或其他存储。
常用备份思路:
- 配置文件用脚本打包,通过
scp下载到本地。 - 数据库导出 SQL 后压缩保存。
- 静态网站文件上传到 Git 仓库。
- 使用定时任务
cron定期执行备份脚本。
例如把/var/www/mysite打包并下载到本地:
tar -czf mysite-backup.tar.gz /var/www/mysite scp -i ~/.ssh/id_rsa mysite-backup.tar.gz devuser@server_ip:/tmp/养成备份习惯,比依赖免费平台的数据保障靠谱得多。
9. 总结与继续学习方向
免费海外 Linux 服务器是很好的练手环境。本文从“永久免费”这个概念入手,讲清了免费资源到底是什么,然后完整演示了 SSH 密钥登录、用户配置、时区修改、防火墙放行、Nginx 部署、Docker 容器运行,并给出了常见问题排查表和安全加固建议。
如果你完全没接触过服务器,下一步可以先重点练习以下内容:
- Linux 常用命令:文件操作、进程管理、用户权限。
- Shell 脚本:编写自动化脚本,理解变量、循环、条件判断。
- Nginx 进阶:反向代理、负载均衡、静态缓存。
- Docker Compose:用一条命令编排多个容器。
- 系统监控:
top、free、htop、journalctl等工具。
免费资源虽小,但足够帮你把 Linux、Nginx、Docker、SSH 这些高频技能练扎实。等业务真正需要稳定运行时,再考虑付费或国内合规服务商也不迟。如果你在操作中遇到卡住的地方,优先看安全组、防火墙和 SSH 日志,大部分问题都能在这里找到答案。