从零开始:公有云环境部署与网站设置全流程详解

 摘要

本文详细记录了在公有云环境下部署Web服务器的全过程。内容涵盖云服务器的选购与初始化、Linux系统基础配置、LNMP/LAMP环境搭建、域名解析与绑定、SSL证书配置以及网站的安全加固。旨在通过实操案例,帮助读者掌握公有云资源的管理与网站运维的核心技能。通过本文的指导,读者将能够独立完成从零到一的云服务器部署,为后续的网站运营打下坚实基础。

关键词: 公有云、云服务器、LNMP、网站部署、SSL证书、安全加固、运维

      

 第一章:引言与项目背景

 1.1 背景介绍

随着云计算技术的迅猛发展,传统的物理服务器运维模式正逐渐被云服务器所取代。公有云服务(如阿里云、腾讯云、华为云等)凭借其弹性计算、按需付费、安全防护和便捷的网络配置能力,已成为企业和个人开发者的首选。据统计,2024年全球云计算市场规模已超过5000亿美元,年增长率保持在20%以上。

对于现代开发者和运维人员而言,掌握在公有云平台上快速部署和管理网站的能力已成为必备技能。这不仅能够提高工作效率,还能显著降低IT基础设施的运营成本。通过云服务,我们可以实现资源的弹性伸缩,根据业务需求随时调整服务器配置,避免了传统服务器采购和维护的复杂性。

 1.2 项目目标

本次实操项目的主要目标是:

1. 申请并配置一台公有云服务器:学习如何选择合适的云服务商,创建和管理云服务器实例

2. 在服务器上搭建Web运行环境:掌握LNMP(Linux+Nginx+MySQL+PHP)环境的搭建方法

3. 部署一个简单的静态或动态网站:实现网站文件的上传和配置

4. 配置域名访问及HTTPS安全连接:完成域名解析和SSL证书配置

5. 进行网站安全加固:学习基本的服务器安全防护措施

通过完成这个项目,读者将获得完整的云服务器部署和网站运维经验。

 1.3 项目意义

本项目的实施具有以下重要意义:

   理论与实践结合:将网络协议、操作系统、数据库等理论知识应用到实际生产环境中

   提升运维能力:建立从全局视角看待网站部署的思维方式

   增强问题解决能力:通过实际操作和故障排查,提高独立解决问题的能力

   适应技术发展趋势:掌握当前主流的云计算技术,为职业发展增添竞争力

      

 第二章:公有云环境准备与初始化

 2.1 云服务商选择与实例创建

 2.1.1 云平台选择

在开始之前,我们需要选择合适的云服务提供商。目前主流的云平台包括:

   阿里云:国内市场份额最大,服务完善,适合国内用户

   腾讯云:游戏和社交领域优势明显,价格相对优惠

   华为云:企业级服务能力强,安全性高

   AWS:国际领先,功能强大,但国内访问速度较慢

本次实操选用阿里云作为实验环境,主要考虑到其在国内的稳定性和完善的文档支持。

 2.1.2 实例创建步骤

操作流程:

1. 注册与实名认证:访问阿里云官网,完成账号注册及实名认证。这是使用云服务的基础,也是符合国家网络安全法的要求。

2. 选择镜像:在创建实例时,需要选择操作系统镜像。考虑到企业级应用的稳定性和社区支持,本次选用CentOS 7.9作为操作系统。CentOS是基于Red Hat Enterprise Linux的社区版本,以其稳定性和安全性著称。

3. 配置规格选择:根据项目需求和预算,选择2核4G的配置,带宽选择3Mbps。对于中小型网站,这样的配置已经足够应对日常访问需求。

4. 安全组设置:这是至关重要的一步。必须正确配置安全组规则,放行必要的端口:

       22端口:用于SSH远程连接,管理服务器

       80端口:用于HTTP网页访问

       443端口:用于HTTPS加密访问

       3306端口:用于MySQL数据库远程连接(如果需要)

 2.2 远程连接与系统初始化

 2.2.1 远程连接方式

实例创建完成后,通过SSH工具连接服务器。常用的SSH工具有:

   Xshell:功能强大,支持多标签页

   PuTTY:开源免费,轻量级

   MobaXterm:集成多种网络工具

连接命令示例:

  

ssh root@你的公网IP地址

  

首次连接时,系统会提示确认服务器指纹,输入yes继续。然后输入实例创建时设置的密码即可登录。

 2.2.2 系统初始化操作

登录成功后,首先进行系统初始化配置:

1. 修改主机名

  

hostnamectl set  hostname web  server  01

  

修改主机名有助于在多服务器环境中识别和管理服务器。

