Ubuntu+Ruby+MySQL+Nginx+Redmine部署记录
(2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年7月26日)
周五的时候老大布置了一个任务下来,要部署一个Redmine用于研发部,同时升级工作室的Redmine,于是正好试试另外一套Linux系统——Ubuntu,毕竟和CentOS的命令差别还是有一点的。
先说说配置吧。
(1) 操作系统:Ubuntus 16.04 LTS,内存2GB,2vCPUs,60GB硬盘,都是一些基本配置。
(2) rvm + ruby-2.3.1 + rails
(3) MySQL-Server-5.7.0
(4) Nginx
(5) Redmine-3.3.0
接下来开始讲讲部署过程。
1.在虚拟机中选好标准配置。

2. 下载ubuntu-16.04-server-amd64.iso,默认会选择国内大学的ftp站点,因此速度杠杠的,装入虚拟光驱,调整固件从光驱启动,进入以后选择英文安装界面。

3. 由于有CentOS基础,分区的步骤就不再多做详细的介绍,分配一个swap分区,一个boot分区,剩下留给根分区即可。

4. 差不多安装到最后一步的时候,由于默认就是服务器版的,不存在要选择图形界面的问题,这里与CentOS最大的不同就是Ubuntu要手动安装SSH服务器,不然后面要手动安装,SSH是远程的时候必须的,安装上。

5. 在Ubuntu安装过程中会有一步让你创建一个账户来控制机器,这里创建了一个账户,所以也就以这个账户登录,这里就有与CentOS的第二点不同,root账户密码哪去了?事实上,在这个时候root密码应该是空的,但是当你su进去的时候发现不对。事实上,可以使用sudo passwd root修改root密码,而且在这里是必须这样做,在写博客之前我就曾经用过普通账号进行部署,结果卡在最后一步,编译的程序由于没有权限无法启动,所以后面的操作中,建议类似CentOS一样,直接用root账户进行操作。这里我还做了一个事情就是用了XShell重新登录,是因为我是在实验室远程回宿舍的电脑,宿舍电脑再打开VMware来操作,直接操作的话会发现莫名其妙字符输入多,或者是在图形界面下鼠标无法使用的情况,应该是远程协议使用了TCP的缘故吧,这在Linux里面敲密码是非常麻烦的一个事情。


6. 更新一遍软件包列表,使用命令
root# apt-get update //普通用户下为sudo apt-get update,后同,除非特殊注明。
root# apt-get upgrade
7. 我个人推荐的安装参考顺序为rvm→ruby→rails→Nginx→MySQL→Redmine,因此我也按照这个顺序来介绍部署过程。
一、Rvm+Ruby+Rails
1. rvm是用于管理多个ruby版本的一个管理器,用它安装ruby是最为合适的,虽然可以直接 apt-get install ruby ,但是这样子做依赖关系就比较麻烦,因此推荐还是从rvm开始安装起。
root# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
root# curl -sSL https://get.rvm.io | bash -s stable
root# curl -L https://raw.githubusercontent.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable //如果上面的连接失败,可以尝试:
安装完以后会显示这个页面代表着安装成功!

