积木成楼
首页 / linux

build yourself Linux dev env

2019-05-09 · linux · 约 46 分钟

ContOS7 php多版本环境的配置

使用最小化安装之后的第一个问题,内外网不通

一些准备工作

安装 nginx

安装 PHP

phpnginx 链接起来

[root@localhost ~]# cd dev
[root@localhost dev]# mkdir -p www/php/test/
[root@localhost dev]# cd www/php/test/
[root@localhost test]# echo "<?php phpinfo();" >> ./index.php

安装docker

yum remove docker  docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io -y

systemctl start docker

systemctl enable docker

使用docker构建 php5.4 环境

docker 中 扩展安装

bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv imap interbase intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline recode reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zend_test zip

docker Debian 换源安装gd

cd /etc/apt && cp sources.list ./sources.list.bak
apt-get install vim

vim sources.list
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib

//如果连apt-get update都做不到   可以先 rm sources.list 再创一个新的
echo "deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib" >> sources.list
//将源更换为上述  新的源

apt-get update
apt-get install libfreetype6-dev -y
apt-get install libpng-dev -y
apt-get install libjpeg62-turbo-dev -y
//如果源没出问题 上述应该都能安装
docker-php-ext-configure gd --with-freetype-dir=/usr/include --with-jpeg-dir=/usr/include
//先编译gd库的扩展
docker-php-ext-install gd
// 这样就在docker容器内完美安装了gd库
curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.1.3.tar.gz

tar xfz /tmp/redis.tar.gz

rm -r /tmp/redis.tar.gz

mkdir -p /usr/src/php/ext

mv phpredis-3.1.3 /usr/src/php/ext/redis

docker-php-ext-install redis
1 root 0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
7 www-data 0:00 php-fpm: pool www
8 www-data 0:00 php-fpm: pool www

# 发现id 1就是php了,给它个信号让它重启即可,执行命令如下:
kill -USR2 1

安装 swoole


[root@localhost swoole]# php --ri swoole

swoole

Swoole => enabled
Author => Swoole Team <team@swoole.com>
Version => 4.4.0-alpha
Built => May 10 2019 20:30:06
coroutine => enabled
epoll => enabled
eventfd => enabled
signalfd => enabled
cpu_affinity => enabled
spinlock => enabled
rwlock => enabled
sockets => enabled
openssl => OpenSSL 1.0.2k-fips  26 Jan 2017
http2 => enabled
pcre => enabled
zlib => enabled
mutex_timedlock => enabled
pthread_barrier => enabled
futex => enabled
mysqlnd => enabled
async_redis => enabled

Directive => Local Value => Master Value
swoole.enable_coroutine => On => On
swoole.display_errors => On => On
swoole.use_shortname => On => On
swoole.unixsock_buffer_size => 8388608 => 8388608

docker 构建生产可用 php8.1

FROM php:8.1-fpm

ENV REDIS_VERSION=5.3.5  SWOOLE_VERSION=4.8.6

# 设置时间
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone

#更换源
RUN sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
RUN sed -i "s/http/https/g" /etc/apt/sources.list

#编译安装扩展 gd 与其他依赖配置
RUN apt-get update &&\
    apt-get install --allow-downgrades -y  libz-dev unzip sudo  \
       libzip-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev libssl-dev libcurl4-openssl-dev &&\
    apt-get clean &&\
    apt-get autoremove &&\
    docker-php-ext-configure gd &&\
    docker-php-ext-install -j$(nproc) gd

# top 与 ps 这类的监控软件 ,需要时添加
#RUN apt install procps --allow-downgrades -y

#pecl 安装扩展 redis
RUN pecl install redis-$REDIS_VERSION && docker-php-ext-enable redis

#安装其他必需扩展
RUN docker-php-ext-install bcmath pdo_mysql zip sockets pcntl

#安装swoole
#RUN pecl install swoole-$SWOOLE_VERSION && docker-php-ext-enable swoole

# Composer安装 与设置镜像地址
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update --clean-backups \
    && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

# php-OPcache 配置
RUN touch /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini &&  \
    echo "[opcache]" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "zend_extension=opcache.so" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.enable_cli=1" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.memory_consumption=256" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.interned_strings_buffer=8" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.max_accelerated_files=100000" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.max_wasted_percentage=5" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.use_cwd=1" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.validate_timestamps=1" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.revalidate_freq=2" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.save_comments=0" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.jit_debug=0" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.jit=1255" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "opcache.jit_buffer_size=256M" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "# 其他php配置" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "memory_limit=256M" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "upload_max_filesize=50M" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini && \
    echo "post_max_size=50M" >> /usr/local/etc/php/conf.d/docker-php-ext-OPcache.ini

