deepin系统安装


deepin系统安装


正文

deepin安装

在官方网站下载稳定版安装包,然后制作启动U盘。

安装前,做好电脑的资料备份工作。然后,以U盘启动,基本都是回车操作,有一个安装模式选择:

简单:

高级:

全盘安装:

是新手,那就选择全盘安装,或者简单安装。关于“高级”安装中磁盘分割的技巧,等熟悉linux后自己随便折腾吧。

这里选择全盘安装,安装好后看一下磁盘分割:

还有挂载点:

sda1:EFI 挂载点/boot/efi

sda2:primary swap内存交换分区

sda3:Deepin15.10 Root系统盘 挂载点/

sda4:Home 家目录 挂载点/home

sda5:_dde_data 数据盘 挂载点/media/baiyang/_dde_data

其中 sda5 以及后面你在电脑上的可拔插U盘、硬盘等 名为sdb1、sdb2、sdc等,都挂载在 /media/baiyang目录下,baiyang是用户名。

如果系统被搞坏了,需要重装系统,你选择 简单安装 到 sda3 区,你会发现其他盘数据内容都没有变动,还是旧数据, 这说明我们可以把需要的软件和服务环境都放在sda4家目录、或sda5数据盘下,这样系统坏了重装时,服务软件及环境不需要重装。

额外提一下,系统被折腾坏过几次,选择了 简单安装 到 sda3 区 ,但使用后发现服务极其不稳定,重装系统时还是选择 全盘安装 吧。

Firefox浏览器安装

Firefox有中国版和国际版,国际版中又有一个ESR版本。中国版和国际版账号不通用,看你的账号在那。

中国版安装,直接在应用商店搜索安装,然后登录火狐账号同步书签信息等。

ESR版本安装: sudo apt install firefox-esr-l10n-zh-cn

Git安装

git可以用apt安装:sudo apt install git

安装完成后设置git用户名和邮箱:

git config --global user.name kuangtang

git config --global user.email kuangtang@dudu.com

Sublime Text安装

在应用商店中搜索 sublime text ,然后点击自己想安装的版本。

PhpStorm安装

在官网下载软件包:https://www.jetbrains.com/phpstorm/

然后放到 /home/baiyang/worksoft 目录下,解压: tar xvf PhpStorm-2020.2.3.tar.gz

重命名一下:mv PhpStorm-202.7660.42 ./PhpStorm

创建一个软件启动软连接:sudo ln -s /home/baiyang/worksoft/PhpStorm/bin/phpstorm.sh /usr/local/bin/phpstorm

然后就可以启动PhpStorm了:phpstorm

启动后在启动器软件图标一栏就有phpstorm的图标了,我们鼠标右击选择发送到桌面,以后在桌面点击图标启动使用。

补充信息,旧的版本可能没有实现部署自动化,下面我们说一下。

使用命令行phpstorm启动的方式,关闭命令行窗口,软件就会被关掉,不方便,我们要让软件在后台运行。

编辑.bashrc文件:vim ~/.bashrc

写入:

alias phpstorm='nohup sh /home/baiyang/worksoft/PhpStorm/bin/phpstorm.sh >/dev/null >/dev/null 2>&1 &'

更新.bashrc,执行命令:source ~/.bashrc

这样命令行执行phpstorm启动软件,关闭命令行也不会关闭phpstorm了。

为了方便日后使用,我们最好创建一个桌面图标。

cd /usr/share/applications/

sudo touch phpstorm.desktop

sudo vim phpstorm.desktop

写入内容:

[Desktop Entry]
Type=Application
Version=2019.2
Name=phpstorm
Comment=phpstorm ide
Exec=phpstorm
Icon=/home/baiyang/worksoft/PhpStorm/bin/phpstorm.svg
Terminal=false
Categories=Development;IDE;
StartupNotify=true

保存,就可以在启动器软件一栏中看到phpstorm的图标了。

DBeaver安装

DBeaver是一个通用的数据库管理工具和SQL客户端,支持 MySQL、PostgreSQL、Oracle、 DB2、MSSQL、 Sybase、 Mime、 HSQLDB、Derby以及其他兼容 JDBC 的数据库。 DBeaver 提供一个图形界面用来查看数据库结构、执行SQL查询和脚本,浏览和导出数据,处理BLOB/CLOB数据,修改数据库结构等。

可以直接在应用商店搜索DBeaver下载。

PuTTY安装

PuTTY是一套远程登陆工具,它可以连接上支持SSH、Telnet联机的站台,并且可自动取得对方的系统指纹码。建立联机以后,所有的通讯内容都是以加密的方式传输。 自带SSH Forwarding的功能,具有完全模拟xterm、VT102及ECMA-48终端机的能力,支持公钥认证。

可以直接在应用商店搜索PuTTY下载。

Postman安装

在官网下载:https://www.postman.com/downloads/

然后放到 /home/baiyang/worksoft 目录下,解压:tar xvf Postman-linux-x64-7.34.0.tar.gz

进入解压后的 Postman文件夹打开终端,启动 Postman: ./Postman/Postman

创建一个软件启动软连接:sudo ln -s /home/baiyang/worksoft/Postman/Postman /usr/local/bin/postman

创建启动图标Postman.desktop,便于快速启动:

cd /usr/share/applications/

sudo touch postman.desktop

sudo vim postman.desktop

写入内容:

[Desktop Entry]
Type=Application
Name=Postman
GenericName=Postman
Exec=postman
Icon=/home/baiyang/worksoft/Postman/app/resources/app/assets/icon.png
Terminal=false
Categories=Network;

保存,就可以在启动器软件一栏中看到Postman的图标了。

