公司动态

免费Linux服务器实战:从申请到部署Nginx与Docker

📅 2026/9/1 7:32:55
免费Linux服务器实战:从申请到部署Nginx与Docker
很多刚开始学 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_emailexample.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 usernameserver_ip如果ssh-copy-id不可用也可以手动放到服务器~/.ssh/authorized_keys文件中。这一步需要先能登录服务器。3.3 连接服务器拿到服务器 IP 和用户名后用ssh命令连接ssh -i ~/.ssh/id_rsa usernameserver_ip如果密钥默认路径就是~/.ssh/id_rsa可以省略-i参数ssh usernameserver_ip首次连接会出现 host key 确认提示输入yes回车即可。常见初始用户名根据系统镜像不同而不同UbuntuubuntuDebiandebianCentOS / Rockyroot或centosOracle Linuxopc具体以云平台控制台说明为准。3.4 连接失败的常见原因SSH 连不上最常见的原因有三个问题现象可能原因解决思路Connection timed out安全组或防火墙未放行 22 端口登录云平台控制台检查入站规则是否允许 TCP 22 端口Permission denied密钥不匹配或私钥路径错误检查公钥是否上传、私钥文件权限是否为 600Host key verification failed本机 SSH 缓存了旧的主机指纹执行ssh-keygen -R server_ip重试如果私钥文件权限不对执行chmod 600 ~/.ssh/id_rsa如果在终端里反复卡在登录可以加上-v参数查看详细连接日志ssh -v usernameserver_ip日志里的信息能帮你判断是网络问题、认证问题还是配置问题。3.5 使用 VSCode Remote-SSH 开发如果觉得命令行编辑文件不方便可以用 VSCode 的 Remote-SSH 插件连接免费服务器。安装扩展后按F1打开命令面板输入Remote-SSH: Connect to Host然后填写ssh -i ~/.ssh/id_rsa usernameserver_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 / Debiansudo usermod -aG sudo devuserCentOS / Rockysudo 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 / Debiansudo apt install chrony -y sudo systemctl enable --now chronyCentOS / Rockysudo 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 端口需要添加入站规则端口 22SSH 登录。端口 80HTTP 访问。端口 443HTTPS 访问。为了安全可以只允许特定 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 默认使用 firewalldsudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps 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 安装并启动 NginxNginx 是常用的 Web 服务器和反向代理非常适合在低配服务器上运行。安装命令Ubuntu / Debiansudo apt update sudo apt install nginx -yCentOS / Rockysudo 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 h1Hello 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 devuserserver_ip:/var/www/mysite/执行后会把本地的index.html上传到服务器对应目录。如果是整个目录可以加-r参数scp -r -i ~/.ssh/id_rsa ./mysite devuserserver_ip:/tmp/上传后记得检查文件所有权必要时修改sudo chown -R devuser:devuser /var/www/mysite6.4 HTTPS 与合规提醒免费服务器如果只是练习和测试用 HTTP 就够了。如果要做正式站点推荐配置 HTTPS。常见方案是 Lets Encrypt 免费证书配合 Certbot 自动签发和续期sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your_domain.com不过免费服务器通常没有绑定域名所以这一步不是必须的。这里还要提醒一点海外服务器不受国内备案约束适合学习测试和海外业务如果你要面向国内用户提供正式服务建议选择国内合规云服务商并按法规要求完成备案和等保相关流程。免费海外服务器不要用于生产环境。7. 实战用 Docker 跑一个容器服务7.1 安装 DockerDocker 是现在最常用的容器技术在免费服务器上跑 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 --restartalways -p 8080:80 nginx:alpine参数说明-d后台运行。--name web-nginx指定容器名称。--restartalways容器退出后自动重启适合长期运行。-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 --restartalways -m 256m -p 8080:80 nginx:alpine-m 256m表示限制容器最多使用 256MB 内存。设置之后容器内存异常时会触发 OOM 限制而不影响宿主机整体运行。查看系统资源占用docker stats这个命令可以实时查看每个容器的 CPU、内存、网络和磁盘占用是排查资源瓶颈的好工具。8. 常见问题排查与安全加固8.1 常见问题排查表问题现象常见原因解决思路SSH 连接超时安全组未放行 22 端口在云平台控制台添加入站规则 TCP 22SSH 提示 Permission denied公钥未上传或私钥不对检查authorized_keys确认私钥文件权限 600浏览器访问不了 Nginx安全组或 ufw/firewalld 未放行 80 端口按第 5 节逐层排查服务器重启后服务没启动服务未设置开机自启执行sudo systemctl enable nginx磁盘空间不足日志或 Docker 镜像占用过多用df -h查看清理无用日志和镜像时区不对系统时区未设置timedatectl set-timezone Asia/ShanghaiDocker 命令提示权限不够用户不在 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 来屏蔽频繁登录失败的 IPsudo 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 devuserserver_ip:/tmp/养成备份习惯比依赖免费平台的数据保障靠谱得多。9. 总结与继续学习方向免费海外 Linux 服务器是很好的练手环境。本文从“永久免费”这个概念入手讲清了免费资源到底是什么然后完整演示了 SSH 密钥登录、用户配置、时区修改、防火墙放行、Nginx 部署、Docker 容器运行并给出了常见问题排查表和安全加固建议。如果你完全没接触过服务器下一步可以先重点练习以下内容Linux 常用命令文件操作、进程管理、用户权限。Shell 脚本编写自动化脚本理解变量、循环、条件判断。Nginx 进阶反向代理、负载均衡、静态缓存。Docker Compose用一条命令编排多个容器。系统监控top、free、htop、journalctl等工具。免费资源虽小但足够帮你把 Linux、Nginx、Docker、SSH 这些高频技能练扎实。等业务真正需要稳定运行时再考虑付费或国内合规服务商也不迟。如果你在操作中遇到卡住的地方优先看安全组、防火墙和 SSH 日志大部分问题都能在这里找到答案。