分类 阿里云 下的文章

不同版本Odoo共存一台阿里云ECS服务器上的方法笔记记录

今天玩一个大的:想在一台阿里云ECS上,同时运行odoo的多个版本,同时运行8.0、9.0、10.0、11.0、12.0,看看能不能行。
1、用docker来玩,基于Ubuntu 16 64-bit,安装最新版本docker:

更新一下:sudo apt-get update

2、让apt也能https:

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3、添加Docker’s 官方的 GPG key:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4、按X86_64安装docker(ubuntu其他版本请参见docker官方安装文档https://docs.docker.com/install/linux/docker-ce/ubuntu):

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

刷新下:

sudo apt-get update

5、安装最新版docker:

sudo apt-get install docker-ce

6、试玩build个hello-world看看是否正常:

sudo docker run hello-world

7、获取Dockerfile及相关文件

git clone https://github.com/wdmsyf/docker.git

感谢【康虎云报表】群主的github分享和远程协助帮忙,加群交流:https://jq.qq.com/?_wv=1027&k=5jmI7Mc
进入odoo10目录:

cd 10.0

8、编译镜像

docker build --force-rm -t wdmsyf/odoo:10.0 .

9、创建容器

由于本镜像不含PostgreSQl,所以需要先创建一个PostgreSQL容器:

docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name odoo_db postgres:9.4

然后创建odoo容器,数据库则连接到刚才创建的PostgreSQL容器,8069端口映射到宿主机的8869,8071映射到宿主机的8871:

a、
使用镜像内官方的源代码和默认的配置文件:

docker run -d --name odoo10_wdmsyf -p 8869:8069 -p 8871:8071 --link odoo_db:db wdmsyf/odoo:10.0

c、
使用自定义配置文件和自定义odoo源代码(比如可以换成企业版),配置文件在宿主的路径可变,文件名不能变;源代码在宿主机的路径可变:

docker run -d --name odoo10_wdmsyf -p 8869:8069 -p 8871:8071 --link odoo_db:db -v ~/odoo_conf:/etc/odoo -v ~/odoo_src/odoo:/usr/lib/python2.7/dist-packages/odoo wdmsyf/odoo:10.0

阿里云ECS管理后台也要放行8869才能正常访问。

在阿里云ECS部署NextCloud私有网盘笔记

参考自简书的大作:http://www.jianshu.com/p/a2798b1ac8a4
仅供自己备忘。

基于ubuntu 16 64bit
winscp+putty登陆ecs后,

1. 安装 Docker 与 Compose
1.1. 配置 Docker 镜像源
1.2. 部署 NextCloud(阿里云ECS单核单1G内存1MB带宽耗时约
2. 配置 NextCloud
2.1. 客户端安装与使用

正面开始:
说明:Nextcloud 和 Owncloud 的界面非常相似,Owncloud并没有停止开发,而是由原来的德国团队接手了。

  1. 安装 Docker 与 Compose

安装 Docker

curl -sSL https://get.docker.com/ | sh

安装 Compose

curl -L https://github.com/docker/compose/releases/download/1.10.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

以上搭好了基础软件环境。

1.1. 配置 Docker 镜像源
接下来我们会拉取几个镜像,默认的镜像仓库在海外,速度不理想,所以我们使用国内的镜像源,这里以中科大的为例:
首先编辑文件 /etc/docker/daemon.json,在该配置文件中加入下面内容(没有该文件的话建一个):

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

保存之后最好重启一下 Docker 服务,这样就可以使用国内镜像源拉取镜像了:

service docker restart

1.2. 部署 NextCloud

首先为Nextcloud建立一个独立的容器网络:

docker network create nextcloud

接下来在当前目前下新建一个文件夹cloud,然后在cloud文件夹里面新建一个文件Caddyfile,在文件Caddyfile写入以下内容(您自己的域名example.com和IP233.233.233.233和端口2333自己改一下哦):

example.com {
  proxy / 233.233.233.233:2333 {
      proxy_header Host {host}
      proxy_header X-Real-IP {remote}
      proxy_header X-Forwarded-Proto {scheme}
  }
  log /var/log/caddy.log
  gzip
}

接下来再在当前目录cloud下新建一个文件,名为docker-compose.yml,文件的内容如下,注意修改以下内容中的MYSQL_ROOT_PASSWORD行的密码为您自己的MYSQL数据库密码:

version: '2'
services:
  db:
    container_name: cloud_db
    image: mysql
    volumes:
      - "./data/cloud/mysql:/var/lib/mysql"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 这里填写你的密码
      MYSQL_DATABASE: nextcloud
  app:
    container_name: cloud_app
    depends_on:
      - db
    image: nextcloud
    volumes:
      - ./data/cloud/config:/var/www/html/config
      - ./data/cloud/data:/var/www/html/data
      - ./data/cloud/apps:/var/www/html/apps
    links:
      - db
    ports:
      - "2333:80"
    restart: always
  cron:
    container_name: cloud_cron
    image: nextcloud
    links:
      - db
    volumes_from:
      - app
    user: www-data
    entrypoint: |
      bash -c 'bash -s <<EOF
      trap "break;exit" SIGHUP SIGINT SIGTERM
      while /bin/true; do
        /usr/local/bin/php /var/www/html/cron.php
        sleep 900
      done
      EOF'
    restart: always
  web:
    container_name: cloud_web
    image: abiosoft/caddy
    volumes:
      - ./Caddyfile:/etc/Caddyfile
      - ~/.caddy:/root/.caddy
    ports:
      - 80:80
      - 443:443
    restart: always
networks:
  default:
    external:
      name: nextcloud

保存后在当前目录cloud下输入以下命令:

docker-compose up -d

然后就是漫长的等待(视ECS配置高低和带宽大小而定等待时长)~~~
最后打开上边配置文件中的域名example.com(您自己的域名自己改一下哦)即可看到NextCloud安装界面了,跟其他web系统没什么两样的。数据库的选择您随意就好。mysql或sqlite都随意了。

你的用户名就是 root,数据库地址是 db,不是 localhost。

  1. 配置 NextCloud

安装完成还要做两件事,当然不是必须的,但是为了安全起见,最好再折腾一下。

2.1. 配置两步验证

两步验证可以防暴力入侵什么的,建议使用。首先在后台启用两步验证,然后手机安装下面的应用:
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2
登录时需要手机上的离线验证码验证,安全有了多一层保障。

2.2. 客户端安装与使用

首先客户端几乎是全平台的,地址在下面:
https://nextcloud.com/install/#install-clients
因为开启了二步验证,在客户端直接使用帐号密码肯定无法登录了,所以需要在后台设置应用密码,地址格式:
http://你的地址/index.php/settings/personal#apppasswords
在设置中设置应用一次性密码,使用随机密码登录客户端即可。

作者:左蓝
链接:http://www.jianshu.com/p/a2798b1ac8a4
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

ubuntu下编译安装nginx最新版本笔记记录

OS:ubuntu 14.04 server+desktop
nginx官网下载http://nginx.org/en/download.html,解压后./configure报错:
1、提示缺少pcre然后官网下载回来后./configure --prefix=/usr/local/pcre然后make -j4&& make install安装到默认的/usr/local/;
2、提示缺少zlib同样官网下载回来后./configure --prefix=/usr/local/zlib然后make -j4&& make install安装到默认的/usr/local/;
3、提示缺少openssl同样官网下载回来后./config --prefix=/usr/local/openssl然后make -j16&& make install安装到默认的/usr/local/;

4、用sudo su进入root超级管理员权限后:

a)

  ./configure --with-pcre=/usr/local/pcre --with-zlib=/usr/local/zlib --with-openssl=/usr/local/openssl

b)

  make -j4&& make install

