☰
免费Linux服务器实战:从申请到部署Nginx与Docker
2026/10/17 5:32:27 网站建设 项目流程

很多刚开始学 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.pub

3.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_ip

VSCode 会自动连接远程服务器,并在左侧打开远程文件夹。这样可以直接在本地编辑远程代码,运行终端命令,适合在免费服务器上写脚本或做小项目。

4. Linux 基础环境配置

4.1 更新系统与安装基础工具

新服务器登录后,第一件事是更新软件源和系统包。

Ubuntu / Debian 系统:

sudo apt update sudo apt upgrade -y

CentOS / 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 devuser

CentOS / 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 chrony

CentOS / Rocky:

sudo yum install chrony -y sudo systemctl enable --now chronyd

4.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 enable

CentOS / 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 网络不通怎么排查

部署完服务后,如果浏览器访问不了,可以按下面的顺序排查:

  1. 先从服务器本地确认服务是否运行:
    sudo systemctl status nginx
  2. 查看端口是否监听:
    ss -lntp | grep 80
  3. 从本机测试端口连通性:
    telnet server_ip 80
  4. 检查云平台安全组是否放行端口。
  5. 检查系统防火墙是否放行端口。
  6. 确认服务监听的是0.0.0.0而不是127.0.0.1,否则只能本机访问。

大多数端口访问问题,都出在安全组或系统防火墙的放行规则上。

6. 实战:使用 Nginx 部署一个静态站点

6.1 安装并启动 Nginx

Nginx 是常用的 Web 服务器和反向代理,非常适合在低配服务器上运行。安装命令:

Ubuntu / Debian:

sudo apt update sudo apt install nginx -y

CentOS / 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/mysite

6.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-world

7.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 fail2ban

Fail2ban 默认会监控 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 日志,大部分问题都能在这里找到答案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询