Linux下JDK+Apache+PHP+MySQL环境搭建和项目部署记录
0x00 环境&常用
1. 环境软件
- JDK 1.8
- Apache 2.4
- PHP 7.2
- MySQL 5.7
2. 基础软件
- 服务器系统:OpenEuler
- 终端进程保持工具:nohup
- 编辑工具:vim
- 解压工具:tar
0x01 安装JDK
一、命令行安装OpenJDK
[root@localhost ~]# dnf install java-1.8.0-openjdk-devel
二、验证安装结果
[root@localhost ~]# java -version # 应显示 "openjdk version 1.8.0_xxx"
[root@localhost ~]# javac -version # 检查编译器是否安装
0x02 Apache安装和运行
一、更新系统包索引(非必要)
[root@localhost ~]# dnf update
二、安装Apache服务器
[root@localhost ~]# dnf install httpd
三、启动Apache服务
[root@localhost ~]# systemctl start httpd
四、设置Apache服务开机自启
[root@localhost ~]# systemctl enable httpd
五、编辑配置文件所在路径
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
六、遇到的问题
systemd服务开机启动(code=exited, status=203/EXEC)错误
出现 (code=exited, status=203/EXEC)错误的原因,主要有以下几点:
- 原因1 :systemctl执行脚本时需要知道脚本的解释器
- 原因2:目标目录的执行权限不够
- 原因3:要执行的脚本编码格式不正确
- 原因4:定义的workingdirectory路径有问题
参考连接:定义服务开机启动code=exited status=203/exec 错误 systemctl 自定义service执行shell脚本时报错code exited status 203 EXEC_(code=exited, status=203/exec)-CSDN博客
bug,以上问题都不是我出现问题的真正原因,我碰到的是 由于SELinux 开启安全模式(SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源)导致不能设置开机自启动service
如何关闭 SELinux:两种办法,如果系统无法立刻关闭,建议先设置临时,同时也去修改配置文件关闭,待合适时机重启服务器
临时关闭:
[root@localhost ~]# getenforce #查看selinux状态
[root@localhost ~]# setenforce 0 #临时关闭selinux
[root@localhost ~]# getenforce
永久关闭(需要重启):
[root@localhost ~]# vim /etc/selinux/config
SELINUX=enforcing 修改为 SELINUX=disabled
0x03 MySQL安装和运行
一、准备工作
1. 查看操作系统位数
[root@localhost ~]# getconf LONG_BIT;
二、下载安装包
1. 本地下载后上传
下载地址:https://downloads.mysql.com/archives/community/
按如下进行选择:
Product Version(数据库版本):5.7.44
Operating System(操作系统):Linux - Generic (通用版)
OS Version(系统版本):Linux - Generic (glibc 2.12) (x86, 64-bit)
下载:mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
2. 在服务器直接下载
[root@localhost ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
三、安装MySQL
1. 解压安装包并移动和重命名文件夹
[root@localhost ~]# tar -xzvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
[root@localhost ~]# mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
参数说明:
x:表示解压
z:表示压缩方式
v:显示解压过程
f:表示后面接文件,必须
2. 检查MySQL组和用户是否存在
[root@localhost ~]# cat /etc/group|grep mysql
[root@localhost ~]# cat /etc/password|grep mysql
3. 添加MySQL用户和用户组
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql mysql
4. 创建data目录
[root@localhost ~]# cd /usr/local/mysql
[root@localhost ~]# mkdir data
5. 更改MySQL用户、用户组权限
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql // 更改用户组及用户
[root@localhost ~]# chmod -R 755 /usr/local/mysql // 更改权限
6. 编辑或创建配置文件
[root@localhost ~]# vim /etc/my.cnf
内容如下:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
#character
character-set-server=utf8
collation-server=utf8_general_ci
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=600
innodb_file_per_table=1
lower_case_table_names=1
[mysqld_safe]
datadir=/usr/local/mysql/data
log-error=/usr/local/mysql/data/error.log
pid-file=/usr/local/mysql/data/mysql.pid
user=mysql
tmpdir=/tmp
7. 初始化MySQL
[root@localhost ~]# cd /usr/local/mysql/bin
[root@localhost ~]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
8. 测试启动MySQL服务
[root@localhost ~]# /usr/local/mysql/support-files/mysql.server start
9. 添加软连接,并重启MySQL服务
[root@localhost ~]# ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
[root@localhost ~]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
[root@localhost ~]# service mysql restart
10. 登录MySQL
[root@localhost ~]# mysql -u root -p
11. 修改密码、取消过期
mysql> alter user 'root'@'localhost' identified by 'Root@123456';
mysql> update mysql.user set authentication_string == password('用户密码'), password_expired='N' where user = 'root'
mysql> flush privileges;
mysql> quit;
12. 开放远程连接
mysql> use mysql;
mysql> update user set user.Host='%' where user.User='root';
mysql> flush privileges;
mysql> quit;
service mysql restart
重启MySQL服务
13. 设置开机自动启动
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld // 将服务文件拷贝到init.d下,并重命名为mysql
[root@localhost ~]# chmod +x /etc/init.d/mysqld // 赋予可执行权限
[root@localhost ~]# chkconfig --add mysqld // 添加服务
[root@localhost ~]# chkconfig --list // 显示服务列表
四、遇到的问题
1. 启动报libncurses.so.5和libtinfo.so.5依赖缺失问题
在欧拉操作系统 openEuler 上新安装的MySQL 5.7在启动时遇到了依赖库文件libncurses.so.5 和 libtinfo.so.5 找不到的两个错误。经过检查发现系统中并不存在这两个库的指定版本,但存在更高版本的库文件。
首先,尝试解决libncurses库文件缺失的问题。通过以下命令可以搜索系统中已有的libncurses版本:
[root@localhost ~]# find / -name 'libncurses*'
可以看到,系统已安装的是libncurses.so.6版本。解决方法是创建一个指向高版本库文件的软链接,模拟出libncurses.so.5依赖。
[root@localhost ~]# ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
解决了libncurses.so.5的问题后,再次尝试启动MySQL时,出现了新的错误,关于libtinfo.so.5文件缺失。我们同样通过搜索,查看系统中是否存在libtinfo的其他版本:
[root@localhost ~]# find / -name 'libtinfo.so*'
同前面的处理方法,创建一个指向libtinfo.so.6的软链接来解决问题:
[root@localhost ~]# ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
2. Linux下MySQL只能通过service启动,无法通过systemctl启动
创建或更新systemd服务文件
[root@localhost ~]# dnf install mysql-server
如果重新安装后仍然没有生成systemd服务文件,可以手动创建一个mysql.service文件
[root@localhost ~]# vim /etc/systemd/system/mysql.service
添加以下内容
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/usr/bin/mysqladmin shutdown
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target
确保路径和用户根据实际情况修改,然后重新加载systemd配置并尝试启动服务
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start mysql.service
[root@localhost ~]# systemctl enable mysql.service
0x04 从源代码编译安装PHP
一、下载解压源码
[root@localhost ~]# https://www.php.net/distributions/php-7.2.9.tar.gz
[root@localhost ~]# tar -zxvf php-7.2.9.tar.gz
二、安装依赖包
[root@localhost ~]# dnf install -y gcc gcc-c++ autoconf make libxml2-devel bzip2-devel libmcrypt-devel openssl-devel libcurl-devel libpng-devel libjpeg-devel freetype-devel
三、配置编译选项
[root@localhost php-7.2.9.tar.gz]# ./configure --prefix=/usr/local/php-7.2.9 --with-config-file-path=/usr/local/php-7.2.9/etc --with-mysqli --with-pdo-mysql --enable-fpm --enable-mbstring --enable-zip --enable-opcache --with-apxs2 --with-openssl --with-curl --with-gd --with-freetype-dir --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --enable-bcmath
四、编译和安装
[root@localhost php-7.2.9.tar.gz]# make && make install
五、验证PHP7.2安装结果并配置环境变量
1. 安装完成后,验证PHP是否安装成功
[root@localhost ~]# /usr/local/php-7.2.9/bin/php -v
如果输出显示PHP7.2的版本信息,说明安装成功。
你可能还需要将 PHP 的可执行文件路径添加到系统的环境变量中,以便在命令行中更方便地使用 PHP。编辑你的 shell 配置(如 .bashrc 或 .bash_profile),添加以下行:
export PATH="/usr/local/php-7.2.9/bin:$PATH"
然后,重新加载配置文件
[root@localhost ~]# source ~/.bashrc
四、遇到的问题
1. php7编译后没有libphp7.so
Apache默认加载的libphp5.so这时需要指定libphp7.so但是configur不生成libphp7.so因此需要再加一个选项--with-apxs2
提示apxs2未安装,需要dnf install httpd-devel
来解决
编译好,并在httpd.conf中添加扩展加载
2. openEuler下php没有openssl扩展
需要重新编译php,在编译配置时加入--with-openssl
选项
需要安装dnf install openssl-devel
3. php编译缺少curl
首先,确保系统上安装了libcurl开发库,可以通过包管理器来安装。
[root@localhost ~]# dnf install libcurl-devel
在编译配置中加入--with-curl
选项
4. php编译缺少gd扩展
安装php-gd开发库
[root@localhost ~]# dnf install php-gd libpng libpng-devel libjpeg libjpeg-devel libwebp libwebp-devel
在编译配置中加入--with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib
选项
5. php添加gd扩展后仍然提示没有imagettftext函数
安装freetype-devel库
[root@localhost ~]# dnf install freetype-devel
在编译配置中加入--with-freetype-dir
选项
6. 缺少bcmath扩展
安装bcmath库
[root@localhost ~]# dnf install php-bcmath
在编译配置中加入--enable-bcmath
选项
0x05 添加/删除端口过系统防火墙
永久开启端口(以80端口为例):
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
永久关闭端口(以80端口为例):
[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent
添加端口后,需要执行firewall-cmd --reload
命令重新加载配置才能生效:
[root@localhost ~]# firewall-cmd --reload
0x06 安装FTP
使用以下命令安装vsftpd
[root@localhost ~]# dnf install vsftpd
备份默认配置文件
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
创建用户和用户组,并为用户分配主目录(后续作为FTP目录)
[root@localhost ~]# groupadd groupName
[root@localhost ~]# useradd -g groupName -d /path/www/html -m userName
[root@localhost ~]# passwd userName
编辑配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
pasv_min_port=30000
pasv_max_port=31000
修改或查看用户主目录命令
[root@localhost ~]# getent passwd userName
[root@localhost ~]# usermod -d /new_path -m userName
设置目录访问权限
[root@localhost ~]# chown -R userName:userName /path/www/html
[root@localhost ~]# chmod -R 755 /path/www/html
在/etc/vsftpd/user_list
中添加ftp用户白名单用户
启动服务并配置开机自启
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl enable vsftpd
0x07 启动和停止项目
一、启动项目
nohup java -jar run.jar > run.log 2>&1 &
二、停止项目运行
1. 查询pid
ps -aux|grep run.jar|grep -v grep
2. 停止程序
kill [pid]