安装成功提示:

  Configuration summary
    + using PCRE library: /usr/local/
    + using OpenSSL library: /usr/local/
    + using zlib library: /usr/local/

    nginx path prefix: "/usr/local/nginx"
    nginx binary file: "/usr/local/nginx/sbin/nginx"
    nginx modules path: "/usr/local/nginx/modules"
    nginx configuration prefix: "/usr/local/nginx/conf"
    nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
    nginx pid file: "/usr/local/nginx/logs/nginx.pid"
    nginx error log file: "/usr/local/nginx/logs/error.log"
    nginx http access log file: "/usr/local/nginx/logs/access.log"
    nginx http client request body temporary files: "client_body_temp"
    nginx http proxy temporary files: "proxy_temp"
    nginx http fastcgi temporary files: "fastcgi_temp"
    nginx http uwsgi temporary files: "uwsgi_temp"
    nginx http scgi temporary files: "scgi_temp"

最后,使用pgrep检验是否成功:pgrep nginx返回行号进程ID即可。
完毕!

「转」阿里云部署Docker(9)----Dockerfile脚本定制镜像

阿里云部署Docker(9)----Dockerfile脚本定制镜像
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除<none>镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

技术爱好者都是比较懒的。而docker又是开发者支持起来的。所以,它肯定是有比较懒的方式供我们定制自己需要的东西。
docker build

