背景
这是一篇主要给建站新手和我自己看的教程,大佬请跳过哈
之前写过一篇博文记录使用LNMP一键包架设WordPress博客的过程,这次来一个手搓版。
对于看到代码就发怵的站长或者想快速重复部署的人士,LNMP并不陌生,它向导式的使用方式和涵盖的丰富选项,用起来很方便,甚至让我产生了依赖,本站从2019年创建至今的多次安装和迁移,都是使用LNMP,直到2023年9月LNMP被爆涉及“供应链投毒”的安全事件。
简单来说就是使用LNMP一键安装包(尤其是1.9以后的版本)可能不再让人感到安全了,与此同时LNMP官网被人发现更改了所有者为一家公司。
安全无小事,之前朋友多次催我自己搞,我都觉得难,现在没有退路了,我不得不勉强自己学习“手搓”一个用于WordPress的系统环境了,没想到真的不难,成功给自己的博客网站安装了自己一步步搭好的“船新版本”环境!
开始之前,有必要简单说明下让一个网站正常运行所需要的基本条件,毕竟以我这样一个小网站的站长的经历,初次安装好并不是终点,而是起点,后续将遇到升级、排障、迁移服务器、备份与恢复等一系列事情。
网站,英文名website,顾名思义就是网络上的一个站点,那么这个站点就必须有基础设施才能运作,可以理解为一个商店、书店或者电影院,与这些实体场所相似,网站也一样需要实体的设备,叫做服务器,可以简单理解为一台你可以远程连接控制的电脑,这台电脑上有操作系统和你网站的网页内容。
有了服务器,还需要让人可以看到你的网站,那么你的服务器就需要连接到互联网上,如果我们是从主机服务商上购买的,例如VPS,那么它就已经可以连接互联网。
1 | 虚拟专用服务器(也称为 VPS)是物理服务器上的独立虚拟环境,物理服务器由云服务提供商或网站托管服务提供商拥有和运营。VPS 托管使用虚拟化技术将一台物理机器拆分为共享资源的多个专用服务器环境。https://cloud.google.com/learn/what-is-a-virtual-private-server?hl=zh-cn |
接下来还需要让其他人知道你的网站叫什么,以及怎么到达,这就是域名和域名解析的作用了,服务器在互联网上的基本位置是IP地址,但这个地址是一串难记的数字(IPv4)或排列无规律的字母(IPv6),相当于XX路XX号,所以就有了域名这个东西,例如ceshidao.com就是域名,这个名称易于理解好记,相当于地图上某个门牌号对应的建筑名称【XX大厦】,为了把域名与IP地址绑定,让访问者输入域名就能直达服务器,就需要在域名注册服务商网站进行登记和指路,这个服务就是DNS(域名解析服务),通常域名也是需要购买的,价格有高有低,相当于靓号高价。在域名购买的地方也有附带DNS服务。
到这一步,就已经有了服务器和域名了,也就是有了一块地,通了水电和修好路了,该打地基了。
打好地基后,就就可以在上面修建房屋建构了,这里的房屋就是WordPress,而地基则是以往由LNMP一键安装包帮我们打好,相当于以前是请了免费的施工队打地基,现在我们自己来干。
所以有必要了解下LNMP主要做了什么。
其实LNMP就是Linux+Nginx+MySQL+PHP:
- Linux —— 这是指系统采用Linux
- Nginx —— 是一个网络服务器软件
- MySQL —— 管理数据库
- PHP —— 互联网脚本语言软件,很多网址的结尾都是.php
Linux
Linux系统由Linus Torvalds(芬兰裔美国人,生于1969年)创始于1991年,目前是地球上广泛使用但大部分人没感觉到它存在的系统,尤其是互联网上的网站。通常我选用其中的一个版本Debian 11 x64,这个步骤最简单,备份好现有VPS里的数据后,直接在VPS里面选择版本点击重装,几分钟内就完成了,然后会得到新的SSH连接的root密码,如果端口没有指明,通常是22,把IP地址、root密码和端口好保存起来,每次重装都应该及时保存最新的版本。
Nginx
Nginx是由Igor Sysoev(俄罗斯人,生于1970)于2004年开发,简单来说是一个处理网络请求的服务器软件,相当于是收发室、联络部。
MySQL
MySQL是由David Axmark(瑞典人,1962年生)创建的公司于1996年发布的数据库软件,用来存储网站的结构化数据,包含有多个数据表,相当于是一个excel文件包含了多个sheet,比如wordpress文章的基础数据。MySQL数据库有一个可视化的软件界面叫phpMyAdmin,让数据库管理变得像操作系统一样直观,安装非常简单,放进网站目录就可以,但phpMyAdmin不是必须的,因为安装和配置数据库完成后,很少会在手动对数据库进行操作,尤其是对非技术玩家的小型博客而言。
PHP
PHP是由Rasmus Lerdorf(丹麦裔加拿大人,生于1968年)于1993年开发的一种在当下被广泛使用的网络脚本语言,我们大概知道下就是很多网页都是.php结尾的,包括WordPress。
感谢这些巨人
感谢上面这些软件的创始人和后续的无数开发者,正是由于他们提供的开源、免费的软件,让我们每个人都可以很容易的在互联网世界上开设自己的网站。
现在开搞!
从这个步骤开始就需要用到上面得到的SSH信息并开始敲代码了,但放心,其实就是执行几条命令,以及向Windows的资源管理器一样稍微操作下文件管理,而不是让你码字编程。
假设你已经购买好了域名和VPS服务器,服务器也安装好了Debian 10或者11(尽量是11)
现在去下载一个软件:
BitVise SSH Client
接下来大部分的工作都在它里面进行:
打开这个页面:https://www.bitvise.com/download-area
点击Download Bitvise SSH Client,然后在电脑上安装这个软件
点击登录后,如果信息正确,会在左侧出现新的按钮,说明如下图:
SSH命令窗口
点击New terminal console会打开一个黑底白字的窗口,所有的代码执行命令都会在这个窗口里完成
这个窗口的几个注意点:
- 不要使用Ctrl+C和Ctrl+V,如果要复制窗口里的文字,直接鼠标左键拖选需要的那段松开就自动复制到剪贴板了,如果要粘贴剪切板里的文字到这个窗口里,直接点击鼠标右键,就会直接粘贴到当前光标所在位置
- 尽量不要中途关闭窗口,因为新开的窗口看不到之前的窗口会话内容,需要查找和调用,如果担心中途本地电脑断电断网,可以使用如下命令安装一个给会话命名和调用会话:
在SSH里依次执行下面三条代码,注意每一条单独回车执行,为的是避免SSH安装期间网络掉线导致无法继续执行命令
第一条是为了更新代码库,第二条是安装screen程序,第三条是创建一个独立的名为myvps的会话界面
1 | apt-get update |
1 | apt-get install screen |
1 | screen -S myvps |
如果网络掉线,可以重新连接SSH,再执行 screen -r myvps 就会看到之前的会话。
有时候screen异常退出可能会提示状态为Attached,可以执行:screen -D -r myvps 进行恢复。
有时候可能会创建了多个同名的screen会话,可以执行:screen -ls 查看对应会话的session id,然后使用screen -D -r sessionid 进行恢复。
SFTP文件管理窗口
点击New SFTP window,会打开一个双窗格的窗口,左边是本地电脑的文件,右边是服务器里的文件,鼠标拖入文件就可以上传或者下载
步骤01:
检查确认域名DNS已经设置指向了VPS的IP地址,并且VPS已经安装了Debian 10或11,然后在BitVise软件里SSH登陆服务器。
步骤02:
在SSH窗口,执行命令,将会开始更新Debian系统软件:
1 | apt update -y && apt upgrade –y |
用键盘上的方向键进行选择,选第一个即可,然后按回车键确认
步骤03:
安装sudo命令功能,也就是执行命令:
1 | apt install sudo -y |
步骤04:
接下来要安装最新的PHP版本,执行如下命令:
列出并记录现有的PHP软件包:
1 | dpkg -l | grep php | tee packages.txt |
安装curl命令:
1 | sudo apt install curl |
添加 ondrej/php 存储库,依次执行下面4条命令:
1 | sudo apt install apt-transport-https |
1 | sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg |
1 | sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' |
1 | sudo apt update |
安装新的PHP 8.3包:
1 | sudo apt install php8.3-common php8.3-cli php8.3-fpm php8.3-mysqli php8.3-redis php8.3-imagick php8.3-{curl,bz2,mbstring,intl} |
测试php是否安装正确:
1 | php –v |
如果出现类似如下的反馈,则说明安装正确
步骤05:
例子里这次安装的是php 8.3,于是在SFTP里进入/etc/php/8.3/fpm目录,编辑php.ini文件
修改其中的一些设置,搜索下面几行,修改为如下建议的值,并Ctrl+S提交保存,具体最后如下:
1 2 3 4 5 | post_max_size = 128M memory_limit = 256M max_execution_time = 300 upload_max_filesize = 128M date.timezone = Asia/Shanghai |
步骤06:
执行如下命令重启php-fpm服务:
1 | sudo systemctl restart php8.3-fpm.service |
步骤07:
通过如下命令安装安装Nginx:
1 | sudo apt install nginx |
步骤08:
安装完成后,创建需要部署wordpress站点的目录,其中mywebsite可以改为自己的文件夹名称,全英文即可:
1 | sudo mkdir /home/www |
1 | sudo mkdir /home/www/mywebsite |
步骤09:
创建站点的nginx配置文件目录:
1 | sudo nano /etc/nginx/sites-available/ceshidao.com.conf |
执行后复制和鼠标右键粘贴进去内容如下,注意mywebsite改为自己上面命令设置的名称,server_name后面的两个网址替换为自己的域名:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | server { listen 80; root /home/www/mywebsite; index index.php; server_name ceshidao.com www.ceshidao.com; access_log /var/log/nginx/ceshidao.com_access.log; error_log /var/log/nginx/ceshidao_error.log; client_max_body_size 100M; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_read_timeout 3600s; fastcgi_buffer_size 128k; fastcgi_buffers 4 128k; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_index index.php; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } } |
然后按快捷键Ctrl+O保存,再按Ctrl+X退出编辑
步骤10:
尝试nginx是否配置正确,执行命令:
1 | sudo nginx -t |
如果返回如下结果,则配置正确:
步骤11:
在/etc/nginx/sites-enabled目录创建对应配置文件的软连接,执行命令(注意命令中的ceshidao.com要改成你自己的域名):
1 | sudo ln -s /etc/nginx/sites-available/ceshidao.com.conf /etc/nginx/sites-enabled/ |
步骤12:
通过如下命令重启nginx服务和php-fpm服务:
1 | sudo systemctl restart nginx.service |
1 | sudo systemctl restart php8.3-fpm.service |
步骤13:
Debian中已经使用MariaDB取代了MySQL,所以这里我们安装MariaDB即可,命令如下:
1 | sudo apt install mariadb-server mariadb-client |
步骤14:
执行如下脚本,开始数据库设置:
1 | sudo mysql_secure_installation |
在设置数据库root密码是记得自己记住,后面必须用到,不要太简单,也不要太复杂
以及一些设置,参照如下:
1 2 3 4 5 6 7 8 9 10 11 12 | Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n Remove anonymous users? [Y/n] y Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y |
至此,数据库安装配置成功
步骤15:
创建wordpress用的数据库,SSH窗口执行:
1 | mysql -u root -p |
然后输入数据库的root密码并回车,注意此时不会显示任何字符,所以不要以为没有输入成功
密码就是上一步设置的密码,然后就进入到了mariaDB的命令模式
执行如下命令,创建一个名为wordpress的数据库:
1 | CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
然后执行如下命令,为名为wordpress的数据库设置密码并授予所以权限,此处是数据库的密码,可以与上面数据库root用户的密码一样或不一样:
1 | GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '这里换成你的密码'; |
然后依次执行如下两条命令,刷新并退出:
1 | FLUSH PRIVILEGES; |
1 | EXIT; |
步骤16:
开始安装WordPress,执行如下命令,下载最新的wordpress到临时文件夹并解压复制到之前设置的网站目录,注意mywebsite换成自己之前在【步骤08】命名的文件夹:
1 | cd /tmp |
1 | wget https://wordpress.org/latest.tar.gz tar -xvzf latest.tar.gz |
1 | sudo cp -av wordpress/* /home/www/mywebsite/ |
执行完,SFTP窗口里VPS网站文件夹下如上情况即可
步骤17:
设置站点文件目录权限,便于www-data账号运行时需要(注意mywebsite换成自己之前在【步骤08】命名的文件夹):
sudo chown -Rv www-data:www-data /home/www/mywebsite/
步骤18:
把域名解析到新的vps ip地址——这一步跳过,已经是指向当前vps
步骤19:
配置LET’S ENCRYPT证书,这个步骤让你网站可以加上HTTPS的安全保护,Chrome浏览器就不会再提示访问者说访问你的网站不安全了。
配置证书前,要保证域名已经正确解析道Debian VPS对应的IP地址上。执行如下命令,使用certboot自动配置证书(注意最后一行的命令里把域名换成自己的):
1 | sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface |
1 | sudo apt install python3-certbot-nginx |
1 | sudo certbot --nginx -d ceshidao.com -d www.ceshidao.com |
然后输入联系邮箱,且不share邮箱,回车,一般来说几分钟后,提示成功
步骤20:——注意,这一步暂时跳过
这一步如果是小白,可以先跳过,以免弄不好导致自己没法SSH连接了
为了更好的保证服务器Debian VPS安全,通过ufw防火墙关闭不必要的端口,只开放需要的端口:
1 2 3 4 5 6 7 | sudo apt install ufw sudo ufw enable sudo ufw app list sudo ufw allow 2200/tcp comment 'Open port ssh tcp port 22500' sudo ufw allow 80 sudo ufw allow 443 sudo ufw status |
步骤21:
现在就开始配置WordPress了
在网络浏览器里输入自己的域名,打开了配置向导
选择简体中文
在数据库连接新页面:
数据库名wordpress,除非自己之前设置的不是这个
用户名wordpress,除非自己之前设置的不是这个
密码就是之前设置的数据库密码,注意不是数据库root用户密码
数据库主机默认localhost
表前缀默认wp_
然后设置自己的WordPress管理员用户名和密码,点击安装WordPress
正常情况下,安装完成后,登陆就可以进入WordPress后台了
如果这是你的第一个网站,那么你就可以开始做写博客、更换主题等操作了。
通常来说,一个博客最重要的是内容,因此如果你对网站的外观和额外功能并不在意,那么开始写博客吧!
如果要把自己的WordPress做得更好看、加一些功能、特性,那可以做如下一些事情:
- 把后台网址从通用的/wp-admin改为别的,这个可以通过插件进行
- 给网站换个自己喜欢的主题(外观),可以结合自己的博客内容
- 给网站设置一个图标(favicon),也就是浏览器标签开头的那个小图案
- 给网站安装一些必要的插件提高性能和速度,详见本站的这篇博文
- 把WordPress的默认用户头像换成本地版本,详见本站的这篇博文
- 给网站换一个自定义的鼠标指针,详见本站的这篇博文
祝写博客愉快!