APNode

最初的目的是方便本地开发,换一台新的电脑,或者团队之间要协调使用相同的环境,为了提高效率节约时间,
所以整理了些常用的工具,使Coder 更专注于实质的工作
目前为 NMP(Nginx +PHP + MySQL) Java 类的整理中
具体内容到这里==> @gitee/apnode

/***************************************
*   欢迎挑战 ,  访问 0xff.club
***************************************/
2021-06
更新开发环境, 关键词: VirtualBox , Alpine , Docker
1. Win10LTSC 中安装 Visualbox 加扩展, 点这里
2. Visualbox 中 安装 Alpine ,参考:使用EFI,加双网卡,一个host only,一个Birge点这里
2.1 设置静态IP,/etc/network/interfaces
auto eth0之后添加, 注意eth0 为host-only ,网关可以不用 gateway 192.168.56.1
iface eth0 inet static
address 192.168.56.2
netmask 255.255.255.0
关闭IPv6,


sed -i 's/# alias net-pf-10 off/alias net-pf-10 off/'  /etc/modprobe.d/aliases.conf 
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
sysctl -p

3. Alpine 更新取源地址: /etc/apk/repositories 去掉 community 注释,
sed -i '3s/#//' /etc/apk/repositories
中国科学技术大学 Linux 用户协会 mirrors.ustc.edu.cn

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories 

托管于华东教育网骨干节点上海交通大学 mirrors.sjtug.sjtu.edu.cn

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories 

阿里云镜像 mirrors.aliyun.com

sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 

浙大镜像 mirrors.zju.edu.cn

sed -i 's/dl-cdn.alpinelinux.org/mirrors.zju.edu.cn/g' /etc/apk/repositories 

设置时区
apk --update add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone && apk del tzdata
同步时间,附-腾讯服务器https://intl.cloud.tencent.com/zh/document/product/213/32379
ntpd -d -q -n -p ntp3.aliyun.com

添加字符集
apk add --update --no-cache ttf-dejavu fontconfig curl ca-certificates

4. 安装Visualbox扩展, win10 visualbox 中添加共享文件夹 share
安装增强扩展: apk add virtualbox-guest-additions
加载核心扩展: modprobe -a vboxsf
开机加载扩展: echo vboxsf > /etc/modules-load.d/vboxsf.conf
挂载共享目录: mkdir -p /mnt/share && mount -t vboxsf  share /mnt/share

5. 安装常用软件
apk add git nodejs npm nano vim

6. 安装Docker 点这里

apk update
apk add docker
rc-update add docker boot
mkdir /etc/docker/
echo '{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com","https://docker.mirrors.ustc.edu.cn/" ]}' > /etc/docker/daemon.json
echo '{"registry-mirrors": [ "https://dockerproxy.com","https://docker.nju.edu.cn","https://hub.apnode.win" ]}' > /etc/docker/daemon.json
service docker restart
docker info

hub-mirror.c.163.com 163镜像似乎关了~

安装 docker-compose, 参考 https://docs.docker.com/compose/install/

curl -L "https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

国内X86_64 加速版

curl -L "https://gitee.com/apnode/apnode/attach_files/895853/download/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

7. 安装 docker web管理工具, portainer/portainer:alpine 方便管理,换成 portainer-ce 后或许需要重启 container 一次
端口 8081
docker run -d -p 9001:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name docker-prtainer portainer/portainer:alpine
docker run -d -p 8081:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer portainer/portainer-ce:alpine

8. docker 安装redis, 默认安装没有密码,注意生成环境的安全设置
docker run -it -d --restart=always --name redis -p 0.0.0.0:6379:6379 redis:alpine --requirepass "password"

9. docker 安装 nexus3, 默认用户 admin 密码在admin.password,
端口 8082
nexus3 建议环境 4核 2g以上, 吃内存,慎用, 如果非学习或内部管理使用,非必须
docker run -it -d --restart=always -p 0.0.0.0:8082:8081 --name vbox-nexus sonatype/nexus3:3.32.0
docker exec -it vbox-nexus more /nexus-data/admin.password

10.1 docker 运行PHP-FPM 扩展参考
docker run -it -d --name php73 --restart=always -p 0.0.0.0:9003:9000 -v /www/wwwroot:/www/wwwroot php:7.3-fpm-alpine
docker exec -it php73 sh


docker-php-ext-install mysqli pdo pdo_mysql
apk add sqlite sqlite-dev postgresql-dev
docker-php-ext-install pgsql pdo_sqlite pdo_pgsql

#php73 以上用
apk add --no-cache libpng libpng-dev freetype freetype-dev libjpeg libjpeg-turbo libjpeg-turbo-dev zlib
docker-php-ext-configure gd --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/ 
docker-php-ext-install pcntl zip
#旧版
apk add --no-cache libpng libpng-dev freetype freetype-dev libjpeg libjpeg-turbo libjpeg-turbo-dev
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ --with-gd
docker-php-ext-install gd

# pecl 安装 redis 扩展, 提示comprass 选No
apk add gcc g++ make cmake automake autoconf

