15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 小白学习之路-从零开始用SSH在Linux服务器上构建Wordpress网站

小白学习之路-从零开始用SSH在Linux服务器上构建Wordpress网站

时间:2023-05-25 01:39:02 | 来源:网站运营

时间:2023-05-25 01:39:02 来源:网站运营

小白学习之路-从零开始用SSH在Linux服务器上构建Wordpress网站:
最近学习网站开发,由最简单的东西开始一步一步入门,不知不觉一个月间就学到了我难以想象多的知识. 虽然Wordpress会被一些高端开发者鄙视, 尤其是它是基于PHP的(其实我也不适应,因为我是主要学习Python研发的), 但是作为一个领你入门的师父,Wordpress毫无疑问是把你从零基础领到高端的好师父! 本文就是我这几天以Wordpress为契机,研究在各种网络服务器的成果. 内置一些常见的坑及跳坑的方法.
要搭建wordpress,首先得有个VPS吧.


其实前些天免费在AWS的EC2上面构建服务器,感觉还是很爽很好玩的.
可是昨天,一想到1年以后就要说拜拜了,就心有余悸.
因为正式收费貌似很贵不打算续费,所以又看了看国内一些既稳定又靠谱的VPS商,阿里云之类.
感觉他们都还是贵,一年要上千.而且还要备案啥的,麻烦一大堆.
各种搜索后,看到一个一餐盒饭钱的VPS

购买CloudPowerall服务器
然后是购买环节啦,因为在视频里看到才.99美元一年,还不是国内那种廉价空间,
算一个VPS, 还能通过SSH把它当自己电脑一样任意操控, 性价比太高了! 于是我毫不犹豫的打开选购页面.
以前以为国外服务器都好高端,我又没有国外银行卡有没有paypal怎么办? 实际上一点问题都没有! CloudPowerall支持支付宝。
接下来就是创建服务器实例了.
花了不到几十秒钟就创建了一个叫"Small"小水滴的服务器(在AWS和阿里云中叫做实例),选择安装了Ubuntu 20.


用SSH连接服务器
因为之前在AWS上混了几天, 又在阿里云上给客户部署网站, 用SSH控制远程主机已经很熟练了.
所以CloudPowerall这里也没费功夫.
过程很简单,如果是Linux/Mac电脑,直接在终端用SSH命令就可以了.
如果像我一样用Windows, 那就下载个绿色/单文件软件--大名鼎鼎的Putty.exe.用它就ok.
打开软件后,在HostName处输入服务器给的公网IP, 选择SSH连接,然后点击Open, 连接上了哈哈!
输入用户名密码就可以开始随意操作了,像linux本机一样.
这里略过了很多细节,是因为不想重复网上各种教程.


在Linux上安装Wordpress环境

按照youtube非常多的教学视频指示,一句命令安装好了所有依赖软件:

root@username:~# sudo apt-get install php5-fpm nginx mysql-server php5-mysql
虽然不知道这几个依赖包的顺序有什么讲究(看起来好像有一点点逻辑性?).
但是一句话之后,除了mysql弹出界面输入密码外,其他不用管就全部搞定了.
这时候service nginx start,就启动了nginx服务器.
打开自己的网址, 赫然地显示着Welcome to nginx!好方便!!

Wordpress安装 Install Wordpress
这里实际上非常简单,因为新一代nginx的网站根目录是默认设置在和apache一样的地方/var/www/html,所以很好找.


Nginx的配置文件 Nginx Configuaration
Linux小白的我,在之前弄乱了几个服务器后终于小心翼翼的知道,改任何配置文件都需要备份一个原始出来.
没成想,这竟然成了我配置Nginx第一步的大错误!
刚一开始配置Nginx就出错了 Error occured before setting up the nginx config file

