Debian 11 安装docker并部署lnmp

1 安装docker

1.1 设置存储库

# 参考自官方安装说明https://docs.docker.com/engine/install/debian/
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update

1.2 安装最新版(如果有提示输入y/n的地方,直接按y继续)

apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.3 测试:当容器运行时,它会打印一条确认消息并退出。

docker run hello-world

说明:与centos不同,不需要再设置开机启动,安装时已经设置好。

2 建立镜像,复制一些必要配置文件

2.1 建立一个nginx最新版容器(自动拉取镜像),复制docker中nginx配置文件到主机

docker run -d --name nginx nginx:alpine
mkdir /home/docker
mkdir /home/docker/wwwlogs
mkdir /home/docker/config
mkdir /home/docker/wwwroot
docker cp nginx:/etc/nginx /home/docker/config/
# 修改/home/docker/config/nginx/nginx.conf,在http{}中添加
client_max_body_size 50M;

nginx:alpine用的是最新版nginx镜像,功能与nginx:latest一模一样,内核要小很多。

2.2 建一个php-fpm容器

docker run --name php-fpm -d php:7.4-fpm
mkdir /home/docker/config/php
docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf /home/docker/config/php/www.conf
docker cp php-fpm:/usr/local/etc/php/php.ini-production /home/docker/config/php/php.ini
docker cp php-fpm:/usr/local/etc/php/conf.d /home/docker/config/php/conf.d

# 修改php.ini
去掉extension=mysqli(以及 extension=pdo_mysql)前面的分号
upload_max_filesize = 50M
post_max_size = 64M
# 如果后面发现php时间不对,可以修改下面(这里建议一同修改了)
去掉date.timezone = 前面分号,修改为 date.timezone = "PRC"

2.3 建立一个mysql容器

docker run -d -e MYSQL_ROOT_PASSWORD=your—#—password --name mysql mysql:5.7
mkdir /home/docker/config/mysql
docker cp mysql:/var/lib/mysql /home/docker/config/
注意:设置你的mysql密码!

2.4 停止并删除全部容器

docker stop mysql php-fpm nginx
docker rm mysql php-fpm nginx

3 正式安装

3.1 添加一个内网(官方已不建议用–link的方式连接各个docker)

docker network create --subnet=172.18.0.0/16 mynetwork

3.2 新建mysql

docker run -d \
 --net mynetwork --ip 172.18.0.33 \
 -v /home/docker/config/mysql:/var/lib/mysql \
 --restart=always \
 --name mysql mysql:5.7

注意:直接用的2.3复制的数据库,此次不需要设置root密码。

3.3 新建php-fpm

docker run --name php-fpm \
 --net mynetwork --ip 172.18.0.90 \
 -v /etc/localtime:/etc/localtime:ro \
 -v /home/docker/wwwroot:/var/www/html \
 -v /home/docker/config/php/www.conf:/usr/local/etc/php-fpm.d/www.conf \
 -v /home/docker/config/php/php.ini:/usr/local/etc/php/php.ini \
 -v /home/docker/config/php/conf.d:/usr/local/etc/php/conf.d \
 --restart=always \
 -d php:7.4-fpm

3.4 php容器添加mysqli支持。如果你不需要exif,可以去掉。

# 进入容器
docker exec -it php-fpm /bin/bash
# 执行命令
docker-php-ext-install mysqli pdo pdo_mysql exif 

3.5 添加gd zip intl imagick支持(wordpress等需要)

# 更新软件源
apt-get update
# 安装相关库
apt-get install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev libzip-dev libicu-dev libmagick++-dev zlib1g-dev
# 解压源码
docker-php-source extract
# gd 源码文件夹
cd /usr/src/php/ext/gd
# 编译
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp
# 安装
docker-php-ext-install gd zip intl
# 安装imagick
apt-get install -y imagemagick
pecl install imagick
# 当提示Please ...... installation [autodetect] :直接回车
docker-php-ext-enable imagick
# 退出容器,重启
exit
docker restart php-fpm

#如果安装过程中提示缺少什么库,可以搜索一下,用apt-get install安装对应库后再重新安装,例如有些需要加这个libintl-dev

