家境贫寒
努力学习只为补贴家用

使用Docker快速搭建部署LNMP环境

墨娘阅读(459)

经过上次在Ubuntu上安装PHP环境后, Ubuntu20.04安装nginx&php环境以及swoole&redis扩展,这几天需要更换PHP版本,然后扩展又得再装一遍,感觉到了分外麻烦。在网上找方便快捷解决方案的时候Docker进入了我的眼中。本文介绍如何使用Docker快速搭建部署LNMP环境

Docker是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

墨娘的准备工作

学习Docker:在网上找了一些Docker的基础资料[1],然后开始尝试

准备基础镜像:PHP[2],Mysql[3],Nginx[4],Redis[5]

然后在原始PHP镜像中装入自己常用的PHP扩展和Composer1、Composer2,打包上传https://hub.docker.com/r/itwmw/php,这个镜像也是下文要用的

正式准备工作

安装Docker

Ubuntu系统以及Debian系统

sudo apt-get update
sudo apt-get install -y docker

Centos系统

yum update
yum install docker

安装完毕后输入docker -v即可看到版本号

安装docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

首先创建一个lnmp文件夹

mkdir lnmp
cd lnmp

进入lnmp文件夹后,将下面内容复制到docker-compose.yaml文件内

version: '3'
services:
  nginx:
    image: nginx:1.19
    restart: always
    ports:
      - "80:80"
      - "443:443"
    links:
      - php:php
    volumes:
      - "/data/conf.d:/etc/nginx/conf.d"
      - "/data/www:/data/www"
  php:
    image: itwmw/php:7.4-fpm
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - "/data/www:/data/www"
    links:
      - mysql:mysql
      - redis:redis
  mysql:
    image: mysql:8.0
    restart: always
    ports:
      - "3306:3306"
      - "33060:33060"
    volumes:
      - "/data/mysql8:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  redis:
    image: redis:6.0
    restart: always
    command: redis-server --appendonly yes
    ports:
      - "6379:6379"
    volumes:
      - "/data/redis6:/data"

如果不需要Redis,可以删除redis那一栏,并把php下的links内的redis也删除掉,

/data为对应你本地的目录;
/data/www为你的网站储存目录;
/data/conf.d为对应你的Nginx配置目录;
/data/mysql8为对应你的Mysql数据储存目录;
/data/redis6为对应你的Redis数据持久化存储目录;

如果想修改组件的版本号,可以修改image后面的版本号,具体有哪些版本,可以Docker Hub内的信息[2][3][4][5][6]

生成容器

准备工作完成后,在lnmp目录下执行下面命令生成容器

docker-compose up -d

正常情况下,如果你没有pull过镜像,你会有一个拉取镜像的过程,墨娘这里已经拉取过镜像,所以直接创建成功了,通过命令

docker ps

可以查看当前存在并运行中的程序

这个时候,可以输入 http://ip 查看到Nginx的页面了

配置Nginx

我们在/data/conf.d中简单配置一个Nginx的配置项,如果你对Nginx配置你熟悉,可以使用这个:配置高性能、安全、稳定的NGINX服务器的最简单方法

server {
    listen                     80;
    server_name                127.0.0.1;
    keepalive_timeout          75s;
    keepalive_requests         100;
    root                       /data/www;

    location / {
        index      index.html index.htm index.php;
    }

    location ~ ^/.+\.php(/|$) {
        fastcgi_index            index.php;
        fastcgi_param            SCRIPT_FILENAME /data/www$fastcgi_script_name;
        fastcgi_split_path_info  ^(.+\.php)(/.*)$;
        fastcgi_param            PATH_INFO $fastcgi_path_info;
        fastcgi_param            PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_read_timeout     60s;
        fastcgi_pass             php:9000;
        include                  fastcgi_params;
    }
}

上面内容复制到/www/conf.d/127.0.0.1.conf文件中(conf.d目录如果你自己改过,请改为相应的目录),然后让Nginx重载配置,使新配置生效

docker exec -it lnmp_nginx_1 service nginx reload

紧接着,我们在网站目录/data/www下创建一个index.php文件,并将下面内容复制进去

<?php
echo "PHP脚本解析成功 <br />";
try {
    $conn = "mysql:host=mysql;port=3306;charset=utf8mb4";
    $pdo = new PDO($conn, "root", "123456");
    echo "Mysql 连接成功<br />";
}catch (PDOException $e){
    echo "Mysql 连接失败<br />";
}

$redis = new Redis();

$redis->connect('redis',6379,5);
try {
    $redis->ping();
    echo "Redis 连接成功<br />";
    $redis->close();
}catch (RedisException $e){
    echo "Redis 连接失败<br />";
}

重新访问你的网站http:ip

到此Lnmp配置完成,可以正常使用PHP,Mysql,Redis了

其他命令

  • 关闭单个容器 docker stop [容器ID或者名称]
  • 启动单个容器 docker start[容器ID或者名称]
  • 删除单个容器 docker rm [容器ID或者名称] 此命令必须在Docker停止后才可执行,否则请加 -f 参数
  • 容器编组启动,在编组目录下执行docker-compose start
  • 容器编排停止,在编组目录下执行docker-compose stop
  • 容器编排删除,在编组目录下执行docker-compose rm 此命令必须在Docker停止后才可执行,否则请加 -f 参数

参考资料:

  1. https://www.runoob.com/docker/docker-tutorial.html
  2. https://hub.docker.com/_/php
  3. https://hub.docker.com/_/mysql
  4. https://hub.docker.com/_/nginx
  5. https://hub.docker.com/_/redis
  6. https://hub.docker.com/r/itwmw/php

Linux新增大于2T的硬盘以及挂载

墨娘阅读(290)

此文章记录在Centos7环境下,新增大于2T的硬盘,进行分区,格式化,挂载全过程

