基本的想法是,用Docker容器做服务器,先把流程走一遍。
这一部分只是用来练手的,好让自己知道一个基本的、可运行的web应用如何启动、如何验证。
docker pull training/webapp # 拉取镜像
docker run -it --rm -P training/webapp python app.py
使用docker port Container_ID
来查看容器的信息,结果如下
5000/tcp -> 0.0.0.0:32768
使用ifconfig
来查看网络的配置,找到一个叫作docker0
的网卡,它的信息中包括下面一行
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
可见,IP地址为172.17.0.1
。然后我们在宿主机的浏览器地址栏中输入172.17.0.1:32768
,出现如下的界面
表明这个web应用运行成功。
那我们可不可以自己指定web应用的IP地址呢?试一下。
docker run -it --rm -p 192.168.21.2:5000:5000 training/webapp python app.py
提示如下错误信息
docker: Error response from daemon: driver failed programming external connectivity on endpoint practical_dubinsky(d5f50652d7c17b254d9ddbd21bde69b3b8febf4876635ebdb718a2eacdcd12eb): Error starting userland proxy: listen tcp 192.168.21.2:5000:bind: cannot assign requested address.
按照如下方法尝试
wd@wd-HBL-WX9:~$ docker run -it --rm -p 172.17.0.1:5000:5000 training/webapp python app.py
成功运行,使用docker ps
查看容器信息为
wd@wd-HBL-WX9:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff98fcbae29f training/webapp "python app.py" 16 seconds ago Up 15 seconds 172.17.0.1:5000->5000/tcp vigorous_davinci
可见,只能指定ifconfig
所列出来的docker0
的IP地址。实际上,ifconfig
显示还有另外两个网卡,它们的IP地址分别为127.0.0.1
和192.168.21.100
,可否指定这两个端口呢?试一下。经过测试,这两个都是可以的。
运行ubuntu18.04容器
docker run -it ubuntu:18.04 bash
安装vim
apt update
apt install vim
把apt源改为阿里云
cd /etc/apt
cp sources.list sources.list.backup
vim sources.list
删除sources.list
中的内容,并把以下内容复制进去
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
然后执行apt update
。
在其中安装ifconfig
apt update
apt install net-tools
在docker中运行ifconfig
,发现docker的IP为172.17.0.2
,在宿主机中使用ping 172.17.0.2
,可以ping
通。
Nginx是一个免费的开源高性能HTTP和反向代理服务器,负责处理互联网上一些最大的网站的负载。它的安装只需要下面一条命令
apt install nginx
查看nginx
版本
nginx -v
返回
nginx version: nginx/1.14.0 (Ubuntu)
在容器中输入service nginx start
来启动nginx
服务。然后在宿主机上的浏览器中输入IP地址172.17.0.2
,出现如下所示的nginx欢迎界面,说明安装成功。
也只需要一条命令
apt install mysql-server mysql-client
安装完成后输入命令mysql -u root
,结果出现了如下的问题
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘ (2)
在网上找到一种方法:先使用命令mysql --help | grep ‘my.cnf‘
,返回内容为
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
我把/etc/my.cnf
和/etc/mysql/my.cnf
两个文件删除了(前一个其实并不存在),然后运行下面的命令重启服务
service mysql restart
然后执行mysql -u root
命令,成功进入,返回如下信息
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql>
使用如下命令把root的密码进行更新
mysql> use mysql;
mysql> update mysql.user set authentication_string=PASSWORD(‘新密码‘), plugin=‘mysql_native_password‘ where user=‘root‘;
mysql>flush privileges;
执行如下命令
mysql> exit;
service mysql restart
mysql -u root -p
此时就需要输入密码才能进入数据库了。说明密码设置成功。
通常,我们应该为wordpress单独创建一个数据库(wordpress)和用户(wpuser)
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)
mysql> create user wpuser@localhost identified by ‘password‘;
Query OK, 0 rows affected (0.00 sec)
mysql>
其中password
是你的密码。
创建完WordPress数据库和用户后,需要将这两者关联起来:
mysql> grant all privileges on wordpress.* to wpuser@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
使用如下命令
apt install php php-fpm php-mysql
查看PHP
版本
php -v
输出如下信息
PHP 7.2.24-0ubuntu0.18.04.3 (cli) (built: Feb 11 2020 15:55:52) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24-0ubuntu0.18.04.3, Copyright (c) 1999-2018, by Zend Technologies
发现安装的是7.2
版本的。应该表示PHP
安装成功。
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup
vim /etc/nginx/sites-available/default
root /var/www/html;
,修改为root /var/www;
。这一行用来指定网站的根目录,应该也可以指定为自己的其它的目录。index index.html index.htm index.nginx-debian.html;
,修改为index index.php index.html index.htm index.nginx-debian.html;
,也就是增加了index.php
这一项。service nginx restart
,重启Nginx。返回重启成功的提示。cp /etc/php/7.2/fpm/pool.d/www.conf /etc/php/7.2/fpm/pool.d/www.conf.backup #备份
vim /etc/php/7.2/fpm/pool.d/www.conf #修改
listen = /run/php/php7.2-fpm.sock
,在它的前面加上一个;
,然后在第37行(原本为空)中加上如下内容:listen = 127.0.0.1:9000
。service php7.2-fpm restart
重启php7.2-fpm。结果报错 * Restarting PHP 7.2 FastCGI Process Manager php-fpm7.2 [fail]
service php7.2-fpm start
启动服务,再用上面的命令重启服务就没有问题啦。service service_name status
命令可以查看service_name
所指明的服务的状态。/var/www/
里面新建文件info.php
文件,它的内容如下172.17.0.2/info.php
,出现如下显示PHP版本信息的页面,说明配置成功。这是参考官方网站的介绍来做的。大部分内容都是原文复制过来的。
下载WordPress安装包并解压
在容器中使用如下命令来下载WordPress
这样WordPress压缩包将会解压缩至文件夹wordpress ,这个文件夹与你下载的latest.tar.gz压缩包处于同一个目录下。下载的时候可能会遇到too many request
的问题,网上有很多的解决方法。
创建WordPress数据库和一个用户
若决定手动创建数据库,可以根据下文中使用cPanel或使用phpMyAdmin中的操作说明进行操作。你也可以利用shell运行mysql语句,快速而方便地创建MySQL用户和数据库。下面给出创建语句,其中美元符号表示命令提示符:
从这个例子中可以看出:
包括数据库名称、wordpress用户名、hostname以及密码,这些信息已经在(或者会暂时在)wp-config.php文件中,也没有必要在别的地方重复记录了。
在前面配置MySQL的时候我们已经创建了数据库和用户。
设置wp-config.php文件
用户可以亲自创建并编辑wp-config.php文件,也可以在运行安装脚本(第五步)时让WordPress帮助用户编辑wp-config.php(不过仍然需要告诉WordPress我们的数据库信息)。在这里我选择让WordPress帮助我编辑,如果你要自己编辑的话参见官网的介绍。
上传文件
接下来需要决定将博客放在网站的什么位置上:
网站根目录下(如:http://example.com/
,我的是172.17.0.2
)
在2-4中,我把根目录设置为了/var/www
,所以我使用cp -r /wordpress/* /var/www/
把wordpress
中的所有内容都转移到了/var/www
目录下。
网站子目录下(如:http://example.com/blog/
)
说白了就是把wordpress
中的所有内容复制到网站根目录下的一个子目录中。
运行安装脚本
在宿主机的浏览器中运行安装脚本,我把wordpress中的文件放在了网站的根目录下,所以我在宿主机的浏览器中访问172.17.0.2/wp-admin/install.php
。出现了如下的安装wordpress的界面
点击Let‘s go!
开始安装。
submit
,出现如下的错误wp-config.php
这个文件,我们可以按照这里给出的方法来解决。php-xml
apt install php-xml
172.17.0.2
,用户名和密码就是你在安装WordPress时给网站设置的用户名和密码(不是数据库的用户名和密码)。上面两步做完了之后,就可以把小书匠写的markdown文章推送到自己的博客上了。
上传文件(9c6358f1520f4b3b677f1efa568d36f3.png)出错: Error: parse error. not well formed
发送失败: Error: parse error. not well formed
网上说是没有安装php-xml
,安装上,然后用命令service nginx restart
来重启nginx服务,用service php7.2-fpm restart
来重启php7.2-fpm服务,重启成功。那我们再试一下在小书匠里面发布吧。发布成功!!!
本地的图片是没有办法上传的,可能要用到图床来解决。
连接不成功,我也没有在容器中设置过FTP,知乎上有人说是由于下面的原因
由于你的 Wordpress 所在的目录没有写入权限,无法完成更新。所以 Wordpress 想跟你要所在目录的 FTP 的权限。然而,由于以下可能的原因之一:
1. 你输入的 FTP 地址是错的;
2. 你的 Wordpress 所在服务器根本就没有 FTP 服务;
3. 你的 Wordpress 所在的服务器的 FTP 服务出了点问题;
4. 你的 Wordpress 所在服务器的 FTP 服务拒绝你连接、或是其它无法正常连接的情况。
作者:yuanyuanVivian
链接:https://www.zhihu.com/question/28910605/answer/50867516
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在容器中运行service --status-all
,发现我这没有ftp服务,参考博客安装配置ftp服务
apt install vsftpd
user_name
useradd -m user_name
user_name
设置密码passwd user_name
wp-config.php
文件的最后加上下面这一行define("FS_METHOD","direct");
too many request
的问题。too many request
问题和主题插件的更新问题参考了网站。在容器的WordPress的插件目录(我的是/var/www/wp-content/plugins
)中创建一个文件,命名为plugin_name.php
,把以下内容写进去
然后就可以在自己博客的控制面板中看到一个叫作wp101.net中文下载镜像
的插件了,启用它。发现并没有用。
然后尝试使用一个叫作Kill 429 -完美解决WordPress 429 Too Many Requests报错
的插件。在网上搜索下载这个插件,解压,然后把它复制到容器中的WordPress的插件目录中去。然后刷新页面,就可以看到这个插件,启用这个插件,然后就可以对这个插件进行设置,具体的使用过程参见这个插件的官网。结果发现也没有用。
哎呀算了,不试了,就采用kexue上网把插件和主题下载下来然后复制到容器中指定位置的办法来做吧。
上传文件(enter_description_here.png)出错: Error: 无法写入文件enter_description_here.png(无法建立目录wp-content/uploads/2020/03。有没有上级目录的写权限?)。
意思就是说,把文件enter_description_here.png上传到容器中的网站根目录下的wp-content/uploads/2020/03
中的时候出现了错误,没有写的权限。解决的办法是修改权限。
查看wp-content
目录的权限
在wp-content
的父目录中使用命令ls -ld wp-content
,返回如下信息:
drwxr-xr-x 5 root root 4096 Mar 31 13:05 wp-content
这里,从左到右各个部分分别是如下的含义:
1. drwxr-xr-x
:对象的类型和权限
2. 5
:子目录个数(应该是包括了./
和../
这两个特殊的目录)
3. root
:目录所有者
4. root
:目录所在组
5. 4096
:目录中内容的属性大小
6. Mar 31 13:05
:目录中文件增加或减少或更名的时间
7. wp-content
:目录名称
然后再仔细看看第一项,drwxr-xr-x
,它里面有10个字母,第一个字母表示类型,这里是d
,表示类型是目录,第2个到第10个这9个字母从前到后3个一组,分别表示目录所有者权限(u
)、组成员权限(g
)和其它用户权限(o
)。每组内可以出现下面4个字母中的3个,每个字母代表一种权限,同时也被赋于一个数字的值:
1. r
:对于文件,表示可以查看文件内容;对于目录,表示可以用ls
查看目录中存在的文件名称,对应的数字的值为4
2. w
:对于文件,表示可以更改文件的内容,对于目录,表示可以删除目录中的子文件或者子目录,对应的数字的值为2
3. x
:对于文件,表示可以开启文件当中记录的程序,对于目录,表示可以进入目录中,对应的数字的值为1
4. -
:没有开启对应的权限,对应的数字的值为0
所以可以理解,rwxr-xr-x
表示目录所有者拥有读取(r
)、修改(w
)和进入(x
)的权限,组成员拥有读取(r
)、进入(x
)的权限,没有修改的权限(因为对应位置为-
),其它用户拥有读取(r
)、进入(x
)的权限,没有修改的权限(因为对应位置为-
)。用数字表示权限的话,这三者的权限分别为7(=4(r
)+2(w
)+1(x
))、5(=4(r
)+0(-
)+1(x
))、5(=4(r
)+0(-
)+1(x
))。
修改wp-content
目录的权限
我们的目标是让其它用户具有修改权限,根据上面的介绍,可知,可以有如下几种方式来修改(在wp-content
的父目录中):
使用数字的方法直接改为目标权限:
chmod -R 757 wp-content
使用字母的方法直接改为目标权限:
chmod -R rwxr-xrwx wp-content
使用增加权限的方法对其它用户(o
)增加(+
)需要的权限(w
):
chmod -R o+w wp-content
在上面的命令中-R
表示对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)。
经过上面的修改,可以解决该问题。
发布到第一级类别
这个问题其实是如何个性化定制发布内容
的一部分,参考了使用小书匠编辑器将文章快速发布到各大主要博客平台中的内容,甚至是原文复制。
系统提供的发布默认只是将文章的正文和标题发布到用户的博客平台,其他像是否发布到草稿、添加标签、添加分类、都是采用默认配置。
用户可以通过元数据功能,达到修改是否发布到草稿、添加自己想要的标签、添加分类等目的,甚至实现第三方博客平台自己的一些其他参数所提供的功能。
系统通过识别开头为weblog_ 的元数据,将其一起发送到博客平台上,来实现上述功能。比如你不想让文章发表,可以配置元数据weblog_publish: false
。想让你的文章添加到小书匠和开发两个分类,可以配置元数据weblog_categories: [小书匠,开发]
。
具体的博客参数可以查看各个博客平台开放的weblogapi提供的内容。下面整理了一个从博客园开放的参数:
参数 | 含义 | 备注 |
---|---|---|
dateCreated | 创建时间 | |
description | 描述 | |
title | 标题 | |
categories | 分类 | 多个分类需用半角逗号分开,并用中括号包裹,比如 [小书匠,开发] |
mt_all_comments | 是否允许评论 | |
mt_keywords | 关键字 |
仪表盘->文章->分类目录
中添加了一个新的分类目录,目录的名称
为技术操作
,别名
为technology
。添加分类之后,接下来就是在发布文章时指定这个分类了。有以下两种方法:
上面的两种方法分别在不同的位置用weblog_categories: [技术操作]
指明的文章要发布的类别,这两种方法都可以成功。需要注意的是,这里用的是类别的名称
,而不是别名
。
发布到第二级类别(子类别)
假如在名称
为小书匠
的一级类别的下面还有一个名称
为笔记
的子类别,想把文章发表到这个类别中,该怎么设置呢?好说,跟上面一样,只需设置weblog_categories: [笔记]
就可以了。
在浏览器中打开要更新的文章,然后你可以在地址栏看到文章的ID,比如在下图中,文章的ID为151。
然后在新版本文章的发布页面的文章ID(可选)
一栏中指定这个ID,如下图所示,就可以更新这个文章了。
原文:https://www.cnblogs.com/nangongergou/p/13606850.html