rabin 7 years ago
parent
commit
e90d621dbe

+ 42 - 26
README.md

@@ -1,4 +1,6 @@
-# dever-manage 小型编排工具
+# docker-manage 小型编排工具
+
+install:
 <pre>
 git clone https://github.com/shemic/dm
 cd dm
@@ -6,18 +8,17 @@ chmod +x install
 ./install
 </pre>
 
-无需关注是否安装了docker,本工具会自动安装docker。(本工具直接使用阿里云提供的sh来安装docker,经过测试,ubuntu16无法安装成功,请直接用apt install docker.io安装。)
+安装时会自动安装docker。如果失败,请自行安装最新版本的docker即可。
 
 基础指令:
 <pre>
 更新代码:dm up
-使用docker工具包(默认已经使用该工具包):dm use docker
 使用哪个仓库为主(默认aliyun):dm set private|aliyun|hub
 删除某一个软件:dm rm web-php
 </pre>
 
 <pre>
-当前使用的工具包为docker时,可以使用以下命令开启web:
+可以使用以下命令开启web:
 启动全部:dm run web
 启动某一个软件:dm run web-mysql
 删除全部:dm rm web
@@ -82,28 +83,6 @@ docker方法列表:
 7、web-php run:运行或者重新启动改容器
 8、web-php restart:重新启动容器
 
-</pre>
-<pre>
-2017-11-14更新:
-当前工具包:docker、dever、php、git
-1、使用dever来安装plant:
-dever是一个php框架,适合开发api、微服务、频繁修改模板等业务
-plant是dever框架开发的一个小型社区
-dm use dever
-dm init
-dm product plant
-例子:http://www.5dev.cn/
-
-2、使用git(方便在任意目录下pull或者push):
-dm use git
-dm pull /data/
-dm push /data/
-
-3、使用php(暂时不能使用):
-dm use php
-dm install redis 安装插件
-dm composer laravel 安装composer里的软件包
-
 </pre>
 
 <pre>
@@ -145,4 +124,41 @@ dm run tool-pan
 访问:
 ip:9030 用户名密码都是superuser
 ip:9030/dweb 是离线下载
+</pre>
+
+<pre>
+2017-12-15更新:
+删除use功能。以不同的命令替代:
+
+1、使用docker:
+dm run web-php
+
+2、使用php:
+dp install libevent 安装libevent扩展
+dp install swoole 安装swoole扩展
+自带的php5.6和php7已经默认支持redis、memcached扩展,无需安装
+后续我会按照http://pecl.php.net/packages.php增加一些常用的扩展。
+你也可以现在自行实现扩展的安装:
+phpInstall swoole-2.0.10 libevent-dev,libaio-dev,libmnl-dev swoole
+说明:
+phpInstall 为固定指令
+swoole-2.0.10 为在pecl.php.net中的扩展名和版本号
+libevent-dev,libaio-dev,libmnl-dev 为依赖,多个用逗号隔开
+swoole 为生成的so名称
+
+
+3、使用composer:
+dpc install laravel
+
+4、使用dever:
+安装plant:
+dever是一个php框架,适合开发api、微服务、频繁修改模板、专题等业务,目前是内部测试版本。
+plant是dever框架开发的一个小型社区
+dever init
+dever product plant
+例子:http://www.5dev.cn/
+
+5、使用git(方便在任意目录下pull或者push):
+dgit pull /data/
+dgit push /data/
 </pre>

+ 6 - 2
install