一、首先查看新增的磁盘

fdisk –l

发现只有一个磁盘,且存在未挂载的空间,现在增加新分区,挂载磁盘剩余空间

二、转换磁盘格式

由于磁盘大于2T,所以需要转换磁盘格式为GPT,这里使用parted来完成

parted /dev/sdb

/dev/sdb为第一步未挂载的磁盘,输入下面命令转换分区

malabel gpt

然后退出

quit

查看分区,已经转换成功

三、创建分区

使用下面命令来创建分区,这里将整块硬盘创建为一个分区,如果想创建多个分区,可多次操作

fdisk /dev/sdb

n为创建分区,w为保存分区

使用命令fdisk -l来检查是否创建成功

四、格式化分区

接下来将分区进行格式化,文件格式为ext4

五、挂载分区

然后将格式化的分区进行挂载,首先需要创建一个文件夹,然后使用mount命令进行挂载

六、开机自动挂载

vim /etc/fstab

添加

/dev/sdb1 /data ext4 defaults 0 0

Ubuntu20.04安装nginx&php环境以及swoole&redis扩展

墨娘阅读(772)

一、安装PHP环境

运行下面的命令,安装PHP环境

sudo apt install php-fpm

一旦安装完成,FPM 服务将会自动启动。想要检查服务状态,运行:

sudo service php7.4-fpm status

输出:php-fpm7.4 is running

二、安装PHP扩展

PHP 扩展被编译成库文件,用来扩展 PHP 核心功能。扩展通常作为软件包,并且可以很容易地通过apt来进行安装:

sudo apt install php-[extname]

如果想要安装Mysql,Db,xdebug扩展,可以执行下面的命令

sudo apt install php-mysql php-gd php-xdebug

安装完毕后,执行php -m可查看安装了哪些模块

安装Swoole扩展

swoole扩展无法通过apt进行安装,我们可以下载源码包进行编译安装或者使用pecl

PECL安装方法:

pecl install swoole

源码安装

在https://github.com/swoole/swoole-src下载源码

以下命令自动执行下载和安装步骤

ubuntu 没有安装 phpize 可执行命令:sudo apt-get install php-dev 来安装 phpize

wget https://github.com/swoole/swoole-src/archive/v4.5.6.tar.gz && \
tar zxvf v4.5.6.tar.gz && \
cd swoole-src-4.5.6 && \
phpize && \
./configure && \
make && sudo make install

编译安装到系统成功后,需要在 php.ini 中加入一行 extension=swoole.so 来启用 Swoole 扩展

安装Redis扩展

在https://pecl.php.net/package/redis下载源码

或执行下面命令:

wget https://pecl.php.net/get/redis-5.3.2.tgz && \
tar xvf redis-5.3.2.tgz && \
cd redis-5.3.2 && \
phpize && \
./configure && \
make && sudo make install

同样编译安装到系统成功后,需要在 php.ini 中加入一行 extension=redis.so 来启用 Redis扩展

三、安装Ngxin

执行以下命令即可完成安装:

sudo apt-get install nginx

配置目录默认在:/etc/nginx/conf.d目录下

输入命令启动Nginx:

sudo service nginx start 

如果80端口已放通的话,浏览器访问Ubuntu的IP,即可看到Welcome to nginx!的字样

Win10下Wsl子系统Ubuntu20.04安装界面

墨娘阅读(667)

此文章记录下我自己在在Ubuntu20.04安装界面以及Xrdp的全过程 ,中间踩了非常多坑,也看了网上非常多的教程,最后得到的结果都不是很理想,本文不会介绍如何安装WSL和安装Ubuntu子系统,请先安装好,满足下面的环境要求:

  • 系统:Win10
  • WSL:wsl2
  • 子系统:Ubuntu20.04

看本文章的时候,请确保你的配置和我的一样,否则可能会得到不可预估的结局

一、更改源(可跳过)

首先更改源来提升下载速度

sudo vim /etc/apt/sources.list

删除里面的全部内容,填入下面的内容:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted
deb http://security.ubuntu.com/ubuntu/ focal-security universe
deb http://security.ubuntu.com/ubuntu/ focal-security multiverse

保存完毕之后,更新一下

sudo apt update

二、安装桌面环境

sudo apt install xubuntu-desktop

稍后会跳出一个让选择用户管理的,选择GDM3

三、安装Xrdp

sudo apt install xrdp 

默认情况下,Xrdp 使用/etc/ssl/private/ssl-cert-snakeoil.key,它仅仅对“ssl-cert” 用户组成语可读。运行下面的命令,将xrdp用户添加到这个用户组:

sudo adduser xrdp ssl-cert

Xrdp默认使用3389端口,如果需要更改,可修改/etc/xrdp/xrdp.ini文件

sudo sed -i 's/port=3389/port=3398/g' /etc/xrdp/xrdp.ini

四、配置xsession

sudo echo xfce4-session >~/.xsession

这一步其实是在告诉系统,开启桌面环境的时候开启什么桌面环境。为什么是xfce4呢,因为xubuntu本质就是xfce4加上一些插件与软件。

修改完毕后,重启你的电脑,开机后,启动Xrdp服务

sudo service xrdp start

如果不能连接,请检查你的防火墙。

远程连接

在windows开始菜单中搜远程桌面打开后在计算机后面输入localhost:3398点击连接。

这个时候,部署桌面环境以及远程连接已经完成了

五、汉化(可选)

如果你想汉化,可以使用命令

sudo dpkg-reconfigure locales

然后一直按键盘上的找到zh_CN UTF-8 UTF-8,然后按空格勾选,再tab切换到ok上回车

接下来的界面选zh CN.UTF-8再回车。

如果你的界面没有生效,右上角注销一下就好啦~