具体说来是这样的:
教学中说,先要找到nginx的配置文件,也就是/etc/nginx/sites-available/下的default文件.
我理所当然地在改之前复制出了一个default-backup文件.
然后为了方便,离开终端,直接FTP中用我喜欢的编辑器打开了default文件,遵照nginx语法改了几行.
然后重启nginx服务器.借着噩梦就开始了, 各种报错:

root@username:~# sudo service nginx restartJob for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.然后不管是start还是restart都是这句话.纳闷了.就按照出错指示,输入了systemctl status nginx.service:

root@username:~# systemctl status nginx.service nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2020-10-23 08:27:51 EST; 22s ago Process: 8508 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Process: 8609 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE) Main PID: 7194 (code=exited, status=0/SUCCESS)完全看不懂...当然后来也证明,这个对我排除错误完全没作用.于是又照着指示输入了第二个命令:

root@username:~# journalctl -xe-- Subject: Session 12 has been terminated-- Defined-By: systemd-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel-- Documentation: http://www.freedesktop.org/wiki/Software/systemd/multiseat---- A session with the ID 12 has been terminated.Oct 23 08:33:44 username sshd[8792]: Connection closed by 120.92.72.31 [preauth]Oct 23 08:33:45 username sshd[8770]: pam_unix(sshd:session): session closed for user rootOct 23 08:33:45 username systemd-logind[551]: Removed session 13.-- Subject: Session 13 has been terminated-- Defined-By: systemd-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel-- Documentation: http://www.freedesktop.org/wiki/Software/systemd/multiseat---- A session with the ID 13 has been terminated.Oct 23 08:34:06 username sshd[8795]: Connection closed by 120.92.72.31 [preauth]Oct 23 08:34:54 username sshd[8797]: Connection closed by 106.187.100.177 [preauth]Oct 23 08:35:16 username sshd[8799]: Connection closed by 120.92.72.31 [preauth]Oct 23 08:35:35 username sshd[8801]: Connection closed by 120.92.72.31 [preauth]Oct 23 08:36:33 username sudo[8806]: root : TTY=pts/1 ; PWD=/etc/nginx/sites-available ; USER=Oct 23 08:36:33 username sudo[8806]: pam_unix(sudo:session): session opened for user root by root(Oct 23 08:36:33 username sudo[8806]: pam_unix(sudo:session): session closed for user rootOct 23 08:36:48 username sudo[8829]: root : TTY=pts/1 ; PWD=/etc/nginx/sites-available ; USER=Oct 23 08:36:48 username sudo[8829]: pam_unix(sudo:session): session opened for user root by root(Oct 23 08:36:48 username sudo[8829]: pam_unix(sudo:session): session closed for user rootOct 23 08:36:50 username sshd[8852]: Connection closed by 120.92.72.31 [preauth]Oct 23 08:37:25 username sshd[8854]: Connection closed by 120.92.72.31 [preauth]Oct 23 08:37:57 username sshd[8856]: Connection closed by 101.200.80.28 [preauth]Oct 23 08:38:03 username sshd[8858]: Connection closed by 120.92.72.31 [preauth]换着关键词关键句搜了好几种,才搜出来一种答案比较多的.
看了十来篇答案吧,有一个回答中说了依据输入nginx -t查看什么,忘了.
我看命令很简单,也不像会破坏环境什么的,就试着输了一下,返回以下结果:

root@username:~# nginx -tnginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-enabled/default-backup: 17nginx: configuration file /etc/nginx/nginx.conf test failed就两句话,然后都了一下,眼睛瞪大--恍然大悟!
原来问题出在这里: 我为了备份,而创建了一个叫default-backup的文件,
没想到这小子与default文件冲突: nginx会读取sites-availabe或sites-enabled文件夹中的每一份文件,如果一个文件夹下有两个这文件,nginx就会全部读取.
那文件中第17行是对80端口的监听,声明两遍,当然会显示一个a duplicate default server for 0.0.0.0:80了!
所以....我迅速的....没直接删掉备份文件,而是先下载到了本地桌面,再删掉.
此时再输入nginx -t,大功告成!返回:

nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful简单两句,看着真给力.
这下大概能猜到了,nginx -t大概是测试nginx配置文件语法的, 也就是debug用的.
如果哪里配置语法或逻辑写错了,这里会显示出来.
service nginx start,紧接着打开浏览器自己的网址, Welcome to nginx!看着激动人心啊哈哈!

也许这就是程序世界的乐趣吧. 这个世界汇集的都是一些喜欢玩解谜游戏的小孩子.

Real configuration for Nginx
教程里都是Linux老油条们在SSH里直接Vi或Nano来编辑这些配置文件的,虽然改动不多看起来不难.
但是我个性还是有点特别,在我正式学Vi或Nano之前, 一点都不想碰.
所以还是用简单好理解的方法不给自己添堵, 直接在Filezilla这个多数人都在用的FTP,
右键点击/etc/nginx/sites-available/default这个文件,点击view,
用我默认的sublime编辑器打开,设好nginx语法高亮.
简单浏览了下. 除去注释后,基本就这么几句话,结构很简单:

server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; }}之前看过两三集的nginx教程, 有那么一点点印象而已.
反正好像是一个server{...},代表一个站点.
你并排多写几个server{...}块,就能同时拥有好几个站点,比如一个基于php的wordpress站点,一个基于python的django站点.
我猜的哈. 反正对现在阶段来说 ,这是真的无所谓的.
我的经验是,

新手学东西不能怕错,但是不能少了猜.
如果有人看到这里,也请不要嫌我业余.
我反倒觉得这代表着一种非常实际的心理历程,更容易帮助和我一样的新人体会这个过程.

继续猜上面的语法.

listen 80 default_server; 好像是说默认服务器会监听80端口.
但listen [::]:80 default_server;就不知道了,看下一句.
root /var/www/html; 这个好理解,那就是网站(也叫站点, 应用, app等)的根目录位置.
看到一些老视频,好像过去nginx的默认根目录在/usr/share/html这里.
新nginx改到这里更好,和apache一样,省得去记别的了.
server_name _; 这个,估计是站点名字或者网址吧?
location / {...} 这可能定义根目录的一些url地址问题?
try_files $url $url/ =404, 这个还真有点不好猜,只知道估计是和404文件未找到有关.
然后就可以开始正式学习nginx语法了.

# Upstream 用来抽象化php的后端连接upstream php { server unix:/tmp/php-cgi.socket; server 127.0.0.1:9000;}server { ## 把你的网址放在这里,如baidu.com server_name baidu.com; ## 只此一处的站点根目录地址的声明 root /var/www/wordpress; ## 这句应该写在http区块(类似http {...}这样的)里, ## 如果你写了http区块,就没必要放在这. index index.php; ## (设置网站favicon.ico图标的访问逻辑,) location = /favicon.ico { # (如果没找到这个文件,则不适用规则) log_not_found off; access_log off; } ## (设置robots.txt的访问逻辑) ## (允许所有对它的访问(因为每个访问者都应该遵守嘛)) location = /robots.txt { allow all; # (如果没找到这个文件,则不适用规则) log_not_found off; access_log off; } ## (根目录的访问逻辑. 注:"/"代表根目录) location / { # 这句话巨酷, 因为没有php会被当成静态文件访问 # 加入"?$args"这部分后, 非默认的固定链接在使用url查询字串时就不会中断 try_files $uri $uri/ /index.php?$args; } ## (目录中所有.php文件的访问逻辑) location ~ /.php$ { #注意: 你应该在php.ini中写了"cgi.fix_pathinfo = 0;" 这句话. # (引入fastcgi.conf这个文件) include fastcgi.conf; # (fastcgi相关的报错:开) fastcgi_intercept_errors on; fastcgi_pass php; } ## (目录中所有的js|css|png|jpg|jpeg|gif|ico文件访问逻辑) location ~* /.(js|css|png|jpg|jpeg|gif|ico)$ { ## 最大过期期限 expires max; ## 如果没有找到这个文件 则不适用规则 log_not_found off; }}上面的中文是我自己翻译的, 带括号的注释中是我根据字面意思猜测的.
简单的翻译官网注释后,好像有点了解怎么回事了. 页面中往下翻,还有一段可选的代码配置:

