订阅号前端部分又是一个大坑,在开始写之前还是先总结一下之前一个星期的经验吧.
update 18-04-23:删除完tomcat和apache/apache2后要重启服务器,否则会出现一些奇怪的bug
update 18-04-25:站点根目录其实指的就是虚拟主机配置里的root一项所指的目录,已更改为虚拟主机根目录
update 18-04-26:nginx需要用户为www-data(一般默认如此),以及虚拟主机根目录用户为www-data才能正常运行

本文最后有一些需要用到的Linux指令,可按需要查看.

服务器的选择

由于我对服务器还有一些别的需求,选择了digitalocean,但听说这种境外服务器没法调用高级接口..到时候再弄个腾讯云好了.
digitalocean的购买可以详见我的另一篇文章:http://elatis.cn/index.php/archives/7/

服务器环境的搭建

购买好服务器后,我们就可以开始配置服务器了.

检查是否安装了其它服务器软件

有些服务器商可能会在服务器上预装apache或tomcat等服务器软件,由于可能会端口占用冲突或其它奇奇怪怪的bug,可以先将不需要的软件先卸载.
不管有没有安装,都可以直接使用

# apt-get autoremove apache
# apt-get autoremove apache2
# apt-get autoremove tomcat

来卸载,这一步就完成了
删除完tomcat和apache/apache2后要重启服务器,否则会出现一些奇怪的bug

安装nginx和php7.0

# apt-get update
# apt-get install nginx
# apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 php7.0-fpm php7.0-xml php7.0-mbstring

配置nginx.conf

nginx的目录一般在/etc/nginx,而nginx.conf则在nginx的根目录下
nginx.conf中的都是默认设置,当你在虚拟主机配置中没有指定某些配置,nginx会自动使用nginx.conf中的相应配置.
而我们只需要更改一个nginx的用户就行了.

  • 新建一个用户(具体操作看上面),并将配置文件中的第一行改成user yournewuser,其中youernewuser为你刚才新建的用户
    新用户一般命名为www-datanginx.
  • 其实以上操作就是让php-fpm,nginx,虚拟主机根目录这三个的用户相同,而php-fpm的默认用户为www-data,所以设置www-data为nginx和虚拟主机根目录用户比较方便
    更多的配置我们都可以在虚拟主机的配置里进行,所以关于nginx.conf的相关操作就先到这了.

配置一个虚拟主机

进入/etc/nginx/conf.d,用vim test.conf创建并进入一个新虚拟主机的配置,其中test可以换成你想要的名字.
相关配置我还是直接写在实例里吧.

update 18.04.21 : sorryindex index.html index.php这一句后面少了个分号,现在加上了

server {
        listen 80;                                              #监听端口
        root /var/www/wechat;                                   #虚拟主机根目录
        server_name elatisy.top www.elatisy.top;                #站点域名,可用空格隔开来指定多个域名
        index index.html index.php;                             #站点主页,可用空格隔开指定多个,优先级依次递减
        access_log /var/log/nginx/access.log;                   #指定访问日志
        error_log /var/log/nginx/error.log;                     #指定错误日志,代码调试全靠它
        location / {
                try_files $uri $uri/ /index.php?$query_string;
                client_max_body_size    10m;
        }
}

编辑完成后保存退出.
然后我们在刚才你指定的虚拟主机根目录下创建一个index.html,里面随便填个hello world,保存退出.

  • 接下来使用systemctl restart nginx来重启nginx
    大概率nginx会报错,这是因为nginx自带一个default虚拟主机来给你做模板,并且是默认启用的.而default使用的端口正是上面填的80
    我们可以修改default虚拟主机的端口,或者干脆把它删掉,它的配置文件在/etc/nginx/sites-enabled/default.conf.
    修改完成后再重启nginx,如果没有报错就说明成功了,否则检查你的代码,并结合systemctl status nginx中提供的信息调试.

  • 重启成功后在浏览器中输入你刚才填的域名,如果看到hello world字样则说明成功了.

  • 如果浏览器出现403,500等错误,有可能是nginx没有权限访问虚拟主机根目录,则使用上面提到的chmod递归将虚拟主机根目录的权限设为755
    要是还不行,可以使用chown递归将虚拟主机根目录的用户更改为你刚才在nginx.conf中填的用户.
    要还不行..emmm可以百度/谷歌,也可以加我QQ一起讨论,因为我到这遇到的问题就这么多,更多错法我也无从得知

