在安装前先更新APT库

update更新软件列表

1| sudo apt-get update

upgrade更新软件

2| sudo apt-get upgrade

一、安装Apache2

sudo apt-get install apache2 测试Apache2 在地址栏输入以下地址,出现如图所示照片,则表明安装成功

http://localhost/

在Linux(Ubuntu)下搭建PHP环境 - 图1

重启apache2服务

sudo /etc/init.d/apache2 restart ‘restart’->’stop’关闭服务; ‘restart’->’start’启动服务 设置apache2状态: service apache2 status/start/stop/restart Web目录: /var/www 安装目录: /etc/apache2/ 全局配置: /etc/apache2/apache2.conf 监听端口: /etc/apache2/ports.conf 虚拟主机: /etc/apache2/sites-enabled/000-default.conf ## 二、安装最新版PHP sudo apt-get install php ## 三、安装Mysql 输入以下命令安装,安装过程会让你填写mysql的用户名和密码 sudo apt-get install mysql-server sudo apt-get install mysql-client 上边安装完后,会让你设置root密码,输入后按enter键,并再次确认 MySQL8.0采用了新的加密方式,与Ubuntu18.04有兼容问题; 故选择下面的旧版本5.x的加密方式 停止mysql服务

sudo /etc/init.d/mysql stop

我们需要用 sudo cat /etc/mysql/debian.cnf 来查找默认用户名密码

在Linux(Ubuntu)下搭建PHP环境 - 图2

用client下面的user 和 password来登录 mysql -udebian-sys-maint -p

登录输入用户名与密码,看是否安装成功

登录mysql数据库可以通过如下命令: mysql -u root -p -u 表示选择登陆的用户名, -p 表示登陆的用户密码,现在是mysql数据库是没有密码的,Enter password:处直接回车,就能够进入mysql数据库。 然后通过 show databases; 就可以查看当前的所有数据库。 停止mysql服务

sudo /etc/init.d/mysql stop

启动mysql服务 sudo service mysql start 重启mysql服务 sudo service mysql restart 查看MySQL服务状态

sudo service mysql status

ubuntu 20.04 中mysql-8.0.20,的卸载与安装

停止mysql进程

sudo /etc/init.d/mysql stop

卸载:

sudo apt-get remove —purge mysql* sudo apt-get autoremove mysql* —purge sudo apt-get remove apparmor sudo rm /var/lib/mysql/ -R //非常重要 sudo rm /etc/mysql/ -R //非常重要 重启电脑,再次利用命令 sudo apt-get install mysql-server 顺利安装成功! 如果卸载报错:

E: Sub-process /usr/bin/dpkg returned an error code (1) mysql-server-8.0

sudo fuser -v /var/cache/debconf/config.dat

在Linux(Ubuntu)下搭建PHP环境 - 图3

sudo kill -9 90210

sudo fuser -v -k /var/cache/debconf/config.dat

最后再次执行卸载命令

sudo apt-get remove —purge mysql*

清除残留数据:dpkg -l|grep ^rc|awk ‘{print$2}’|sudo xargs dpkg -P

查看剩余依赖

dpkg —list|grep mysql

继续删除剩余依赖项,

比如:sudo apt-get autoremove —purge mysql-apt-config

使用命令查看有哪些mysql在运行,并杀死他们。

ps -ef | grep mysql

再,更新系统

sudo apt-get update

然后,修复安装错误,会提示输入mysql用户名密码

sudo apt-get —fix-broken install

然后,检索mysql安装包,并删除检索出的依赖包,然后是删除/var/lib/mysql,最后重装mysql。

四、安装phpmyadmin

安装过程中选择apache2,下一步选择是要配置数据库,并输入密码。 sudo apt-get install phpmyadmin 测试phpmyadmin 执行以下命令 sudo ln -s /usr/share/phpmyadmin /var/www 然后地址栏输入以下地址,出现登陆界面则表明成功,如图

http://8.142.87.125/phpmyadmin

http://localhost/phpmyadmin

在Linux(Ubuntu)下搭建PHP环境 - 图4

如果出现404界面,执行下面语句 sudo vim /etc/apache2/apache2.conf 在最后添加下面一行

Include /etc/phpmyadmin/apache.conf

mysql8.0.1修改mysqlroot密码

安装完 最新版的 mysql8.0.1后忘记了密码,重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql
  1. vim /etc/mysql/mysql.cnf
在 [mysqld]最后加上如下语句 并保持退出文件;
  1. skip-grant-tables

在Linux(Ubuntu)下搭建PHP环境 - 图5

1.3 重启mysql服务:service mysqld restart 第二步免密码登录到mysql上;直接在命令行上输入:
  1. mysql //或者
  2. mysql -u root -p //password直接回车
