if ($request_method = 'OPTIONS') {
            add_header 'access-control-allow-origin' '*' always;
            add_header 'access-control-allow-methods' 'GET, POST, PATCH, PUT, DELETE, OPTIONS' always;
            add_header 'access-control-allow-credentials' 'false' always; # origin不能为*
            add_header 'access-control-allow-headers' 'token, spread, authorization, content-type, if-match, if-modified-since, if-none-match, if-unmodified-since, x-csrf-token, x-requested-with' always;
            add_header 'access-control-max-age' '2592000' always;
            add_header 'content-type' 'text/plain';
            add_header 'content-length' 0;
            return 204;
        }

# 动态请求 的 请求ID, nginx传给PHP
fastcgi_param  logid $request_id;
# 动态请求 的 请求日志ID
add_header 'logid' $request_id always;

add_header upstream $upstream_addr always;
add_header 'access-control-allow-origin' '*' always;
add_header 'access-control-expose-headers' 'upstream, date, logid' always;

dd if=/dev/zero of=/var/swapfile bs=1M count=4096
chmod 0600 /var/swapfile
/sbin/mkswap /var/swapfile
/sbin/swapon /var/swapfile
echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab
/sbin/swapon -s

cat /proc/meminfo

free -m

前期准备

mkdir -p /data/src /data/unzip /data/install
yum install -y wget bzip2 gcc libxml2-devel

备完, 暂时不安装 gcc-c++

因为openssl需要zlib, nginx需要zlib
wget http://www.zlib.net/zlib-1.2.11.tar.gz -O /data/src/zlib-1.2.11.tar.gz
tar zxf /data/src/zlib-1.2.11.tar.gz -C /data/unzip
得到 /data/unzip/zlib-1.2.11


因为openssl需要perl5
wget https://www.cpan.org/src/5.0/perl-5.32.1.tar.gz -O /data/src/perl-5.32.1.tar.gz
tar -zxf /data/src/perl-5.32.1.tar.gz -C /data/unzip
cd /data/unzip/perl-5.32.1
./Configure -des -Dprefix=/data/install/perl5.32.1 -Dusethreads -Uversiononly
make
make install
mv /usr/bin/perl /usr/bin/perl.old
ln -s /data/install/perl5.32.1/bin/perl /usr/bin/perl
perl -v


安装openssl 1.0.2u 和 1.1.1j, 新老有别

apache2.4

wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1j.tar.gz -O /data/src/OpenSSL_1_1_1j.tar.gz
tar zxf /data/src/OpenSSL_1_1_1j.tar.gz -C /data/unzip
cd /data/unzip/openssl-OpenSSL_1_1_1j
./config enable-weak-ssl-ciphers -fPIC --prefix=/data/install/openssl.1.1.1j --openssldir=/usr/local/openssl.1.1.1j
make depend
make -j grep 'processor' /proc/cpuinfo | wc -l
make install
ln -sf /usr/local/openssl.1.1.1j/lib/libcrypto.so.1.1 /usr/lib/
ln -sf /usr/local/openssl.1.1.1j/lib/libssl.so.1.1 /usr/lib/

nginx 和 php 等

wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2u.tar.gz -O /data/src/OpenSSL_1_0_2u.tar.gz
tar zxf /data/src/OpenSSL_1_0_2u.tar.gz -C /data/unzip
cd /data/unzip/openssl-OpenSSL_1_0_2u
./config -fPIC --prefix=/data/install/openssl.1.0.2u --openssldir=/data/install/openssl.1.0.2u
make depend
make -j grep 'processor' /proc/cpuinfo | wc -l
make install


因为高版本curl的DNS查询需要高版本的c-ares
wget https://c-ares.haxx.se/download/c-ares-1.17.1.tar.gz -O /data/src/c-ares-1.17.1.tar.gz
tar zxf /data/src/c-ares-1.17.1.tar.gz -C /data/unzip


因为PHP7.4需要curl curl-7.62.0, 注意:版本太新则c-ares检测失败

wget https://github.com/curl/curl/releases/download/curl-7_62_0/curl-7.62.0.tar.gz -O /data/src/curl-7.62.0.tar.gz
tar zxf /data/src/curl-7.62.0.tar.gz -C /data/unzip
cd /data/unzip/curl-7.62.0
./configure --prefix=/data/install/curl-7.62 --enable-ares --without-nss --with-zlib=/data/unzip/zlib-1.2.11 --with-ssl=/data/install/openssl.1.0.2u
make -j grep 'processor' /proc/cpuinfo | wc -l
make install
ldconfig


因为PHP7.4需要pcre
wget ftp://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz -O /data/src/pcre-8.44.tar.gz
tar zxf /data/src/pcre-8.44.tar.gz -C /data/unzip