2. 系统更新

  

yum update   y

  

这个命令的作用是:

   `yum`:Yellowdog Updater Modified,是CentOS的包管理工具

   `update`:更新所有已安装的软件包

   `  y`:自动回答"yes",避免交互式确认

3. 安装常用工具

  

yum install   y wget vim net  tools git

  

这些工具的功能:

   `wget`:命令行下载工具

   `vim`:文本编辑器

   `net  tools`:网络配置工具集

   `git`:版本控制工具

 2.3 网络配置与测试

 2.3.1 网络连通性测试

  

ping www.baidu.com

  

通过ping测试,验证服务器的网络连通性。如果能够收到回复,说明网络配置正确。

 2.3.2 防火墙配置

虽然云平台有安全组,但服务器内部的防火墙也需要配置:

  

 启动防火墙服务

systemctl start firewalld

systemctl enable firewalld

 添加HTTP和HTTPS服务

firewall  cmd     permanent     add  service=http

firewall  cmd     permanent     add  service=https

 重新加载配置

firewall  cmd     reload

  

      

 第三章:Web运行环境搭建

 3.1 Web服务工作原理

在开始搭建之前,我们先来了解Web服务的工作原理。当用户在浏览器中输入URL并按下回车后,发生了以下过程:

1. DNS解析:浏览器通过DNS服务器将域名解析为IP地址

2. TCP三次握手:与服务器建立TCP连接

3. HTTP请求:浏览器发送HTTP请求报文

4. 服务器处理:

       Nginx接收请求

       根据请求类型处理静态文件或转发给PHP  FPM

       PHP  FPM执行PHP代码

       PHP代码连接MySQL数据库查询数据

5. 响应返回:服务器将处理结果返回给浏览器

6. 页面渲染:浏览器解析HTML、CSS、JavaScript并渲染页面

 3.2 安装Nginx Web服务器

 3.2.1 Nginx简介

Nginx(发音为"engine  x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3代理服务器。由俄罗斯程序员Igor Sysoev于2004年发布,以其高并发处理能力和低资源消耗而闻名。

Nginx的主要特性:

   事件驱动架构,支持高并发连接

   低内存消耗,每10,000个非活动连接约占用2.5MB内存

   支持负载均衡和反向代理

   支持热部署,配置文件修改后无需重启服务

   模块化设计,易于扩展

 3.2.2 安装步骤

1. 安装Epel源

  

yum install epel  release   y

  

EPEL(Extra Packages for Enterprise Linux)是企业级Linux的额外软件包仓库,提供了许多官方仓库中没有的软件包。

2. 安装Nginx

  

yum install nginx   y

  

3. 启动并设置开机自启

  

systemctl start nginx

systemctl enable nginx

  

4. 验证安装

在浏览器中输入服务器公网IP地址,如果看到"Welcome to nginx!"页面,说明安装成功。

 3.2.3 Nginx配置文件结构

Nginx的主要配置文件位于:

   `/etc/nginx/nginx.conf`:主配置文件

   `/etc/nginx/conf.d/`:虚拟主机配置目录

   `/usr/share/nginx/html/`:默认网站根目录

 3.3 安装MySQL数据库

 3.3.1 MySQL简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL以其高性能、可靠性和易用性而广泛应用于Web应用中。

MySQL的主要特性:

   支持标准SQL语言

   支持多用户、多线程

   支持事务处理(InnoDB引擎)

   支持主从复制

   开源免费(社区版)

 3.3.2 安装步骤

1. 下载并安装MySQL官方源

  

wget https://dev.mysql.com/get/mysql80  community  release  el7  3.noarch.rpm

yum localinstall mysql80  community  release  el7  3.noarch.rpm   y

  

2. 安装MySQL Server

  

yum install mysql  community  server   y

  

3. 启动数据库并获取临时密码

  

systemctl start mysqld

grep 'temporary password' /var/log/mysqld.log

  

4. 运行安全脚本

  

mysql_secure_installation

  

这个脚本会引导用户设置root密码、移除匿名用户、禁止远程root登录等安全配置。

 3.4 安装PHP环境

 3.4.1 PHP简介

PHP(Hypertext Preprocessor)是一种通用开源脚本语言,特别适合Web开发。PHP可以嵌入HTML中,执行效率比完全生成HTML标记的CGI要高许多。

PHP的主要特性:

   开源免费,跨平台

   语法简单,学习曲线平缓

   支持多种数据库

   拥有庞大的社区和丰富的扩展

   与HTML完美集成

 3.4.2 安装步骤

1. 安装Remi源

  

yum install http://rpms.remirepo.net/enterprise/remi  release  7.rpm   y

  

2. 安装PHP及常用扩展

  

yum install php php  fpm php  mysqlnd php  gd php  xml php  mbstring php  curl   y

  

3. 配置PHP  FPM

编辑`/etc/php  fpm.d/www.conf`文件,将以下配置修改:

  

user = nginx

group = nginx

  

这样可以确保PHP  FPM以nginx用户身份运行,提高安全性。

4. 启动PHP  FPM

  

systemctl start php  fpm

systemctl enable php  fpm

  

      

 第四章:网站部署与配置

 4.1 Nginx虚拟主机配置

 4.1.1 虚拟主机概念

虚拟主机是指在一台物理服务器上托管多个网站的技术。通过不同的server_name配置,Nginx可以根据请求的域名将流量分发到不同的网站目录。

 4.1.2 配置文件示例

创建配置文件`/etc/nginx/conf.d/myblog.conf`:

  

server {

    listen       80;

    server_name  www.mytestsite.com;  此处填写你的域名或IP

    root         /usr/share/nginx/html/myblog;

    index        index.php index.html index.htm;

     日志配置

    access_log /var/log/nginx/myblog_access.log;

    error_log /var/log/nginx/myblog_error.log;

     主要location块

    location / {

        try_files $uri $uri/ =404;

    }

     PHP处理规则

    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;

    }

     静态资源缓存

    location ~ \.(jpg|jpeg|png|gif|css|js|ico)$ {

        expires 30d;

        access_log off;

        add_header Cache  Control "public, no  transform";

    }

     禁止访问隐藏文件

    location ~ /\.ht {

        deny  all;

    }

}

  

 4.1.3 配置验证与重载

  

 检查配置文件语法