第三步: 给root用户重置密码; 3.1 首先查看当前root用户相关信息,在mysql数据库的user表中;

select host, user, authentication_string, plugin from user;

host: 允许用户登录的ip‘位置’%表示可以远程; user:当前数据库的用户名; authentication_string: 用户密码;在mysql 5.7.9以后废弃了password字段和password()函数; plugin: 密码加密方式;

在Linux(Ubuntu)下搭建PHP环境 - 图6

3.2 如果当前root用户authentication_string字段下有内容,先将其设置为空;

use mysql;

update user set authentication_string=’’ where user=’root’; 3.3 退出mysql, 删除/etc/my.cnf文件最后的 skip-grant-tables 重庆mysql服务; 3.4 使用root用户进行登录,因为上面设置了authentication_string为空,所以可以免密码登录;
  1. mysql -u root -p
  2. passwrod:直接回车;
3.5使用ALTER修改root用户密码;
  1. ALTER user ‘root’@’localhost’ IDENTIFIED BY ‘Mys862394’;
至此修改成功; 从新使用用户名密码登录即可; 修改中遇到的问题: 1. 根据网上的这篇文章进行修改,报错; 网友文章:Linux-CentOS7下修改root密码和密码过期问题 在使用这句话修改密码时报错:
  1. update user set password = password(‘new-password’) where user = ‘root’ ;
  2. or
  3. update user set authentication_string= password(‘new-password’) where user = ‘root’ ;
报错原因:mysql5.7.6以后废弃了user表中的password字段和 password() 方法; 所以上面的方法对 mysql8.0.1是行不通的; 2. 根据网友的这篇文章进行修改,报错; 网友文章: 修改MySQL 5.7.9版本的root密码方法以及一些新变化整理 在Linux(Ubuntu)下搭建PHP环境 - 图7 3. 参考MYSQL8的官网文档, 感觉写的也很水; MySQL8官网文档: mysql8.0 reference for manual

在Linux(Ubuntu)下搭建PHP环境 - 图8

4. 一定不要采取如下形式该密码:
  1. use mysql;
  2. update user set authentication_string=”Mys862394” where user=”root”;
这样会给user表中root用户的authentication_string字段下设置了newpassword值; 当再使用ALTER USER ‘root’@’localhost’ IDENTIFITED BY ‘newpassword’时会报错的; 因为authentication_string字段下只能是mysql加密后的41位字符串密码;其他的会报格式错误; *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

Ubuntu 下修改mysqlroot密码

重新启动MySQL

sudo /etc/init.d/mysql restart

1、安全模式登入MySQL a、停止mysql进程

sudo /etc/init.d/mysql stop

在Linux(Ubuntu)下搭建PHP环境 - 图9

b、安全模式进入

/usr/bin/mysqld_safe —skip-grant-tables —skip-networking &

在Linux(Ubuntu)下搭建PHP环境 - 图10

c、进入失败,创建 mysqld文件 sudo mkdir -p /var/run/mysqld d、给mysqld文件赋权限 sudo chown mysql:mysql /var/run/mysqld e、再次进入安全模式

sudo /usr/bin/mysqld_safe —skip-grant-tables —skip-networking &

在Linux(Ubuntu)下搭建PHP环境 - 图11

f、无密码进入 mysql -u root

g、打开一个新窗口,登录进入mysql

在Linux(Ubuntu)下搭建PHP环境 - 图12

h、使用sql语句修改root密码 use mysql;

update user set authentication_string=PASSWORD(“Mys862394”) where User=’root’;

update user set password=password(‘Mys862394’) where user=‘root’;

在Linux(Ubuntu)下搭建PHP环境 - 图13

更新系缓存密码 update user set plugin=”mysql_native_password”

在Linux(Ubuntu)下搭建PHP环境 - 图14

刷新操作权限

flush privileges;

在Linux(Ubuntu)下搭建PHP环境 - 图15

退出mysql,使用更改后密码登录

在Linux(Ubuntu)下搭建PHP环境 - 图16

至此密码修改成功

mysql配置root账号远程访问

配置mysql的root用户访问权限

命令行登录 mysql,输入用户名,密码

mysql -u root -p

2.切换到 mysql库

use mysql;

3.查看用户表,可以看到当前host是localhost,只允许本地访问

select host, user, authentication_string, plugin from user;

select host,user from user;

+—————-+—————————+

| host | user |

+—————-+—————————+

| localhost | root |

+—————-+—————————+

1 rows in set (0.00 sec)

4.更新user用户表

update user set host = ‘localhost’ where user = ‘root’ LIMIT 1;

update user set host = ‘%’ where user = ‘root’ LIMIT 1;

5.分配所有访问权限,如果已分配过,该步骤可跳过

GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root密码’ WITH GRANT OPTION;

6.强制刷新权限

flush privileges;