点击运行,sign in登录,同步数据。

RedisPlus安装

RedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows 、Linux、Mac三大系统平台, RedisPlus提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。该软件支持单机、集群模式连接,同时还支持SSH(单机、集群)通道连接。

可以直接在应用商店搜索RedisPlus下载。

WPS安装

WPS Office,在应用商店中搜索,然后安装。

Chrome安装

Google Chrome浏览器安装,可以在应用商店中搜索,然后安装。

微信安装

在应用商店中搜索,然后安装。

钉钉安装

在应用商店中搜索,然后安装。

QQ安装

在应用商店中搜索,然后安装。

百度网盘安装

在应用商店中搜索,然后安装。

网易云音乐安装

在应用商店中搜索,然后安装。

搜狗输入法安装

在应用商店中搜索,然后安装。

Docker安装

Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:

sudo apt-get remove docker docker-engine docker.io containerd runc

更新 apt 包索引:

sudo apt-get update

安装 apt 依赖包,用于通过HTTPS来获取仓库:

sudo apt-get install  apt-transport-https  ca-certificates  curl  gnupg-agent  software-properties-common

添加 Docker 的官方 GPG 密钥:

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -

通过搜索指纹的最后8个字符,验证您现在拥有指纹9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88的密钥:

sudo apt-key fingerprint 0EBFCD88

输出:

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

更新APT源配置:

sudo vim /etc/apt/sources.list

把下面内容补充进去,保存并退出:

## Generated by deepin-installer
deb [by-hash=force] http://packages.deepin.com/deepin lion main contrib non-free
#deb-src http://packages.deepin.com/deepin lion main contrib non-free
# 官方源
# deb [arch=amd64] https://download.docker.com/linux/debian wheezy stable
# 国内中科大源
deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian stretch stable
# composer源
deb https://packages.sury.org/php/ stretch main
# 阿里巴巴镜像源
deb [by-hash=force] http://mirrors.aliyun.com/deepin lion main contrib non-free

上面把软件储存库设置好了,下面我们进行安装。

更新 apt 包索引:

sudo apt-get update

列出可用版本:

apt-cache madison docker-ce

我们可以安装上面看到的指定版本, 例如安装 5:19.03.13~3-0~debian-stretch 版:

sudo apt-get install docker-ce=5:19.03.13~3-0~debian-stretch docker-ce-cli=5:19.03.13~3-0~debian-stretch containerd.io

或者我们可以通过下面的命令直接安装最新版,不过有可能不是稳定版:

sudo apt-get install docker-ce docker-ce-cli containerd.io

通过以上步骤,Docker就安装好了。

查看一下安装的docker版本:

sudo docker version

输出:

Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:03 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:01:33 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Docker是虚拟化容器引擎,我们可以运行hello world映像,验证Docker引擎是否正确安装:

sudo docker run hello-world

输出:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出。

查看一下docker本地镜像有哪些:

sudo docker images

输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

查看一下docker默认的远程镜像仓库地址:

sudo docker info

输出:

Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 19.03.13
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-30deepin-generic
 Operating System: Deepin 15
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.679GiB
 Name: pc
 ID: B7VV:SXQH:LLSD:GYZ7:JTCS:XW7J:QVMD:7JM3:BU62:KQBL:EC73:GNNP
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

看到 Registry 非国内,为了提升下载速度,我们需要修改docker远程镜像仓库地址:

vim /etc/docker/daemon.json

写入:

{"registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true}

如果daemon.json这个文件不存在的话,我们需要新建,然后再写入:

sudo touch /etc/docker/daemon.json

重启docker服务:

service docker restart

再查看一下docker详情,输出:

Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 19.03.13
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-30deepin-generic
 Operating System: Deepin 15
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.679GiB
 Name: pc
 ID: B7VV:SXQH:LLSD:GYZ7:JTCS:XW7J:QVMD:7JM3:BU62:KQBL:EC73:GNNP
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://registry.docker-cn.com/
 Live Restore Enabled: true

WARNING: No swap limit support

可以看到最下面增加了 Registry Mirrors 那一行。

现在我们docker相关命令都要用root身份运行,原因参考下面资料。

MySQL安装

下载mysql镜像:

sudo docker pull mysql:5.7

把-v与容器挂载的目录准备好:

mkdir -p /home/baiyang/web/mysql /home/baiyang/web/mysql/data /home/baiyang/web/mysql/conf.d /home/baiyang/web/mysql/logs

创建容器并运行:

sudo docker run \
  --name server-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -v /home/baiyang/web/mysql/data:/var/lib/mysql \
  -v /home/baiyang/web/mysql/conf.d:/etc/mysql/conf.d \
  -v /home/baiyang/web/mysql/logs:/logs \
  -v /etc/localtime:/etc/localtime:ro \
  -d mysql:5.7

单行写法:

sudo docker run  --name server-mysql   -p 3306:3306   -e MYSQL_ROOT_PASSWORD=root   -v /home/baiyang/web/mysql/data:/var/lib/mysql   -v /home/baiyang/web/mysql/conf.d:/etc/mysql/conf.d   -v /home/baiyang/web/mysql/logs:/logs  -v /etc/localtime:/etc/localtime:ro  -d mysql:5.7

MYSQL_ROOT_PASSWORD 是 root 用户连接数据库服务的密码。

/home/baiyang/web/mysql/data 目录将映射为mysql容器配置的数据文件存放路径

/home/baiyang/web/mysql/conf.d 目录里的配置文件将映射为mysql容器的配置文件

/home/baiyang/web/mysql/logs 目录将映射为mysql容器的日志目录

-v /etc/localtime:/etc/localtime:ro 因为容器内的时间会跟宿主机相差 8 个小时,加载这个目录是为了校正时间跟宿主机时间一致。

查看容器运行状态:

sudo docker ps -a

输出:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS                               NAMES
ff5f62aa1f77        mysql:5.7           "docker-entrypoint.s…"   13 seconds ago      Up 11 seconds                  0.0.0.0:3306->3306/tcp, 33060/tcp   server-mysql
af13727aafbb        hello-world         "/hello"                 About an hour ago   Exited (0) About an hour ago                                       objective_kapitsa
新建用户和数据库

接下来可以新建用户和新建库:

进入mysql容器:

sudo docker exec -it server-mysql /bin/bash

首先用root登录mysql

mysql -u root -p

输入密码,进入。

创建用户,语法:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

user_name:要创建用户的名字。

host:表示要这个新创建的用户允许从哪台机登陆,如果只允许从本机登陆,则 填 localhost ,如果允许从远程登陆,则填 %

password:新创建用户的登陆数据库密码,如果没密码可以不写。

如:

CREATE USER 'dog'@'%' IDENTIFIED BY '123456';

创建数据库

CREATE DATABASE IF NOT EXISTS dog DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

用户数据库赋权,语法:

GRANT privileges ON databasename.tablename TO 'username'@'host';

privileges:表示要授予什么权力,例如可以有 select , insert ,delete,update等,如果要授予全部权力,则填 ALL

databasename.tablename:表示用户的权限能用在哪个库的哪个表中,如果想要用户的权限很作用于所有的数据库所有的表,则填 *.**是一个通配符,表示全部。

'username'@'host':表示授权给哪个用户。

如:

GRANT  ALL  ON  dog.*  TO  'dog'@'%';

注意:

用以上命令授权的用户不能给其他用户授权,如果想这个用户能够给其他用户授权,就要在后面加上 WITH GRANT OPTION

如:

GRANT  ALL  ON   *.*   TO  'aaa'@'%'  WITH GRANT OPTION;
PHP安装

下载镜像:

sudo docker pull php:7.1.30-fpm

把-v与容器挂载的目录准备好:

mkdir -p /home/baiyang/web/php-fpm/etc /home/baiyang/www

创建容器并运行:

sudo docker run \
  --name server-phpfpm \ 
  -p 9000:9000 \
  -v /home/baiyang/web/php-fpm/etc:/usr/local/etc/php \
  -v /home/baiyang/www:/var/www/html \
  -v /etc/localtime:/etc/localtime:ro \
  -d php:7.1.30-fpm

单行写法:

sudo docker run --name server-phpfpm -p 9000:9000 -v /home/baiyang/web/php-fpm/etc:/usr/local/etc/php -v /home/baiyang/www:/var/www/html -v /etc/localtime:/etc/localtime:ro  -d php:7.1.30-fpm

查看容器运行状态:

sudo docker ps -a

输出:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
9fd6690caa6c        php:7.1.30-fpm      "docker-php-entrypoi…"   4 seconds ago       Up 3 seconds        0.0.0.0:9000->9000/tcp              server-phpfpm
75b3ca90a714        mysql:5.7           "docker-entrypoint.s…"   43 minutes ago      Up 43 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   server-mysql

默认的 php 镜像中不带有 mysqli 模块,我们需要给容器内的 php 安装 mysqli 模块:

sudo docker exec -it server-phpfpm /bin/bash

我们进入后先看一下容器内php的拓展:

php -m

输出:

[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

如果没有,输入:

docker-php-ext-install mysqli

最后可能会报错:

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20160303/
Installing header files:          /usr/local/include/php/
/usr/local/bin/docker-php-ext-enable: 108: /usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini: Directory nonexistent

是说/usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini创建失败,查询原因后发现/usr/local/etc/php/conf.d/目录不存在导致的, 我们需要创建这个目录:

mkdir -p /usr/local/etc/php/conf.d

然后再运行上面的命令。

我们还需要安装pdo_mysql拓展:

docker-php-ext-install pdo_mysql

可以看到 /usr/local/etc/php/conf.d 这个目录下多了一个文件:docker-php-ext-pdo_mysql.ini

然后退出容器,回到宿主服务器:

exit

重启server-phpfpm服务:

docker stop server-phpfpm

docker start server-phpfpm

如果这个phpfpm容器支持度不好,我们可以停止这个容器运行,然后删除,然后重新建一个容器:

# 停止运行
sudo docker stop server-phpfpm     
# 删除容器
sudo docker rm -f server-phpfpm
amqp拓展安装

Docker 中的PHP容器安装扩展的方式有:

  1. 通过pecl方式安装
  2. 通过php 容器中自带的几个特殊命令来安装,这些特殊命令可以在Dockerfile中的RUN命令中进行使用。

这里讲一下第2种方式。

如果像上面直接运行docker-php-ext-install amqp,会报错:

error: /usr/src/php/ext/amqp does not exist

usage: /usr/local/bin/docker-php-ext-install [-jN] ext-name [ext-name ...]
   ie: /usr/local/bin/docker-php-ext-install gd mysqli
       /usr/local/bin/docker-php-ext-install pdo pdo_mysql
       /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop

if custom ./configure arguments are necessary, see docker-php-ext-configure

Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv imap interbase intl json ldap mbstring mcrypt mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline recode reflection session shmop simplexml snmp soap sockets spl standard sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip

Some of the above modules are already compiled into PHP; please check
the output of "php -i" to see which modules are already loaded.

/usr/src/php/ext/amqp不存在,我们看一下/usr/src/php/ext下有哪些:

ls -l /usr/src/php/ext

输出:

total 308
drwxr-xr-x  4 1000 1000 4096 May 28  2019 bcmath
drwxr-xr-x  3 1000 1000 4096 May 28  2019 bz2
drwxr-xr-x  3 1000 1000 4096 May 28  2019 calendar
drwxr-xr-x  3 1000 1000 4096 May 28  2019 com_dotnet
drwxr-xr-x  3 1000 1000 4096 May 28  2019 ctype
drwxr-xr-x  3 1000 1000 4096 May 28  2019 curl
drwxr-xr-x  4 1000 1000 4096 May 28  2019 date
drwxr-xr-x  6 1000 1000 4096 May 28  2019 dba
drwxr-xr-x  4 1000 1000 4096 May 28  2019 dom
drwxr-xr-x  4 1000 1000 4096 May 28  2019 enchant
drwxr-xr-x  3 1000 1000 4096 May 28  2019 exif
-rwxr-xr-x  1 1000 1000 8652 May 28  2019 ext_skel
-rw-r--r--  1 1000 1000 1165 May 28  2019 ext_skel_win32.php
drwxr-xr-x  4 1000 1000 4096 May 28  2019 fileinfo
drwxr-xr-x  4 1000 1000 4096 May 28  2019 filter
drwxr-xr-x  3 1000 1000 4096 May 28  2019 ftp
drwxr-xr-x  4 1000 1000 4096 May 28  2019 gd
drwxr-xr-x  3 1000 1000 4096 May 28  2019 gettext
drwxr-xr-x  3 1000 1000 4096 May 28  2019 gmp
drwxr-xr-x  3 1000 1000 4096 May 28  2019 hash
drwxr-xr-x  3 1000 1000 4096 May 28  2019 iconv
drwxr-xr-x  3 1000 1000 4096 May 28  2019 imap
drwxr-xr-x  3 1000 1000 4096 May 28  2019 interbase
drwxr-xr-x 21 1000 1000 4096 May 28  2019 intl
drwxr-xr-x  3 1000 1000 4096 May 28  2019 json
drwxr-xr-x  3 1000 1000 4096 May 28  2019 ldap
drwxr-xr-x  3 1000 1000 4096 May 28  2019 libxml
drwxr-xr-x  6 1000 1000 4096 May 28  2019 mbstring
drwxr-xr-x  3 1000 1000 4096 May 28  2019 mcrypt
drwxr-xr-x  3 1000 1000 4096 May 28  2019 mysqli
drwxr-xr-x  2 1000 1000 4096 May 28  2019 mysqlnd
drwxr-xr-x  3 1000 1000 4096 May 28  2019 oci8
drwxr-xr-x  3 1000 1000 4096 May 28  2019 odbc
drwxr-xr-x  4 1000 1000 4096 May 28  2019 opcache
drwxr-xr-x  3 1000 1000 4096 May 28  2019 openssl
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pcntl
drwxr-xr-x  4 1000 1000 4096 May 28  2019 pcre
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_dblib
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_firebird
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_mysql
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_oci
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_odbc
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_pgsql
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pdo_sqlite
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pgsql
drwxr-xr-x  4 1000 1000 4096 May 28  2019 phar
drwxr-xr-x  3 1000 1000 4096 May 28  2019 posix
drwxr-xr-x  3 1000 1000 4096 May 28  2019 pspell
drwxr-xr-x  3 1000 1000 4096 May 28  2019 readline
drwxr-xr-x  3 1000 1000 4096 May 28  2019 recode
drwxr-xr-x  3 1000 1000 4096 May 28  2019 reflection
drwxr-xr-x  3 1000 1000 4096 May 28  2019 session
drwxr-xr-x  3 1000 1000 4096 May 28  2019 shmop
drwxr-xr-x  4 1000 1000 4096 May 28  2019 simplexml
drwxr-xr-x  3 1000 1000 4096 May 28  2019 skeleton
drwxr-xr-x  3 1000 1000 4096 May 28  2019 snmp
drwxr-xr-x  4 1000 1000 4096 May 28  2019 soap
drwxr-xr-x  3 1000 1000 4096 May 28  2019 sockets
drwxr-xr-x  5 1000 1000 4096 May 28  2019 spl
drwxr-xr-x  4 1000 1000 4096 May 28  2019 sqlite3
drwxr-xr-x  4 1000 1000 4096 May 28  2019 standard
drwxr-xr-x  3 1000 1000 4096 May 28  2019 sysvmsg
drwxr-xr-x  3 1000 1000 4096 May 28  2019 sysvsem
drwxr-xr-x  3 1000 1000 4096 May 28  2019 sysvshm
drwxr-xr-x  4 1000 1000 4096 May 28  2019 tidy
drwxr-xr-x  3 1000 1000 4096 May 28  2019 tokenizer
drwxr-xr-x  3 1000 1000 4096 May 28  2019 wddx
drwxr-xr-x  3 1000 1000 4096 May 28  2019 xml
drwxr-xr-x  4 1000 1000 4096 May 28  2019 xmlreader
drwxr-xr-x  4 1000 1000 4096 May 28  2019 xmlrpc
drwxr-xr-x  4 1000 1000 4096 May 28  2019 xmlwriter
drwxr-xr-x  3 1000 1000 4096 May 28  2019 xsl
drwxr-xr-x  5 1000 1000 4096 May 28  2019 zip
drwxr-xr-x  3 1000 1000 4096 May 28  2019 zlib

看到了好多拓展包,我们也要把amqp的拓展包放到这个目录下。

有时/usr/src/php目录可能不存在,我们使用下面命令创建:

docker-php-source extract

要删除/usr/src/php目录,可以使用:

docker-php-source delete

amqp依赖rabbitmq-c,所以需要先安装rabbitmq-c。

redis拓展安装

从上面,我们看到/usr/src/php/ext目录下也没有redis目录,我们需要下载redis拓展,然后放到这个目录下,再执行命令。

下载:

curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.1.3.tar.gz

解压:

tar xfz /tmp/redis.tar.gz

删除包:

rm -r /tmp/redis.tar.gz

如果/usr/src/php/ext目录不存在,我们要新建:

mkdir -p /usr/src/php/ext

移动:

mv phpredis-3.1.3 /usr/src/php/ext/redis

安装:

docker-php-ext-install redis

退出容器,重启php容器,然后就可以使用了。

Nginx安装

下载镜像:

sudo docker pull nginx

把-v与容器挂载的目录和文件准备好:

mkdir -p /home/baiyang/web/nginx/conf /home/baiyang/web/nginx/conf/vhost /home/baiyang/web/nginx/logs

创建容器并运行:

sudo docker run \
  --name server-nginx \
  -p 80:80 \
  -v /home/baiyang/web/nginx/conf/vhost:/etc/nginx/conf.d \
  -v /home/baiyang/web/nginx/logs:/var/log/nginx \
  -v /home/baiyang/www:/usr/share/nginx/html \
  -v /etc/localtime:/etc/localtime:ro \
  --link server-phpfpm:php \
  -d nginx

单行写法:

sudo docker run --name server-nginx -p 80:80 -v /home/baiyang/web/nginx/conf/vhost:/etc/nginx/conf.d  -v /home/baiyang/web/nginx/logs:/var/log/nginx  -v /home/baiyang/www:/usr/share/nginx/html  -v /etc/localtime:/etc/localtime:ro  --link server-phpfpm:php  -d nginx

执行后查看下容器的运行状态。

期间容器运行发生错误异常关闭,我们可以通过日志查看原因:

sudo docker logs server-nginx

web项目搭建

我们上面已经运行了nginx容器,但这个容器并无法调用php脚本服务,我们需要做相应配置。

我们可以在 /home/baiyang/web/nginx/conf/vhost/ 目录下写域名项目配置文件:

test.com.conf文件内容:

server {
    listen       80;
    server_name  test.com www.test.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html/test;
        index  index.html index.htm index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #   root   /usr/share/nginx/html;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html/test;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

写上面这个配置文件时,要意识到这个文件是容器中的配置文件。 其中location / {...}定位的是静态文件,里面的root是nginx容器中的地址, location ~ \.php$ {...}定位的是动态脚本,里面的root是php容器中的地址。

然后把 域名/服务器 配置好:

sudo vim /etc/hosts

补充一行:

127.0.0.1     test.com

然后我们重启上面运行的nginx容器,让我们修改的配置文件生效:

sudo docker restart server-nginx

可以看出我们test项目的代码在宿主服务器文件夹 /home/baiyang/www/test 下,我们把项目内容发布到这个文件夹下就可以了。 然后我们就可以用 test.com 访问项目了。

同样,其他项目我们也可以像test项目这样部署,共用nginx和php容器。

composer安装

我们就在php容器内使用php脚本命令,理论上我们也在php容器内安装composer, 但是发现容器内composer安装好后,composer要使用git, 容器内git的安装却不顺利:apt安装需要PUBKEY,写入PUBKEY有需要gnupg2,用不了apt那就只能自己下载包安装,gnupg2又依赖gnupg,发现gnupg又依赖十几个包。 算了,只能说这个容器内不能安装和使用composer。理论上来说,这个容器内只提供web服务,也不应该有其他的东西。那我们就新建composer容器来实现。

使用docker hub中的composer镜像,发现依赖于宿主机中的php,还是用不了。

看来我们要通过centos镜像自建composer服务容器了。

下载镜像:

sudo docker pull centos:6.7

创建容器并运行:

sudo docker run \
  --name composer \ 
  -v /home/baiyang/www:/var/www/html \
  -v /etc/localtime:/etc/localtime:ro \
  -itd centos:6.7

单行写法:

sudo docker run --name composer -v /home/baiyang/www:/var/www/html -v /etc/localtime:/etc/localtime:ro -itd centos:6.7

进入容器:

sudo docker exec -it composer /bin/bash

更新yum源:

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

更新软件包缓存:

yum clean all

yum makecache

搜索可用php版本:

yum list php*

发现没看到php71w,先安装php7.1看看:

yum install -y php71w

不过看到安装了mod_php71w,印象中mod_php71w是作为apache模块运行的,查阅文档后发现原来mod_php71w提供php71w、 mod_php、 php71w-zts。

安装基础拓展包:

yum install -y php71w-common

php71w-common 提供了下面这些,也是其他拓展包所依赖的,需要先安装好:

php-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-filter, 
php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, 
php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml, php-sockets, php-spl, 
php-tokenizer, php-zend-abi, php-zip, php-zlib

安装cli拓展:

yum install -y php71w-cli

查看php版本:

php -v

输出:

PHP 7.1.33 (cli) (built: Oct 26 2019 11:22:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

mbstring这个包经常用到(如yii2),也可以安装好:

yum install php71w-mbstring

下载composer安装包:

cd /usr/local/src

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

安装:

php composer-setup.php

移除安装包: php -r "unlink('composer-setup.php');"

直接移动到环境搜索目录下,重命名为composer:

mv composer.phar /usr/local/bin/composer

设置包源:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

也可以是这个镜像https://packagist.phpcomposer.com,不过服务不稳定。

查看当前源地址:

composer config -g -l repo.packagist

查看版本:

composer -v

到项目下就可以使用了。

cd /var/www/html/test

composer update

不过发现docker容器中的composer更新包后,在用户环境下是不属于当前用户的,如果修改文件权限,又会导致git捕获变化。 看来composer还是要安装在用户环境中,这也就是说在用户环境下还需要安装php-cli,与docker容器中已有的php需求重复了。 我们需要想清楚docker容器中应该安装什么和不必要安装什么。一般而言,版本更新不频繁,不会造成用户环境软件混乱的可以直接安装在用户环境中; 版本更新频繁或者需求版本比较多的,就要考虑安装在docker容器中了,再就是安装在docker容器中后,电脑每次重启我们都要启动下docker容器中的相应服务。

php7.0安装

安装php7.0:

yum install php70w

最后输出:

Installed:
  php70w.x86_64 0:7.0.33-1.w6                                                                                                                                                 

Dependency Installed:
  apr.x86_64 0:1.3.9-5.el6_9.1                             apr-util.x86_64 0:1.3.9-3.el6_0.1                      apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1                    
  httpd.x86_64 0:2.2.15-69.el6.centos                      httpd-tools.x86_64 0:2.2.15-69.el6.centos              hwdata.noarch 0:0.233-20.1.el6                            
  initscripts.x86_64 0:9.03.61-1.el6.centos                iproute.x86_64 0:2.6.32-57.el6                         iptables.x86_64 0:1.4.7-19.el6                            
  iputils.x86_64 0:20071127-24.el6                         libdrm.x86_64 0:2.4.65-2.el6                           libedit.x86_64 0:2.11-4.20080712cvs.1.el6                 
  libpciaccess.x86_64 0:0.13.4-1.el6                       libsemanage.x86_64 0:2.0.43-5.1.el6                    mailcap.noarch 0:2.1.31-2.el6                             
  mingetty.x86_64 0:1.08-5.el6                             module-init-tools.x86_64 0:3.9-26.el6                  php70w-cli.x86_64 0:7.0.33-1.w6                           
  php70w-common.x86_64 0:7.0.33-1.w6                       plymouth.x86_64 0:0.8.3-29.el6.centos                  plymouth-core-libs.x86_64 0:0.8.3-29.el6.centos           
  plymouth-scripts.x86_64 0:0.8.3-29.el6.centos            policycoreutils.x86_64 0:2.0.83-30.1.el6_8             psmisc.x86_64 0:22.6-24.el6                               
  redhat-logos.noarch 0:60.0.14-12.el6.centos              sysvinit-tools.x86_64 0:2.87-6.dsf.el6                 udev.x86_64 0:147-2.74.el6_10                             
  upstart.x86_64 0:0.6.5-17.el6                            util-linux-ng.x86_64 0:2.17.2-12.28.el6_9.2           

Dependency Updated:
  libblkid.x86_64 0:2.17.2-12.28.el6_9.2                                                 libuuid.x86_64 0:2.17.2-12.28.el6_9.2                                                

Complete!

可以看到同时安装好了:php70w-common、 php70w-cli等。

失败记录

下载镜像:

sudo docker pull centos:7

创建容器并运行:

sudo docker run \
  --name composer \ 
  -v /home/baiyang/www:/var/www/html \
  -v /etc/localtime:/etc/localtime:ro \
  -itd centos:7

单行写法:

sudo docker run --name composer -v /home/baiyang/www:/var/www/html -v /etc/localtime:/etc/localtime:ro -itd centos:7

进入容器:

sudo docker exec -it composer /bin/bash

改为国内源。 先备份下:

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

删除文件,重新编辑:

rm -f /etc/yum.repos.d/CentOS-Base.repo

vi /etc/yum.repos.d/CentOS-Base.repo

写入下面内容后,保存退出:

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7

更新软件包缓存:

yum clean all

yum makecache

或者这样更新yum源:

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

搜索可用php版本:

yum list php*

发现没看到php71w,不过看到了mod_php71w,印象中mod_php71w是作为apache模块运行的,查阅文档后发现原来mod_php71w提供php71w、 mod_php、 php71w-zts。 安装php7.1:

yum install -y php71w

安装基础拓展包:

yum install -y php71w-common

php71w-common 提供了下面这些,也是其他拓展包所依赖的,需要先安装好:

php-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-filter, 
php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, 
php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml, php-sockets, php-spl, 
php-tokenizer, php-zend-abi, php-zip, php-zlib

可能会报错:

Processing Dependency: libgmp.so.3()(64bit) for package: php71w-common-7.1.33-1.w6.x86_64

说需要libgmp.so.3(),我们应该有这个包,只是名称不是这个,在根目录下搜索看看:

find -name libgmp.so.*

输出:

./usr/lib64/libgmp.so.10
./usr/lib64/libgmp.so.10.2.0
./usr/lib64/fipscheck/libgmp.so.10.2.0.hmac
./usr/lib64/fipscheck/libgmp.so.10.hmac

看到有,我们只需要新建软链就可以。不幸的是实验下来不可行。是centos7的问题,还是安装centos6.7吧。

其他

现在在deepin终端中无法直接运行容器内的php命令,如果有这个需求,可以参考下 基于docker的php命令行

等docker玩的很熟练了后,用docker搭建环境过程还是挺复杂的,想一键快捷管理,可以考虑下 宝塔

本机LNMP安装

上面用了Docker搭建环境,这里用传统的直接在本机搭建环境的方法。本机Deepin,本身就是Linux,所以只需要安装接下来的 Nginx 、 Mysql 、 PHP 。

sudo apt update

sudo apt upgrade

Nginx安装

安装:

sudo apt install nginx

查看版本:

nginx -v

输出: nginx version: nginx/1.10.3

查看状态:

service nginx status

输出:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-12-17 10:51:13 CST; 1h 49min ago
     Docs: man:nginx(8)
 Main PID: 24302 (nginx)
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/nginx.service
           ├─24302 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─24303 nginx: worker process
           ├─24304 nginx: worker process
           ├─24305 nginx: worker process
           └─24306 nginx: worker process

或者:

systemctl status nginx

输出:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-03-01 09:51:08 CST; 3h 36min ago
     Docs: man:nginx(8)
  Process: 4597 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 4443 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 4622 (nginx)
    Tasks: 5 (limit: 4915)
   Memory: 5.8M
      CPU: 1.582s
   CGroup: /system.slice/nginx.service
           ├─4622 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─4623 nginx: worker process
           ├─4624 nginx: worker process
           ├─4625 nginx: worker process
           └─4626 nginx: worker process

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

重启服务:

systemctl restart nginx

测试nginx.conf配置文件中是否存在语法错误:

sudo nginx -t

输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Mysql安装

安装:

sudo apt install mysql-server

查看版本:

sudo mysql -v

输出:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.37-MariaDB-0+deb9u1 Debian 9.6

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Reading history-file /root/.mysql_history
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

查看状态:

service mysql status

输出:

● mariadb.service - MariaDB 10.1.37 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-12-17 11:01:00 CST; 19s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 27365 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 27 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           └─27365 /usr/sbin/mysqld

默认是没有密码的,我们查看一下:

sudo cat /etc/mysql/debian.cnf

输出:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = root
password = 
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = root
password = 
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

进入mysql,直接回车:

sudo mysql -u root -p

更改密码:

选择库

use mysql;

查看user表数据

select host,user,plugin,authentication_string from user;

输出

+-----------+------+-------------+-----------------------+
| host      | user | plugin      | authentication_string |
+-----------+------+-------------+-----------------------+
| localhost | root | unix_socket |                       |
+-----------+------+-------------+-----------------------+
1 row in set (0.00 sec)

unix_socket是说unix_socket认证插件允许用户通过本地Unix套接字文件连接到MariaDB的时候使用操作系统的凭证。 通俗的讲就是用Linux操作系统的账号,去登录MariaDB/MySQL数据库。 这个功能是在MariaDB 10.4.6版本里添加的,目前也支持在MySQL 8.0.18版本中。

重设密码

> update user set plugin="mysql_native_password",authentication_string=password('新密码') where user="root";

刷新权限

FLUSH PRIVILEGES;

退出:

exit

新建用户和数据库,可以看一下上面docker中mysql部分的相应操作

卸载过程

停止服务:

sudo service mysql stop

卸载,期间会询问是否清空数据:

sudo apt autoremove --purge mysql-server
sudo apt remove mysql-server
sudo apt autoremove mysql-server

清理残留数据: dpkg -l |grep mysql|awk '{print $2}' |sudo xargs dpkg -P

PHP安装

php安装,我们可以对照着过去那一篇看下去。

添加可获取php的apt源:

sudo vim /etc/apt/sources.list

把这一行也加上,然后保存退出: deb https://packages.sury.org/php/ stretch main

手动添加gpg秘钥:

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

更新:

sudo apt update

搜索看一下想要的包:

apt search php7.1

安装php7.1版本:

sudo apt install php7.1

看到如下提示:

将会同时安装下列软件:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
  libaprutil1-ldap libpcre16-3 libpcre3 libpcre3:i386 libpcre3-dev libpcre32-3 libpcrecpp0v5 php-common php7.1-cli php7.1-common
  php7.1-json php7.1-opcache php7.1-readline
建议安装:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom php-pear
下列【新】软件包将被安装:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
  libaprutil1-ldap php-common php7.1 php7.1-cli php7.1-common php7.1-json php7.1-opcache php7.1-readline
下列软件包将被升级:
  libpcre16-3 libpcre3 libpcre3:i386 libpcre3-dev libpcre32-3 libpcrecpp0v5
升级了 6 个软件包,新安装了 16 个软件包,要卸载 0 个软件包,有 10 个软件包未被升级。

可以看到同时安装了: php-common php7.1 php7.1-cli php7.1-common php7.1-json php7.1-opcache php7.1-readline

命令行可以使用php了。如查看版本:

php -v

输出:

PHP 7.1.33-24+0~20201103.44+debian9~1.gbp50e805 (cli) (built: Nov  3 2020 14:33:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.33-24+0~20201103.44+debian9~1.gbp50e805, Copyright (c) 1999-2018, by Zend Technologies

为了提供web服务,我们还需要安装php-fpm:

sudo apt install php7.1-fpm

查看fpm服务状态:

service php7.1-fpm status

输出:

● php7.1-fpm.service - The PHP 7.1 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.1-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-12-17 15:15:12 CST; 35s ago
     Docs: man:php-fpm7.1(8)
  Process: 20405 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.1/fpm/pool.d/www.conf 71 (
  Process: 20412 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.1/fpm/pool.d/www.conf 71
 Main PID: 20409 (php-fpm7.1)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/php7.1-fpm.service
           ├─20409 php-fpm: master process (/etc/php/7.1/fpm/php-fpm.conf)
           ├─20410 php-fpm: pool www
           └─20411 php-fpm: pool www

不过现在php-fpm用的是socket方式,我们要改成9000端口方式:

sudo vim /etc/php/7.1/fpm/pool.d/www.conf

在这个文件中看到了listen监听的配置:

listen = /run/php/php7.1-fpm.sock

看到这里监听的是socket方式,我们把这一行屏蔽掉,加入新的一行:

;listen = /run/php/php7.1-fpm.sock
listen = 127.0.0.1:9000

保存退出。 好,配置也修改完毕,接下来重启php-fpm:

sudo service php7.1-fpm restart

数学处理 php7.1-bcmath 安装:

sudo apt install php7.1-bcmath

会提示:

NOTICE: Not enabling PHP 7.1 FPM by default.
NOTICE: To enable PHP 7.1 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.1-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

原因是安装了apache2的包,但是我们的服务器用的是nginx。 卸载apache相关:

sudo apt-get purge apache2

sudo apt autoremove

sudo apt autoclean

重新安装:

sudo apt-get purge php7.1-bcmath

sudo apt install php7.1-bcmath

字符处理 php7.1-mbstring 安装:

sudo apt install php7.1-mbstring

数据库处理 安装mysql拓展,包含mysql、 mysqli、 pdo等:

sudo apt install php7.1-mysql

网络处理 php7.1-curl 安装:

sudo apt install php7.1-curl

xml处理 php7.1-xml 安装 (不然会提醒 ext-dom 缺失):

sudo apt install php7.1-xml

图片处理 php7.1-gd 安装 (php处理图形的扩展库,提供了一系列用来处理图片的API,如验证码等):

sudo apt install php7.1-gd

查看安装好的php拓展有哪些:

php -m

输出:

[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zlib

[Zend Modules]
Zend OPcache
Composer安装

切记不要用apt方式安装composer,会出各种各样的问题。我们直接用php安装composer。

可以参考下过去的blog 安装使用, 也可以去官网看一下安装过程。

下载:

> php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

校验:

> php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

输出: Installer verified

安装:

php composer-setup.php

输出:

All settings correct for using Composer
Downloading...

Composer (version 2.0.8) successfully installed to: /home/baiyang/www/composer.phar
Use it: php composer.phar

移除安装包:

> php -r "unlink('composer-setup.php');"

我们要把composer命令加入环境变量:

sudo mv composer.phar /usr/bin/composer

查看版本:

composer -v

输出:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.0.8 2020-12-03 17:20:38
...

如果版本高了,我们可以自己在官网下载指定版本,下载的文件是编译好的,然后直接移动到PATH目录下。

设置包源:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

web项目搭建

编辑hosts文件:

sudo vim /etc/hosts

加一行:

127.0.0.1      admin.host

新增conf文件:

sudo vim /etc/nginx/conf.d/admin.host.conf

写入内容:

server {
    listen       80;
    server_name  admin.host admin.host;

    location / {
        root   /home/baiyang/www/Admin/admin/web;
        index  index.html index.htm index.php;
        # yii2 使用
        try_files $uri $uri/ /index.php?$args;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

   location ~ \.php$ {
        root           /home/baiyang/www/Admin/admin/web;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

保存退出。

重启nginx服务:

sudo service nginx restart

打开浏览器访问admin.hsot。






参考资料

深度科技社区 https://www.deepin.org

深度启动盘制作工具 https://www.deepin.org/original/deepin-boot-maker/

深度系统(Deepin Linux)U盘安装教程 http://tangwumo.com/%E6%B7%B1%E5%BA%A6%E7%B3%BB%E7%BB%9F%EF%BC%88deepin-linux%EF%BC%89u%E7%9B%98%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B.html

deepin15.8安装过程(详细) https://segmentfault.com/a/1190000017033590

Linux docker安装配置 https://ibaiyang.github.io/blog/linux/2019/12/19/linux-docker%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE.html

Docker php安装扩展步骤详解 https://www.cnblogs.com/yinguohai/p/11329273.html

解决非root用户没有权限运行docker命令的问题 https://blog.csdn.net/icodestechnology/article/details/97170540

深度 linux 搭建 php 开发环境 https://www.jianshu.com/p/d44e912bf1b7

linux(deepin)在启动器上制作启动图标 https://blog.csdn.net/zhangjingao/article/details/76546363

Deepin 15.7 安装 Postman http://php-note.com/article/detail/b529a43aa3f94eda93c2fd59956bb1e6

Deepin 安装 Postman https://blog.yoyoyo.me/index.php/archives/63/

深度Deepin系统中,自己安装Firefox https://www.jianshu.com/p/86d5be359cf5

Linux安装navicat, 并解决中文乱码 https://blog.csdn.net/qq_38276669/article/details/82288870

基于docker的php命令行 https://xiejindou.com/2018/06/24/%E5%9F%BA%E4%BA%8Edocker%E7%9A%84php%E5%91%BD%E4%BB%A4%E8%A1%8C/

Docker php安装扩展步骤详解 https://www.cnblogs.com/yinguohai/p/11329273.html

为docker下的php容器安装php-redis扩展【编译安装】 https://www.cnblogs.com/wyaokai/p/11904701.html

docker hub composer https://hub.docker.com/_/composer

docker run的–rm选项详解 https://blog.csdn.net/nzjdsds/article/details/81981732

清华开源软件镜像站 https://mirrors.cnnic.cn/

centos7配置国内yum源 https://blog.csdn.net/xiaojin21cen/article/details/84726193

http://www.xiaoshu168.com/linux/31.html

Deepin 安装 MySQL https://blog.csdn.net/yi0322/article/details/107527743

MySQL 8.0.18增加身份验证插件 - Unix Socket https://blog.51cto.com/hcymysql/2448860?source=dra

deepin 15.11安装php7.1及以上版本 https://blog.csdn.net/biaobiaoxiao/article/details/106663548

GPG入门教程 http://www.ruanyifeng.com/blog/2013/07/gpg.html

阿里巴巴源 https://developer.aliyun.com/mirror/


返回