docker 用build指令来执行dockerfile脚本。

具体的用法:

sudo docker build .
小心后面那个点,表示当前目录。当前目录有一个Dockerfile的文件。

当然,你可以指定你建立的镜像的名字。

sudo docker build -t shykes/myapp .

然后你就可以看到执行过程,或许,会非常的漫长,取决于要下的东西的大小和你的网速。

sudo docker build -t SvenDowideit/ambassador .

Uploading context 10.24 kB

Uploading context

Step 1 : FROM docker-ut

---> cbba202fe96b

Step 2 : MAINTAINER SvenDowideit@home.org.au

---> Using cache

---> 51182097be13

Step 3 : CMD env | grep _TCP= | sed 's/.PORT([0-9])_TCP=tcp://(.):(.)/socat TCP4-LISTEN:1,fork,reuseaddr TCP4:2:3 &/' | sh && top

---> Using cache

---> 1a5ffc17324d

Successfully built 1a5ffc17324d
当你下完之后,你可以用:
你会发现多了你下载的镜像。

好接下来我们讲讲Dockerfile本身如何编写。
格式:

Comment

INSTRUCTION arguments
命令是大写的。 FROM

所有的镜像都应该是基于某一个现有的镜像。

所以,就有了FROM 指令
或者,更加具体点说明它的Tag。

FROM语句必须是第一句“非注释”语句,在Dockerfile中。
我们总是会想在一个脚本里面添加些注释,来说明一些想说的话。 注释

那就是注释:#开头的行。

但是#在行中,则却表示是一个参数。
维护

接下来,需要说明维护人。
填上你的NICK NAME。表示你做的。 RUN指令

RUN指令应该是用的最多的指令。

RUN <command> (the command is run in a shell - /bin/sh -c - shell form)

另一种方式是:

RUN ["executable", "param1", "param2"] (exec form)

RUN语句会在当前镜像的基础上执行该条指令,同时执行完就成了一个新的镜像一样,即数据和影响都是会保存的,然后用这个新的镜像去执行下一条指令,这样上一条的结果镜像是下一条指令的基础,如此不断推进。

CMD指令

格式:

CMD ["executable","param1","param2"] (exec form, this is the preferred form)

CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

CMD command param1 param2 (shell form)

有三种形式。

CMD在DOckerfile里面只能用一次,如果你写了很多条,那么只有最后一条是有效的。

CMD有什么用呢,可以理解为Main函数一样吧,作为一个入口。具体见英文

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
EXPOSE 这个单词的中文叫什么,暴露。对,他就是暴露镜像的某个接口出来。例如,我的镜像是用来做http服务的,那么我就理应暴露我镜像的80端口。然后-p 主机端口:80 ,还记得吧。端口映射。

EXPOSE <port> [<port>...]
ENV 环境变量的设置
环境变量一旦设定,对整个Dockerfile都是有效的。

