diff --git a/.github/workflows/linux-x86_64.yml b/.github/workflows/linux-x86_64.yml index d679e313df..f878217163 100644 --- a/.github/workflows/linux-x86_64.yml +++ b/.github/workflows/linux-x86_64.yml @@ -158,7 +158,7 @@ jobs: export PATH=/usr/libexec/docker/cli-plugins/:$PATH docker-compose version docker container ls -a - bash sapi/src/UnitTest/scripts/database/start.sh + bash sapi/docker/database/start.sh - name: Show Build Result run: | diff --git a/README.md b/README.md index 02a442b9f3..847712346c 100644 --- a/README.md +++ b/README.md @@ -85,14 +85,26 @@ bash setup-php-runtime.sh # 来自 https://www.swoole.com/download bash setup-php-runtime.sh --mirror china +# 使用swoole-cli +# shell脚本中启用别名扩展功能‌ +shopt -s expand_aliases +__DIR__=$(pwd) +export PATH="${__DIR__}/bin/runtime:$PATH" +ln -sf ${__DIR__}/bin/runtime/swoole-cli ${__DIR__}/bin/runtime/php +alias php="php -d curl.cainfo=${__DIR__}/bin/runtime/cacert.pem -d openssl.cafile=${__DIR__}/bin/runtime/cacert.pem" +which php +php -v + ``` ## 生成构建脚本 ```shell + composer install php prepare.php php prepare.php +inotify +mongodb -mysqli + ``` * 脚本会自动下载相关的`C/C++`库以及`PECL`扩展 diff --git a/build-release-example.sh b/build-release-example.sh index dce6ccfa1a..a3b214f6a9 100644 --- a/build-release-example.sh +++ b/build-release-example.sh @@ -172,6 +172,9 @@ if [ ! -f "${__PROJECT__}/bin/runtime/php" ]; then fi export PATH="${__PROJECT__}/bin/runtime:$PATH" +# 交互模式下alias 扩展默认是开启的,脚本模式下默认是关闭的 +# 在shell脚本中启用别名扩展功能‌ +shopt -s expand_aliases alias php="php -d curl.cainfo=${__PROJECT__}/bin/runtime/cacert.pem -d openssl.cafile=${__PROJECT__}/bin/runtime/cacert.pem" php -v @@ -219,7 +222,7 @@ if [ ${IN_DOCKER} -eq 1 ]; then { # 容器中 - php prepare.php +inotify ${OPTIONS} + php prepare.php ${OPTIONS} } else diff --git a/sapi/docker/build-export-container.sh b/sapi/docker/build-export-container.sh index bef08e724d..4e4ece3a47 100644 --- a/sapi/docker/build-export-container.sh +++ b/sapi/docker/build-export-container.sh @@ -51,7 +51,7 @@ done case "$MIRROR" in china | openatom) - CONTAINER_BASE_IMAGE="hub.atomgit.com/library/alpine:3.18" + CONTAINER_BASE_IMAGE="docker.io/library/alpine:3.18" ;; esac diff --git a/sapi/src/UnitTest/scripts/database/docker-compose.yaml b/sapi/docker/database/docker-compose.yaml similarity index 97% rename from sapi/src/UnitTest/scripts/database/docker-compose.yaml rename to sapi/docker/database/docker-compose.yaml index 1b0a17061a..6444f1e9d0 100644 --- a/sapi/src/UnitTest/scripts/database/docker-compose.yaml +++ b/sapi/docker/database/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3" services: postgresql-server: - image: postgres:16-alpine + image: postgres:17-alpine # image: postgis/postgis:16-3.4-alpine hostname: "postgresql" container_name: "postgresql" diff --git a/sapi/docker/database/my.cnf b/sapi/docker/database/my.cnf new file mode 100644 index 0000000000..d934c69412 --- /dev/null +++ b/sapi/docker/database/my.cnf @@ -0,0 +1,27 @@ + +[client] +default-character-set=utf8mb4 +[mysql] +default-character-set=utf8mb4 + +[mysqld] +skip_ssl +skip-ssl-session-cache-mode + +# bind-address = 0.0.0.0 +bind-address = 0.0.0.0 +# bind-address = :: + +# 跳过密码登录 +# skip-grant-tables + +collation-server = utf8mb4_unicode_ci +init-connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci' +character-set-server = utf8mb4 +innodb_ft_min_token_size = 1 +ft_min_word_len = 1 +innodb_ft_enable_stopword = OFF +ft_stopword_file = '' + + + diff --git a/sapi/src/UnitTest/scripts/database/start.sh b/sapi/docker/database/start.sh similarity index 100% rename from sapi/src/UnitTest/scripts/database/start.sh rename to sapi/docker/database/start.sh diff --git a/sapi/src/UnitTest/scripts/database/stop.sh b/sapi/docker/database/stop.sh similarity index 100% rename from sapi/src/UnitTest/scripts/database/stop.sh rename to sapi/docker/database/stop.sh diff --git a/sapi/quickstart/linux/install-docker-compose.sh b/sapi/quickstart/linux/install-docker-compose.sh index 830ed50268..5516d1d091 100644 --- a/sapi/quickstart/linux/install-docker-compose.sh +++ b/sapi/quickstart/linux/install-docker-compose.sh @@ -24,14 +24,15 @@ if [ ! -f /usr/libexec/docker/cli-plugins/docker-compose ]; then # show more version info # https://github.com/docker/compose/releases - VERSION="v2.32.1" + VERSION="v2.32.4" curl -fsSL "https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose else - export PATH=/usr/libexec/docker/cli-plugins/:$PATH + # export PATH=/usr/libexec/docker/cli-plugins/:$PATH + ln -sf /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose fi docker-compose --version diff --git a/sapi/quickstart/linux/run-alpine-container.sh b/sapi/quickstart/linux/run-alpine-container.sh index b2c8f09b27..8b24f96989 100644 --- a/sapi/quickstart/linux/run-alpine-container.sh +++ b/sapi/quickstart/linux/run-alpine-container.sh @@ -28,7 +28,7 @@ while [ $# -gt 0 ]; do MIRROR="$2" case "$MIRROR" in china | openatom) - IMAGE="hub.atomgit.com/library/alpine:3.18" + IMAGE="docker.io/library/alpine:3.18" ;; esac ;; diff --git a/sapi/quickstart/linux/run-debian-container.sh b/sapi/quickstart/linux/run-debian-container.sh index c2fe991bcb..956bf0b1cd 100644 --- a/sapi/quickstart/linux/run-debian-container.sh +++ b/sapi/quickstart/linux/run-debian-container.sh @@ -28,7 +28,7 @@ while [ $# -gt 0 ]; do MIRROR="$2" case "$MIRROR" in china | openatom) - IMAGE="hub.atomgit.com/library/debian:12" + IMAGE="docker.io/library/debian:12" ;; esac ;; diff --git a/sapi/scripts/build-swoole-cli-alpine-container.sh b/sapi/scripts/build-swoole-cli-alpine-container.sh new file mode 100644 index 0000000000..436d16932e --- /dev/null +++ b/sapi/scripts/build-swoole-cli-alpine-container.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash + +set -exu +__DIR__=$( + cd "$(dirname "$0")" + pwd +) +__PROJECT__=$( + cd ${__DIR__}/../../ + pwd +) + +cd ${__DIR__} +cd ${__PROJECT__} + +test -d var/build-swoole-cli-container/ && rm -rf var/build-swoole-cli-container/ +mkdir -p var/build-swoole-cli-container/ +cd ${__PROJECT__}/var/build-swoole-cli-container/ + +cp -f ${__PROJECT__}/setup-swoole-cli-runtime.sh . + +VERSION="6.0.0.0" +bash setup-swoole-cli-runtime.sh --version v${VERSION} + +cat >php.ini <<'EOF' +curl.cainfo="/usr/local/swoole-cli/etc/cacert.pem" +openssl.cafile="/usr/local/swoole-cli/etc/cacert.pem" +swoole.use_shortname=off +display_errors = On +error_reporting = E_ALL + +upload_max_filesize="128M" +post_max_size="128M" +memory_limit="1G" +date.timezone="UTC" + +opcache.enable=On +opcache.enable_cli=On +opcache.jit=1225 +opcache.jit_buffer_size=128M + +; jit 更多配置参考 https://mp.weixin.qq.com/s/Tm-6XVGQSlz0vDENLB3ylA + +expose_php=Off +apc.enable_cli=1 + +EOF + +cat >Dockerfile <<'EOF' +FROM alpine:3.20 + +ENV TZ=Etc/UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN mkdir -p /usr/local/swoole-cli/etc/conf.d/ +ADD ./bin/runtime/swoole-cli /usr/local/bin/ +ADD ./bin/runtime/composer /usr/local/bin/ +ADD ./bin/runtime/cacert.pem /usr/local/swoole-cli/etc/ +ADD ./php.ini /usr/local/swoole-cli/etc/ + +RUN chmod a+x /usr/local/bin/swoole-cli +RUN chmod a+x /usr/local/bin/composer +RUN ln -sf /usr/local/bin/swoole-cli /usr/local/bin/php + +ARG MIRROR="" +RUN test -f /etc/apk/repositories.save || cp /etc/apk/repositories /etc/apk/repositories.save +RUN if [ "${MIRROR}" = "ustc" -o "${MIRROR}" = "china" ]; then { sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories ; } fi +RUN if [ "${MIRROR}" = "tuna" ]; then { sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories ; } fi + +RUN apk add ca-certificates tini bash + +RUN mkdir /work +WORKDIR /work +ENTRYPOINT ["tini", "--"] + +EOF + +PLATFORM='' +ARCH=$(uname -m) +case $ARCH in +'x86_64') + PLATFORM='linux/amd64' + ;; +'aarch64') + PLATFORM='linux/arm64' + ;; +esac + +while [ $# -gt 0 ]; do + case "$1" in + --platform) + PLATFORM="$2" + ;; + --*) + echo "Illegal option $1" + ;; + esac + shift $(($# > 0 ? 1 : 0)) +done + +TIME=$(date -u '+%Y%m%dT%H%M%SZ') +ARCH=$(uname -m) + +TAG="alpine-3.20-v${VERSION}-${ARCH}-${TIME}" +TAG=${VERSION} +IMAGE="docker.io/phpswoole/swoole-cli:${TAG}" + +#MIRROR='china' +MIRROR='' +docker buildx build -t ${IMAGE} -f ./Dockerfile . --platform ${PLATFORM} --build-arg="MIRROR=${MIRROR}" + +echo ${IMAGE} + +# docker save -o "swoole-cli-image.tar" ${IMAGE} +: <<'EOF' +{ + docker push ${IMAGE} +} || { + echo $? +} +EOF + +docker run --rm --name demo ${IMAGE} swoole-cli -v +docker run --rm --name demo ${IMAGE} swoole-cli -m +docker run --rm --name demo ${IMAGE} swoole-cli -c /usr/local/swoole-cli/etc/php.ini --ri curl +docker run --rm --name demo ${IMAGE} swoole-cli -c /usr/local/swoole-cli/etc/php.ini --ri openssl +docker run --rm --name demo ${IMAGE} swoole-cli --ri swoole diff --git a/sapi/scripts/cygwin/cygwin-config-ext.sh b/sapi/scripts/cygwin/cygwin-config-ext.sh index f9364c28da..377792345b 100644 --- a/sapi/scripts/cygwin/cygwin-config-ext.sh +++ b/sapi/scripts/cygwin/cygwin-config-ext.sh @@ -49,7 +49,7 @@ fi mkdir -p ${WORK_TEMP_DIR}/ext/redis/ tar --strip-components=1 -C ${WORK_TEMP_DIR}/ext/redis/ -xf redis-${REDIS_VERSION}.tgz -: < #!/usr/bin/env bash +shopt -s expand_aliases __PROJECT_DIR__=$(cd "$(dirname "$0")"; pwd) CLI_BUILD_TYPE=getBuildType() . PHP_EOL ?> SRC=phpSrcDir . PHP_EOL ?> @@ -415,8 +416,8 @@ if [ -n "$2" ]; then MIRROR=$2 case "$MIRROR" in - china | openatom ) - CONTAINER_BASE_IMAGE="hub.atomgit.com/library/alpine:3.18" + china | openatom) + CONTAINER_BASE_IMAGE="docker.io/library/alpine:3.18" ;; esac fi diff --git a/setup-php-runtime.sh b/setup-php-runtime.sh index cb741ad95a..694aef9365 100644 --- a/setup-php-runtime.sh +++ b/setup-php-runtime.sh @@ -156,10 +156,12 @@ cd ${__PROJECT__}/ set +x echo " " -echo " USE PHP RUNTIME :" +echo " USE PHP RUNTIME : " echo " " echo " export PATH=\"${__PROJECT__}/bin/runtime:\$PATH\" " echo " " +echo " shopt -s expand_aliases " +echo " " echo " alias php='php -d curl.cainfo=${__PROJECT__}/bin/runtime/cacert.pem -d openssl.cafile=${__PROJECT__}/bin/runtime/cacert.pem' " echo " OR " echo " alias php='php -c ${__PROJECT__}/bin/runtime/php.ini' " diff --git a/setup-swoole-cli-runtime.sh b/setup-swoole-cli-runtime.sh index d4785cf1b6..c9b4ea66ac 100644 --- a/setup-swoole-cli-runtime.sh +++ b/setup-swoole-cli-runtime.sh @@ -228,6 +228,8 @@ echo " USE PHP-CLI RUNTIME :" echo " " echo " export PATH=\"${__PROJECT__}/bin/runtime:\$PATH\" " echo " " +echo " shopt -s expand_aliases " +echo " " echo " alias swoole-cli='swoole-cli -d curl.cainfo=${__PROJECT__}/bin/runtime/cacert.pem -d openssl.cafile=${__PROJECT__}/bin/runtime/cacert.pem' " echo " OR " echo " alias swoole-cli='swoole-cli -c ${__PROJECT__}/bin/runtime/php.ini' "