3.6 新建nginx

docker run  \
 --name nginx \
 --net mynetwork --ip 172.18.0.3 \
 -p 80:80 \
 -p 443:443 \
 -v /etc/localtime:/etc/localtime:ro \
 -v /home/docker/wwwroot:/usr/share/nginx/html \
 -v /home/docker/config/nginx:/etc/nginx \
 -v /home/docker/wwwlogs/nginx:/var/log/nginx \
 --restart=always \
 -d nginx:alpine
# 因为服务器有其他应用使用了80端口,我这里用的服务器88端口对应nginx容器的80,访问的时候是用 http://your_ip:88/
# 你如果直接用nginx做web服务器,可以端口设置为 -p 80:80
# 如果需要开启ssl,加上 -p 443:443 (ssl证书等设置查看4.4章节)
# 给日志目录添加权限
docker exec nginx chown -R nginx:nginx /var/log/nginx

3.7 nginx默认网站添加php配置,修改/home/docker/config/nginx/conf.d/default.conf 在中间添加下面代码

    location ~ \.php$ {
        fastcgi_pass   172.18.0.90:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        include        fastcgi_params;
        proxy_buffers 256 128k;
    }

重启nginx容器

docker restart nginx
# 你可以放一个phpinfo或者php探针文件,查看是否配置成功。

3.8 请确认你的mysql root密码没有使用默认密码!!!

4 添加网站

4.1 假设域名www.aaaa.com,网站目录为/home/docker/wwwroot/www.aaaa.com

4.2 新建aaaa.com.conf在/home/docker/config/nginx/conf.d/目录,其中php配置如下

# 不同站点,修改SCRIPT_FILENAME值中对应的  www.aaaa.com  路径
        location ~ \.php$ {
            fastcgi_pass   172.18.0.90:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/www.aaaa.com$fastcgi_script_name;
            include        fastcgi_params;
            proxy_buffers 256 128k;
        }

4.3 设置网站权限(如果出现找不到文件或者禁止访问无权限等问题,没有出现则不用设置)

# 设置php权限
docker exec php-fpm chown -R www-data:www-data www.aaaa.com

# 如果是旧网站打包过来的,目录下有.user.ini,需修改里面的路径为/var/www/html/www.aaaa.com
# 先解锁文件 chattr -i .user.ini 再vi修改
open_basedir=/var/www/html/www.aaaa.com:/tmp/:/proc/
docker restar nginx php-fpm
# 再次锁定文件 chattr +i .user.ini

4.4 设置https(如果需要)

# 新建ssl目录
mkdir /home/docker/config/nginx/ssl
# 配置 DH parameters 文件
openssl dhparam -out /home/docker/config/nginx/ssl/dhparams.pem 2048
# 上传你的证书key crt文件
# 网站nginx配置文件参考
server
    {
        listen 443 ssl http2;
        #listen [::]:80;
        server_name www.aaaa.com ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /usr/share/nginx/html/www.aaaa.com;

        ssl_certificate /etc/nginx/ssl/www.aaaa.com.crt;
        ssl_certificate_key /etc/nginx/ssl/www.aaaa.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

        location ~ \.php$ {
            fastcgi_pass   172.18.0.90:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/www.aaaa.com$fastcgi_script_name;
            include        fastcgi_params;
            proxy_buffers 256 128k;
        }
    }

5 常用操作

# 进入nginx容器 
docker exec -it nginx /bin/sh
# 查看容器启动日志(如果没启动成功,日志会显示什么地方配置错误) 
docker logs nginx
# 有时若访问网站/目录出现403错误,请检查nginx的server配置里是否把index.php设置为首页

#使用docker中的phpmyadmin上传只有2m
 进入容器 安装VIM
	docker exec -it phpmyadmin /bin/bash
	apt-get update
	apt-get install -y vim
	cd /usr/local/etc/php/conf.d
 新建uploads.ini,并写入:
	file_uploads = On
	memory_limit = 64M
	upload_max_filesize = 64M
	post_max_size = 64M
	max_execution_time = 600
 保存并重启容器即可。
#推荐美国服务器
滚动至顶部