@@ -22,6 +22,10 @@ chmod -R +x src/*.py
 chmod -R +x src/shell
 chmod -R 777 container/share/
 basepath=$(cd `dirname $0`; pwd)
-ln -sf $basepath/src/main.py /usr/bin/dm
-chmod +x /usr/bin/dm
+ln -sf $basepath/src/dm.py /usr/bin/dm && chmod +x /usr/bin/dm
+ln -sf $basepath/src/dp.py /usr/bin/dp && chmod +x /usr/bin/dp
+ln -sf $basepath/src/dpc.py /usr/bin/dpc && chmod +x /usr/bin/dpc
+ln -sf $basepath/src/dever.py /usr/bin/dever && chmod +x /usr/bin/dever
+ln -sf $basepath/src/dgit.py /usr/bin/dgit && chmod +x /usr/bin/dgit
+
 echo 'install success!'

+ 12 - 0
src/dever.py

@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	dever-manage tools
+	name:install.py
+	author:rabin
+	dever init
+	dever  
+
+"""
+from main import *
+Main.init('dever')

+ 11 - 0
src/dgit.py

@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	dever-manage tools
+	name:install.py
+	author:rabin
+	dever init
+
+"""
+from main import *
+Main.init('git')

+ 27 - 0
src/dm.py

@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	dever-manage tools
+	name:install.py
+	author:rabin
+	chmod +x install
+	./install
+	基础指令:
+	set、env、up、shell
+	dm up 更新代码
+	dm set shemic/aliyun/hub 使用哪个仓库为主
+	dm shell hadoop.memory 直接调用src/shell下的脚本
+
+	dm run web 运行web容器组
+	dm run web-php 运行web容器组下的php容器
+	dm run web-nginx 运行web容器组下的nginx容器
+	dm build dev/php 根据dm set定义的主仓库,进行构建镜像
+	dm rm web 删除web容器组
+	dm rm 删除所有异常状态的容器
+	dm show 显示所有容器
+	dm showi 显示所有镜像
+	dm rmi 删除所有未使用的镜像
+
+"""
+from main import *
+Main.init('docker')

+ 1 - 0
src/docker/build/dev/php/base/Dockerfile

@@ -7,6 +7,7 @@ ENV COMPOSER_HOME=/share/lib/php
 RUN apk add --no-cache --update curl php5-fpm php5-pear php5-mysql php5-pgsql php5-pdo_mysql php5-pdo_pgsql php5-gd php5-curl php5-mcrypt php5-json php5-zlib php5-xml php5-iconv php5-zip php5-phar php5-memcache php5-openssl php5-dom && curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/bin/composer && apk del curl && composer config -g repo.packagist composer https://packagist.phpcomposer.com
 
 COPY php.sh /entrypoint/php.sh
+COPY install.sh /install.sh
 
 VOLUME ["/www", "/etc/php5"]
 

+ 17 - 0
src/docker/build/dev/php/base/install.sh

@@ -0,0 +1,17 @@
+#!/usr/bin/env sh
+set -e
+lib="php5-dev m4 autoconf gcc g++ make openssl-dev curl"
+apk add --no-cache --update $lib
+if [ -n "$2" ];then
+	rely=$2
+    apk add --no-cache --update ${rely/,/" "}
+fi
+curl -O http://pecl.php.net/get/$1.tgz
+tar -xzvf $1.tgz
+cd $1
+phpize
+./configure --with-php-config=/usr/bin/php-config
+make
+make install
+echo extension=$3.so > /etc/php7/conf.d/$3.ini
+#apk del $lib

+ 1 - 0
src/docker/build/dev/php/v7/Dockerfile

@@ -7,6 +7,7 @@ ENV COMPOSER_HOME=/share/lib/php
 RUN apk add --no-cache --update curl php7-fpm php7-pear php7-mysqli php7-session php7-pgsql php7-pdo_mysql php7-pdo_pgsql php7-gd php7-curl php7-mcrypt php7-json php7-zlib php7-xml php7-iconv php7-zip php7-phar php7-memcached php7-openssl php7-dom php7-redis php7-mbstring php7-simplexml && curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/bin/composer && apk del curl && composer config -g repo.packagist composer https://packagist.phpcomposer.com
 
 COPY php.sh /entrypoint/php.sh
+COPY install.sh /install.sh
 
 VOLUME ["/www", "/etc/php7"]
 

+ 17 - 0
src/docker/build/dev/php/v7/install.sh

@@ -0,0 +1,17 @@
+#!/usr/bin/env sh
+set -e
+lib="php7-dev m4 autoconf gcc g++ make openssl-dev curl"
+apk add --no-cache --update $lib
+if [ -n "$2" ];then
+	rely=$2
+    apk add --no-cache --update ${rely/,/" "}
+fi
+curl -O http://pecl.php.net/get/$1.tgz
+tar -xzvf $1.tgz
+cd $1
+phpize
+./configure --with-php-config=/usr/bin/php-config
+make
+make install
+echo extension=$3.so > /etc/php7/conf.d/10_$3.ini
+#apk del $lib

+ 2 - 2
src/docker/conf/web.conf

@@ -20,7 +20,7 @@ volumes_from = [mysql]{num}
 volumes = {container}web:/www,{container}conf/web/php:/etc/php5
 #host = test:127.0.0.1,test1:127.0.0.1
 # 容器里对宿主机提供的指令的别名,可以直接用php -i访问容器中的php命令了
-alias = php,composer,pecl,apk
+alias = php,composer,pecl,apk,/install.sh->phpInstall
 
 [php]
 image = php7
@@ -30,7 +30,7 @@ volumes_from = [mysql]{num}
 volumes = {container}web:/www,{container}conf/web/php7:/etc/php7
 #host = test:127.0.0.1,test1:127.0.0.1
 # 容器里对宿主机提供的指令的别名,可以直接用php -i访问容器中的php命令了
-alias = php,composer,pecl,apk
+alias = php,composer,pecl,apk,/install.sh->phpInstall
 
 [nginx]
 port = 80:80,443:443

+ 12 - 0
src/dp.py

@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	dever-manage tools
+	name:install.py
+	author:rabin
+	dmphp 目前仅有一个指令:
+	dmphp install redis
+
+"""
+from main import *
+Main.init('php')

+ 11 - 0
src/dpc.py

@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	dever-manage tools
+	name:install.py
+	author:rabin
+	dpc install redis
+
+"""
+from main import *
+Main.init('composer')

+ 4 - 36
src/main.py

@@ -1,39 +1,5 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
-"""
-	dever-manage tools
-	name:install.py
-	author:rabin
-	chmod +x install
-	./install
-	基础指令:
-	use、set、env、up、shell
-	dm up 更新代码
-	dm use docker 使用docker工具包
-	dm set shemic/aliyun/hub 使用哪个仓库为主
-	dm shell hadoop.memory 直接调用src/shell下的脚本
-
-	dm run web 运行web容器组
-	dm run web-php 运行web容器组下的php容器
-	dm run web-nginx 运行web容器组下的nginx容器
-	dm build dev/php 根据dm set定义的主仓库,进行构建镜像
-	dm rm web 删除web容器组
-	dm rm 删除所有异常状态的容器
-	dm show 显示所有容器
-	dm showi 显示所有镜像
-	dm rmi 删除所有未使用的镜像
-	后续实现:
-	dm use composer 使用composer工具包
-	dm install redis 安装redis
-	dm install laravel 安装laravel类库
-	dm remove redis 删除redis
-
-	dm use dever 使用dever框架工具包
-	dm install manage 安装后台
-	dm create myapp 初始化一个项目
-	dm install passport 安装官方passport
-
-"""
 from core import *
 class Main(object):
 	use = 'docker'
@@ -45,16 +11,18 @@ class Main(object):
 		pass
 
 	@classmethod
-	def init(self):
+	def init(self, use = 'docker'):
 		Core.path = File.path().replace('/src/', '/')
 		Args.init()
 		method = ('use', 'set', 'val', 'up', 'commit', 'path', 'shell')
 		if Args.action in method:
 			self.handle()
 		else:
+			"""
 			use = Env.use()
 			if not use:
 				use = Env.use(self.use)
+			"""
 			cls = Core.getClass(use, 'tool.')
 			cls.init()
 
@@ -106,4 +74,4 @@ class Main_Action(object):
 	def shell():
 		print Core.shell(Args.name)
 
-Main.init()
+#Main.init()

+ 0 - 4
src/shell/composer/config

@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-set -e
-
-docker images|grep none|awk '{print $3}'|xargs docker rmi -f 

+ 1 - 1
src/shell/composer/install

@@ -1,4 +1,4 @@
 #!/usr/bin/env sh
 set -e
 
-composer global require $1
+phpcomposer global require $1

+ 1 - 1
src/shell/composer/update

@@ -1,4 +1,4 @@
 #!/usr/bin/env sh
 set -e
 
-composer global update
+phpcomposer global update

+ 2 - 2
src/tool/composer.py

@@ -27,8 +27,8 @@ class Composer_Action(object):
 class Composer(object):
 	@staticmethod
 	def update():
-		Core.popen('composer.update', True)
+		Core.shell('composer.update', True)
 	@staticmethod
 	def install(name):
-		Core.popen('composer.install ' + name, True)
+		Core.shell('composer.install ' + name, True)
 		print 'finished'

+ 35 - 0
src/tool/php.py

@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+    dever-manage tools
+    name:php.py
+    author:rabin
+"""
+from core import *
+
+class Php(object):
+	@classmethod
+	def init(self):
+		method = Core.getMethod(Php_Action, Args.action)
+		method()
+
+class Php_Action(object):
+	package = {
+		# 名称-版本号,依赖包
+		'libevent' : ['event-2.3.0', 'libevent-dev', 'event']
+		,'swoole' : ['swoole-2.0.10', 'libevent-dev,libaio-dev,libmnl-dev', 'swoole']
+	}
+
+	@classmethod
+	def install(self):
+		if Args.name in self.package:
+			name = self.package[Args.name][0]
+			rely = self.package[Args.name][1]
+			so = self.package[Args.name][2]
+		else:
+			print Args.name+' error'
+			return
+
+		Core.popen('phpInstall ' + name + ' ' + rely + ' ' + so, True)
+		print 'install '+Args.name+':yes'
+		

+ 0 - 29
src/tool/php7.py

@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
-    dever-manage tools
-    name:php.py
-    author:rabin
-"""
-from core import *
-
-class Php(object):
-	path = 'src/php/'
-	share = '/share/lib/php'
-	@classmethod
-	def init(self):
-		method = Core.getMethod(Php_Action, Args.action)
-		method()
-
-class Php_Action(object):
-	@staticmethod
-	def install():
-		Php_Install.install(Args.name)
-		print 'install '+Args.name+':yes'
-
-
-class Php_Install(object):
-	@staticmethod
-	def libevent(name):
-		Core.popen('php.install ' + name, True)
-		print 'finished'