【建站】Linux中自建WordPress站点

这篇文章也可以在我的博客中查看

引言

WordPress是一个功能强大的内容管理系统,易于使用和扩展,因此被广泛应用于博客、企业网站、电商平台等各类网站的建设中。本文将为大家介绍如何在Linux操作系统上,利用Nginx作为Web服务器,搭建一个基于WordPress的网站。

配置MySQL

安装Mariadb

更新包

sudo apt update

安装

sudo apt install mariadb-server

配置向导

sudo mysql_secure_installation

跟着指引走就好

测试数据库状态

sudo systemctl status mariadb

输出:

● mariadb.service - MariaDB 10.5.15 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-11-18 14:33:41 CST; 4 months 13 days ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/

创建管理员

Debian系统的MariaDB 10.5默认不使用密码,而是使用unix_socket插件进行root用户身份验证。为了方便其它软件登入,还是需要配置密码登录。
而root帐户会执行诸如日志轮换和启动/停止服务器之类的任务,最好不要更改root帐户的身份验证详细信息。

因此,建议创建一个使用密码的管理员帐户。新帐户名为admin,与root帐户具有相同的功能。在终端中打开MariaDB提示以进行操作。

sudo mariadb
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

创建数据库

sudo mariadb -u admin -p

创建数据库,db_wordpress是数据库的命名

CREATE DATABASE db_wordpress;
SHOW DATABASES;
exit;

安装PHP

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update

php的拓展装起来比较蛋疼,建议将这段东西保存下来,方便日后查找自己到底装了什么,也方便升级……

sudo apt install php8.2 php8.2-bcmath php8.2-cgi php8.2-cli php8.2-common php8.2-fpm php8.2-gd php8.2-mbstring php8.2-mysql php8.2-xml php8.2-zip

php php-mysql php-fpm是必须的,php-cli php-common建议安装

查看安装的php及拓展

dpkg -l | grep php

安装WordPress

下载

你可能需要安装unzipsudo apt install unzip

your_site_name是你网站文件夹的名字,用于自己辨别

cd ~
wget https://wordpress.org/latest.zip
unzip -q latest.zip
mv wordpress your_site_name

配置

cd your_site_name
cp wp-config-sample.php wp-config.php
vim wp-config.php

在打开的配置文件中,修改这几处数据库配置:

define( 'DB_NAME', 'database_name_here' );
define( 'DB_USER', 'username_here' );
define( 'DB_PASSWORD', 'password_here' );

配置服务器

下载nginx

sudo apt install nginx

配置http

建议在conf.d新增配置块

sudo vim /etc/nginx/conf.d/your_site_name.conf

your_site_name.conf里输入以下字段配置php后端及html服务器

注意两个配置项:

  • root 是你WordPress文件夹的路径,以本文为例是/home/[username]/your_site_name
  • server_name 是你域名,没有域名可以不填
upstream php
{
	#server unix:/run/php/php7.4-fpm.sock;
	server 127.0.0.1:9000;
}

