Docker-Compose编排Nginx1.25.1+PHP7.4.33+Redis7.0.11环境
实践说明:基于RHEL7(CentOS7.9)部署docker环境(23.0.1、24.0.2),编排也可应用于RHEL7-9(如AlmaLinux9.1),但因为docker的特性,适用场景是不限于此的。
文档形成时期:2017-2023年
因系统或软件版本不同,构建部署可能略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。
因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。
文章目录
- 创建数据持久化目录
- Docker单独构建PHP镜像
- 查看默认配置、版本和已安装模块
- php_Dockerfile
- 创建容器
- php.ini配置
- 设置扩展
- 模块安装结果
- Docker单独构建Nginx镜像
- Docker单独构建Redis镜像
- 下载和安装Compose
- 创建数据持久化目录
- docker-compose.yml文件内容
- Compose编排构建
- 构建网络加速
- 重新构建前清理现场
- 一键删除docker-compose镜像和容器示例
- 清除docker镜像缓存
- 项目启停和查看
- 和外部网络通信
- Mysql环境
创建数据持久化目录
mkdir -p /opt/docker/{nginx_cfg,nginx_log,php_cfg,php_log,redis_cfg,redis_log} /opt/web
Docker单独构建PHP镜像
compose构建过程中,PHP是最复杂最紧要的,先单独构建PHP镜像很有必要。
拉取官方7.4的php-fpm(默认是拉取最新版)
docker pull php:7.4.33-fpm
或通过Dockerfile构建一个新的镜像(推荐)
docker buildx build -t tmtcha/php:7.4.33-fpm-tmp -f /root/sh/Dockerfiles/Independent/php_Dockerfile_tmp .
#创建自定义网络,并指定网段、网关,只有定义了网段,才可以使用此网络为容器分配固定IP
docker network create -d bridge --subnet 10.1.4.0/24 --gateway 10.1.4.1 custom_bridge_net
运行容器
docker run -d --name phpfpm74-tmp -v /opt/web/:/opt/web --network custom_bridge_net --ip 10.1.4.3 tmtcha/php:7.4.33-fpm-tmp
查看默认配置、版本和已安装模块
docker官方php7.4.33-fpm的镜像使用的系统版本是基于Debian11
docker exec phpfpm74 /bin/bash -c 'cat /etc/issue'
Debian GNU/Linux 11 \n \l
查看默认源
docker exec phpfpm74-tmp /bin/bash -c 'cat /etc/apt/sources.list'
# deb http://snapshot.debian.org/archive/debian/20221114T000000Z bullseye main
deb http://deb.debian.org/debian bullseye main
# deb http://snapshot.debian.org/archive/debian-security/20221114T000000Z bullseye-security main
deb http://deb.debian.org/debian-security bullseye-security main
# deb http://snapshot.debian.org/archive/debian/20221114T000000Z bullseye-updates main
deb http://deb.debian.org/debian bullseye-updates main
查看php版本
[root@localhost ~]# docker exec phpfpm74 /bin/bash -c 'php -version'
PHP 7.4.33 (cli) (built: Nov 15 2022 06:05:55) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
官方php7.4.33默认安装模块
[root@localhost ~]# docker exec phpfpm74 /bin/bash -c 'php -m'
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
- 和php7.1.33的差不多,仅多一个sodium
配置拷贝出来:
mkdir /root/recycle_bin/phpfpm74;docker cp phpfpm74:/usr/local/etc /root/recycle_bin/phpfpm74
php_Dockerfile
cat /root/sh/Dockerfiles/Independent/php_Dockerfile
FROM php:7.4.33-fpm
MAINTAINER Fisher "N"# 设置时区
ENV TZ=Asia/Shanghai#Download PHP extensions
#ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
#RUN chmod uga+x /usr/local/bin/install-php-extensions && syncCOPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \&& mv /etc/apt/sources.list /etc/apt/sources.list.bak \&& echo 'deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib ' > /etc/apt/sources.list \&& echo 'deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib ' >> /etc/apt/sources.list \&& echo 'deb https://mirrors.aliyun.com/debian-security/ bullseye-security main ' >> /etc/apt/sources.list \&& echo 'deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main ' >> /etc/apt/sources.list \&& echo 'deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib ' >> /etc/apt/sources.list \&& echo 'deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib ' >> /etc/apt/sources.list \&& echo 'deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib ' >> /etc/apt/sources.list \&& echo 'deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib ' >> /etc/apt/sources.list \&& mkdir /opt/web && mkdir -p /usr/local/var/log && touch /usr/local/var/log/php-fpm.log && touch /usr/local/var/log/php_errors.log \&& chown www-data:www-data /usr/local/var/log/php-fpm.log /usr/local/var/log/php_errors.log \&& DEBIAN_FRONTEND=noninteractive apt-get update -q \&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y \curl \git \zip unzip \&& install-php-extensions \bcmath \bz2 \calendar \exif \gd \intl \ldap \memcached \mysqli \opcache \pdo_mysql \pdo_pgsql \pgsql \redis \soap \xsl \zip \sockets \swoole \yaf \memcached \mongodb-stable \mcrypt \iconv \mbstring \gettext \gmp \ftp \pcntl \shmop \sysvsem \sysvshm \sqlsrv pdo_sqlsrv \odbc \xmlrpc \geoip \@composer-2.5.8
可停止并清理之前创建的测试用的临时镜像和临时容器:
docker stop phpfpm74-tmp
docker rm phpfpm74-tmp
docker rmi tmtcha/php:7.4.33-fpm-tmp
重新构建
docker buildx build -t tmtcha/php:7.4.33-fpm-v1.01 -f /root/sh/Dockerfiles/Independent/php_Dockerfile .
构建后的大小是519MB。
创建容器
docker run -d --name phpfpm74-v1.01 -v /opt/web/:/opt/web --network custom_bridge_net --ip 10.1.4.3 tmtcha/php:7.4.33-fpm-v1.01
后面要通过Compose整体构建,所以这里创建的容器仅做测试分析,不必留存,可以清理了。docker stop phpfpm74-tmp; docker rm phpfpm74-v1.01
后面要通过Compose整体构建,所以创建的网络仅做测试分析,不必留存,可以清理了。docker network rm custom_bridge_net
php.ini配置
cd /opt/docker/php_cfg/php
cp -ap php.ini-production php.ini
测试配置
docker exec phpfpm74-v1.01 /bin/bash -c "php-fpm -t"
重载配置
docker exec phpfpm74-v1.01 /bin/bash -c "kill -USR2 `docker exec phpfpm74-v1.01 /bin/bash -c 'ps aux | grep "php-fpm: master process" | grep -v "grep" | sed "s/\s\s*/ /g" | cut -d" " -f 2'`"
修改必要配置
error_log = php_errors.log
设置扩展
追加:
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20190902"
extension=bcmath.so
extension=exif.so
extension=gmp.so
extension=mcrypt.so
extension=mysqli.so
extension=pcntl.so
extension=pdo_sqlsrv.so
extension=shmop.so
;extension=sodium.so
extension=sysvsem.so
extension=xsl.so
extension=bz2.so
extension=gd.so
extension=intl.so
extension=memcached.so
extension=odbc.so
extension=pdo_mysql.so
extension=pgsql.so
extension=soap.so
extension=sqlsrv.so
extension=sysvshm.so
extension=yaf.so
extension=calendar.so
extension=gettext.so
extension=ldap.so
extension=mongodb.so
extension=pdo_pgsql.so
extension=redis.so
extension=sockets.so
extension=swoole.so
extension=xmlrpc.so
extension=zip.sozend_extension=opcache.so
[opcache]
;开启opcache
opcache.enable=1 ;CLI环境下,PHP启用OPcache
opcache.enable_cli=1;OPcache共享内存存储大小,单位MB
opcache.memory_consumption=128 ;PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了1000次字符串“foobar”,在PHP内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的999次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次——默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。这个选项的值是以兆字节(megabytes)作为单位,如果把它设置为16,则表示16MB,默认是4MB
opcache.interned_strings_buffer=8;这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和。设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。也就是说在200到1000000之间。
opcache.max_accelerated_files=4000;设置缓存的过期时间(单位是秒),为0的话每次都要检查
opcache.revalidate_freq=60;从字面上理解就是“允许更快速关闭”。它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器,从而加快PHP的响应速度和PHP进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为1就可以使用这个机制了。
opcache.fast_shutdown=1;如果启用(设置为1),OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果强烈建议你在生产环境中设置为0,更新代码后,再平滑重启PHP和web服务器。
opcache.validate_timestamps=0 ;开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.
opcache.file_cache=/tmp
模块安装结果
[root@localhost ~]# docker exec phpfpm74-v1.01 /bin/bash -c "php -m"
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
intl
json
ldap
libxml
mbstring
mcrypt
memcached
mongodb
mysqli
mysqlnd
odbc
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pdo_sqlsrv
pgsql
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
sqlsrv
standard
swoole
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
yaf
Zend OPcache
zip
zlib[Zend Modules]
Zend OPcache
Docker单独构建Nginx镜像
docker pull nginx:1.25.1
docker run -itd --name nginx1.25.1-tmp nginx:1.25.1
docker exec nginx1.25.1-tmp /bin/bash -c 'cat /etc/issue'
Debian GNU/Linux 12 \n \l
进入容器查看默认配置
docker exec -it nginx1.25.1-tmp /bin/bash
拷贝出来:
mkdir /root/recycle_bin/nginx1.25.1
docker cp nginx1.25.1-tmp:/etc/nginx /root/recycle_bin/nginx1.25.1
/bin/cp -ap /root/recycle_bin/nginx1.25.1/nginx/* /opt/docker/nginx_cfg/
Docker单独构建Redis镜像
docker pull redis:7.0.11
docker run -itd --name redis7.0.11-tmp redis:7.0.11
docker exec redis7.0.11-tmp /bin/bash -c 'cat /etc/issue'
Debian GNU/Linux 12 \n \l
进入容器查看默认配置
docker exec -it redis7.0.11-tmp /bin/bash
没有发现redis的配置,整个容器找遍了都没有,奇怪,默认采用的配置没有显形的?
默认情况下,redis启动后的配置文件路径是/etc/redis/redis.conf或/usr/local/etc/redis/redis.conf,但也可能都不是,数据文件主目录是/data
以配置文件方式启动
redis-server /usr/local/etc/redis/redis.conf
在创建容器时指定配置例:
docker run -d --privileged=true -p 6379:6379 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --name redis-test redis redis-server /etc/redis/redis.conf --appendonly yes
可从Redis官网(redis.io)下载同版本源码包,采用里面的配置。在容器中对应路径是/usr/local/etc/redis,宿主机对应/opt/docker/redis_cfg
下载和安装Compose
发行版查看:https://github.com/docker/compose/releases
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注意版本的选择,要安装其他版本的 Compose,请替换版本。
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
docker-compose --version
准备dockerfile文件和docker-compose.yml文件,docker-compose.yml文件:
cd ~/sh; mkdir Dockerfiles; cd Dockerfiles
mkdir {php,nginx,redis}
文件目录如下
/Dockerfiles
├── php
│ ├── php_Dockerfile
│ └── php.ini
├── nginx
│ ├── nginx_Dockerfile
│ └── default.conf
├── redis
│ ├── redis_Dockerfile
└── docker-compose.yml
一般都忌讳数据库用docker跑,所以mysql一般仍单独部署,redis如果有持久化数据,也单独部署,接下来部署的redis视为无持久化数据的。
nginx的Dockerfile内容:
FROM nginx:1.25.1
MAINTAINER Fisher “N”
RUN mkdir /opt/web
php的Dockerfile内容:
FROM tmtcha/php:7.4.33-fpm-v1.01
redis的Dockerfile内容:
FROM redis:7.0.11
MAINTAINER Fisher ““N””
#ENV http_proxy proxyurl
创建数据持久化目录
mkdir -p /opt/docker/{nginx_cfg,nginx_log,php_cfg,php_log,redis_cfg,redis_log} /opt/web
docker-compose.yml文件内容
version: "2.7"
services:nginx:build:context: ./nginxdockerfile: ./nginx_Dockerfilecontainer_name: "nginx1.25.1"# restart: on-failureports:- "80:80"- "443:443"volumes:- "/opt/docker/nginx_cfg:/etc/nginx"- "/opt/docker/nginx_log:/var/log/nginx"- "/opt/web:/opt/web"healthcheck:test: [ "CMD", "curl", "-f", "http://localhost:80" ]interval: 1m30stimeout: 7sretries: 3start_period: 40snetworks:custom_bridge_net:ipv4_address: 10.1.4.2dns:- 114.114.114.114- 223.5.5.5ulimits:nproc: 65535nofile:soft: 20000hard: 40000logging:driver: json-fileoptions:max-size: "50m" # 单个文件大小为50mmax-file: "10" # 最多10个文件php:build:context: ./phpdockerfile: ./php_Dockerfilecontainer_name: "phpfpm74-v1.01"# restart: on-failureports:- "9000:9000"volumes:- "/opt/web:/opt/web"- "/opt/docker/php_cfg:/usr/local/etc"- "/opt/docker/php_log:/usr/local/var/log"healthcheck:test: [ "CMD", "curl", "-f", "http://localhost:9000" ]interval: 1m30stimeout: 7sretries: 3start_period: 40snetworks:custom_bridge_net:ipv4_address: 10.1.4.3dns:- 114.114.114.114- 223.5.5.5ulimits:nproc: 65535nofile:soft: 20000hard: 40000logging:driver: json-fileoptions:max-size: "50m" # 单个文件大小为50mmax-file: "10" # 最多10个文件redis:build:context: ./redisdockerfile: ./redis_Dockerfilecontainer_name: "redis7.0.11"# restart: on-failureports:- "6379:6379"healthcheck:test: [ "CMD", "redis-cli", "ping" ]interval: 1m30stimeout: 7sretries: 3start_period: 40svolumes:- "/opt/docker/redis_cfg/redis.conf:/usr/local/etc/redis/redis.conf"- "/opt/redis/var:/data"command:redis-server /usr/local/etc/redis/redis.confnetworks:custom_bridge_net:ipv4_address: 10.1.4.4dns:- 114.114.114.114- 223.5.5.5ulimits:nproc: 65535nofile:soft: 20000hard: 40000logging:driver: json-fileoptions:max-size: "50m" # 单个文件大小为50mmax-file: "10" # 最多10个文件
networks:custom_bridge_net:ipam:driver: defaultconfig:- subnet: "10.1.4.0/24"gateway: 10.1.4.1
Compose编排构建
运行下列命令构建,即可自动完成端口绑定、挂载、链接等操作
docker-compose up
构建网络加速
Docker Compose在构建时,使用网络加速(代理)
重新构建前清理现场
一键删除docker-compose镜像和容器示例
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q | grep -v f0d2ed79caf3) # 删除所有镜像但保留镜像f0d2ed79caf3
清除docker镜像缓存
默认情况下,如果已经拉去了某个镜像,即使已经删了该镜像,但是再次拉取还是会取缓存数据,下面执行清除本地docker缓存:
docker system prune
WARNING! This will remove:- all stopped containers- all networks not used by at least one container- all dangling images- all dangling build cache
或
docker system prune --volumes 该命令清除:所有停止的容器所有不被任何一个容器使用的网络所有不被任何一个容器使用的volume所有无实例的镜像 再次拉取镜像,输出
项目启停和查看
后台运行
docker-compose up -d
查看容器运行状态
docker-compose ps
停止该项目运行
docker-compose stop
和外部网络通信
发现6379端口不通,经排查,修改redis配置,添加密码认证,protected-mode设为no,仍不可连,iptables没有阻止,firewall的trusted区域默认没有起作用,或可添加富规则到public区域生效后可连了:
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="来源IP" port protocol="tcp" port="6379" accept'
Mysql环境
独立部署,可参考基于RHEL8或RHEL9的RPM包构建部署:https://blog.csdn.net/ynz1220/article/details/135533982 https://blog.csdn.net/ynz1220/article/details/135535296
相关文章:
Docker-Compose编排Nginx1.25.1+PHP7.4.33+Redis7.0.11环境
实践说明:基于RHEL7(CentOS7.9)部署docker环境(23.0.1、24.0.2),编排也可应用于RHEL7-9(如AlmaLinux9.1),但因为docker的特性,适用场景是不限于此的。 文档形成时期:2017-2023年 因系统或软件版本不同,构建…...
《新课程教学》(电子版)是正规期刊吗?能评职称吗?
《新课程教学》(电子版)主要出版内容为学科教学理论、学科教学实践经验和成果,主要读者对象为中小学教师,期刊设卷首语、名家讲堂、课程与教学、教学实践、考试评价、教育信息化、教学琐谈、教育管理、教师心语、一线课堂、重温经…...
Posgresql macOS安装和基础操作
摘要 本文介绍macOS版本Postgresql的安装,pg常用命令。作为笔记记录,后续方便查看。 Postgresql安装 官网下载postgresql安装包https://www.postgresql.org/download/。官网下载慢时,可以从这里下载我上传的mac版本的pg安装包资源。下载后&am…...
ArkUI-X跨平台已至,何需其它!
运行环境 DevEco Studio:4.0Release OpenHarmony SDK API10 开发板:润和DAYU200 自从写了一篇ArkUI-X跨平台的文章之后,好多人都说对这个项目十分关注。 那么今天我们就来完整的梳理一下这个项目。 1、ArkUI-X 我们之前可能更多接触的…...
(2024,分数蒸馏抽样,Delta 降噪分数,LoRA)PALP:文本到图像模型的提示对齐个性化
PALP: Prompt Aligned Personalization of Text-to-Image Models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 4. 提示对齐方法 4.1 概述 4.2 个性化 4.3 提示对齐分数抽…...
近日遇到数据库及其他问题
一、查找备份表和原表不一样数据 select * from A where (select count(1) from A_BAK where A.IDA_BAK.ID) 0 二、在数据量比较大的表中新增有默认值的列速度较慢问题 使用 以下语句,在上亿数据的表中执行速度较慢 alter table TEST add col_a integer DEFA…...
【conda】conda 版本控制和环境迁移/安装conda加速工具mamba /conda常用指令/Anaconda配置
【conda】安装conda加速工具mamba /conda常用指令/Anaconda配置 0. conda 版本控制和环境迁移1. 安装conda加速工具mamba2. conda install version3. [Anaconda 镜像](https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)使用帮助4. error deal 0. conda 版本控制和环境迁移…...
“/bin/bash“: stat /bin/bash: no such file or directory: unknown
简介:常规情况下,在进入容器时习惯使用 /bin/bash为结尾,如:docker exec -it test-sanic /bin/bash, 但是如果容器本身使用了精简版,只装了sh命令,未安装bash。这时就会抛出"/bin/bash&quo…...
基于Spring Boot+vue的云上新鲜水果超市商城系统
本云上水果超市是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户、员工信息和管理员这三者的需求。操作简单易懂,合理分析各个模块的功能,尽可能…...
vue-ESlint代码规范及修复
1. 介绍 ESLint:是一个代码检查工具,用来检查你的代码是否符合指定的规则(你和你的团队可以自行约定一套规则)。 在创建项目时,我们使用的是 JavaScript Standard Style 代码风格的规则。 规范网址:https://standardjs.com/rules-zhcn.htm…...
Oracle数据库断电后不能打开的解决
数据库突然断电后,不能打开。或者偶尔能打开,但是很快就关闭。 原因可能很多。但是解决问题只有一种办法:看trace日志,alert错误日志 简单写下我的解决过程: 1,在alert日志中: 错误如下两种:…...
论文复现: In-Loop Filter with Customized Weights For VVC Intra Coding
论文复现: In-Loop Filter with Customized Weights For VVC Intra Coding 这个好难好难。啊啊啊啊。核心:权重预测模块功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的…...
配置华为设备NQA UDP Jitter检测VoIP业务抖动
组网需求 如图1所示,总部和子公司之间需要跨越外部网络进行通信,DeviceA和DeviceD为总部和子公司的网络出口设备,DeviceB和DeviceC为外部网络提供商的边缘设备。 总部和子公司之间经常要通过VoIP进行电话会议,要求双向时延小于2…...
GitHub要求所有贡献代码的用户在2023年底前启用双因素认证
到2023年底,所有向github托管的存储库贡献代码的用户都必须启用一种或多种形式的2FA。 双重身份认证 所谓双重身份认证(Two-Factor Authentication),就是在账号密码以外还额外需要一种方式来确认用户身份。 GitHub正在大力推动双…...
Nginx——强化基础配置
1、牢记Context Context是Nginx中每条指令都会附带的信息,用来说明指令在哪个指令块中使用,可以将Context 理解为配置环境。 每个指令都拥有自己的配置环境,如果把配置环境记错了,或者在设计时未考虑配置环境的作用,…...
黑马苍穹外卖学习Day6
HttpClient 介绍 HttpClient 是 Apache 提供的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一种更简便的方式来执行 HTTP 请求,并支持多种协议,如 HTTP、HTTPS、FTP 等。 使用 HttpClient 可以方便地与远程…...
【Java 设计模式】设计原则之里氏替换原则
文章目录 1. 定义2. 好处3. 应用4. 示例结语 在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。 ✨单一职责原则(SRP) ✨开放/封闭原则(…...
一步步指南:从指定时长中提取需求的帧图片,高效剪辑视频
在现代多媒体时代,视频已经成生活中不可或缺的一部分。从视频中提取某一帧图片,或者对视频进行剪辑,都是常见的需求。下面一起来看云炫AI智剪如何从指定时长中提取需求的帧图片,如何高效地剪辑视频。 按指定时长提取视频某帧图片的…...
【打卡】牛客网:BM93 盛水最多的容器
题目: 考虑到盛水容器的特殊性。双指针从最两边开始遍历,遍历过程中舍弃最小的。 不知道原理。 模板的: class Solution { public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*…...
Golang 文件操作
读取 一次性读取 data, err : os.ReadFile("filename.txt") if err ! nil {log.Fatal(err) } fmt.Println(string(data))按行读取 方式1:bufio.NewScanner file, err : os.Open("filename.txt") if err ! nil {panic(err) } defer file.Clo…...
C++I/O流——(3)文件输入/输出(第二节)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 含泪播种的人一定能含笑收获ÿ…...
内网穿透[让你在家里也能榨干学校的服务器]Yep!
内网穿透 问题:什么是内网穿透,内网穿透的作用是什么? 前提!!!!你得拥有超级管理员的权限,比如root,不然后面的一切免提! 应用场景如下:比如你…...
构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的支持63个常见模块的PHP8.1.20的RPM包
本文适用:rhel9系列,或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...
你知道什么是Java中的类型强转吗?
强制类型转换 强转存在与父转子的时候,子转父不需要进行强转,如 Object o "hello"; //String类是Object类的子类,无需进行强转类型强转分为两种情况: Ⅰ、向下转型:将父类对象引用转换为子类对象引用&am…...
【2023】ArrayList和LinkedList详解介绍对比
一、ArrayList 1、概述 ArrayList是实现了List接口的动态数组,所谓动态数组就是他的大小是可变的。实现了所有可选列表操作,并允许包括Null在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 …...
【软件工程】基于领域建模的产品与技术方案设计(领域驱动设计DDD)
文章目录 1、领域建模2、产品方案、技术方案3、领域驱动设计DDD 1、领域建模 领域模型(domain model) 是对领域内的概念类或现实世界中对象的可视化表示。领域模型也成为概念模型、领域对象模型和分析对象模型。域模型是一种概念模型,也叫问题域模型。它表述的是某…...
跨境电商账号频繁?你的IP可能“不干净”了
疫情促进了跨境电商行业的加速发展,许多卖家也抓住了这波流量红利,跨境电商月入数万,数十万甚至数百万的造福神话也不断在上演,但由于国内外电商运营模式不同,多店运营、用户数据收集、刷单等行为都受到了国外平台的严…...
Docker数据卷与拦截与目录拦截
目录 高级容器挂载技术深度解析引言数据卷挂载原理解析应用场景使用介绍 目录挂载原理解析应用场景使用介绍 总结 高级容器挂载技术深度解析 引言 容器技术的快速发展使得容器挂载技术变得愈发重要。在容器化应用中,数据卷挂载和目录挂载是两种常见的挂载方式&…...
Python 元类 metaclass 详解
元类(metaclass)是 Python 中一个高级且相对较少使用的概念。元类可以被视为类的类,它控制类的创建过程。 一、基本概念 在 Python 中,一切皆对象。为了避免混淆,我们约定两个术语: 类实例:当…...
HCIA基础知识
IP地址、静态路由、动态路由、交换机 OSPF RIP DHCP VLAN ACL NAT OSI TCP/IP UDP TCP 三次握手,四次挥手,报头 什么是网络? 由网络连接设备通过传输介质将网络终端设备连接起来,进行资源共享、信息传递的平台。 OSI七…...
国外优秀设计网站推荐/b2b平台
双碳计算中涉及到的单位换算 在双碳(碳中和与碳排放)计算当中,经常会对吸收或者排放的碳 C或二氧化碳 CO₂进行定量表达,比如常用植被NPP(Net Primary Productivity,净初级生产力)来表示植被吸…...
如何做淘宝cms导购网站/百度网址链接是多少
前些天在学习linux下的驱动编写,找到了一块之前淘到的液晶屏,主控芯片是ili9341,分辨率为240*320的屏幕,接口方式是SPI的,心血来潮想搞一下。不过奈何驱动水平不到家,只是开发出了一种杂交方法,…...
做网站和app多少费用/南通企业网站制作
https://www.jianshu.com/p/a41609eaccaf转载于:https://www.cnblogs.com/DC0307/p/11152443.html...
手机网站用什么制作/百度网址大全网站大全
传送门:POJ 1611 The Suspects (并查集) 题目大意 有很多组学生,在同一个组的学生经常会接触,也会有新的同学的加入。但是SARS是很容易传染的,只要在改组有一位同学感染SARS,那么该组的所有同学都被认为得…...
百度seo搜索引擎优化厂家/直通车关键词优化口诀
高考填报志愿时,双一流学科名单有哪些、数量有多少是广大考生和家长朋友们十分关心的问题,根据教育部公布的双一流学科建设名单可知:西安电子科技大学有信息与通信工程、计算机科学与技术2个学科入选了双一流学科建设名单,以下是具…...
phpcms转wordpress/网站优化公司认准乐云seo
通常大家会认为项目不成功是执行的问题,执行因素导致的项目失败的确占到一定的比例。但是从美国权威机构Standish Group跟踪研究的1484个项目的数据来看,项目团队组织上的问题导致项目失败的比例高达23%,具体表现为团队人员配置不当、职责不明…...