2. 载入Rvm环境。
root# source /etc/profile.d/rvm.sh
3. 检查Rvm是否安装成功。
root# root@shopREDcngua001:~root# rvm -v
rvm 1.27. (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
这样就代表环境变量设置成功!
4. 用Rvm安装ruby环境,如下图所示。
root# rvm requirements //此时会更新一大堆的依赖包,耐心等待即可。

5. 设置ruby默认版本。
root# rvm use 2.3. --default
6. 由于某些原因,调整gem安装目录至国内镜像,在这里衷心感谢ruby-china的支持!当然,这里也可以改成淘宝的镜像,有且仅有一个就好!
root# gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org
root# gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org
root# gem sources -l //查看在用的gem源
7. 安装bundlers
root# gem install bundler
8. 安装rails
root# gem install rails
9. 检查各个安装包版本

10. 可做适当的升级
root# gem update --system
至此第一部分安装完毕。
二、Nginx
由于nginx和ruby之间,以及passenger之间有依赖关系,查看网络上的安装配置,最后发现不能够直接apt-get install来安装,要从passenger中进行安装,步骤如下。
1. 安装passenger
root# gem install passenger
2. 安装curl模块
root# apt-get install libcurl4-openssl-dev
3. 使用passenger自带的一个命令来安装nginx,这句命令会自己下载最新版的nginx和编译的passenger module
root# passenger-install-nginx-module


4. 这里选择1,自动帮我们安装即可。

5. 安装开始以后会先需要安装PCRE,后面我们手动安装PCRE,所以在这里先跳过。

6. 设定安装目录,默认即可,这一步确认后也是有不少东西安装,耐心等待即可。

7. 安装成功界面!

8. 下面开始手动安装PCRE,切换到/opt/nginx
root# wget https://sourceforge.net/projects/pcre/files/pcre/8.39/pcre-8.39.tar.gz
root# tar -zxvf pcre-8.39.tar.gz
root# cd pcre-8.39
root# ./configure
root# make & make install //万幸这个手动安装没有报错
后来发现这个安装好像没有成功,因为本次也用不上这个,所以暂时没管它。
至此Nginx已经全部安装完毕。
三、MySQL
1. MySQL是几个安装包里面最为简单的一个,只需一条命令即可。
root# apt-get install mysql-server
2. 安装过程中会有要求输入MySQL的root密码,这个是登录MySQL用的。

3. 测试mysql-server是否安装成功.
root# mysql -u root -p
root# password: //输入刚才设置的root密码
达到这里时就代表安装成功!
root# mysql>
四、Redmine
1. 切换到/opt目录
root# wget http://www.redmine.org/releases/redmine-3.3.0.tar.gz
root# tar -zxvf redmine-3.3..tar.gz
root# cd redmine-3.3.
2. 打开Gemfile,将source文件替换为淘宝源,保存退出,如下图所示。
root# vim /opt/nginx/Gemfile
root# source 'https://ruby.taobao.org'

3. 设置数据库基本用户名,密码等。
> CREATE DATABASE redmine CHARACTER SET utf8;
> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password'; // 这里的my_password是你的redmine数据库账号的密码
> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
4. 设置连接数据库
root# cp config/databse.yml.example config/database.yml #获取配置文件
root# vim config/database.yml
由于是用于测试环境,只用修改一处地方即可,修改并保存。

5. 下面开始进行一些依赖包的安装,返回到redmine-3.3.0目录,根据 bundle install --without development test 的提示来安装,缺少什么就装什么,每装完一个就运行一次这条命令,详细看看报错信息就知道缺少什么依赖包没装。
root# apt-get install imagemagick //生成图片的依赖库。
root# gem install mysql2 -v '0.3.21'
root# apt-get install libmysqlclient-dev
root# gem install rbpdf-font
root# gem install rmagick -v '2.15.4
root# apt-get install libmagickwand-dev
直到这一步才算是完成。

6. Session存储密钥
root# rake generate_secret_token
7. 生成Redmine的数据库表结构和初始化数据
root# RAILS_ENV=production rake db:migrate //生成表结构
root# RAILS_ENV=production rake redmine:load_default_data //初始化数据

8. 创建上传文件的目录和设置文件夹的权限
root# useradd redmine
root# passwd redmine //设置redmine账户的密码
root# mkdir -p tmp tmp/pdf public/plugin_assets/
root# chown -R redmine:redmine files log tmp public/plugin_assets
root# chmod -R files log tmp public/plugin_assets/
9. 测试redmine的安装
root# ruby bin/rails server webrick -e production
10. 在Nginx目录中将redmine目录迁移过去,重启Nginx
root# vim /opt/nginx/conf/nginx.conf
server {
listen ; #监听的端口号
server_name localhost #域名,暂时先用IP代替
#access_log logs/host.access.log main;
location / {
root /opt/redmine/public; #站点的路径
index default.php index.php index.html index.htm;
}
五、Bug集
理论上来说,上述的安装步骤完成以后,应该是没问题的了。但在实际部署的过程中,还发现了几个bug,需要进行修正。
1. redmine目录的所有者和所属组是redmine,不然其他账号登录的时候会无权限访问,要设置权限为755
root# chown -R redmine:redmine /opt/redmine
root# chmod -R /opt/redmine
2. 将环境变量配置以及nginx启动放入启动脚本中,这样就不用在开机时再输入这两句调用环境变量了。
root# vim /etc/rc.local/
root# source /etc/profile.d/rvm.sh #调用ruby相关的环境变量
root# /opt/nginx/sbin/nginx #手动启动nginx
3. rails server拒绝访问的问题
这个也是困扰我最久的一个问题,一开始还以为我部署错了,结果直到看到网上的文章后才发现是路由出了问题,一会儿会附上该文链接。个人的理解是,http流量到了linux以后,转换到了lo网卡,lo网卡的路由由于是127.0.0.1,所以就发给自己了,于是就出不去了,就变成了拒绝访问。这个问题有个典型的特征就是,启动nginx和rails server以后,会发现能curl下来,即
root# curl http://localhost/ #能抓取到nginx的页面
root# curl http://localhost:3000/ #能抓取到redmine的页面
但是只能Nginx返回成功,解决方案如下。
root# ruby bin/rails server webrick -e production -b 0.0.0.0 -p & #将rails server启动时使用的路由变成0.0.0.。
4. 迁移完redmine目录到nginx上去后无法显示favicon.ico
这个还没找到原因,故尚未解决。
六、参考文章
1. Centos+nginx+redmine+gitosis安装指南
http://www.cnblogs.com/csharpsharper/archive/2013/08/11/3250913.html
2. 如何快速正确的安装ruby,rails运行环境
http://ruby-china.org/wiki/install_ruby_guide
3. 安装rbpdf-font
http://www.mamicode.com/info-detail-1218665.html
4. 安装imagemagick magickwand
http://blog.sina.com.cn/s/blog_691051e10100y17n.html
5. 无需要更改gemfile,让bundle使用淘宝源
http://ruby-china.org/topics/26314
6. 解决gem install rmagick error
http://robinwu.iteye.com/blog/1199311
7. redmine3.0 安装只能本机访问的问题
https://site.douban.com/180891/widget/notes/17846704/note/490572314/
Ubuntu+Ruby+MySQL+Nginx+Redmine部署记录的更多相关文章
- centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记
centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记 目录[-] 过程 1.安装RVM 2.利用rvm安装 Ruby 1.9.3 并设为默认 3.安装rails 4.安装 ...
- CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...
- Mysql读写分离方案-MySQL Proxy环境部署记录
Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换.MySQL Proxy有一项强大功能是实现"读写分离" ...
- 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署
本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...
- python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试
简述 Nginx在服务器部署中的作用 请求通过Nginx实现反向代理,将请求提交给代理服务器.本文中只用了一台服务器,所以是代理到本机. gunicorn的作用 作为服务器代码的容器.接收Nginx的 ...
- Linux下MySQL多实例部署记录
什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端 ...
- ubuntu安装mysql自动输入密码随笔记录
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password your_pass ...
- Linux下FastDFS分布式存储-总结及部署记录
一.分布式文件系统介绍分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系 ...
- [Redmine] Centos5上安装Redmine3.0+nginx+thin部署
项目管理的需要所以安装Redmine,其实wiki放在上面也不错的. 首先是安装,ruby应用第一次装,把坑记住. nginx, mysql是已经安装好的,只需要配置, 结合nginx的部署方式很多, ...
随机推荐
- Qt学习笔记----基础知识
一.qt的本质 qt的本质是c++的图形界面类库,本身是mvc结构.qt能火最大程度 归功于它跨平台的特性,一次编码,多次编译应用. 注意:qt由于历史原因,经历了奇趣.诺基亚.digit公司,导致q ...
- java 多项式
/****************************************************************************** * Compilation: javac ...
- _proto_和prototype
_proto_和prototype 实例对象中有一个属性,_proto_,也是对象,叫原型,不是标准的属性,浏览器使用的, 构造函数中有一个属性,Prototype,也是对象,叫原型,是标准属性,程序 ...
- 校园商铺-2Logback配置与使用-3验证配置
1. 验证logback配置 1.1. 启动tomcat,得到CATALINA_BASE地址: 1.2 访问接口,查看日志 浏览器打开http://localhost:18080/o2o/supera ...
- 牛客多校第六场 E Androgynos 自补图
题意: 给定点数,构造自补图,要求输出邻接矩阵,和原图与补图的同构映射. 题解: 只有点数为4k和4k+1的情况才能构造自补图,因为只有这些情况下边数才为偶数. 一种构造方式是,邻接矩阵和同构映射增量 ...
- django2 连接mysql实现第一个rest framework
1.安装pymysql,mysqlclient,创建项目django-admin startproject django2 2.settings中把DataBase配置换掉 DATABASES = { ...
- import socket模块
编写两个小脚本实现聊天功能0.1: 脚本一,服务器端:server.py import socket # 调用模块 sk = socket.socket() # 创建socket addess = ( ...
- 设置Hadoop+Hbase集群pid文件存储位置
有时候,我们对运行几天或者几个月的hadoop或者hbase集群做停止操作,会发现,停止命令不管用了,为什么呢? 因为基于java开发的程序,想要停止程序,必须通过进程pid来确定,而hadoop和h ...
- 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
问题描述: Error occured processing XML 'org/aopalliance/intercept/MethodInterceptor'. See Error Log for ...
- Java开发系列-JSP
概述 JSP是java 服务器页面,它运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下. JSP主要作用是将内容的生成与页面相分离. JS ...