在网上冲浪的时候时不时会搜索到一些技术博主的个人博客,在暗中窥探(不是 几位大佬的博客后越来越发觉拥有自己的博客的重要性,博客最适合用来记录一些日常捣鼓的黑科技or写的不错的技术文档等,在写博客记录学习知识与解决问题的过程的同时也能加深自己对这知识的理解。搭建个人博客的话,其实也可以选择github.IO,免费且萌新友好,而鉴于我比较喜欢折腾,就直接手动建站了。建站流程基本参考:https://omo.moe/archives/601/,这里除了简述一下流程主要还是记录一下中途遇到的一些问题。
头图来源:#アークナイツ levitate - Alcxome - pixiv
废话不多说,直接进入正题
选择你的服务器
要搭建个人网站,首先需要一台属于你自己的服务器,我选择的是Vultr VPS(买了之后再看一些推荐VPS的博客发现Vultr性价比已经不太高了orz,买之前果然需要货比三家)关于一些VPS的推荐,可参考神代绮凛的博客自行判断,不过大佬工作后就基本没怎么更博了,因此关于VPS性能和性价比还是要以当前行情为准。
机房部署于美国硅谷,1Gbps标配带宽,1G内存25GB存储,价格每月5刀。可自选系统,CentOS默认版本为CentOS8,当然之后在设置里也支持更换系统,不过更换系统会抹除所有数据(废话),所以更换前注意要先将数据备份好。
(在登陆你的远程主机后最好先把源update、upgrade一下。)
域名注册、解析
域名可在namesilo注册,如果你的服务器在国外则不需要备案(芜湖)。
搭建lnmp环境
所谓lnmp指的就是linux+nginx+mysql+php,其主要工作原理如图
step1.nginx安装与配置
直接添加官方源后通过yum的方式安装nginx。
启动nginx并设置nginx开机自启动
systemctl start nginx
systemctl enable nginx
通过systemctl status nginx
查看运行状态,如果启动成功则在浏览器输入你的ip就能看到nginx欢迎界面了。
- nginx错误排查:查看error.log
- nginx访问记录食用方法:
step2.安装MysqlMariaDB
CentOS7官方源把mysql换成了MariaDB,所以这里就直接安装MariaDB。
执行脚本对MariaDB进行基础设置:
/usr/bin/mysql_secure_installation
通常就设置用户root密码和是否允许远程访问等七七八八的东西。我这里是直接把远程访问给禁止了。后面有需要再添加专门的远程用户即可。
step3.安装php扩展
为防止CentOS上面发生冲突,最简单粗暴的方法是卸载掉原先的版本直接重装我们想要的版本,
#卸载历史版本
yum -y remove php*
之后,再安装我们需要的版本(这里为php72w),这里需要配置一下额外的yum源地址,否则会提示找不到包。
php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic。
源地址导入命令:
rpm -Uvh https://dl.Fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel- release-7-12.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
之后就能安装php和相关的扩展包了
yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-mysqlnd
安装结束后,仿照之前的方法启动服务并设置自启动。
php-fpm的由来,nginx和php通信2种模式比较,可参考:https://blog.csdn.net/QFire/article/details/78680717?locationNum=1&fps=1
配置phpvi /etc/php.ini
命令来修改一些配置
修改php默认配置:cgi.fix_pathinfo=0
(关于cgi.fix_pathinfo的作用先留个坑,等学完php后再来填( ̄ー ̄〃))
为方便之后修改上传附件大小,需提前修改一下相关网站配置:
upload_max_filesize = 8000M;
post_max_size = 8000M;
max_execution_time=600;
修改php-fpm配置
vi /etc/php-fpm.d/www.conf
listen= /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
user = nginx
group = nginx
pm = dynamic 生成动态进程
pm.max_children = 10 最大可以启动多少进程
pm.start_servers = 5 初始启动多少进程(默认数值推荐为最小备用+(最大备用-最小备用)/2)
pm.min_spare_servers = 2 最少备用的进程数
pm.max_spare_servers = 10 最大备用的进程数
pm.max_requests = 500 到达多少请求后自动结束进程
rlimit_files = 1024 一次请求的最大字节数
之后,设置php-fpm自启动,方法依旧如上。
自此,lnmp环境搭建完成。剩下的就是typecho的安装,和数据库与nginx的配置了。
关于数据库,一般就是创建新数据库,再建一个专用的管理员,然后设置管理员权限。
CREATE DATABASE db_name;
CREATE USER username@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON db_name.* TO username@localhost IDENTIFIED BY 'password';
最后再刷新一蛤
FLUSH PRIVILEGES;
最后重中之重就是配置nginx了,先查看配置
cat /etc/nginx/nginx.conf
查看有没有一下这行(用于导入站点配置),如果没有就自行补上。
include /etc/nginx/conf.d/*.conf;
然后新建一个自己的配置文件,文件名后缀为.conf,名称想设啥都行,一般设成你的网站域名。
touch /etc/nginx/conf.d/nekoneko.best.conf
直接搬上我的站点配置文件
server {
listen 80;
server_name nekoneko.best www.nekoneko.best;
#listen [::]:80 default_server;#ipv6的放着无所谓,也可以注释掉
root /home/wwwroot/yukinekoneko.com;#自己改成自己网站的路径
index index.html index.htm index.php;
listen 443 ssl http2 default_server;
#ssl on;新版本nginx可省略
ssl_certificate "/etc/nginx/ssl/cert.pem";
ssl_certificate_key "/etc/nginx/ssl/key.pem";
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
#charset koi8-r;
access_log /var/log/nginx/yukinekoneko.com.access.log main;#记住自己的log文件目录,也可自己设置
#配置伪静态
location / {
index index.html index.php;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php) {
rewrite (.*) $1/index.php;
}
if (!-f $request_filename) {
rewrite (.*) /index.php;
}
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .*\.php(\/.*)*$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#先加载默认后解析赋值
include fastcgi_params;
#正则解析路径
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
}
#禁止ip访问
server
{
listen 80 default;
listen 443 default_server;
server_name _;
return 403;
ssl_certificate "/etc/nginx/ssl/cert.pem";
ssl_certificate_key "/etc/nginx/ssl/key.pem";
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
}
关于如何为博客申请泛域名证书可见文章
一些该注意的点详见开头教程链接
遇到的问题
typecho后台无法连接数据库
solution:查阅相关资料,在排除了缺少相关数据库等原因后,发现需要在/etc/php.ini
中配置pdo_mysql.default_socket。
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
其中default_socket需根据你mysql.sock所在的路径进行设置,如果不知道mysql.sock在哪可以使用命令find / -name mysql.sock
查看