记录第一次建站并创建个人博客的流程

本文比起教程更是一个对于我学习过程的记录

1.购买服务器

选择腾讯或者阿里的vps没有什么差别,随便选择就可以了, 我选择的是腾讯的产品, 不管是腾讯还还是阿里都有一个学生机器,学生购买价格也是差不多的几块钱一个月,   阿里的叫做云翼计划, 腾讯的叫做云+校园,  购买没什么好说的, 就是选择套餐扫码付钱,购买套餐记住选择购买域名套餐。

购买后在腾讯云的控制台就能看见服务器实例

2.开始备案

购买完服务最好立马着手备案,我就没有立马备案,在一开始的几天域名是能解析到我的服务器的,随后过了几天域名就不管用了, 提示要去备案

 

先在域名备案中将提示的信息填好,到提交材料那一步的时候再去, 打印域名备案表格, 申请幕布,幕布发货第一次申请免费(顺丰), 但是腾讯只有在工作日才会发货,如果是在周末的时候申请的话就要到下周一才会发货(我就是)在周末申请但是想快点收到的可以直接去淘宝购买,淘宝购买的和发的是一样的,不要去抠图,过不了。

备案流程的时间腾讯会给相应时间的补偿, 自动加到服务器时长。

3.安装nginx/apache, php, mysql

我选择使用docker镜像安装这些东西, docker 教程尚硅谷_Docker核心技术(基础篇),当然这些环境可以有其他选择安装, 还可以使用宝塔,关于怎么使用宝塔代替我这一步可以看本站主题的原作者小游的从服务器购买到搭建个人博客(超详细),选择哪种方法各有优劣,我放弃使用宝塔是因为我的linux水平有待提高,所以打算可以顺便打一下linux熟练度

开始使用docker,此处使用了一个叫做putty的远程操作 服务器终端的软件。

docker 就是一个容器的概念, 和tomcat的容器不同, tomcat的容器就是java类, 分成了Server、Service、Engine、Host….,各种服务跑起来给jsp提供环境。关于tomcat和本文也没什么关系,只是一开始听到容器的时候我第一个想到的是tomcat,而docker 的镜像运行起来就是一个容器,容器就是可以共享宿主机的内核,资源,网络和端口,有自己独立文件系统的一个轻量级的虚拟机,容器与容器之间是完全的沙箱操作,如果容器出问题,直接kill后rm完全不会影响到宿主机而且把主要文件夹(比如数据库的data目录和log目录)挂载到宿主机

  • 首先获取一下镜像

说白就是一个命令docker pull nginx, docker pull mysql, docker pull php:7.2-fpm

 

  • 准备工作

先在某个位置创建好wwwroot(随便叫什么)文件夹,这个文件夹映射到docker容器跑的nignx的网页根目录上,然后再在wwwroot的同级目录创建一个叫做conf.d的文件夹,这个文件夹映射到nginx容器的的设置文件夹,再创建一个Mysql文件夹, 在conf.d里面创建一个default.conf的文件,具体就是nginx的配置文件, 不需要完全懂, 只是设置一次的东西,内容如下:

server { 
   listen 80; server_name 
   localhost; 
   location / { 
      root /usr/share/nginx/html; 
      index index.html index.htm index.php; } 
   error_page 500 502 503 504 /50x.html; 
   location = /50x.html { root /usr/share/nginx/html; } 
   location ~ \.php$ { 
   fastcgi_pass php:9000; 
   fastcgi_index index.php; 
   fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name; 
   include fastcgi_params; } }

 

  • 运行镜像创建容器并安装所需的Php扩展(均为linux命令)
docker run --name myphp -v /myVolume/www:/www -d php:7.2-fpm

docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /myVolume/mysql:/var/lib/mysql \
--name mysql8 mysql
docker run --name myNginx -p 80:80 -p 443:443 \
-v /myVolume/www:/usr/share/nginx/html \
-v /myVolume/conf.d:/etc/nginx/conf.d \
--link myphp:php nginx

运行Php容器就挂载了www进去, 运行nginx容器的时候把www和conf.d(前面创建的给nginx服务器准备的配置文件的文件夹)挂载的ngin容器的web根目录和配置目录, –link在上面我推荐的docker 教程中没有讲, 这个命令其实就是见字见义的意思, 把两个容器进行链接,在nginx的容器中创建了一个环境变量指向php容器, 这样就直接达成了容器之间互相协作的目的。

