南京网站制作公司

当前位置: 网站首页 - 新闻动态 - 安优观点 -

如何从零搭建一个网站

发布时间:2024-08-21

来源:

如果你喜欢本文,请多多支持哈,小手一抖,点个小小的红心就是莫大的鼓舞。创作不易,严禁未经同意的恶意转载!

网站建设的方式有哪些?

  1. 应用引擎:GAE,ACE,BAE,SAE,其中ACE是阿里云的应用引擎,现在已经下线
  2. GitHub配合Hexo,并利用NexT主题建设博客网站
  3. ECS云服务器

前面两种都是本人比较早期使用过的,比较方便快捷,但是定制与推广不便,没有特别大的商业价值。现在主流的网站依然是ECS云服务器,虽然稍微有些复杂麻烦,但是长期来讲,它都是最优解。

为了让这篇建站教程更加简洁,这里对一些简单的步骤,比如:

  1. 域名购买步骤
  2. 服务器购买步骤

选择性略过,大家可以直接去对应网站,像淘宝购物一样,登录后直接购买即可,网站里面已经描述的足够详细,这里就不再赘述。

ECS云服务器

开始建设网站之前,第一步肯定是:云服务器,用于存储网站的HTML,MySQL数据库,图片文件,PHP/JAVA代码等等。

推荐:

  1. 阿里云
  2. 腾讯云

域名

登录:万网购买

购买ECS服务器后,你就拥有一个公网IP,如果网站搭建起来了,就可以直接访问了,如:192.168.1.100
但是只有一个IP,用户是记不住的,总不能每次访问都输入:192.168.1.100 去访问你的网站吧。

所以如果想要真正运营起来,想要流量,还需要申请一个域名,浏览器输入域名,就等于是映射访问了 192.168.1.100 这个地址。

IP相当于你的身份证,域名就相当于你的名字!

DNS服务器

上述提到 域名-IP地址 是对应关系,而存储这个映射关系的就需要DNS服务器这个重要角色,DNS服务器一般都是域名服务商免费提供的,不需要我们注册,只需去阿里云/腾讯云的控制台配置即可:

平时我们访问网址,一般都使用:
xx.com或者www.xx.com,所以只需要增加两种记录类型即可!

记录一

主机记录:@
记录类型:A
解析线路(isp):默认
记录值:101.35.99.239
TTL:10分钟

记录二

主机记录:www
记录类型:A
解析线路(isp):默认
记录值:101.35.99.239
TTL:10分钟

什么是主机记录?

主机记录就是域名前缀,常见用法有:

  1. www:解析后的域名为www.aliyun.com。
  2. @:直接解析主域名 aliyun.com。
  3. *:泛解析,匹配其他所有域名 *.aliyun.com。
  4. mail:将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。
  5. 二级域名:如:abc.aliyun.com,填写abc。
  6. 手机网站:如:m.aliyun.com,填写m。
  7. 显性URL:不支持泛解析(泛解析:将所有子域名解析到同一地址)
什么是记录类型?
  1. A:将域名指向一个IPV4地址
  2. CNAME:将域名指向另一个域名
  3. AAAA:将域名指向一个IPV6地址
  4. NS:将子域名指向其他DNS服务器解析
  5. 显性URL:将域名重定向到另外一个地址
  6. 隐形URL:与显性URL类似,但是会隐藏真实目标地址

部署网站

第一次注册ECS云服务器的时候,默认在控制台获取到如下几个信息:

  1. 服务器公网IP
  2. 服务器SSH端口
  3. 服务器远程连接密码

部署指的就是把你的代码上传到ECS云服务器上面,启动Apache或者Tomcat服务器,用户才可以访问。

部署有常用的两种方式:

  1. 著名的宝塔面板(推荐小白使用,傻瓜式安装LAMP)
  2. 使用纯净的CentOS系统,手动登陆SSH,脚本化部署(有一定技术难度,因笔者需要更精确定制PHP和JAVA版本两种服务器,所以使用了这种方式部署)