pecl install redis
# 查看下扩展是否生成
ls -ahl ls /usr/local/lib/php/extensions/*
echo extension=redis.so >/usr/local/etc/php/conf.d/pecl-redis.ini

参考:

10.2 docker 运行Nginx 配置文件/apnode/data/nginx.conf
docker run -it -d --name nginx -p 0.0.0.0:80:80 -p 0.0.0.0:443:443 -v $(pwd):/code apnode/nginx nginx -g ""
docker update --restart=always vbox-nginx
docker exec -it vbox-nginx sh
查看所有DockerIP
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

10.3 docker 运行mysql,开启一个实例, Start a mysql server instance 【 linux 下加这个参数忽略查询大小写 –lower_case_table_names=1】
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1
或者 5.7版
docker run --name mysql57 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7 --lower_case_table_names=1
docker exec -it mysql57 mysql -uroot -p

#Debian 修改默认时区
#dpkg-reconfigure tzdata
echo 'Asia/Shanghai' > /etc/timezone
cp -a /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#缩小innodb日志大小,生产环境不建议如此
echo '[mysqld]' > /etc/mysql/conf.d/small.cnf
echo 'expire_logs_days=1' >> /etc/mysql/conf.d/small.cnf
echo 'max_binlog_size=100M' >> /etc/mysql/conf.d/small.cnf

10.4 docker 安装rabbitmq, docker pull rabbitmq:3.8-management-alpine , 默认5672 服务端口,15672 管理端口 用户密码 rabbitmq

#初始版,自从知道如何开关管理页面,这个就被抛弃了,
#docker run -it -d --restart=always --name rabbitmq -e RABBITMQ_DEFAULT_USER=rabbitmq -e RABBITMQ_DEFAULT_PASS=rabbitmq -p 5672:5672  -p 15672:15672 rabbitmq:3.8-management-alpine
#或者简易服务版,端口多, 直接 --net=host ,5672,4369,25672,15692,4369
docker run -it -d --restart=unless-stopped --name rabbitmq -eRABBITMQ_DEFAULT_USER=rabbitmq -eRABBITMQ_DEFAULT_PASS=rabbitmq --net=host rabbitmq:alpine
# 启动web管理
# docker exec rabbitmq rabbitmq-plugins disable rabbitmq_management
# 关闭Web管理
# docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management
#基于Alpine 的镜像默认时区是UTC,需要改为CST东八区,否则now()出来的时间或有偏差
apk add tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata

可选参数设置默认密码,If you wish to change the default username and password of guest / guest,

10.5 docker 运行jar文件 docker pull openjdk:8-alpine
参考 docker-java

mkdir /app && cd /app 
#先CD到工作目录,然后可选以下任一命令
docker run -d  --restart=unless-stopped --name=api --net=host -v $(pwd):/app apnode/supervisor  
docker run -d  --restart=unless-stopped --name=api --net=host -v $(pwd):/app apnode/apnode  
#独立运行一个jar包
docker run -d  --restart=unless-stopped --name=api8081 -p 8081:8081 -v $(pwd):/app apnode/apnode:jdk8  java -jar /app/api.jar --spring.profiles.active=prod --server.port=8081
docker run -d  --restart=unless-stopped --name=api8081 -p 8081:8081 -v $(pwd):/app apnode/apnode:jdk13 java -jar /app/api.jar --spring.profiles.active=prod --server.port=8081

10.6 端口 8084 ,运行在线编辑器cloud9,
cd /自己的源码目录,注意替换xxxxxx为自己的密码

mkdir -p /app/workspace && cd /app
 docker run -d --restart=unless-stopped --name c9 -v $(pwd)/workspace:/workspace  -p 8084:8181  --privileged=true  sapk/cloud9:alpine --auth admin:xxxxxx 
#新的方案,eclipse-theia, cd到当前项目目录, 可选优化: /home/project:cached 
docker run -d  --restart=unless-stopped --name theia -p 3000:3000 --privileged=true -v "$(pwd):/home/project" elswork/theia

10.7 端口8083, 运行独立源码管理器 gitblit

mkdir -p /app/gitblit && cd /app
docker run -d --restart=unless-stopped  --name gitblit  -p 8083:8080 -v $(pwd)/gitblit:/var/opt/gitblit  gitblit/gitblit:alpine
docker exec -it gitblit sh
sed -i 's/server.redirectToHttpsPort = true/server.redirectToHttpsPort = false/'  /opt/gitblit/etc/system.properties
sed -i 's/web.allowGravatar = true/web.allowGravatar = false/'  /opt/gitblit/etc/defaults.properties
exit
docker restart gitblit

11.1 查看信息
获取所有容器IP,fastcgi_pass 可选对应IP
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

12. 在ECS上开启swap
参考:https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0322.html#

#1. 创建文件
dd if=/dev/zero of=/mnt/swap bs=1M count=1024
#2.设置交换分区文件:
chmod 0600 /mnt/swap
mkswap /mnt/swap
#3.激活swap文件:
swapon /mnt/swap
#4.设置开机时自启用swap分区:需要修改文件/etc/fstab中的swap行。 
echo "/mnt/swap swap swap defaults 0 0" >>/etc/fstab
#5.查看一下swap是否正确:
/sbin/swapon -s
more /etc/fstab