当然,key = value这样直接说,其实效果是一样的。
ADD指令

有点像拷贝指令,至少它就是完成文件的拷贝工作的。

ADD hom* /mydir/ # adds all files starting with "hom"

ADD hom?.txt /mydir/ # ? is replaced with any single character

COPY指令

和ADD一样,是拷贝
ENTRYPOINT 入口点

真正的MAIN函数

ENTRYPOINT ["executable", "param1", "param2"] (exec form, the preferred form)

ENTRYPOINT command param1 param2 (shell form)
CMD和这个指令的区别,是应用的场景不一样。

这里,我给大家贴原文会比较好。

An ENTRYPOINT helps you to configure a container that you can run as an executable. That is, when you specify an ENTRYPOINT, then the whole container runs as if it was just that executable.

Unlike the behavior of the CMD instruction, The ENTRYPOINT instruction adds an entry command that will not be overwritten when arguments are passed to docker run. This allows arguments to be passed to the entry point, i.e. docker run <image> -d will pass the -d argument to the entry point.

You can specify parameters either in the ENTRYPOINT JSON array (as in "like an exec" above), or by using a CMD instruction. Parameters in the ENTRYPOINT instruction will not be overridden by the docker run arguments, but parameters specified via a CMD instruction will be overridden by docker run arguments.

Like a CMD, you can specify a plain string for the ENTRYPOINT and it will execute in /bin/sh -c:

FROM ubuntu
ENTRYPOINT ls -l
For example, that Dockerfile's image will always take a directory as an input and return a directory listing. If you wanted to make this optional but default, you could use a CMD instruction:

FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["ls"]
WORKDIR 工作目录

RUN ENTERPOINT带的指令在哪里执行的设置。

此外,还有一些指令,例如

USER ,ONBUILD,等就不想说了。
最后给出一个示例

Nginx

VERSION 0.0.1

FROM ubuntu

MAINTAINER Victor Vieux <victor@docker.com>

RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

Firefox over VNC

VERSION 0.3

FROM ubuntu

Install vnc, xvfb in order to create a 'fake' display and firefox

RUN apt-get update && apt-get install -y x11vnc xvfb firefox

RUN mkdir /.vnc

Setup a password

RUN x11vnc -storepasswd 1234 ~/.vnc/passwd

Autostart firefox (might not be the best way, but it does the trick)

RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900

CMD ["x11vnc", "-forever", "-usepw", "-create"]

Multiple images example

VERSION 0.1

FROM ubuntu

RUN echo foo > bar

Will output something like ===> 907ad6c2736f

FROM ubuntu

RUN echo moo > oink

Will output something like ===> 695d7793cbe4

Youll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with

/oink.

转载请注明原文地址:http://www.server110.com/docker/201411/11143.html

「转」阿里云部署Docker(8)----安装和使用redmine

阿里云部署Docker(8)----安装和使用redmine
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除<none>镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

安装redmine对过程进行管理。

需要说明的是:当你在docker images的时候,会说没连接到xxxx的时候,而且会提示用“docker -d",其实这只是把docker作为一个后台进程,但是当你的SecureCRT退出的时候,这个后台进程也是会被退出的。所以下次你又要。而且,数据很容易丢失。

正确的做法是。 service docker start。记住咯。

好,redmine的安装和使用教程

https://registry.hub.docker.com/u/sameersbn/redmine/

注意数据的保存。我有一种简单的方法,就是尽量不重启docker,也不stopredmine,如果非得停止了,记得docker ps -l 然后找出你刚刚运行的redmine 容器,然后docker commit 容器为 镜像,然后下次用它。不断的这么迭代。数据也是可以保存下来的。

下列是我主导开发的一个Android移动端产品的项目,用Redmine跟踪的。因为目前人员少,却是“很敏捷”,废话,你拿两个人来开发,能不敏捷么,当然,后续等团队步入正轨后,会多起来的。

转载请注明原文地址:http://www.server110.com/docker/201411/11142.html