博客搭建之手动安装
目录
前言
这个教程可能多,也分为三个部分:手动,自动,优化。
我也是尽量列出我遇到的问题,如有不全面的地方可以指正。
如果有地方出现了意外的情况,希望能好好利用搜索引擎,亲自动手解决问题。
如果以学习为主,联系多动手,如果以快速搭建为主,建议跳读代码部分,可以直接使用。
不会讲很多原理(默认大家都懂😘),不懂的希望自己搜索学习。
VPS
服务器是选用了腾讯云的一个vps,第一次购买很便宜,但是之后付费就很麻烦,所以建议是一次购买时间长一点,最好是三年左右为最好。
操作系统
操作系统我选用的是centos8,当时也是看最新就选用了,后面也是发现了很多坑。
构思
-
主要的Web服务是打算用docker建立
web服务包括nginx和php等服务。
-
数据库就本地保存好一点,不然随便宕一下机器就寄了。
-
博客打算使用wordpress来实现。
-
后面也会写一个自动更新,比如自动更新nginx,wordpress及其插件等。
安装过程
文件下载
-
手动下载七个文件,分别是nginx, php, wordpress, pcre, zlib, openssl,sqlite3
-
自动安装make,gcc,g++,pkg-config, libxml2-dev,mariadb 等(具体见安装文件)
sudo dnf install mariadb
-
其中部分可以直接用指令安装,而且基本不会有什么问题,部分选择文件安装 (当然,能在仓库直接安装也可以)。
-
我给出地址,可以自己去下载一个最新版的
预操作
设置交换分区
大部分的vps都没有很多的内存,但是在编译php的时候需要很多的内存,所有经常编译错误。
交换分区可以让主机在内存不足的时候用存储空间暂时存放内存数据
代价就是用时间来换空间
步骤
-
创建分区路径
sudo mkdir -p /var/cache/swap/
-
设置分区的大小
bs=64M是块大小,count=64是块数量,所以swap空间大小是bs*count=4096MB=4GB
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64
-
设置该目录权限
sudo chmod 0600 /var/cache/swap/swap0
-
创建SWAP文件
sudo mkswap /var/cache/swap/swap0
-
激活SWAP文件
sudo swapon /var/cache/swap/swap1
-
查看SWAP信息是否正确
sudo swapon -s free -m
配置mysql
~~mysql配置最简单~~
目的:
-
给wordpress一个账户,然后赋予相应的权利
-
给自己一个用于远程连接的账户,用于维护
-
备份root密码,以备不时之需
操作:
-
用root登录MySQL
-
然后修改root的密码,最好是数字,大小写
-
创建wordpress用户
CREATE USER wordpress@localhost; create user 'test'@'localhost' identified by '1234';
设置密码
ALTER USER 'wordpress'@'localhost' ;
设置权限:
grant all privileges on *.* to wordpress@'localhost' ;
刷新权限:
FLUSH PRIVILEGES;
修改密码:
mysqladmin -u 用户名 -p 旧密码 password 新密码
-
然后用相同的方法创建一个自己数据库管理账号,名字可以自己起,注意需要将上面的
loalhost
换成%
以便于适用于远程登录
配置docker
docker在centso8中以及被替换为podman了,但是你倒是给的新一点的版本啊,旧的版本都是bug,新的编译又通不过,只能选择docker了。
podman也可以配置,指令一样,不过也需要root权限,因为80,443端口只有root可以调用
针对centos8的docker安装:
卸载旧版本docker组件和podman
sudo yum remove podman
sudo yum erase podman buildah
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum-utils软件包,并设置yum仓库
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
yum install docker-ce docker-ce-cli containerd.io
启动docker守护程序
sudo systemctl start docker
容器目录配置:
我们需要三个文件夹完成宿主机和容器的文件交流,分别是nginx, wordpress, php, mysql
~/nginx
~/php
— config
php-fpm.conf php.ini
— log
php-fpm.log www.log.slow
网络配置
我们需要给我们的docker建立一个网络,以便以后拓展
sudo docker network create -d bridge webnet
# -d 表示设置网络类型 # -d 表示设置网络类型
在生成容器时,使用参数—network my-net
实现连接网络
启动docker
我们选用ubuntu镜像来制作web服务器,其他的同理
我们需要设置三个挂载文件夹和两个端口:
宿主机 | 容器 |
---|---|
~/nginx | /root/nginx |
~/php | /root/php |
~/wordpress | /var/www/local/wordpress |
80端口 | 80端口 |
443端口 | 443端口 |
--cap-add=SYS_PTRACE | 为了php慢日志 |
~~启动前请先创建好对应的文件夹~~
sudo docker run -itd --cap-add=SYS_PTRACE --name web -v /home/lihao/nginx:/root/nginx -v /home/lihao/php:/root/php -v ~/wordpress:/var/www/html/wordpress -p 80:80 -p 443:443 --network webnet --network-alias web ubuntu
复制文件到docker中
sudo docker cp php web:/var/local/
sudo docker cp nginx web:/var/local/
sudo docker cp openssl web:/var/local/
sudo docker cp pcre web:/var/local/
sudo docker cp zlib web:/var/local/
sudo docker cp sqlite3 web:/var/local/
sudo docker cp wordpress web:/var/local/
配置容器
进入容器
sudo docker exec -it web /bin/bash
换源并且安装必要文件
sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list && apt update && apt install -y make && apt install -y g++ && apt install -y vim && apt install gcc && apt install pkg-config && apt install libxml2-dev && apt install -y libssl-dev
编译nginx
-
我们需要设置openssl位置
-
然后设置好错误日志到我们留出来的位置中
-
设置用户和组
-
启动ssl模块
./configure --with-openssl=/var/local/openssl --conf-path=/root/nginx/nginx.conf --error-log-path=/root/nginx/logs/error.log --with-http_ssl_module --user=www-data --group=www-data
make && make install
# 软链接nginx
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
编译sqlite3
./configure && make && make install
编译zlib
./configure && make && make install
编译php
编译php需要前面的库,最好按照顺序来
我们需要告诉php我们要的模块,以及各个库的位置(后期可补)
需要的有mysqli和fpm这两个
还需要设置日志文件
./configure --enable-fpm --with-mysqli --with-zlib --prefix=/usr/local/php --with-config-file-path=/root/php/config/ --with-openssl
make && make install
ln -s /usr/local/php/bin/pipize /usr/bin/phpize
ln -s /usr/local/php/bin/pip /usr/bin/php
ln -s /usr/local/php/sbin/php-fpm /usr/bin/php-fpm
等亿会会就好
配置php
开启配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
编辑/usr/local/php/etc/php-fpm
取消注释然后设置路径即可
pid = run/php-fpm.pid
error_log = /root/php/log/php-fpm.log
编辑/usr/local/php/etc/php-fpm.d/www.conf
user = www-data
group = www-data
# 开启慢日志
slowlog = /root/php/log/$pool.log.slow
request_slowlog_timeout = 5
配置php.ini文件
php.ini-development (开发环境用)
php.ini-production(生产环境用)
# ok
cp /var/local/php/php.ini-production /root/php/config/php.ini
# ok
mkdir /root/php/log
修改php.ini
error_log = /root/php/log/error_log
# 以下默认开启
启动php-fpm
这里之所以要复制一下是为了和外部同步,以便于后期修改和备份。
cp /usr/local/php/etc/php-fpm.conf /root/php/config/php-fpm.conf
# ok
php-fpm -y /root/php/config/php-fpm.conf
配置nginx
有一点需要注意,就是在nignx配置php-fpm中SCRIPT_FILENAME不要用地址,用$document_root
nginx.conf的用户要和www.conf里的用户一样
将用户设置为www-data 启动gzip,启动php-fpm等等就在不多说,https需要自行配置,部分代码如下,
sed -i "s/#user nobody;/user www-data;/g" /root/nginx/nginx.conf
sed -i "65,71s/\#/ /g" /root/nginx/nginx.conf
sed -i "s/SCRIPT_FILENAME \/scripts/SCRIPT_FILENAME \$document_root/1" /root/nginx/nginx.conf
sed -i "44s/html/\/var\/www\/html\/wordpress\//1" /root/nginx/nginx.conf
sed -i "66s/html/\/var\/www\/html\/wordpress\//1" /root/nginx/nginx.conf
sed -i "45s/index.html/index.html index.php/1" /root/nginx/nginx.conf
最后测试是否修改成功
nginx -t
配置wordpress
mkdir /var/www
mkdir /var/www/html
cp -r /var/local/wordpress/ /var/www/html/
# 在复制出wp-config.php,然后输入自己数据库的账号和密码
启动服务
php-fpm -y /root/php/config/php-fpm.conf && nginx
然后就可以从外部访问wordpress了
最后如果有什么不准确或是不对的,欢迎评论区指出😘