从脱离一键包至今已有一段时间,在这个过程中积累了不少经验,现总结一手以留未来翻阅。
前言
现在几乎所有的一件包都是采用编译的方案来安装相关套件,虽然其兼容性不错,但仍有些许不足
- 搭建速度慢,占用资源大。对于小鸡来说,编译的过程需要占用大量的cpu和ram,并且需要一段时间
- 配置不够灵活。以PHP为例,PHP拥有大量的模块,但是在编译的过程中只能一气呵成,不能灵活增减 所以,我将会利用debian强大的包管理器APT来安装相关组件。
#环境安装 APT的使用我就不再赘述,直接放命令出来吧。
apt install nginx php-fpm mariadb-server
这里的PHP我使用的是fpm,当然了,cli也不是不行,只是我更喜欢用sock文件对接的fpm罢了。nginx的配置文件中同样提供了cli的配置。
因为mysql闭源,被移除了apt源,所以这里用mariadb代替,它仍然支持mysql的登录。
配置nginx和php
这是nginx的文件树
root@Neat:/etc/nginx# tree
.
├── conf.d
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── modules-available
├── modules-enabled
│ ├── 50-mod-http-auth-pam.conf -> /usr/share/nginx/modules-available/mod-http-auth-pam.conf
│ ├── 50-mod-http-dav-ext.conf -> /usr/share/nginx/modules-available/mod-http-dav-ext.conf
│ ├── 50-mod-http-echo.conf -> /usr/share/nginx/modules-available/mod-http-echo.conf
│ ├── 50-mod-http-geoip.conf -> /usr/share/nginx/modules-available/mod-http-geoip.conf
│ ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
│ ├── 50-mod-http-subs-filter.conf -> /usr/share/nginx/modules-available/mod-http-subs-filter.conf
│ ├── 50-mod-http-upstream-fair.conf -> /usr/share/nginx/modules-available/mod-http-upstream-fair.conf
│ ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
│ ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
│ └── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
├── nginx.conf
├── proxy_params
├── scgi_params
├── **sites-available**
│ └── default
├── **sites-enabled**
│ └── default -> /etc/nginx/sites-available/default
├── snippets
│ ├── fastcgi-php.conf
│ └── snakeoil.conf
├── uwsgi_params
└── win-utf
6 directories, 24 files
其中,加粗部分的sites-enable、sites-available是有关站点配置文件的目录
enable目录意为启用,其包含的链接将指向available(可用),这样就可以方便得控制站点的启停
当然,你也可以不遵循这个原则,nginx不会报任何错误,只是维护起来可能会遇到些许问题
一般来说 default文件包含了最标准的配置信息,如SSL、PHP等
所以当我们需要建立其他站点时,可以将default文件复制一份,再在副本中更改其hostname即可
但是当我们兴冲冲地将PHP文件放入root时,却发现弹出了下载..
这是因为Nginx并不知道该怎么处理PHP文件,所以只好将PHP发还给你
现在,我们需要通过更改配置文件的方式让Nginx“学会”与php-fpm程序沟通并处理PHP,来输出页面
在大约56行的地方,有一串关于PHP的配置
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
这里,我们需要取消location与底部括号和中间与当前环境所对应的注释即可
因为我使用的是php-fpm,所以我需要取消第五行的注释
至于第二行的fastcgi,不取消的话有个别PHP程序会无法运行
完成之后使用systemctl restart nginx
来重启nginx,现在PHP就会正常被处理啦
至此,PHP与Nginx的对接已经成功 如果在重启nginx后浏览器仍然在尝试下载,请尝试清除浏览器缓存
截图中的PHP程序源于项目Pi-DashBord
#配置数据库 在初次使用数据库的时候,我们需要对其进行初始化
mysql_secure_installation
第一步,程序询问你的数据库root密码,但是我们是初次配置,root密码并不存在,留空回车
Enter current password for root (enter for none):
第二步,程序询问是否需要设置root密码
Set root password? [Y/n]
第三步,程序询问是否删除匿名用户(这里不删除的话会有安全问题)
Remove anonymous users? [Y/n]
第四步,程序询问是否禁用远程登陆root的权限(如果没有闲的没事登root的习惯的话,建议禁用)
Disallow root login remotely? [Y/n]
第五步,程序询问是否移除“test”数据库(默认情况下,test库是允许所有人访问的,这里容易出现安全问题,建议删除)
Remove test database and access to it? [Y/n]
最后,程序询问是否立即reload数据库并使配置生效
Reload privilege tables now? [Y/n]
当看到Thanks for using MariaDB!
输出时,mariadb的初始化便到此结束
当我们使用MySQL认证登录数据库时,即使密码正确,我们会发现其拒绝访问
这是因为MariaDB默认并没有启用MySQL的认证,所以我们需要手动启用
使用mysql或者mariadb命令可以进入数据库的shell
然后执行以下命令
update mysql.user set plugin = 'mysql_native_password' where User='root';
flush privileges;
exit
然后,使用systemctl restart mariadb
重启数据库程序
现在,再重新登录,就不会被拒绝访问啦
另外,默认MariaDB只将3306端口绑定在了本地
如果需要更改,可以在/etc/mysql/mariadb.conf.d/50-server.cnf
中进行