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]

标签: Linux

添加新评论