Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
使用Docker镜像服务来搭建 craft cms 站点
2017-07-07
Docker
CraftCMS
Craft CMS 是一个PHP开发的,以内容导向的内容管理系统,号称是让开发者和内容管理人员用起来会觉得很愉快,官方网站在这里:https://craftcms.com/ 它的环境主要是依赖PHP的一些扩展包,详情在这里:https://craftcms.com/docs/requirements 作为一个优秀的程序猿,我们当然不会愿意慢慢的手动搭建这些环境,利用Docker的镜像服务,可以很方便的构建出Craft CMS站点,组成如下: 1. 代理服务器用Nginx 2. 运行环境用 php-fpm 3. 数据库用Mysql # 下载 Craft CMS源码及配置 直接可以从官网上找到最新版本的下载地址,这里以2.6版本为例: ```bash wget https://download.craftcdn.com/craft/2.6/2.6.2986/Craft-2.6.2986.zip unzip -d craftwww Craft-2.6.2986.zip chmod -R 777 craftwww/craft/app chmod -R 777 craftwww/craft/config chmod -R 777 craftwww/craft/storage ``` # docker的目录结构: ](http://cdn.supperxin.com/images/upload/2017/7/44dda29d-2540-4f0b-975a-157d71a5a356.jpg) # Nginx 配置: 我们把Nginx的主配置文件和站点的配置文件分开 ## Nginx配置文件nginx.conf: ``` user www-data; worker_processes 4; pid /run/nginx.pid; events { worker_connections 2048; multi_accept on; use epoll; } http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 15; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log off; error_log off; gzip on; gzip_disable "msie6"; client_max_body_size 500M; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-available/*; open_file_cache max=100; } daemon off; ``` ## 站点配置文件: www.conf ``` server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /var/www/craftwww/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_pass php-upstream; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } # cache.appcache, your document html and data location ~* \.(?:manifest|appcache|html?|xml|json)$ { expires -1; access_log /var/log/nginx/static.log; } # Feed location ~* \.(?:rss|atom)$ { expires 1h; add_header Cache-Control "public"; } # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { expires 1M; access_log off; add_header Cache-Control "public"; } # CSS and Javascript location ~* \.(?:css|js)$ { expires 1y; access_log off; add_header Cache-Control "public"; } # WebFonts location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { expires 1M; access_log off; add_header Cache-Control "public"; } } ``` ## Nginx的构建文件:Dockerfile ``` FROM nginx:alpine MAINTAINER Mahmoud Zalt <mahmoud@zalt.me> ADD nginx.conf /etc/nginx/ ADD www.conf /etc/nginx/sites-available/ RUN apk update \ && apk upgrade \ && apk add --no-cache bash \ && adduser -D -H -u 1000 -s /bin/bash www-data \ && rm /etc/nginx/conf.d/default.conf \ && echo "upstream php-upstream { server php:9000; }" > /etc/nginx/conf.d/upstream.conf CMD ["nginx"] EXPOSE 80 443 ``` # php 的构建文件,包含扩展包:dockerfile ``` FROM php:7.0-fpm MAINTAINER Mahmoud Zalt <mahmoud@zalt.me> RUN apt-get update && apt-get install \ libpq-dev -y \ curl \ libmemcached-dev \ mysql-client \ libpng12-dev \ libfreetype6-dev \ libcurl4-gnutls-dev \ libmcrypt-dev # configure gd library RUN docker-php-ext-configure gd \ --enable-gd-native-ttf \ --with-freetype-dir=/usr/include/freetype2 # Install extensions using the helper script provided by the base image RUN docker-php-ext-install \ pdo_mysql \ pdo_pgsql \ gd \ curl \ mcrypt # Install xdebug for php 7 RUN pecl install xdebug && \ docker-php-ext-enable xdebug RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer RUN usermod -u 1000 www-data # Install nvm (A Node Version Manager) RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash && \ . ~/.nvm/nvm.sh && \ nvm install stable && \ nvm use stable && \ nvm alias stable && \ npm install -g gulp bower RUN echo "" >> ~/.bashrc && \ echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \ echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc # Clean up USER root RUN apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* WORKDIR /var/www/craftwww/public CMD ["php-fpm"] EXPOSE 9000 ``` # docker编排文件:docker-compose.yml ``` version: '2' services: nginx: build: ./nginx volumes_from: - volumes_source volumes: - ./logs/nginx/:/var/log/nginx ports: - "8001:80" links: - php php: container_name: "craftwww" build: context: ./php dockerfile: Dockerfile-php-70 volumes_from: - volumes_source expose: - "9000" mysql: image: mysql:5.7.17 volumes: - ./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro volumes_from: - volumes_data ports: - "3308:3306" environment: - MYSQL_ROOT_PASSWORD=craft links: - php volumes_source: image: tianon/true volumes: - ../:/var/www/craftwww volumes_data: image: tianon/true volumes: - ./data/mysql:/var/lib/mysql ``` # 启动容器 进入docker目录,运行 docker-compose up -d -p craftwww # 建立db 进入 mysql 容器,建立db: CREATE DATABASE IF NOT EXISTS craftwww CHARACTER SET utf8 COLLATE utf8_unicode_ci; # 配置craft cms的db链接 修改 craft/config/db.php文件,配置为 mysql 容器 # 访问站点及配置 上述一切完成之后,访问下面链接会对站点进行初始化: http://ip:8001/admin 看到如下界面就说明成功了: 
×
本文为博主原创,如需转载,请注明出处:
http://www.supperxin.com
返回博客列表