配置fcgi程序

fcgi程序介绍

  • fcgi是fastcgi的缩写,cgi是跑在服务器上的程序,理论上可以使用任何语言写,但为了简单起见,我们一般使用php或python即可.
  • cgi程序可对前端发送的表单进行处理,并将结果传回前端
  • cgi程序在每次被调用时才会开启解释器运行,而fcgi在第一次被调用后就会一直开着解释器,所以fcgi一般是快于cgi的

开始配置

首先在刚才的配置中的最后一个大括号前添加如下代码:

location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                include fastcgi_params;
        }

然后在你刚才创建的虚拟主机根目录下创建一个文件夹,一般叫cgi-bin,当然你想叫什么都行
并在这个cgi-bin文件夹里创建一个名为index.php的文件,对它进行编辑,随便echo点什么,如:

<?php
echo "Hello World!";
?>

然后保存退出

接着重新加载一下nginx和fpm的配置(fpm是基于php的一个fcgi管理程序)
service php7.0-fpm reload nginx reload

在你的浏览器中访问你的域名/cgi-bin/index.php,其中cgi-bin改为从虚拟主机根目录到index.php的相对路径
如果浏览器中出现hello world,恭喜你成功了.
如果出现403,500,502等错误码,可以试试以下解决方法:

  • 打开nginx目录下的fastcgi_params配置文件:vim /etc/nginx/fastcgi_params
  • 在文件的最后加上这两句:
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
    fastcgi_param PATH_INFO                $fastcgi_script_name;  
  • 保存退出,并重新加载nginx和fpm的配置

  • 配置好服务器后可以看下篇:用php实现微信订阅号自定义菜单和自动回复

虚拟主机配置完整代码

server {
        listen 80;                                              #监听端口
        root /var/www/wechat;                                   #虚拟主机根目录
        server_name elatisy.top www.elatisy.top;                #站点域名,可用空格隔开来指定多个域名
        index index.html index.php;                              #站点主页,可用空格隔开指定多个,优先级依次递减
        access_log /var/log/nginx/access.log;                   #指定访问日志
        error_log /var/log/nginx/error.log;                     #指定错误日志,代码调试全靠它
        location / {
                try_files $uri $uri/ /index.php?$query_string;
                client_max_body_size    10m;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                include fastcgi_params;
        }
}

一些需要用到的终端和vim指令

写在这里以免读者们看的同时还要各种百度

终端指令

  • 进入目录
    cd /path/to/where/you/want/go
    可以使用TAB键进行自动补全,但要求先输入一部分字符,让系统知道你想要去的路径

  • 列出目录下的文件
    ls
    若加了个-a,变成ls -a则会连一些隐藏文件也显示出来

  • 列出目录下的文件的权限:
    ll

  • 添加用户
    useradd newuser
    其中newuser替换为新用户的用户名
    输入之后系统会让你输入一些用户的基本信息,刚开始是密码,这个是必要的,接下来是姓名,电话等,直接按回车就行了.

  • 移交某个文件/目录的用户权限
    chown newowner:newowner /path/to/file/or/dir
    其中newowner:newowner :前为用户组,:后为用户名,替换为你想要移交的用户,由于用户的默认用户组是它自己,所以这里两个是一样的.如果你手动设置了新用户的用户组,请按实际更改.
    /path/to/file/or/dir替换为目标文件或目录.
    如果你想要将这个目录下的子目录和文件的用户都替换.可以在chown后面加个-R(一定要大写),变成:
    chown -R newowner|newowner /path/to/file/or/dir
    其实-R就表示递归.

  • 更改某个文件/目录的权限
    和上面类似,只不过chown变为chmod,newowner:newowner变为新权限,如:
    chmod 755 /path/to/file/or/dir
    就将/path/to/file/or/dir所指向的文件或目录的权限变更为755.
    相似的,chmod -R 755 /path/to/file/or/dir表示递归更改权限

  • 搭建软链接
    可在两个目录下搭建某个文件的软链接,这样你在更改其中一个时,另一个会随着更改,这样就易于管理.
    样例:
    ln path/to/dir1/file1 path/to/dir2/file2

  • 复制文件
    这步其实在ftp软件下做会方便很多,但我还是说一下吧
    cp path/to/dir1/file1 path/to/dir2/file2
    这样就在path/to/dir2下创建了file1的一个复制file2

  • 更改文件名
    这里用的是移动文件的mv指令.当然也可以实现重命名的操作
    实例:
    mv file1.php file2.QAQ
    这样就把file1.php重命名为了file2.QAQ