然后在进去到php容器中安装两个会用到的扩展, gd和mysqli

进入到容器中

docker exec -it myphp /bin/bash

1.gd

apt update #习惯更新软件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库
docker-php-source extract #解压
cd /usr/src/php/ext/gd #解压完后的gd源码所在文件夹
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译
docker-php-ext-install gd #编译安装
php -m | grep gd #php-m的意思是显示已安装的包, 这条命令的意思就是在已安装扩展中查询名为gd的包, 如果存在会返回gd字符

2.mysqli

cd /usr/local/bin
./docker-php-ext-install pdo_mysql
./docker-php-ext-install mysql 做完上面的就可以ctrl(唱跳rap篮球)键+p+q 回到宿主机并重启php容器
docker restart myphp
然后就可以查询一下mysql容器的ip地址
docker inspect mysql8 --format='{{.NetworkSettings.IPAddress}}'

172.18.0.5 #查询到的结果 在www的目录中新建conn.php文件验证链接nginx容器可以调用php并且可以链接到mysql数据库, conn.php内容如下:
$dbms='mysql';     // 数据库类型
$host='172.18.0.5'; // 数据库主机名(ip)
$dpprt ="3305"; 
$dbName = "mysql";
$user = "root"; 
$pass = "123456";
$dsn = "$dbms:host=$host;port=$dbport;dbname=$dbName";
try {
    $dbh = new PDO($dsn, $user, $pass);
    echo "<h1>successful!</h1><br/>";}
catch (PDOException $e) {
     die ("Error!: " . $e->getMessage() . "<br/>");
} 如果没问题的话访问自己服务器Ip的加文件名就能看到successful的字样了 
到此为止环境就配好了;

4.安装wordpress

wordpress是一个cms(内容管理系统), 除了WordPress还有很多类似的cms使用,比如z-blog、typecho、emlog等等,还有一个国产的织梦,这些cms都各有特色,wordpress就有着一些独有的php库函数, 使用wordpress的库函数就可以快速开发出完整功能的网站。

把从wordpress官网拽下来的wordpress解压后得到一个文件夹

把文件夹里的内容上传到服务器的nginx的根目录(前面创建的www文件夹),这里使用的是winscp(自行下载)工具。

然后访问你服务器的ip地址能够看见这个页面然后跟着指引安装你的网站就算能访问了,关于wordpress如何使用不在本篇文章的范畴之内

5.给网站添加ssl认证

在腾讯云中申请ssl证书

申请下来之后把证书下载到本地并且根据服务器类型(我们使用nginx 服务器)选择两个证书文件上传到到服务器的conf.d文件夹中

然后修改我们的default.conf文件,并添加以下代码,要把注释文字删掉,否则nginx会报错(不会死,没准会死也说不定)

server {
listen 443; #SSL 访问端口号为 443
server_name www.domain.com; #填写绑定证书的域名
ssl on; #启用 SSL 功能
ssl_certificate 1_www.domain.com_bundle.crt; #证书文件名称
ssl_certificate_key 2_www.domain.com.key; #私钥文件名称
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_prefer_server_ciphers on;
location / {
root /var/www/www.domain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
index index.html index.htm;
}
}

然后就可以通过https://域名(443端口来访问你的域名了),浏览器还会给你加上一个绿色的锁头。http后面的s就是secure的意思, 就是安全的超文本传输协议,一般的http请求服务器和客户机之间的数据包都是使用明文的方式进行传输,这使得数据可能被劫持,而https就是加了个密。

我安装完ssl证书的时候出现过链接中是锁头带一个橙色叹号的情况。

在百度上找到的方法是在头文件中添加

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 这段代码的作用是把网页中的所有http请求的文件替换成https来请求
  • 强制使用https的方法(把所有对服务器的http请求重定向为https请求)

修改nginx服务器的设置文件(此处为conf.d里的default.conf);

添加以下代码

server {
   listen 80;
   server_name www.sixjiang.cn;
   rewrite ^(.*)$ https://$host$1 permanent;
} 最终我们的nginx配置文件变成了这样