更加推荐第二种方式,因为网站建设会遇到各种各样的奇奇怪怪的问题,如果这些基本操作都解决不了,就不要建设网站了。

LNMP指的是 Linux + Nginx + MySQL + PHP
LAMP指的是 Linux + Apache + MySQL + PHP

备案

发句牢骚,想当初第一次做网站备案的时候,是一件很烦的过程,需要很多资料,包括网站的内容都会审查,否则会不断给你打电话要求修改,当然万事开头难,只要做了第一次,后续就简单了。
笔者曾亲自经历一个从资源网,变成CMS网站,再到博客网站,再到...,因无法盈利,最后终于走到了停止运营的地步.....

注意:不备案的网站是不合法的,如果被相关部门发现,理论上是要强制关闭的,这点一定要注意!

备案要提前准备一些资料:

  1. 身份证正反面照片
  2. 居住证照片
  3. 居中证视频发送到腾讯云指定的邮箱
  4. 详细明确的网站备注
  5. 域名实名认证(如果是购买的是阿里云域名,就去阿里云实名认证,然后上传截图给阿里云/腾讯云)
  6. 首页的底部添加备案号,并链接到工信部官网首页
  7. 广东省个人网站备案承诺书-签名+手印

备案完成后,必须把备案信息贴到网站首页底部。

CentOS 7 部署安装 Apache + MySQL + PHP详解

下面就是技术环节了,这个环节会比较繁琐,也令许多人望而却步,但顶住朋友们,马上就看到曙光了...

第一步:安装 Apache服务器

$ sudo yum install httpd

一旦安装成功,你就可以设置服务器启动时就开启 Apache 服务:

$ sudo systemctl enable httpd.service

你可以通过重新启动服务器,然后在命令行终端中敲入这条命令来验证 Apache 服务是否在服务器启动时自动开启了:

$ sudo systemctl is-enabled httpd.service

如果你看到了这样的响应:enabled,则说明 Apache 服务已经配置为在服务器启动时自动开启了。

在服务器上启动 Apache 服务的命令为:

$sudo systemctl start httpd.service

重新启动 Apache:

$sudo systemctl restart httpd.service

停止 Apache:

$sudo systemctl stop httpd.service

如果你的服务器正在运行防火墙,请运行下列命令以允许它进行 HTTP 和 HTTPS 通信:

$sudo firewall-cmd --permanent --zone=public --add-service=http
$sudo firewall-cmd --permanent --zone=public --add-service=https
$sudo firewall-cmd --reload

http://<服务器的公网 IP 地址>

第二步:安装MySQL

  1. yum源rpm包下载
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  1. 本地安装 mysql yum源
yum localinstall mysql57-community-release-el7-11.noarch.rpm
  1. 检查 mysql 源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"

第四步安装mysql之前要先禁用默认的mysql模块

sudo yum module disable mysql
  1. 安装 MySQL 服务
yum install -y mysql-community-server
  1. 创建数据目录(可选)
mkdir /data/mysql
chown -R mysql:mysql /data/mysql
  1. 修改配置文件如下,主要修改了一个目录,及添加了字符集参数

vim etc/my.cnf

[mysqld]
character-set-server=utf8
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
  1. 启动MySQL
systemctl start mysqld
  1. 查看登录密码
grep 'temporary password' /var/log/mysqld.log
  1. 登录修改密码
mysql -uroot -p
alter user 'root'@'localhost' identified by '你的密码';
flush privileges;
  1. 重启MySQL
systemctl restart mysqld

MySQL安装出现问题时的常见解决方式

在安装MySQL过程中,可能出现一些异常情况,如果出现,可以尝试一下指令重装或者重启修复,如果没有出现,可以跳过这些步骤。