开启关闭软件服务相关

服务器中会预装systemctlservice,两者功能类似,如果都没有安装,可以根据提示使用apt-get install来安装

  • 开启软件服务
    例如我要开启nginx,则可以使用以下命令:
    systemctl start nginxservice nginx start
    如果提示已启动,可以使用restart来重启

  • 重启软件服务
    如果要重启nginx,可以使用以下命令:
    systemctl restart nginxservice nginx restart

  • 停止软件服务
    如果要停止,则可以:
    systemctl stop nginxservice nginx stop

  • 重新加载配置文件
    使用这条指令可以不停机地更新配置文件:
    systemctl reload nginxservice nginx reload

  • 查看软件状态
    如果你的配置文件中有错误代码,开启软件会失败,这时查看软件状态可以得到一些提示信息:
    systemctl status nginx
    service版本的好像没有(吧?)
    当然这只会显示缩略信息,要是想查看完整信息,可以在后面加一个-l,变成systemctl status nginx -l

vim指令

  • 开启vim编辑模式
    使用vim即可在终端下编辑文本.使用
    vim example.QAQvi example.QAQ来进入编辑example.QAQ文件的界面.
    如果想要编辑不在当前目录下的文件可以填上相对路径或者绝对路径
    vim relative/path/to/file
    vim /absolute/path/to/file
    下面将介绍一些vim的基本指令

vim的操作和其它编辑器几乎完全不一样,所以不要下意识地按ctrl+c等这样的操作.

命令模式

  • 插入模式
    在进入插入模式前是无法开始编辑文本的.按a即可进入插入模式并开始编辑文本
    要退出插入模式回到命令模式,只需敲击ESC

  • 撤销
    即使在插入模式下也无法像在其它编辑器里一样按ctrl+z来撤销,这是因为ctrl相关的指令和命令行指令一般都是冲突的,所以vim就弃用了ctrl键.
    若不小心输错了,可以先按ESC退出插入模式,然后按u来撤销.

  • 粘贴
    在命令模式下,按p可以将剪贴板中的内容粘贴到文件中

  • 删除
    x即可删除光标后的一个字符,而按X(即shift+x)即可删除光标前的一个字符,而nx(n替换为数字)为删除光标后的n个字符.
    其实可视化模式和插入模式下也可以进行删除操作.

可视化模式

v可以进入可视化模式.其实也就是一个可以让你选定多个文字的模式.
进入可视模式后按方向键即可选择文本.
ESC可以退出可视化模式.

  • 复制
    在可视化模式下选中文本后按y即可将选中的文本复制到剪贴板

  • 剪切
    在可视化模式下选中文本后按d即可将选中的文本剪切到剪贴板

末行模式

在命令模式下按:即可进入末行模式.

  • 保存和退出
    在末行模式下输入q即可不保存退出.
    若你进行了更改,vim会提醒你是否放弃更改.

若你要放弃更改,可以在末行模式下输入q!来强行退出.
若你要保存退出,则可以输入wq来保存并退出.

查找

在命令模式下输入/即可进入查找模式
接着输入你要查找的文本(区分大小写)
例如我要查找User,那么我就要在查找模式下输入User
查找模式支持正则表达式,要查找特殊字符请记得使用转义符\
由于我对正则表达式了解不多在此也不做多余的介绍了

标签: none

添加新评论