今天正式release了zPhal第一个正式版,接下来会不断维护更新。
先放个地址:ZpGuo/zPhal

什么是zPhal

zPhal是我这段时间一直在进行的一个开源项目,基于Phalcon开发的博客系统,是全功能的动态博客系统。

为什么要做这么一个东西呢?首先我是想开发一个从头到尾自己操刀的项目,然后想学习Phalcon这个框架,学习设计模式的应用,以及想抛弃一直在用的臃肿的WordPress(即使我优化过后打开也很快),希望功能多一点而不是静态博客。这样一来,不如就搞一个开源的博客系统吧,于是有了zPhal,每天下班抽空就开始写,我的目标是:CMS系统的功能,静态博客的效果。

我在开发的时候考虑得挺多,尽量将代码进行优化,但是我是第一次用Phalcon来做一个项目,多多少少有点问题,欢迎拍砖。开发过程却是也有很多可以改进和优化的地方,但是由于时间问题,没有全部照顾到,但是我大部分都写了TODO,将在以后的版本进行改进。数据库设计部分沿用了WordPress的设计,因为一开始我是想能够兼容WordPress方便博客迁移,但是WordPress的数据库有些地方设计得我自己也不是很喜欢,但是对于博客这种小型系统,也就没关系了。

前端方面,我保留了可以演进成主题模板的方式,但是还是控制器和试图结合。也没有采用现在大热的React,vue之类的,其实一开始是想用vue来做,后来还是没有,依旧是用PHP进行渲染,主要是因为:

  • 作为后端程序猿学习Vue还需要时间
  • 博客系统可能比较注重SEO,而单页面模式优化起来比较麻烦
  • 结合Phalcon开发的系统完全可以用PHP渲染将性能最大化

但是将PHP从View层分离开其实是一个很好的选择,方便主题开发,以后可能会从这方面改进。

目的

其实开发这款软件主要是我自己要用,开源出来如果有人喜欢更好。不过因为是C拓展的框架,而且使用了Redis,估计这个门槛一下就……。那作为一个Phalcon的学习demo也是好的嘛~

为什么选择Phalcon

PHP框架很多,为什么选择Phalcon这款框架呢。一般我们选择一款框架会考虑很多因素,并非是这个框架好不好。比如公司叫我两天完成一个项目,急,那我可能会选择用TP速撸。我个人比较喜欢性能高一点,要的就是爽,虽然不管什么框架进行优化,都不会太差,往往性能瓶颈不在PHP这里,但是用Phalcon我们可以省去很多优化的时间,而且性能在某些时候确实是有体现,我觉得现在web的发展方向会越来越重视高并发高可用,所以Swoole和Phalcon是我计划中的两个关注点。而Phalcon的问题在于学习成本,但是,其实很多问题你只需要google一下就可以找到答案,大部分在Stack Overflow或者官方论坛上都有,主要是国内的资料比较少,圈子也小。

最后的效果如何呢?看一下这个动图:
zphal-demo

截的时候不知道为什么截不到鼠标,可以在我博客体验:咖啡与代码

功能特性

来瞄一眼后台侧栏:

基本功能已经实现的有:

  • 文章板块
  • 页面板块
  • 专题板块
  • 媒体板块
  • 链接板块的添加删除等操作
  • 用户管理
  • 设置功能

基本上该有的功能都有了,除了一些还在开发计划,例如评论功能。

我还融入了一些我的想法,比如专题这个功能,我希望能够将我的知识进行归类;比如设置作品(GitHub作品)方便进行展示等等。

总的来说,我称之为“全功能”博客系统。

开发计划

计划中的功能有这些,未来要实现的功能:

  • 评论板块
  • 发送邮件
  • 后台信息展示和登录状态操作条
  • 菜单设置
  • 链接展示
  • 数据库备份
  • ACL权限管理

可能会考虑的功能:

  • 主题功能
  • 插件功能
  • 侧栏实现自定义

其实精力有限,可能进展会比较缓慢,因为要工作,要学习,要生活,当一个精致的码农呀;如果没什么人用的话,可能一些功能会阉割掉,最后完成一个我自己用着舒服的版本,一些必要功能是肯定会继续的。

怎么使用

运行环境

环境要求

  • PHP 7.0+
  • Phalcon 3.0.0+
  • MySQL
  • Nginx or Apache
  • Redis
  • Composer

使用Docker搭建环境(推荐)

因为依赖Redis等,推荐用Docker统一进行管理,更加方便。
这里有ZPhal对应的docker-file供参考:ZpGuo/zPhal-dockerfiles

安装

下载

下载项目 release的压缩文件 或者clone项目。
GitHub地址:ZpGuo/zPhal

运行Composer

该项目依赖composer。
进入项目根目录,执行:

composer update

导入数据库

因为没有做安装引导,所以需要手动导入数据库。
创建数据库,并导入初始数据库;SQL文件位于schema目录下,文件名是zphaldb.sql。
环境配置

环境配置

复制根目录下的.env.example文件并命名为.env文件;打开文件,修改配置为你环境对应的配置,注意在Docker环境下的配置有所不同。

Webserver配置

webserver可以使用Apache或者nginx。

Apache服务器

项目中已经有.htaccess文件;

Nginx服务器

对于Nginx服务器,下面是一个供参考的配置:

server {
    listen        80;
    server_name www.zphal.com zphal.com;

    ##########################
    # In production require SSL
    # listen 443 ssl default_server;

    # ssl on;
    # ssl_session_timeout  5m;
    # ssl_protocols  SSLv2 SSLv3 TLSv1;
    # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    # ssl_prefer_server_ciphers   on;

    # These locations depend on where you store your certs
    # ssl_certificate        /var/nginx/certs/default.cert;
    # ssl_certificate_key    /var/nginx/certs/default.key;
    ##########################

    root /data/www/zPhal/public;
    index index.php index.html index.htm;

    charset utf-8;
    client_max_body_size 100M;
    fastcgi_read_timeout 1800;

    location / {
        # Matches URLS `$_GET['_url']`
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri =404;

        #fastcgi_pass  unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_pass  php-fpm:9000;

        fastcgi_index /index.php;

        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED /data/www/zPhal/public/$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME /data/www/zPhal/public/$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

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

开始使用

一切准备就绪,就可以开始使用了。

在项目路劲后加/admin可进入后台登录页面;初始账号为admin,密码为admin(线上环境请不要再使用初始账号,可以在后台进行修改)。