7.再次查看用户表,root用户的host变成%,即允许所有的ip远程访问,如果需要指定具体的ip,就写上具体的ip即可

select host,user from user;

+—————-+—————————+

| Host | User |

+—————-+—————————+

| % | root |

+—————-+—————————+

1 rows in set (0.00 sec)

修改mysql配置文件 /etc/mysql/my.cnf

1.查看端口监听状态如下所示,绑定了127.0.0.1,只允许本地访问,需要修改配置文件:

netstat -nltp|grep mysql

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

2.修改my.cnf,注释掉bind-address 127.0.0.1属性,修改后如下图所示

注释掉bind-address

3.重启mysql服务

service mysql restart

再次使用命令netstat -an|grep 3306查看端口监听状态

netstat -nltp|grep mysql

tcp 0 0 127.0.0.1:55074 127.0.0.1:3306 TIME_WAIT

tcp6 0 0 :::3306 :::* LISTEN

配置阿里云安全组规则

登录阿里云进入控制台,依次访问网络和安全->安全组->配置规则,在入方向上开放MySQL监听端口3306即可

MySQL配置文件my.cnf的理解

配置防火墙

开放3306端口:ufw allow 3306
开启防火墙:ufw enable 关闭防火墙:ufw disable
查看防火墙状态:ufw status

五、安装其他模块

sudo apt-get install libapache2-mod-php

sudo apt-get install libapache2-mod-auth-mysql sudo apt-get install php-mysqlnd sudo apt-get install php-gd sudo apt-get install php-json sudo apt-get install php-curl

sudo apt-get install php-gmp

sudo apt-get install php-opcache

sudo apt-get install php-readline

sudo apt-get install php-sqlite3

sudo apt-get install php-tidy

sudo apt-get install php-xml

sudo apt-get install php-bcmath

sudo apt-get install php-posix

sudo apt-get install php-bz2

sudo apt-get install php-intl

sudo apt-get install php-mbstring

sudo apt-get install php-soap

sudo apt-get install php-xsl

sudo apt-get install php-zip

sudo apt-get install php-dev

sudo apt-get install libevent-dev

安装swoole

sudo pecl install swoole 配置 PHP.ini php -i |grep php.ini(查看php.ini位置)
extension=swoole.so(写入php.ini文件中) 卸载swoole sudo pecl uninstall swoole php -m 会列出命令行 PHP CLI 已经安装的扩展,结果类似如下 php —ini查找php.ini文件位置

使用 composer安装php扩展

安装pcntl 与 posix 两个扩展实现的 PHP 多进程

composer require fingerqin/phpthread 1.0 卸载composer 警告:建议只执行第一条卸载命令,以免影响到其他,导致不可预料的崩溃

sudo apt-get remove composer

purge : 卸载并清除软件包的配置

卸载软件

sudo apt-get remove composer

(警告)卸载所有自动安装且不再使用的软件包

sudo apt-get remove —auto-remove composer

卸载并清除软件包的配置

sudo apt-get purge composer

(警告)卸载、清除配置、卸载所有自动安装且不再使用的软件包

sudo apt-get purge —auto-remove composer

六、重启服务

service apache2 restart

service mysql restart

vim /var/www/html/phpinfo.php

文件代码为:

<?php echo phpinfo();?>

查看本机php版本,运行 php -v

七、修改/var/www/html 权限

sudo chmod 777 /var/www/html ## 八、ubuntu安装swoole ### [Swoole] 在Ubuntu下安装、快速开始 ### 安装 Swoole 卸载swoole pecl uninstall swoole

九:Ubuntu查看端口使用情况

telnet是一个用于测试远程主机是否可连接的命令行工具

telnet 127.0.0.1 9000

telnet 8.142.87.125 9000

标准退出telnet

关于telnet退出,还有一个最标准的退出方法是。ctrl+] 组合键,可以退出到telnet命令行 接着然后采用quit退出telnet 的测试

使用netstat命令:

查看哪些端口是开放的,分别是什么进程在监听 sudo netstat -nultp sudo netstat -tlpn 查看已经连接的服务端口(ESTABLISHED) netstat -a 查看所有的服务端口(LISTEN,ESTABLISHED) netstat -ap 查看指定端口,可以结合grep命令: netstat -ap | grep 8080 也可以使用lsof命令: lsof -i:8888 若要关闭使用这个端口的程序,使用kill + 对应的pid kill -9 PID号

ps:kill就是给某个进程id发送了一个信号。默认发送的信号是SIGTERM,而kill -9发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。

netstat -an

配置防火墙

开放3306端口:ufw allow 3306
开启防火墙:ufw enable
查看防火墙状态:ufw status 关闭防火墙:sudo ufw disable

stop关闭后再用disable(有效)

systemctl stop ufw sudo ufw disable

网络信息 netstat命令详解

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