因为PHP7.4需要freetype 2.7
wget https://download.savannah.gnu.org/releases/freetype/freetype-2.7.1.tar.gz -O /data/src/freetype-2.7.1.tar.gz
tar zxf /data/src/freetype-2.7.1.tar.gz -C /data/unzip
cd /data/unzip/freetype-2.7.1
./configure --prefix=/data/install/freetype-2.10.4
make -j grep 'processor' /proc/cpuinfo | wc -l
make install
cp /data/install/freetype-2.7.1/lib/pkgconfig/freetype2.pc /usr/lib/pkgconfig/
cat > /etc/ld.so.conf.d/freetype.conf<<EOF
/data/install/freetype-2.7.1/lib
EOF
ldconfig
ln -sf /data/install/freetype-2.7.1/include/freetype2/* /usr/include/


wget http://mirrors.sohu.com/php/php-7.4.15.tar.gz -O /data/src/php-7.4.15.tar.gz
tar zxf /data/src/php-7.4.15.tar.gz -C /data/unzip
cd /data/unzip/php-7.4.15

./configure \
--prefix=/data/php \
--with-config-file-path=/data/php/etc \
--with-config-file-scan-dir=/data/php/conf.d \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pdo-sqlite \
--with-iconv-dir \
--with-freetype=/data/install/freetype-2.7.1 \
--with-jpeg \
--with-png \
--with-webp \
--with-zlib \
--with-bz2 \
--enable-phar \
--enable-xml \
--with-libxml-dir \
--enable-libxml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-inline-optimization \
--with-curl=/data/install/curl-7.62 \
--enable-mbstring \
--enable-mbregex \
--enable-intl \
--enable-pcntl \
--enable-ftp \
--enable-gd \
--with-openssl=/data/unzip/openssl-OpenSSL_1_0_2u \
--with-mhash \
--enable-sockets \
--with-xmlrpc \
--with-zip \
--without-libzip \
--enable-soap \
--with-gettext \
--enable-opcache \
--with-xsl \
--with-pear \
--with-pcre=/data/unzip/pcre-8.44 \
--with-pcre-regex \
--enable-exif \
--with-libdir=/lib64

docker容器之间互联, 默认是创建一个虚拟局域网络, DHCP分配IP地址, 从而桥接在一起互通;
整个虚拟网络内的所有容器 与 宿主机 是 NAT端口映射模式;

要容器内查询 ip地址 和 端口映射情况;

查询 网络模式
docker network ls
name有 bridge,host,none

查询 网络IP与容器的情况
docker network inspect [网络模式的name]
比如:
docker network inspect bridge
得到:

"4b32914e77989ecb74324ee81e4e9596be44902bd5ef95afa7639355824dcfa9": {
    "Name": "hyperf2",
    "EndpointID": "e84bd168a8f93a41712dfbcf5b2c0748e61a972fbea24325b78976a96b98d8a9",
    "MacAddress": "02:42:ac:11:00:03",
    "IPv4Address": "172.17.0.3/16",
    "IPv6Address": ""
},
"5e313d3e68a8069950a6d0f971d88333c155ec396dc5f5225611256e4ae935e3": {
    "Name": "hyperf",
    "EndpointID": "a5d7aef7dfc3114fe73dcb820bffc391c689bf5325d10b61d9005b96d14d2f2d",
    "MacAddress": "02:42:ac:11:00:02",
    "IPv4Address": "172.17.0.2/16",
    "IPv6Address": ""
},

查询 容器的端口映射情况
示例:
C:UsersAdministrator>docker port hyperf
9501/tcp -> 0.0.0.0:22222
9502/tcp -> 0.0.0.0:33333

示例:
C:UsersAdministrator>docker port hyperf2
9503/tcp -> 0.0.0.0:44444

docker run 的时候,指定 --network [网络Id]
docker network create --driver bridge my_net可以创建一个指定网络ID的虚拟局域网,bridge模式

同一个虚拟局域网, 容器内 如何知道 其他容器的IP地址 ?
给IP地址一个别名, docker run 的时候 --network my_net --network-alias php

CentOS7 安装docker

yum update -y
yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
systemctl start docker
systemctl enable docker
docker version


Win10 安装docker

https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe


下载源代码

git clone git@gitee.com:hello/caiss-front.git


下载运行环境的镜像
docker pull hyperf/hyperf:7.4-alpine-v3.11-swoole


启动容器

docker rm -f hyperf

Linux系统是

docker run -it --volume=/data/wwwroot/caiss-front:/hyperf-skeleton --publish=22222:9501 --name="hyperf" --entrypoint /bin/sh hyperf/hyperf:7.4-alpine-v3.11-swoole

Windows10系统
鲸鱼的Settings的Resources的FileSharing要添加宿主机目录,比如开放F磁盘

docker run -it --volume=F:/caiss-front:/hyperf-skeleton --publish=22222:9501 --name="hyperf" --entrypoint /bin/sh hyperf/hyperf:7.4-alpine-v3.11-swoole

exit


开始编码

docker start hyperf
docker exec -ti hyperf /bin/sh
cd /hyperf-skeleton/
任意操作,比如
composer install
composer start
exit

关机下班