nginx   t

 重载配置

systemctl reload nginx

  

 4.2 部署测试页面

 4.2.1 创建网站目录

  

mkdir   p /usr/share/nginx/html/myblog

  

 4.2.2 创建测试文件

创建`/usr/share/nginx/html/myblog/index.php`:

  

<?php

// 数据库连接测试

$servername = "localhost";

$username = "root";

$password = "your_password"; // 替换为你的数据库密码

// 创建连接

$conn = new mysqli($servername, $username, $password);

// 检测连接

if ($conn  >connect_error) {

    die("连接失败: " . $conn  >connect_error);

}

echo "<h1>公有云环境部署成功!</h1>";

echo "<p>数据库连接正常!</p>";

echo "<p>当前时间:" . date('Y  m  d H:i:s') . "</p>";

// 关闭连接

$conn  >close();

?>

  

 4.3 域名解析与绑定

 4.3.1 域名注册与管理

如果还没有域名,需要先在域名注册商(如阿里云、腾讯云、Godaddy等)购买域名。建议选择.com、.cn等常见后缀。

 4.3.2 DNS解析设置

登录域名控制台,添加A记录:

| 记录类型 | 主机记录 | 记录值 | TTL |

|              |             |             |             |

| A | @ | 服务器公网IP | 600 |

| A | www | 服务器公网IP | 600 |

 4.3.3 解析生效验证

  

nslookup www.mytestsite.com

  

或使用在线工具检查DNS解析是否生效。

      

 第五章:安全加固与SSL配置

 5.1 服务器安全加固

 5.1.1 SSH安全配置

1. 修改SSH端口

编辑`/etc/ssh/sshd_config`:

  

Port 22

Port 22222  修改为非标准端口

  

2. 禁用root远程登录

  

PermitRootLogin no

  

3. 使用密钥认证

  

 生成密钥对

ssh  keygen   t rsa   b 4096

 将公钥复制到服务器

ssh  copy  id   i ~/.ssh/id_rsa.pub user@server_ip

  

 5.1.2 防火墙配置

  

 放行SSH端口(如果修改了端口)

firewall  cmd     permanent     add  port=22222/tcp

 重新加载配置

firewall  cmd     reload

  

 5.2 部署SSL证书实现HTTPS

 5.2.1 Let's Encrypt简介

Let's Encrypt是一个免费、自动化、开放的证书颁发机构(CA),由互联网安全研究小组(ISRG)运营。它通过自动化流程简化了SSL/TLS证书的获取和部署。

 5.2.2 Certbot工具安装

  

 安装Certbot

yum install certbot python3  certbot  nginx   y

  

 5.2.3 申请证书并自动配置

  

certbot     nginx   d www.mytestsite.com   d mytestsite.com

  

Certbot会自动完成以下操作:

1. 验证域名所有权

2. 申请SSL证书

3. 自动修改Nginx配置启用HTTPS

