Tiny Core Linux 是一个轻量化的Linux系统,最新的12.0版本图形界面只有 26 MB,由于设计得极端精简,甚至安装完整操作系统的应用程序都没有被包含在内(不过需要的话可以从 Tiny Core 的软件仓库下载)。
本系统在安装完ngnix+php+mysql后,整个VM虚拟机镜像文件,才不到70M,真正是小巧玲珑,这也正是使用这个系统的魅力所在。
一、硬盘安装
- 可以从官网:http://www.tinycorelinux.net/ 下载所需要的ISO镜像文件,本次使用的是v12.0的32位版本。
- 使用Vware创建一个新的虚拟机,创建时内存可适应调大一些,因为Tiny Core Linux是加载到内存中运行的,内存太小可能在安装mysql等软件后造成运行失败。虚拟机硬盘需要改为IDE模式(SCSI模式不能支持硬盘安装)。
- 开启虚拟机进入桌面系统,点击下方的Apps图标,会提示首次运行是否选择最快的镜像,我们可以点击“Yes”,软件将自动检测最快的软件仓库镜像,国内一般会检测到mriior.163.com网易源。
进入软件仓库后,点击“Apps“—“Cloud(Remote)”—“Browse“后,输入tc-install后按回车键搜索,在找到的列表中选择“tc-insatll-GUI.tcz”并安装。
其中的参数:vga=788 为 800*600 分辨率的桌面,如果用 vga=791 则开启 1024*768 分辨率的桌面。如果不想让系统自动登录,可以加上noautologin vga=788,然后安装进入系统后,可以使用 sudo passwd tc与 sudo passwd root来修改密码,最后需要在 /opt/.filelist 文件中加入 etc/passwd 与 etc/shadow,用于持久化密码相关文件。这样处理后,进入系统将会停留在登录界面,如果使用账号 tc 登录,就会进图形界面,如果使用 root 登录,则会进入命令行。关机后,硬盘的安装已经完成,我们可以将虚拟机中的CD光驱直接删除,然后重新启动从硬盘加载运行到桌面。
二、Nginx安装与配置
- 打开桌面上的Apps图标,需要重新运行最快的软件源检测,之后搜索nginx并安装,就可以将nginx软件安装到硬盘中。
- 设置相关配置文件:打开桌面最右边图标,终端Terminal后, 输入以下命令,用于进入相应文件夹,并复制配置文件。
-
cd /usr/local/etc/nginx/
-
sudo cp original/nginx.conf.default nginx.conf
-
sudo cp original/fastcgi_params.default fastcgi_params
-
sudo cp original/mime.types.default mime.types
-
sudo mkdir /usr/local/html
-
sudo cp /usr/local/lib/nginx/html/index.html /usr/local/html
复制好配置文件后,我们可以尝试启动nginx服务,使用命令:
sudo /usr/local/etc/init.d/nginx start
但是系统提示:
可以看到服务启动失败,我们需要改动一下nginx.conf文件,将access_log日志文件关闭或重新设置路径。运行命令:
sudo vi /usr/local/etc/nginx/nginx.conf
使用 vi 编辑器,在http段中,加入 access_log off;来关闭日志文件,也可以用下方命令自动替换。
sudo sed -i "s/#access_log /access_log off; #access_log /g" /usr/local/etc/nginx/nginx.conf
修改完毕后,再使用sudo /usr/local/etc/init.d/nginx start启动服务,应该就可以正常启动了,我们可以使用 ifconfig 查看 虚拟机的 IP 地址,在本机中使用浏览器查看。
打开浏览器,使用 IP 地址浏览,可以看到nginx的欢迎网页,说明nginx已经正常工作了。
-
- 持久化nginx的配置与网页:因为Tiny Core Linux是加载到内存运行的,如果我们不做其它配置,当你重启你的虚拟时后,你会发现所有的nginx配置文件与网页都不见了。我们可以在/opt/.filetool.list文件中,将需要持久化的文件或文件夹加入到该文件中,在关闭系统时,Tiny Core Linux会自动保存这些文件,下次启动时再加载。
-
echo “usr/local/etc/nginx/nginx.conf” >> /opt/.filetool.lst
-
echo “usr/local/etc/nginx/mime.types” >> /opt/.filetool.lst
-
echo “usr/local/etc/nginx/fastcgi_params” >> /opt/.filetool.lst
-
echo “usr/local/html” >> /opt/.filetool.lst
-
- 开机自动启动nginx服务:Tiny Core Linux的开机自启动脚本为/opt/bootlocal.sh,我们只要在该脚本中加入nginx的启动命令即可。
sudo vi /opt/bootlocal.sh
sudo /usr/local/etc/init.d/nginx start
保存文件后,再重启虚拟机,nginx将会自动启动了。
三、PHP 的安装与配置
- 打开桌面上的Apps图标,选择“Apps”—“Cloud(Remote)”—“Browse”后,搜索“php”,可以找到PHP-7.4与PHP-8.0,我们使用7.4版,分别安装以下安装包。
-
php-7.4-cli.tcz
-
php-7.4-ext.tcz
-
php-7.4-fpm.tcz
-
以下插件也需要安装
-
libxml2.tcz
-
libffi.tcz
-
pcre2.tcz
-
- 设置相关配置文件:打开桌面最右边图标,终端Terminal后, 输入以下命令,用于进入相应文件夹,并复制配置文件。
-
sudo cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
-
sudo cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
-
sudo cp /usr/local/etc/php7/php.ini-sample* /usr/local/etc/php7/php.ini
尝试使用命令:sudo /usr/local/etc/init.d/php-fpm start 启动PHP-FPM服务,发现还有两外错误,一是php中默认的hash.so模块加载失败,二是用户组nobody没找到。
sudo /usr/local/etc/init.d/php-fpm start
打开php.ini文件,找到hash扩展,禁用它,其它需要用到的扩展可以启用,然后保存文件,也可以使用下方命令行直接替换处理。
sudo vi /usr/local/etc/php7/php.ini
-
sudo sed -i “s/extension=hash/;extension=hash/g” /usr/local/etc/php7/php.ini
-
sudo sed -i “s/;extension=mysql/extension=mysql/g” /usr/local/etc/php7/php.ini
-
sudo sed -i “s/;extension=pdo_mysql/extension=pdo_mysql/g” /usr/local/etc/php7/php.ini
系统中没有 nobody 这个组,我们可以直接在 /etc/group 文件最后加上一个组,然后保存文件并把 /etc/group 文件加入到持久化列表中。
-
echo “nobody:x:65534:” >> /etc/group
-
echo “etc/group” >> /opt/.filetool.lst
最后再使用命令:sudo /usr/local/etc/init.d/php-fpm start 启动PHP-FPM服务,发现已经可以正常启动了。
-
- 持久化php的配置与自启动PHP-FPM服务
-
echo “usr/local/etc/php7/php.ini” >> /opt/.filetool.lst
-
echo “usr/local/etc/php-fpm.d/www.conf” >> /opt/.filetool.lst
-
echo “usr/local/etc/php-fpm.conf” >> /opt/.filetool.lst
编辑自动启文件 /opt/bootlocal.sh,加入启动PHP-FPM的命令:sudo /usr/local/etc/init.d/php-fpm start
sudo vi /opt/bootlocal.sh
sudo /usr/local/etc/init.d/php-fpm start
-
配置 nginx 文件,用于支持 php 文件,先在 html 根目录中创建一个 index.php 文件,内容为: <? phpinfo(); ?>
-
sudo chmod 777 /usr/local/html
-
echo “<?php phpinfo(); ?>” >> /usr/local/html/index.php
然后,编辑 nginx.conf 文件,添加 php 的支持代码,最后保存文件
sudo vi /usr/local/etc/nginx/nginx.conf
-
location ~ \.php$ {
-
include fastcgi_params;
-
fastcgi_param SCRIPT_FILENAME /usr/local/html$fastcgi_script_name;
-
fastcgi_pass 127.0.0.1:9000;
-
}
也可以使用以下命令行直接替换好相应的内容:
-
sudo sed -i “s/index.html index.htm/index.php index.html index.htm/g” /usr/local/etc/nginx/nginx.conf
-
sudo sed -i “s/#error_page/location ~ \.php\$ {\n include fastcgi_params;\n fastcgi_param SCRIPT_FILENAME \/usr\/local\/html\$fastcgi_script_name;\n fastcgi_pass 127.0.0.1:9000;\n }\n #error_page/g” /usr/local/etc/nginx/nginx.conf
修改好文件后,运行命令让 nginx 重新加载配置文件
sudo /usr/local/etc/init.d/nginx reload
然后在本机浏览器中,查看网页效果,如果出现了 phpinfo() 的界面,说明 php 文件已经正常启用。
四、数据库mysql的安装
- 在Tiny Core Linux新的版本中,已经弃用mysql数据库,转而启用了mariadb数据库,打开桌面上的Apps图标,之后搜索mariadb可以找到10.4与10.5两个版本,可以将mariadb-10.5软件安装到硬盘中,同时安装一下liblz4.tcz 与 pcre2tcz 软件包。
-
mariadb-10.5.tcz
-
liblz4.tcz
-
pcre2.tcz
-
- 初始化数据库:我们将默认的数据库存放在 /home/tc/mysql/data 文件夹中,所以先创建相应的文件夹,再使用mysql_install_db来生成初始化的数据库信息。
-
sudo mkdir /home/tc/mysql
-
sudo mkdir /home/tc/mysql/data
-
sudo /usr/local/mysql/scripts/mysql_install_db –user=root –basedir=/usr/local/mysql –datadir=/home/tc/mysql/data
如果是Tiny Core Linux v10或v11版本中,初始化时可能会碰到错误提示:
可以按提示先创建一个 /auth_pam_tool_dir 文件夹,然后再初始化数据库信息,之后再删除该文件夹:
-
sudo mkdir /auth_pam_tool_dir
-
sudo /usr/local/mysql/scripts/mysql_install_db –user=root –basedir=/usr/local/mysql –datadir=/home/tc/mysql/data
-
sudo rm -r /auth_pam_tool_dir
-
- 编写 my.cnf 文件,设置好数据库的配置参数:
先删除原来的 my.cnf 文件-
sudo rm /usr/local/etc/mysql/my.cnf
-
sudo vi /usr/local/etc/mysql/my.cnf
然后将新的文件内容输入到文件中,这儿使用了比较简单的 my.cnf 文件,更详细文件可以自己整理。
-
[mysqld]
-
bind-address=0.0.0.0
-
port=3306
-
user=root
-
basedir=/usr/local/mysql
-
datadir=/home/tc/mysql/data
-
socket=/var/run/mysql.sock
-
log-error=/home/tc/mysql/data/mysql.err
-
pid-file=/var/run/mysql.pid
-
character_set_server=utf8mb4
-
symbolic-links=0
-
innodb_log_file_size = 5M
将 my.cnf 加入持久化:
echo "usr/local/etc/mysql/my.cnf" >> /opt/.filetool.lst
-
- 启动 mysql 服务,可以使用服务方式:
sudo /usr/local/etc/init.d/mysql start
如果不编写 my.cnf 文件,也可以直接使用命令行方式启动数据库:
sudo /usr/local/mysql/bin/mysqld_safe --basedir=/usr/local/mysql --datadir=/home/tc/mysql/data --pid-file=/var/run/mysql.pid --socket=/var/run/mysql.sock --innodb_log_file_size=5M --port=3306 --user=root &
启动后,可以使用 netstat -l 查看监听端口的情况,能看到mysql或3306端口已经在监听状态,就说明服务启动成功了。
- 开机自启动数据库,将启动的命令行,加入到 /opt/bootlocal.sh,然后保存。
sudo vi /opt/bootlocal.sh
- 修改数据库root密码,首次登录我们可以设置一下密码,使用下面命令登录时,需要输入新设置的 root 密码:
sudo /usr/local/mysql/bin/mysql -uroot -p
之后,我们可以根据情况在命令行中创建需要的数据库等操作了。
五、数据持久化的问题
- 在上面的安装过程中,我们发现我们的文件大都存放在 /home,/usr/local 等文件夹中,其实这些文件夹都是被 Tiny Core Linux 加载到内存中的,所以当文件不多的时候问题还不大,如果文件增加后,特别是网站文件与数据库文件容量增大后,就会大量占用内存,会造成内存不足而出现不同的问题。所以我们需要考虑将网站与数据库直接存放在硬盘而不是内存中。在Tiny Core Linux中,第一个硬盘会挂载到 /mnt/sda1 ,我们可以直接将网站与数据库的文件夹存放在这个下面,这样就不会占用内存空间了。
- 网站文件夹迁移到硬盘:
-
sudo cp -r /usr/local/html /mnt/sda1
-
sudo chmod 777 /mnt/sda1/html
-
sudo rm -r /usr/local/html
修改 config.conf 文件,将网站主目录改到 /mnt/sda1/html
sudo vi /usr/local/etc/nginx/nginx.conf
保存文件后,再使用 sudo /usr/local/etc/init.d/nginx start 启动服务,就可以将网站从硬盘加载。
-
- 数据库迁移到硬盘中:
-
sudo cp -r /home/tc/mysql/data /mnt/sda1
-
sudo rm -r /home/tc/mysql
修改开机自启动文件中的数据库路径:
sudo vi /opt/bootlocal.sh
修改后保存文件。
-
- 在 /opt/.filetool.lst 文件中,去除原来用于持久化的 /usr/local/html 的内容:
sudo vi /opt/.filetool.lst
删除后,保存文件,如果不删除的话,重启服务器会提示错误信息。
- 如果是全新安装的话,可以在上面安装过程中,网页与数据库直接使用新的 /mnt/sda1/ 中的路径,这样就可以直接将数据放在硬盘,同时网站持久化中 echo “usr/local/html” >> /opt/.filetool.lst 的这一条命令也不再需要执行。
你这基本功扎实