在aliyun的Centos上发布php程序

1. 选择合适的操作系统

和很多喜欢编译安装的人不同,我认为rpm安装的软件包比自己编译安装的要稳定得多,而且运行时比Docker安装的程序速度更快。所以如果我用到了稍微新一些的软件包,那么我会更倾向于使用openSUSE或者FreeBSD,因为它们自带的软件包比较新,如果自带的包比较旧的话,可以使用半官方源更新。而Centos的非官方源实在是不给力。但是这次因为要发布的程序使用了很古老的phalcon-2.0.13框架,而新版的操作系统所使用的phalcon框架都是更新的3.x版或者4.x版,所以为了管理方便,我没有选择Centos8.x,而是选择了7.9

phalcon框架在2.x时代包含有\Phalcon\Mvc\User\Plugin类,而从3.x开始这个类从官方移除了,所以我只能留守在古老的2.x版本,毕竟这个程序是多年前开发的,很久没有跟进,现在因为特殊需求所以又要使用一段时间。

2. 安装web服务器软件

2.1 安装remi源。

Centos官方自带的php版本非常古老,为了能够在Centos中使用高版本的php,有志愿者建立了remi源,remi源中包含了很多高版本的php相关的rpm,可以安装在古老的Centos版本上

# 添加epel源
yum install epel-release
# 添加remi源,如果没有安装epel源,则会出现依赖问题,所以必须要先安装epel源
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

remi源默认是不启用的,所以要先启用

yum-config-manager --enable remi-php56

或者也可以手动编辑

vim /etc/yum.repos.d/epel.repo

找到其中的enable=0改成enable=1

然后刷新一下yum数据库

yum clean all
yum update
yum makecache

2.2 安装apache服务器

yum install httpd mod_ssl mod_perl mod_auth_mysql

2.3 安装php组件

安装phalcon

yum install php-phalcon2

以及其他php组件

yum install php php-pear php-gd php-mbstring php-memcache php-mcrypt

Centos的rpm中已经包含了自动配置脚本,只要用rpm安装apache就会自动识别php插件

特别说明一下,yum的remi源自带了fastmirror插件,会自动测试不同的镜像的速度,然后从最快的站点下载。虽然是在aliyun上安装的服务器,但是测试结果往往是清华大学的镜像最快。

2.4 配置防火墙

为了保证服务器的安全,需要使用firewalld服务,我没有使用iptables。

开启防火墙

systemctl start firewalld

打开http服务器使用的80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

刷新防火墙规则

firewall-cmd --reload

看一下是否开启

firewall-cmd --zone=public --list-ports

2.5 开启apache测试页面

systemctl start httpd

然后在浏览器里输入服务器的IP地址,按下回车键,如果一切顺利就会出现apache的默认页面

3. 数据库软件

3.1 数据库服务器的安装

我选择的数据库是mariadb,兼容mysql。是红帽系发行版默认的替代mysql的软件。还要顺道安装php-mysql插件

yum install mariadb mariadb-server php-mysql

启动mariadb服务器

systemctl start mariadb

3.2 mariadb的配置

默认安装的mariadb是不可以登录的,所以需要做一些简单配置

mysql_secure_installation

按照提示一步步走就行,第一步是问用户输入root密码,刚开始安装的时候是没有密码的,所以直接敲回车即可。剩下的都是常规问题,正常操作即可。

然后需要对mariadb做一些详细的配置,网络上流传的大多数配置方法都是编辑/etc/my.cnf,这个文件是整个mysql的全局配置文件,可是我更喜欢编辑/etc/my.cnf.d/目录下的几个文件,这样可以把配置做的更有针对性一些

配置mariadb服务器的字符集为utf8

vim /etc/my.cnf.d/server.cnf

找到[mysqld]段,修改为。

[mysqld]
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake=true
init_connect='SET collation_connection = utf8mb4_unicode_ci'

要注意的是mysql和mariadb提供的utf8其实不是真正的utf8,而utf8mb4才是真正的utf8。

这两者之间的区别可以参考官方文档

https://dev.mysql.com/doc/refman/5.6/en/charset-unicode-utf8mb4.html

或者中国的解释

https://blog.csdn.net/qq_17555933/article/details/101445526

https://blog.csdn.net/u010584271/article/details/80835547

为了保证客户端和服务器的通信中字符集不会出错,在/etc/my.cnf.d/client.cnf中增加一段

[mysql]
default-character-set = utf8mb4

然后

systemctl restart mariadb

3.3 具体数据库的配置

mysql -h localhost -u root -p

登录到服务器上,注意这里的密码不是操作系统登录的密码,而是之前mysql_secure_installation命令中输入的密码

