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
保存并重启容器即可。
#推荐美国服务器