首发于 2018-07-14 15:23:01
最后编辑于2019-06-27 22:42:03
前言
最近在写一个开源的框架, 但是发现效率低下, 于是乎就寻觅了一遭提升开发效率的方法
在前辈的提示下, 发现了一款名叫 redmine 的开源项目管理工具
我粗略的看了下, 发现redmine不仅流程科学规范, 而且细致入微, 对鞭策自己开发及浏览开发进度是个非常不错的选择.
正好我在公司有台用来垫显示器的闲置 Mac mini, 就利用一下好了.
搭建Docker
Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!
无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,节约有限的生命。
考虑到以后更换设备的可能(比如说从这台Mac mini 更换到另一台垫显示器的Mac mini), 使用 Docker
来避免配置环境的重复劳动, 是最明智不过了.
安装Docker
Docker-从入门到实践一书中已有非常详实准确的指南, 可以参看其中的安装步骤, 快速的安装Docker
安装完成后, Mac用户可能会报如下错误
Docker does not rely on Virtualbox but may not work properly on systems with VirtualBox versions prior to v4.3.30 VirtualBox v4.3.28 is currently installed. Please upgrade or uninstall Virtualbox.Docker does not rely on Virtualbox but may not work properly on systems with VirtualBox versions prior to v4.3.30 VirtualBox v4.3.28 is currently installed. Please upgrade or uninstall Virtualbox.
google了一下, 发现github中有关于这个的issue,
首先检查下本地环境的kextstat:
输入命令
kextstat | grep -i virtualbox
此时如果有信息反馈, 那么执行下一步:
cd /Library/Application\ Support/VirtualBox/
rm -rf *.kext
清除文件后, 再执行:
kextstat | grep -i virtualbox
这时 应该不会有任何信息出来, 接着我们在重启下mac, 然后再次运行Docker 就OK了.
安装Redmine
Redmine依赖数据库, 我这里使用的是MySQL, 而docker hub中已经有redmine及MySQL的官方镜像了, 我们直接加载就行.
加载镜像
docker pull mysql:5.7.22
docker pull redmine:4.0.4
安装成功之后,执行docker images,可以看到两个镜像的描述,类似如下:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.22 66bc0f66b7af 2 weeks ago 372MB
redmine 4.0.4 a3175f2fb34e 2 months ago 574MB
docker 启动 mysql
docker run -d -p 3306:3306 --name server-mysql -e MYSQL_ROOT_PASSWORD="pass" -e MYSQL_DATABASE=redmine mysql:5.7.22
这里为物理机和虚拟机的3306端口做了端口映射,以让外部用户可以通过3306端口访问mysql实例,
mysql关于默认不支持utf-8的处理
我是一开始没有处理这个问题, 然后就立马绑定并run redmin了, 然而在使用redmine的时候有许多地方会报interal error的错误.
查看了log发现都是mysql插入utf8字段的的错误. 所以推荐启动完mysql之后, 就要着手立马处理问题, 否则像我一样发现问题再改, 就要废很多功夫了.
解决流程
1.查看 刚才创建的MYSQL的 container id
docker ps -a
2.进入
docker exec -it b63ce7258234 /bin/bash
3.切换成root账号, 密码就是刚才配置的(pass)
mysql -u root -p
4.查看MySQL字符集
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
得到输出:
// 输出
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
5.设置外部访问的编码
SET NAMES 'utf8';
// 输出
mysql> SET NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)
// 再次查看MySQL字符集, 发现已经变化.
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.01 sec)
6.修改mysql配置文件 (/etc/mysql/mysql.conf.d/mysqld.cn)
// 先退出
exit
// 编辑配置文件
// 由于此环境内没有vim 所以直接用 echo "下面文本的内容" > /etc/mysql/mysql.conf.d/mysqld.cn 进行覆盖
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysql]
default-character-set = utf8
[mysql_safe]
default-character-set = utf8
[client]
default-character-set = utf8
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
init_connect = 'SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_unicode_ci
7.退出, 停止容器
exit
docker stop b63ce7258234
8.基于刚才的容器创建一个新的镜像
docker commit b63ce7258234 mysql-utf8:5.7.22
// 删除刚才使用的容器
docker rm b63ce7258234
9.基于刚才创建的镜像,启动一个新的容器
docker run -d -p 3306:3306 --name server-mysql-uft8 -e MYSQL_ROOT_PASSWORD="pass" -e MYSQL_DATABASE=redmine mysql-utf8:5.7.22
好了,修改就到此结束了,后面创建mysql容器时只要使用这个镜像就无需再重新修改字符集了
docker启动redmine
docker run -d -p 3000:3000 --name=server-redmine -e MYSQL_ROOT_PASSWORD="pass" --link server-mysql-uft8:mysql redmine:4.0.4
这里为物理机和虚拟机的3000与3000端口做了端口映射,使用外部用户可以通过8080端口访问redmine.
一切正常的话, 使用 docker ps -a 可以看到docker中运行的进程:
# docker ps -a
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7a2a67fb328 redmine:4.0.4 "/docker-entrypoint.…" 14 minutes ago Up 18 minutes 0.0.0.0:3000->3000/tcp server-redmine
c548ae6a6002 mysql-utf8:5.7.22 "docker-entrypoint.s…" 15 minutes ago Up 18 minutes 0.0.0.0:3306->3306/tcp mysql-utf8
注意
使用最新的mysql会出错, 因为 mysql:latest (mysql 8)中修改了authentication method 导致redmine(redmine目前19-06-27最高支持的mysql版本是5.7.26)无法登录.
在第一次进入redmine的管理页面时, 会提示加载默认配置, 注意将语言勾选为English 以避免中文默认配置无法新建问题的Bug...
完成
浏览器中打开 localhost:3000 就可以访问redmine开始玩耍了.