4. 配置HTTP到HTTPS的重定向

 5.2.4 配置自动续期

  

 添加定时任务

echo "0 3    /usr/bin/certbot renew     quiet" | crontab   

  

Let's Encrypt证书有效期为90天,自动续期确保网站始终使用有效的SSL证书。

      

 第六章:实操总结与心得

 6.1 遇到的问题与解决方案

 6.1.1 问题一:无法访问网页

现象描述: 在浏览器中输入服务器IP地址,无法打开Nginx欢迎页。

排查过程:

1. 检查云服务器状态,确认实例正在运行

2. 检查安全组规则,发现80端口未放行

3. 检查Nginx服务状态,确认服务已启动

解决方案: 在云平台控制台的安全组配置中,添加入方向规则,放行80端口的TCP流量。

经验总结: 云服务器的网络访问需要同时满足两个条件:云平台的安全组规则和服务器内部的防火墙配置。

 6.1.2 问题二:PHP页面无法解析

现象描述: 访问PHP文件时,浏览器直接下载了文件,而不是执行PHP代码。

排查过程:

1. 检查PHP  FPM服务状态,确认服务正在运行

2. 检查Nginx配置文件,发现location ~ .php块配置有误

3. 查看Nginx错误日志,发现fastcgi_pass配置错误

解决方案: 修正Nginx配置文件中的fastcgi_pass指令,将其指向正确的PHP  FPM地址(127.0.0.1:9000),然后重启Nginx服务。

经验总结: 配置文件的语法和参数设置至关重要,任何小错误都可能导致服务无法正常工作。学会查看日志文件是解决问题的关键。

 6.1.3 问题三:数据库连接失败

现象描述: PHP脚本连接MySQL数据库时,提示连接失败。

排查过程:

1. 检查MySQL服务状态,确认服务正在运行

2. 检查数据库用户权限,发现root用户不允许从远程连接

3. 检查防火墙设置,确认3306端口已放行

解决方案: 创建专用的数据库用户,并授予相应的权限:

  

CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'strong_password';

GRANT ALL PRIVILEGES ON . TO 'webuser'@'localhost';

FLUSH PRIVILEGES;

  

 6.2 学习收获

通过本次"公有 云环境部署与网站设置"的实操练习,我获得了以下宝贵经验:

 6.2.1 技术能力提升

理论与实践结合: 将课堂上学到的网络协议(TCP/IP, HTTP/HTTPS)、操作系统指令(Linux)、数据库管理等理论知识应用到了实际生产环境中。这种实践经历让抽象的概念变得具体可感。

运维思维建立: 学会了从全局视角看待网站部署,不仅仅是安装软件,还包括网络规划、安全策略、域名管理、性能优化等环节。这种系统性思维对于成为合格的运维工程师至关重要。

故障排查能力: 通过查看日志文件(/var/log/nginx/、/var/log/mysqld.log等)定位问题,提升了独立解决问题的能力。学会了使用各种诊断工具(ping、telnet、nslookup等)进行网络故障排查。

 6.2.2 项目管理经验

计划制定: 在开始项目之前,制定了详细的操作计划和时间安排,确保项目按计划推进。

风险管理: 提前识别可能遇到的风险(如网络配置错误、软件版本冲突等),并准备了相应的应对方案。

文档记录: 养成了详细记录操作过程的习惯,这不仅有助于问题排查,也为后续的项目维护提供了参考。

 6.3 未来展望

 6.3.1 技术发展方向

虽然目前实现了基础网站的部署,但在以下方面还有很大的提升空间:

高可用架构: 学习负载均衡(如Nginx反向代理)、数据库主从复制、分布式文件系统等技术,构建高可用的网站架构。

容器化部署: 深入学习Docker、Kubernetes等容器技术,实现应用的快速部署和弹性伸缩。

自动化运维: 掌握Ansible、Terraform等自动化运维工具,提高运维效率。

监控与报警: 学习Prometheus、Grafana等监控工具,建立完善的系统监控体系。

 6.3.2 职业发展规划

短期目标: 在未来6个月内,深入学习DevOps相关技术,获得相关认证(如AWS Certified DevOps Engineer)。

中期目标: 在1  2年内,成为能够独立设计和实施企业级云架构的高级运维工程师。

长期目标: 发展为技术架构师,能够从战略层面规划和指导企业的技术发展路线。

 6.4 实践感悟

通过这次公有云环境部署的实践,我深刻认识到:

1. 理论学习与实践操作同样重要,只有将两者结合,才能真正掌握技术。

2. 细节决定成败,在服务器配置中,一个小小的配置错误

更多推荐