server
{
	listen 80;
	listen [::]:80;
	charset utf-8;
	server_name www.yourdomain.com;

	root /path-to-your-wordpress-folder;

	index index.php index.html index.htm;

	client_max_body_size 64M;

	fastcgi_buffers 16 16k;
	fastcgi_buffer_size 32k;
	proxy_buffer_size 128k;
	proxy_buffers 4 256k;
	proxy_busy_buffers_size 256k;

	location = /robots.txt
	{
		allow all;
		log_not_found off;
		access_log off;
	}

	location /
	{
		# This is cool because no php is touched for static content.
		# include the "?$args" part so non-default permalinks doesn't break when using query string
		try_files $uri $uri/ /index.php?$args;
	}


	location ~ \.php$
	{
		#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
		include fastcgi_params;
		#include snippets/fastcgi-php.conf;
		fastcgi_intercept_errors on;
		fastcgi_pass php;
		#The following parameter can be also included in fastcgi_params file
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$
	{
		expires max;
		log_not_found off;
	}
}

⚠注意:http并不安全
建议配置https服务器,将http重定向至https

配置https(可选)

  • ssl_certificate: 你ssl证书的地址,一般存放于/etc/ssl/...文件夹内
  • ssl_certificate_key: 你sll私钥的地址
  • ssl_verify_client: 如果你使用Cloudflare等CDN,可以取消注释设置为on,以防止CDN以外的人员直接访问。如果开启,请注意:
    • ssl_client_certificate: 客户端ssl证书,在CDN官方下载,用于识别其身份
upstream php
{
	#server unix:/run/php/php7.4-fpm.sock;
	server 127.0.0.1:9000;
}

server
{
	listen 80;
	listen [::]:80;
	charset utf-8;
	server_name www.yourdomain.com;

	return 301 https://$host$request_uri;
}

server
{
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	charset utf-8;
	server_name www.yourdomain.com;

	root /path-to-your-wordpress-folder;

	ssl_certificate /etc/ssl/cert.pem;
	ssl_certificate_key /etc/ssl/key.pem;
	# ssl_client_certificate /etc/ssl/cloudflare.crt;
	# ssl_verify_client on;
	ssl_session_timeout 1d;
	ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
	ssl_session_tickets off;

	# intermediate configuration
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
	ssl_prefer_server_ciphers off;

	# HSTS (ngx_http_headers_module is required) (63072000 seconds)
	add_header Strict-Transport-Security "max-age=63072000" always;

	#root /usr/share/nginx/html;
	index index.php index.html index.htm;

	client_max_body_size 64M;

	fastcgi_buffers 16 16k;
	fastcgi_buffer_size 32k;
	proxy_buffer_size 128k;
	proxy_buffers 4 256k;
	proxy_busy_buffers_size 256k;

	location = /robots.txt
	{
		allow all;
		log_not_found off;
		access_log off;
	}

	location /
	{
		# This is cool because no php is touched for static content.
		# include the "?$args" part so non-default permalinks doesn't break when using query string
		try_files $uri $uri/ /index.php?$args;
	}


	location ~ \.php$
	{
		#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
		include fastcgi_params;
		#include snippets/fastcgi-php.conf;
		fastcgi_intercept_errors on;
		fastcgi_pass php;
		#The following parameter can be also included in fastcgi_params file
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$
	{
		expires max;
		log_not_found off;
	}
}

重启nginx服务

sudo systemctl restart nginx

如果启动出现问题,请使用sudo nginx -t追踪问题

配置php-fpm

找到你的php-fpm配置文件,一般位于/etc/php/...
这里我是:

sudo vim /etc/php/8.2/fpm/pool.d/www.conf

在配置文件中找到listen = /var/run/php5-fpm.sock一项,将其注释,并改为socket模式:

;listen = /var/run/php8.2-fpm.sock <-- 注释
listen = 127.0.0.1:9000 <-- 与上一步nginx配置的端口一致

重启php-fpm

sudo systemctl restart php8.2-fpm

访问站点

打开浏览器,输入服务器地址,或者映射到服务器的域名(注意域名建议要和nginx中配置的一致),可以访问到WordPress站点。

配置站点

首次访问后,会出现WordPress站点的初始化界面。
按照其引导进行操作即可完成安装。

关于权限问题

如果你发现站点没有写入权限
(比如无法上传媒体库、修改语言不生效)
请确保你的nginxphp-fpm的运行用户有对wordpress站点文件夹写入的权限。

  1. 确保你的站点文件夹至少具有权限755
  2. 确保nginxphp-fpm的运行用户(默认一般为www-data)有写入权限
  • 如果你没配置过这个用户,那它是没有任何权限的
  • 你可以给予www-data写入的权限
  • 或者修改为有权限的运行用户或组:
    • nginx可以到/etc/nginx/nginx.conf文件中修改user字段
    • php-fpm可以到上面提到的同一配置文件修改usergroup字段

后续工作

  • 设置你的站点
  • 下载一个主题
  • 安装必要插件(参考我其它文章的插件推荐)
  • 导入、编写站点的内容
  • 开冲

你可能感兴趣的:(服务器,linux,服务器,数据库,Wordpress,经验分享)