完全卸载MySQL(可选步骤)
  1. 查看mysql安装了哪些东西 rpm -qa |grep -i mysql
  2. 开始卸载 yum remove xx(上述列表)
  3. 查看是否卸载完成 rpm -qa | grep -i mysql
  4. 查找mysql相关目录 find / -name mysql
  5. 删除相关目录 rm -rf xx
  6. 删除/etc/my.cnf rm -rf /etc/my.cnf
  7. 删除/var/log/mysqld.log(如果不删除这个文件,会导致新安装的mysql无法生存新密码,导致无法登陆)rm -rf /var/log/mysqld.log
MySQL首次安装无密码的问题:/var/log/mysqld.log 中找不到临时密码(可选步骤)

网上都说初次安装 grep 'temporary password' /var/log/mysqld.log 即可找到密码,但是我的mysqld.log中根本没有temporary password

  1. 删除原来安装过的mysql残留的数据(这一步非常重要,问题就出在这)
rm -rf /var/lib/mysql
  1. 重启mysqld服务
systemctl restart mysqld
  1. 再去找临时密码
grep 'temporary password' /var/log/mysqld.log

[Note] A temporary password is generated for root@localhost: qUhk6cfZMh(l

alter user 'root'@'localhost' identified by '你的密码';
flush privileges;
MySQL 界面管理工具推荐(可选步骤)

MAC:Sequel Pro
Window:Navicat

MySQL运行远程链接(可选步骤)
grant all privileges on *.* to 'root'@'%' identified by '你的密码' with grant option; flush privileges;
查看MySQL的端口号(可选步骤)
show global variables like 'port';
MySQL 使用中插入中文数据出现错误的解决方式(可选步骤)
Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'course' at row 1

这个错误的原因是向数据库中插入中文,但是数据库的编码格式为latin1导致,修改为utf8即可。

第三步:安装 PHP

$ sudo yum install php php-mysqlnd

这里安装 PHP 应该不会有任何问题。我们需要重新启动 Apache web 服务器以便它能够与 PHP 协作。你可以通过这条命令达到目的:

$ sudo systemctl restart httpd.service

安装 PHP 模块

为了增强 PHP 的功能,我们可以选择性地安装一些额外的模块。
在命令行终端敲入这条命令,你就可以找到所有可以获取到的 PHP 模块选项和库:

$ yum search php

响应的结果就是所有你能够选择安装的组件。其中包含了每个可选组件的描述:

php-bcmath.x86_64 : A module for PHP applications for using the bcmath library
php-cli.x86_64 : Command-line interface for PHP
php-common.x86_64 : Commonfiles for PHP
php-dba.x86_64 : Adatabase abstraction layer module for PHP applications
php-devel.x86_64 : Filesneeded for building PHP extensions
php-embedded.x86_64 : PHPlibrary for embedding in applications
php-enchant.x86_64 : Enchantspelling extension for PHP applications
php-fpm.x86_64 : PHPFastCGI Process Manager
php-gd.x86_64 : Amodule for PHP applications for using the gd graphics library

如果需要获取每个模块更多的信息,你可以通过互联网搜索,或者直接在命令行终端中敲入这条命令查看:

$ yum info package_name

响应中将会包含许多的信息,其中一个名为 Description 的域包含了这个模块提供的功能更为详尽的描述。
举个例子,如果要获知 php-fpm 模块的功能,我们只要在命令行终端中敲入下列指令就可以了:

$ yum info php-fpm

顺着众多其他信息往下看,你将会找到形如这样的信息:

Summary    : PHPFastCGI Process Manager
URL            : http://www.php.net/
License       : PHPand Zend and BSD
Description : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
                   : implementation with some additional features useful for sites of
                   : any size, especially busier sites.

在考究之后,如果你决定要安装一个模块包,你可以像我们之前安装其他软件时的做法一样,使用 yum install 命令达到目的。
如果我们决定了 php-fpm 就是我们需要的,那么我们可以在命令行终端键入:

$ sudo yum install php-fpm

如果你想安装多于 1 个的模块包,你可以在命令行终端中键入 yum install 后,列出你想安装的每个模块包,并使用空格区分,就像下面这样子:

$ sudo yum install package1 package2…

现在,你的 LAMP 软件栈已经安装并配置妥当了。但我们仍需要测试一下 PHP。
第四步 —— 测试你 Web 服务器上的 PHP 处理程序,为了测试系统已经配置得适合 PHP 运行,我们可以创建一个非常简易的 PHP 脚本。
我们将这个脚本命名为 info.php。为了让 Apache 能够正确地找到并为之服务,它必须保存在一个称为『web 目录』特殊的目录中。
在 CentOS 7 中,这个目录位于 /var/www/html/。我们可以通过下面这条命令在此创建一个文件:

$ sudo vi /var/www/html/info.php

这将会打开一个空白文件,敲击小写字母 I 即可进行编辑。我们想在文件中输入下列 PHP 代码组成的文本:


然后,敲击 ESC 键并键入 :wq! 即可保存并关闭这个文件。
现在我们可以测试 web 服务器是否能够正确地显示由 PHP 脚本生成的内容了。我们可以尝试通过 web 浏览器访问这个页面。你需要再次获取服务器的公网 IP 地址。
你希望访问的地址就是:

http://<服务器的公网 IP 地址>/info.php

如果你的浏览器成功地显示了这个页面,那么你的 PHP 就像预期中的那样正常工作了。
你很可能想要在测试之后移除掉这个文件,因为它事实上可以将服务器的信息展现给未授权的用户。为此,我们需要在命令行终端中键入下面这条命令:

$ sudo rm /var/www/html/info.php

以后若需要,你可以重新创建这个页面来获取这些信息。

PHP网站文件上传

本人使用的是Typecho开源PHP博客系统,当然你也可以使用诸如WordPress,CMS,OA等等,你喜欢就好。

总之,把这个开源系统当作一个普通的zip文件,只要上传到指定的目录,访问IP地址,这个网站就会自动安装,傻瓜式操作。

当然,你也可以想我一样,强到自己撸出一个后台Tomcat网站,手写HTML,前端,后台,APP,各类编程语言通吃的全栈型选手。如果不可以,那就乖乖接受PHP是世界最好的语言吧(玩笑,作者不是挑战你们哈,不要喷我哈哈!)

首先,需要登录到SSH后台:

ssh -p 22 root@你的IP地址
输入密码

Linux电脑:配置FTP,可选。使用rz即可,直接用Linux命令rz上传操作。
MAC电脑:Mac上没有rz命令,所以上传下载使用另外的命令代替scp,scp类似于cp命令(cp是本地拷贝不能跨服务器)

  1. 首先需要在CentOs服务器上安装scp服务,运行下面的命令
yum install openssh-clients(一般不需要,CentOS一般默认自带)

说明:yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。

  1. 上传文件到服务器(注意运行该命令需要在本地终端下执行,否则提示找不到本地文件)
scp /Users/alien/Desktop/xx.war root@192.168.1.101://usr/www/html/
  1. 上传文件夹到服务器
scp -r /Users/alien/Desktop/fileFolder root@192.168.1.101:/usr/www/html/
  1. 服务器下载文件到MAC
scp root@192.168.1.101:/usr/local/WechatIMG135.jpeg /Users/alien/Desktop/
  1. 服务器下载文件夹到mac
scp -r root@192.168.1.101:/usr/local/fileFolder /Users/alien/Desktop/

其他常用指令:

  1. Linux当前目录所有文件移动到上一级目录:mv * ../
  2. 启动Tomcat:/usr/local/tomcat/bin/startup.sh
  3. 停止Tomcat:/usr/local/tomcat/bin/shutdown.sh
  4. 解压tar文件:tar -zxvf ×××.tar.gz
  5. 解压zip文件:unzip ×××.zip
  6. 查看当前目录的全路径:pwd
  7. 查看Apache安装的信息:httpd -V
  8. 查看Nginx的配置:nginx -t
  9. 查找文件路径:whereis python
  10. 找到nginx的二进制文件路径:ps -aux | grep nginx

安装handsome主题

到此,网站已经部署成功,可以访问了。但是,默认的Typecho的主题样式是比较丑的,所以建议给Typecho更换一个主题,这里推荐一款叫做Handsome的主题,售价88元,功能齐全,自定义程度比较高。

安装Handsome的方式,官方网站已经给出详细文档,这里不再赘述,为了缩短篇幅,请读者优先查阅官方文档,下面只针对官方文档未提及或者常见的一些问题进行说明:

安装handsome主题模板时候出现的问题

(一)PHP缺少mbstring模块支持,请联系作者获取解决方案
yum install php-mbstring
vi /etc/php.ini
;extension=mbstring.so
extension=mbstring.so
  1. 重启web service
service httpd restart
(二)Call to undefined function json_decode()
  1. 同样是扩展问题

yum install php-json

  1. 加入一行 extension=json.so

  2. service httpd restart

同一个IP如何建立多个不同的网站

  1. 首先你需要购买两个不同的域名
  2. 两个域名均需要重新备案
  3. 两个域名同时进行DNS解析
  4. 根据Web服务器的类型:Nginx 还是 Apache,设置对应的转发解析配置

如何检测 Web 服务器是 Nginx 还是 Apache?

curl -I http://你的IP地址
Nginx配置同IP打开不同网站

如果是Nginx(注:该段是请教他人得知,暂时自己的PHP内并未用Nginx,所以这段配置请最好自行验证)

server {
    listen 80;
    server_name example.com;
    index index.php;
    root /var/www/sub/;
}
location /ss {
    return 301 /ss/;
}
location /ss/ {
    root /var/www/sub/;
}
Apache配置同IP打开不同网站

前提条件:已创建LAMP服务器。

服务器:选用LAMP 7.4镜像创建的轻量应用服务器。
测试网站:共两个,test01和test02。
测试域名:共两个,test01.example.com和test02.example.com。

  1. 修改Apache配置文件,修改httpd.conf,首先查看自己的httpd的配置信息:httpd -V
[root@VM-16-16-centos conf]# httpd -V
Server version: Apache/2.4.37 (centos)
Server built:   May 20 2021 04:33:06
Server's Module Magic Number: 20120211:83
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

可以看到自己的 HTTPD_ROOT="/etc/httpd" 显示自己的根目录是在 /etc/httpd(有的是在/usr/local/apache目录)

  1. 使用vim编辑器按i键进入编辑模式,修改/etc/httpd/conf/httpd.conf 配置文件

去掉 #Include conf/extra/httpd-vhosts.conf的注释

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

修改之后为:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf
  1. 按Esc键,然后输入:wq并按Enter键,保存退出文件。

  2. 修改httpd-vhosts.conf文件

运行以下命令,打开httpd-vhosts.conf文件。

vi /etc/httpd/conf/extra/httpd-vhosts.conf(有的目录是/usr/local/apache/conf/extra/httpd-vhosts.conf)

如果没有这个文件,那就重新创建一个!

按i键进入编辑模式,修改配置信息。

注释掉下面配置文件中默认的配置信息

在文件的末尾添加以下配置信息:


     DocumentRoot "/var/www/html/"
     ServerName ssup.cc


     DocumentRoot "/var/www/html/kh"
     ServerName han32.cc

  1. 运行以下命令,重启Apache服务: /usr/local/apache/bin/apachectl restart

参考文章

https://www.jianshu.com/p/ef58fb333cd6
https://juejin.cn/post/6844903870053761037
https://www.modb.pro/db/50727
http://blog.51cto.com/12173069/2044556
https://help.aliyun.com/document_detail/60171.html

策略思维与细节的完美结合,有效帮您减少试错成本

策略思维与细节的完美结合,有效帮您减少试错成本

立即与安优联系,开启网站设计全新体验

立即与安优联系,开启网站设计全新体验

立即与安优联系
开启网站设计全新体验

立即与安优联系
开启网站设计全新体验

在线咨询

在线咨询

拨打电话

返回顶部

品质设计 用心服务

  • 12年+定制经验

  • 600+客户选择

  • 高效售后保障

7*24小时服务热线