创建用户

create user 'username'@'%' identified by 'passwordd';

这里的%是指任意IP均可访问,如果考虑安全,可以修改为localhost

create database databasename;

这里对于用户名和数据库名给的是两个不同的名字,不过一般为了管理方便,都是给相同的名字

grant all on databasename.* on 'username'@'hostname';

这里的hostname相当于之前的%,也就是当初创建用户时使用的主机名

随后启用用户权限修改

flush privileges;

然后退出数据库服务器上root用户的登录

\q

再以之前创建的用户登录数据库服务器

mysql -h localhost -u username -p

导入SQL文件

use databasename
source /path/to/file.sql

如果SQL文件中包含了用户创建、数据库创建等操作,那么可以使用root来进行source操作,但是一般来说这类操作都是不包含在SQL文件里的,因为数据库管理员root一般不会管这类事情。所以一般都是普通用户登录到自己的数据库上,然后导入SQL文件。

这样就等于是把相关的数据库准备好了

4. 安装缓存服务

现代缓存服务一般用redis居多,不过这个程序开发的年代比较早,所以用的是memcache

yum install memcached
systemctl start memcached

5. 部署php程序

5.1 上传php程序

使用winscp登录到服务器上,然后直接上传文件即可。要注意的是,winscp在显示服务器上的文件时,不会显示隐藏文件。

在linux系统中,隐藏文件就是以“.”开头的文件。而对于这个php程序而言,因为使用了restful风格的路由器,所以在很多地方放置了.htaccess文件,里面包含了重定向的信息,这个文件是隐藏的。而因为在不同的位置需要不同的重定向方式,而nginx虽然可以通过include把.htaccess文件内的内容读入并起效,但是无法针对不同的目录采取不同的重定向策略。所以这里还是用了apache作为web服务器,apache可以针对不同的目录下的.htaccess文件进行不同规则的重定向。

另外由于该程序是在windows下开发,而windows对大小写不敏感,所以留下了一些隐患,在Linux服务器上才会暴露。所以要仔细清查。

还有就是git管理中,上传到服务器上时不会上传空目录,而php涉及到文件操作时,出于管理和安全的考虑,一般都会把文件上传设定到一个特定的目录,默认情况下这个目录是空的。如果直接从git服务器拉取php程序,这个目录就会缺失,导致涉及到文件上传功能时出错。所以要在git中创建一个空目录,同时在这个目录下创建一个点开头的空文件(Linux下的隐藏文件)以确保该目录在git过程中不会丢失,常见的是.keep文件。

虽然web服务器默认的目录是/var/www,但是从安全考虑,一般都是放在/home/username目录下。创建一个普通用户,然后在普通用户的家目录创建一个目录放置php程序。然后通过调整web服务器的设置来让web服务器读取这个目录下的文件。

5.2 配置web服务器

根据

https://blog.csdn.net/weixin_33690963/article/details/91802376

做如下调整

编辑/etc/httpd/conf/httpd.conf

注释掉

<Directory />
    AllowOverride none
    Require all denied
</Directory>

修改DocumentRoot与Directory

DocumentRoot "/home/username/html"
 
<Directory "/home/username/html">
    Options Indexes FollowSymLinks
    AllowOverride all # 原本这里是None,但是为了让.htaccess实现restful路由,必须要开启重定位
    Require all granted
</Directory>

apache的httpd程序启动时默认是apache用户来启动,这个用户的访问权限是不能覆盖到/home/username目录的,所以直接访问会出现权限错误。所以这里要修改User与Group

User username
Group groupname

这样httpd程序就会以username这个普通用户来启动,就可以访问到/home/username/html目录下的所有内容了

因为php是通过rpm安装的,所以不需要修改http.conf文件以让apache识别出php来

可能是aliyun上面的Centos做过特殊配置,我并没有遇到任何selinux的问题

经过以上配置,就可以在远程通过

http://ipaddress/

来访问aliyun上面架设的php站点了。如果需要用域名访问,可以到域名服务商处注册域名指向这个服务器的IP地址,然后在http.conf中修改

ServerName www.example.com:80

就可以了

如果需要在一台服务器上架设多个站点,那么可以参考

https://blog.csdn.net/silent_missile/article/details/99395925

中关于VirtualHost的部分

5.3 自动运行服务

为了运行这个php站点,实际上需要4个服务:httpd、mariadb、memcached、firewalld,最好是把它们几个加入开机自动运行,这样避免维护的时候忘记

systemctl enable httpd
systemctl enable mariadb
systemctl enable memcached
systemctl enable firewalld

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值