输出信息含义

执行netstat后,其输出结果为 Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
从整体上看,netstat的输出结果可以分为两个部分: 一个是Active Internet connections,称为有源TCP连接,其中”Recv-Q”和”Send-Q”指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。 另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态 -p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。 提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

查看所有的进程和端口使用情况

使用命令:netstat –apn

十:Ubuntu中Apache运行php-fpm

一、安装并创建相应软连接

  1. root@linux:~# apt install apache2 php-fpm
  2. root@linux:~# cd /etc/apache2/conf-enabled/
  3. root@linux:/etc/apache2/conf-enabled# ln -sv ../conf-available/php7.2-fpm.conf .
  4. ‘./php7.2-fpm.conf’ -> ‘../conf-available/php7.2-fpm.conf’
  5. root@linux:/etc/apache2/conf-enabled# a2enmod proxy_fcgi
  6. Considering dependency proxy for proxy_fcgi:
  7. Enabling module proxy.
  8. Enabling module proxy_fcgi.
  9. To activate the new configuration, you need to run:
  10. systemctl restart apache2
  11. root@linux:/etc/apache2/conf-enabled# systemctl restart apache2
  12. root@linux:/etc/apache2/conf-enabled#

二、Ubuntu Apache 配置注意事项

php-fpm 需要apache 支持proxy_fcgi模块

apache2 启用模块使用 a2enmod 来启动。

apache2 查看当前工作模式

root@linux:/etc/apache2/conf-enabled# a2query -M prefork

root@linux:/etc/apache2/conf-enabled#

Apache 命令的用法 en是打开,dis是关闭

管理conf 文件

a2disconf

a2enconf

管理mod

a2dismod

a2enmod

管理站点

a2dissite

a2ensite

范例,启用关闭proxy_fcgi模块

root@linux:/etc/apache2/conf-enabled# a2dismod proxy_fcgi

root@linux:/etc/apache2/conf-enabled# a2enmod proxy_fcgi

请注意:如果您安装了PHP 7 apache模块(mod_php),可能会发生这种情况,例如,当您开始使用ISP的LAMP服务器设置,而不是像本教程中那样使用空的服务器时,则可能需要禁用mod_php,如下所示。

a2dismod php7.0

并重新启动apache:

systemctl restart apache2.service

范例,启用关闭php文件(其实就是做了软连接,把conf-available里的文件链接到enabled)

root@linux:/etc/apache2/conf-enabled# a2enconf php7.2-fpm

Enabling conf php7.2-fpm.

To activate the new configuration, you need to run:

systemctl reload apache2

root@linux:/etc/apache2/conf-enabled# ll

total 8

drwxr-xr-x 2 root root 4096 Jan 12 08:48 ./

drwxr-xr-x 8 root root 4096 Jan 12 08:21 ../

lrwxrwxrwx 1 root root 30 Jan 8 12:52 charset.conf -> ../conf-available/charset.conf

lrwxrwxrwx 1 root root 44 Jan 8 12:52 localized-error-pages.conf -> ../conf-available/localized-error-pages.conf

lrwxrwxrwx 1 root root 46 Jan 8 12:52 other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf

lrwxrwxrwx 1 root root 33 Jan 12 08:48 php7.2-fpm.conf -> ../conf-available/php7.2-fpm.conf

lrwxrwxrwx 1 root root 31 Jan 8 12:52 security.conf -> ../conf-available/security.conf

lrwxrwxrwx 1 root root 36 Jan 8 12:52 serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf

root@linux:/etc/apache2/conf-enabled#

root@linux:/etc/apache2/conf-enabled# a2disconf php7.2-fpm

Conf php7.2-fpm disabled.

To activate the new configuration, you need to run:

systemctl reload apache2

root@linux:/etc/apache2/conf-enabled# ll

total 8

drwxr-xr-x 2 root root 4096 Jan 12 08:53 ./

drwxr-xr-x 8 root root 4096 Jan 12 08:21 ../

lrwxrwxrwx 1 root root 30 Jan 8 12:52 charset.conf -> ../conf-available/charset.conf

lrwxrwxrwx 1 root root 44 Jan 8 12:52 localized-error-pages.conf -> ../conf-available/localized-error-pages.conf

lrwxrwxrwx 1 root root 46 Jan 8 12:52 other-vhosts-access-log.conf -> ../conf-available/other-vhosts-access-log.conf

lrwxrwxrwx 1 root root 31 Jan 8 12:52 security.conf -> ../conf-available/security.conf

lrwxrwxrwx 1 root root 36 Jan 8 12:52 serve-cgi-bin.conf -> ../conf-available/serve-cgi-bin.conf

root@linux:/etc/apache2/conf-enabled#

ubuntu启动php-fpm_在Ubuntu 16.04上使用PHP-FPM和Apache