location /wordpress { try_files $uri $uri/ /wordpress/index.php?$args;}location ~ /.php$ { fastcgi_split_path_info ^(/wordpress)(/.*)$;}上面说是,如果你想把wordpress作为一个子目录(而不是网站的根目录)使用,那你应该在上面总配置中相应位置加上这几句代码.
根据字面意思理解, 应该是加入了一个/wordpress子目录的访问逻辑, 并为所有php文件的访问逻辑中加入了/wordpress子目录专门的地址解析规则.
往下翻, 有一段Rewrite相关配置. 玩过Wordpress的都知道Rewrite重写规则的重要性.
在Apache服务器中, 如果.htaccess文件和apache的rewrite模块文件没有写对的话,wordpress就无法使用固定链接或称伪链接这种好玩意了.
官网对于重写的完整配置(包括刚才的主配置)如下:

map $uri $blogname{ ~^(?P<blogpath>/[^/]+/)files/(.*) $blogpath ;}map $blogname $blogid{ default -999; #Ref: http://wordpress.org/extend/plugins/nginx-helper/ #include /var/www/wordpress/wp-content/plugins/nginx-helper/map.conf ;}server { server_name example.com ; root /var/www/example.com/htdocs; index index.php; location ~ ^(/[^/]+/)?files/(.+) { try_files /wp-content/blogs.dir/$blogid/files/$2 /wp-includes/ms-files.php?file=$2 ; access_log off; log_not_found off; expires max; } #avoid php readfile() location ^~ /blogs.dir { internal; alias /var/www/example.com/htdocs/wp-content/blogs.dir ; access_log off; log_not_found off; expires max; } if (!-e $request_filename) { rewrite /wp-admin$ $scheme://$host$uri/ permanent; rewrite ^(/[^/]+)?(/wp-.*) $2 last; rewrite ^(/[^/]+)?(/.*/.php) $2 last; } location / { try_files $uri $uri/ /index.php?$args ; } location ~ /.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass php; } #add some rules for static content expiry-headers here}这里官网的注释解释不多,而且很难字面上理解了, 所以先跳过.
到这里, 就不是我能简单猜出来的了.
而且看起来也不像是复制粘贴能行的?
所以还是带着问题回到youtube, 看看别人都是怎么配置的.
现在,感觉自己离"真相"已经不太远了.
其实youtube上专门为了wordpress配置nginx的视频并不多,这点令我好奇.
之前国内翻阅文章时看到恩多次在ngingx上配置wordpress的文章,可是国外并不流行?
总之,看了几个靠谱的视频后发现,他们的配置到我这里都用不了.
于是修改关键词搜索, 搜php与nginx, 学到了几个最简单方法的配置.
当然还是不管用,不过当我再回头看官网的这段专为wordpress的配置, 就明白了需要修改哪里了.
简单修改后,终于成功! 默认的最简单最靠谱的配置如下(这里面你哪句话都不用改就可以用):

# Upstream to abstract backend connection(s) for phpupstream up_php { server unix:/var/run/php5-fpm.sock; server 127.0.0.1:9000;}server { server_name _; root /var/www/html; index index.php; 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$ { include fastcgi.conf; fastcgi_pass up_php; } location ~* /.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; }}然后重启nginx.哒哒哒!经典的wordpress配置页面出现啦!剩余步骤30秒内全部完成!哈哈,太高兴了.



关键词:服务,学习

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