美文网首页PHP开发
如何从零搭建一个网站

如何从零搭建一个网站

作者: Alien的小窝 | 来源:发表于2022-02-26 00:59 被阅读0次

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

    image.png

    网站建设的方式有哪些?

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

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

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

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

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

    ECS云服务器

    image.png

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

    推荐:

    1. 阿里云
    2. 腾讯云

    域名

    登录:万网购买

    image.png

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

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

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

    DNS服务器

    image.png

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

    image.png

    平时我们访问网址,一般都使用:
    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 代码组成的文本:

    <?php phpinfo(); ?>
    

    然后,敲击 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模块支持,请联系作者获取解决方案
    1. yum install php-mbstring

    2. 修改php.ini

    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键进入编辑模式,修改配置信息。

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

    (<VirtualHost *:80></VirtualHost>)
    

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

    <VirtualHost *:80>
         DocumentRoot "/var/www/html/"
         ServerName ssup.cc
    </VirtualHost>
    
    <VirtualHost *:80>
         DocumentRoot "/var/www/html/kh"
         ServerName han32.cc
    </VirtualHost>
    
    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

    相关文章

      网友评论

        本文标题:如何从零搭建一个网站

        本文链接:https://www.haomeiwen.com/subject/uwmxrrtx.html