# 更改 fpm 的分组 因为我 宿主机有 www:x:1001:1001 分组跟用户 所以才做这样的处理 其他机器按照自己想要的分组去处理就好
# groupadd -g 1001 www
RUN  useradd -u 1001 www && RUN sed -i "s/www-data/www/g" /usr/local/etc/php-fpm.d/www.conf

构建镜像

docker build -t php81-laravel:v1 .

构建运行时

docker run -i -t -d \
 --restart=always \
 -p 8100:9000 \
 -v /pathto/code:/var/www/html  --name=laravel8  php81-laravel:v1

执行者权限问题

# 容器内
id  www-data 
uid=33(www-data) gid=33(www-data) groups=33(www-data)
RUN  useradd -u 1001 www && RUN sed -i "s/www-data/www/g" /usr/local/etc/php-fpm.d/www.conf

laravel 相关任务

# 可以直接在宿主机上 执行 容器内的命令 如
# 将容器内的 composer 进行更新
docker exec composer update -vvv 
#(此时以容器内的 root 用户去执行的命令)

# 所以在容器内不安装 crontab 的情况下,可以在宿主机进行配置
# 以 root 用户去启动 crontab  在容器内转换成 www 用户去执行 php 完美
crontab -e

* * * * *  docker exec laravel8 sudo -u www php artisan schedule:run

lnmp 一键安装 脚本

Debian 环境配置

因为 contOS8 以后的版本会面临的风险,所以打算更换Linux的构建版本,在对比了一系列版本后,最终选择了 Debian11 希望这个系统能陪我10-20年。

ISO 文件获取

VirtualBox 相关配置

初始化后调整本地的host网络


# 查看相关网卡
ip addr 
# 发现 enp0s8 host only 网卡没配置

# 对其进行配置
vim /etc/network/interfaces

allow-hotplug enp0s8
iface enp0s8 inet dhcp

# 通过 ifup 来启动网卡
ifup enp0s8

ssh 开启允许 root 登录

vim /etc/ssh/sshd_config

# 修改
PermitRootLogin yes

# 重启 
systemctl restart sshd
# 更改源
vim /etc/apt/sources.list
# 写入数据
deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

# 更新源与 相关软件
apt update && apt upgrade -y

docker 与相关应用安装


apt install ca-certificates curl gnupg lsb-release -y

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" |  tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新源
apt update

# 直接安装
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y 

# 查看版本 & 进行安装
apt-cache madison docker-ce

apt-get install docker-ce=5:20.10.16~3-0~debian-bullseye docker-ce-cli=5:20.10.16~3-0~debian-bullseye containerd.io docker-compose-plugin

# 持久化开启docker
systemctl start docker && systemctl enable docker

# 镜像加速
vim /etc/docker/daemon.json
# 写入数据
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}

# 重启加速
systemctl daemon-reload && systemctl restart docker

nginx 安装

apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y

apt update  && apt install nginx -y

# 持久化开启
systemctl start nginx && systemctl enable nginx

个性化设置


# ll 别名
alias ll="ls -l"

# oh-my-zsh 安装

# 安装 zsh
apt-get install zsh -y

# 切换shell 到zsh   然后重启
chsh -s /bin/zsh

# https://github.com/ohmyzsh/ohmyzsh 想办法下载安装脚本
sh install.sh

# 更换主题
vim ~/.zshrc

# 修改 ZSH_THEME="cloud" 新开tab生效

# 更多主题 可以查看 https://github.com/ohmyzsh/ohmyzsh/wiki/themes

# xshell连接此host的终端类型,改成linux 来避免 home end 失效

docker 安装基础服务

docker 安装 portainer

# 拉取镜像
docker pull portainer/portainer
# 生成数据保存路径
mkdir -p /data/portainer_data
# 生成 portainer 运行时
docker run -d -p 9001:9000 --name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock  -v  /data/portainer_data:/data  portainer/portainer 

docker 安装 mysql服务

# 安装MySQL5.7
dokcer pull mysql:5.7
# 生成mysql数据保存路径
mkdir -p /data/mysql/datadir
# 生成mysql配置文件保存路径
mkdir -p /data/mysql/conf.d

# 生成 MySQL 运行时
docker run -d \
--name mysql5.7 -p 3306:3306 \
-v /data/mysql/datadir:/var/lib/mysql \
-v /data/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456  mysql:5.7

# `-e`:设置环境变量,此处指定 `root` 密码

docker 安装 shiori 书签服务

mkdir -p /data/shiori

chmod -R 777 /data/shiori

docker run -itd --name="shiori" -p 8081:8080 -v /data/shiori:/shiori ghcr.io/go-shiori/shiori
← 返回文章列表